formatstorageencryption.html.in 7.1 KB
Newer Older
1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE html>
3
<html xmlns="http://www.w3.org/1999/xhtml">
4 5 6 7 8
  <body>
    <h1>Storage volume encryption XML format</h1>

    <ul id="toc"></ul>

9
    <h2><a id="StorageEncryption">Storage volume encryption XML</a></h2>
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

    <p>
      Storage volumes may be encrypted, the XML snippet described below is used
      to represent the details of the encryption.  It can be used as a part
      of a domain or storage configuration.
    </p>
    <p>
      The top-level tag of volume encryption specification
      is <code>encryption</code>, with a mandatory
      attribute <code>format</code>.  Currently defined values
      of <code>format</code> are <code>default</code> and <code>qcow</code>.
      Each value of <code>format</code> implies some expectations about the
      content of the <code>encryption</code> tag.  Other format values may be
      defined in the future.
    </p>
    <p>
      The <code>encryption</code> tag can currently contain a sequence of
      <code>secret</code> tags, each with mandatory attributes <code>type</code>
J
John Ferlan 已提交
28 29
      and either <code>uuid</code> or <code>usage</code>
      (<span class="since">since 2.1.0</span>). The only currently defined
30
      value of <code>type</code> is <code>volume</code>. The
J
John Ferlan 已提交
31
      <code>uuid</code> is "uuid" of the <code>secret</code> while
32
      <code>usage</code> is the "usage" subelement field.
J
John Ferlan 已提交
33 34 35
      A secret value can be set in libvirt by the
      <a href="html/libvirt-libvirt-secret.html#virSecretSetValue">
      <code>virSecretSetValue</code></a> API. Alternatively, if supported
36 37 38
      by the particular volume format and driver, automatically generate a
      secret value at the time of volume creation, and store it using the
      specified <code>uuid</code>.
E
Eric Blake 已提交
39
    </p>
40
    <h3><a id="StorageEncryptionDefault">"default" format</a></h3>
41
    <p>
42
      <code>&lt;encryption format="default"/&gt;</code> can be specified only
43
      when creating a qcow volume.  If the volume is successfully created, the
44 45 46 47 48 49
      encryption formats, parameters and secrets will be auto-generated by
      libvirt and the attached <code>encryption</code> tag will be updated.
      The unmodified contents of the <code>encryption</code> tag can be used
      in later operations with the volume, or when setting up a domain that
      uses the volume.
    </p>
50
    <h3><a id="StorageEncryptionQcow">"qcow" format</a></h3>
51 52 53 54 55 56 57 58
    <p>
      The <code>qcow</code> format specifies that the built-in encryption
      support in <code>qcow</code>- or <code>qcow2</code>-formatted volume
      images should be used.  A single
      <code>&lt;secret type='passphrase'&gt;</code> element is expected.  If
      the <code>secret</code> element is not present during volume creation,
      a secret is automatically generated and attached to the volume.
    </p>
59
    <h3><a id="StorageEncryptionLuks">"luks" format</a></h3>
60 61
    <p>
      The <code>luks</code> format is specific to a luks encrypted volume
62 63 64
      and the secret is used in order to either encrypt during volume creation
      or decrypt the volume for usage by the domain. A single
      <code>&lt;secret type='passphrase'...&gt;</code> element is expected.
65 66
      <span class="since">Since 2.1.0</span>.
    </p>
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    <p>
      For volume creation, it is possible to specify the encryption
      algorithm used to encrypt the luks volume. The following two
      optional elements may be provided for that purpose. It is hypervisor
      dependent as to which algorithms are supported. The default algorithm
      used by the storage driver backend when using qemu-img to create
      the volume is 'aes-256-cbc' using 'essiv' for initialization vector
      generation and 'sha256' hash algorithm for both the cipher and the
      initialization vector generation.
    </p>

    <dl>
      <dt><code>cipher</code></dt>
      <dd>This element describes the cipher algorithm to be used to either
          encrypt or decrypt the luks volume. This element has the following
          attributes:
          <dl>
            <dt><code>name</code></dt>
            <dd>The name of the cipher algorithm used for data encryption,
            such as 'aes', 'des', 'cast5', 'serpent', 'twofish', etc.
            Support of the specific algorithm is storage driver
            implementation dependent.</dd>
            <dt><code>size</code></dt>
            <dd>The size of the cipher in bits, such as '256', '192', '128',
            etc. Support of the specific size for a specific cipher is
            hypervisor dependent.</dd>
            <dt><code>mode</code></dt>
            <dd>An optional cipher algorithm mode such as 'cbc', 'xts',
            'ecb', etc. Support of the specific cipher mode is
            hypervisor dependent.</dd>
            <dt><code>hash</code></dt>
            <dd>An optional master key hash algorithm such as 'md5', 'sha1',
            'sha256', etc. Support of the specific hash algorithm is
            hypervisor dependent.</dd>
          </dl>
      </dd>
      <dt><code>ivgen</code></dt>
      <dd>This optional element describes the initialization vector
          generation algorithm used in conjunction with the
          <code>cipher</code>. If the <code>cipher</code> is not provided,
          then an error will be generated by the parser.
          <dl>
            <dt><code>name</code></dt>
            <dd>The name of the algorithm, such as 'plain', 'plain64',
            'essiv', etc. Support of the specific algorithm is hypervisor
            dependent.</dd>
            <dt><code>hash</code></dt>
            <dd>An optional hash algorithm such as 'md5', 'sha1', 'sha256',
            etc. Support of the specific ivgen hash algorithm is hypervisor
            dependent.</dd>
          </dl>
      </dd>
    </dl>

121

122
    <h2><a id="example">Examples</a></h2>
123 124 125 126 127 128

    <p>
      Here is a simple example, specifying use of the <code>qcow</code> format:
    </p>

    <pre>
129 130 131
&lt;encryption format='qcow'&gt;
   &lt;secret type='passphrase' uuid='c1f11a6d-8c5d-4a3e-ac7a-4e171c5e0d4a' /&gt;
&lt;/encryption&gt;</pre>
132 133

    <p>
134 135
      Assuming a <a href="formatsecret.html#VolumeUsageType">
      <code>luks volume type secret</code></a> is already defined,
136 137 138
      a simple example specifying use of the <code>luks</code> format
      for either volume creation without a specific cipher being defined or
      as part of a domain volume definition:
139 140
    </p>
    <pre>
141 142 143
&lt;encryption format='luks'&gt;
  &lt;secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/&gt;
&lt;/encryption&gt;
144 145
    </pre>

146
    <p>
147 148
      Here is an example specifying use of the <code>luks</code> format for
      a specific cipher algorithm for volume creation:
149 150
    </p>
    <pre>
151 152 153 154 155 156 157 158 159 160 161 162 163
&lt;volume&gt;
  &lt;name&gt;twofish.luks&lt;/name&gt;
  &lt;capacity unit='G'&gt;5&lt;/capacity&gt;
  &lt;target&gt;
    &lt;path&gt;/var/lib/libvirt/images/demo.luks&lt;/path&gt;
    &lt;format type='raw'/&gt;
    &lt;encryption format='luks'&gt;
       &lt;secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/&gt;
       &lt;cipher name='twofish' size='256' mode='cbc' hash='sha256'/&gt;
       &lt;ivgen name='plain64' hash='sha256'/&gt;
    &lt;/encryption&gt;
  &lt;/target&gt;
&lt;/volume&gt;
164 165
    </pre>

166 167
  </body>
</html>