File: formatstorageencryption.html

package info (click to toggle)
libvirt 5.6.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 240,844 kB
  • sloc: ansic: 584,521; xml: 176,725; sh: 9,912; python: 4,731; perl: 4,343; makefile: 3,321; ml: 465
file content (262 lines) | stat: -rw-r--r-- 11,219 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <!--
        This file is autogenerated from formatstorageencryption.html.in
        Do not edit this file. Changes will be lost.
      -->
  <!--
        This page was generated at Tue Jul 30 02:04:27 UTC 2019.
      -->
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <link rel="stylesheet" type="text/css" href="main.css"/>
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/>
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/>
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/>
    <link rel="manifest" href="/manifest.json"/>
    <meta name="theme-color" content="#ffffff"/>
    <title>libvirt: Storage volume encryption XML format</title>
    <meta name="description" content="libvirt, virtualization, virtualization API"/>
    <script type="text/javascript" src="js/main.js">
      <!--// forces non-empty element-->
    </script>
  </head>
  <body onload="pageload()">
    <div id="body">
      <div id="content">
        <h1>Storage volume encryption XML format</h1>
        <ul>
          <li>
            <a href="#StorageEncryption">Storage volume encryption XML</a>
            <ul>
              <li>
                <a href="#StorageEncryptionDefault">"default" format</a>
              </li>
              <li>
                <a href="#StorageEncryptionQcow">"qcow" format</a>
              </li>
              <li>
                <a href="#StorageEncryptionLuks">"luks" format</a>
              </li>
            </ul>
          </li>
          <li>
            <a href="#example">Examples</a>
          </li>
        </ul>
        <h2>
          <a id="StorageEncryption">Storage volume encryption XML</a>
          <a class="headerlink" href="#StorageEncryption" title="Permalink to this headline">¶</a>
        </h2>
        <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>, <code>qcow</code>,
      and <code>luks</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>
      and either <code>uuid</code> or <code>usage</code>
      (<span class="since">since 2.1.0</span>). The only currently defined
      value of <code>type</code> is <code>volume</code>. The
      <code>uuid</code> is "uuid" of the <code>secret</code> while
      <code>usage</code> is the "usage" subelement field.
      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
      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>.
    </p>
        <h3>
          <a id="StorageEncryptionDefault">"default" format</a>
          <a class="headerlink" href="#StorageEncryptionDefault" title="Permalink to this headline">¶</a>
        </h3>
        <h3>
          <a id="StorageEncryptionQcow">"qcow" format</a>
          <a class="headerlink" href="#StorageEncryptionQcow" title="Permalink to this headline">¶</a>
        </h3>
        <p><span class="since">Since 4.5.0,</span> encryption formats
      <code>default</code> and <code>qcow</code> may no longer be used
      to create an encrypted volume. Usage of qcow encrypted volumes
      in QEMU began phasing out in QEMU 2.3 and by QEMU 2.9 creation
      of a qcow encrypted volume via qemu-img required usage of secret
      objects, but that support was not added to libvirt.
    </p>
        <h3>
          <a id="StorageEncryptionLuks">"luks" format</a>
          <a class="headerlink" href="#StorageEncryptionLuks" title="Permalink to this headline">¶</a>
        </h3>
        <p>
      The <code>luks</code> format is specific to a luks encrypted volume
      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.
      <span class="since">Since 2.1.0</span>.
    </p>
        <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>
        <h2>
          <a id="example">Examples</a>
          <a class="headerlink" href="#example" title="Permalink to this headline">¶</a>
        </h2>
        <p>
      Assuming a <a href="formatsecret.html#VolumeUsageType"><code>luks volume type secret</code></a> is already defined,
      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:
    </p>
        <pre>
&lt;encryption format='luks'&gt;
  &lt;secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/&gt;
&lt;/encryption&gt;
    </pre>
        <p>
      Here is an example specifying use of the <code>luks</code> format for
      a specific cipher algorithm for volume creation:
    </p>
        <pre>
&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;
    </pre>
      </div>
    </div>
    <div id="nav">
      <div id="home">
        <a href="index.html">Home</a>
      </div>
      <div id="jumplinks">
        <ul>
          <li>
            <a href="downloads.html">Download</a>
          </li>
          <li>
            <a href="contribute.html">Contribute</a>
          </li>
          <li>
            <a href="docs.html">Docs</a>
          </li>
        </ul>
      </div>
      <div id="search">
        <form id="simplesearch" action="https://www.google.com/search" enctype="application/x-www-form-urlencoded" method="get">
          <div>
            <input id="searchsite" name="sitesearch" type="hidden" value="libvirt.org"/>
            <input id="searchq" name="q" type="text" size="12" value=""/>
            <input name="submit" type="submit" value="Go"/>
          </div>
        </form>
        <div id="advancedsearch">
          <span>
            <input type="radio" name="what" id="whatwebsite" checked="checked" value="website"/>
            <label for="whatwebsite">Website</label>
          </span>
          <span>
            <input type="radio" name="what" id="whatwiki" value="wiki"/>
            <label for="whatwiki">Wiki</label>
          </span>
          <span>
            <input type="radio" name="what" id="whatdevs" value="devs"/>
            <label for="whatdevs">Developers list</label>
          </span>
          <span>
            <input type="radio" name="what" id="whatusers" value="users"/>
            <label for="whatusers">Users list</label>
          </span>
        </div>
      </div>
    </div>
    <div id="footer">
      <div id="contact">
        <h3>Contact</h3>
        <ul>
          <li>
            <a href="contact.html#email">email</a>
          </li>
          <li>
            <a href="contact.html#irc">irc</a>
          </li>
        </ul>
      </div>
      <div id="community">
        <h3>Community</h3>
        <ul>
          <li>
            <a href="https://twitter.com/hashtag/libvirt">twitter</a>
          </li>
          <li>
            <a href="http://stackoverflow.com/questions/tagged/libvirt">stackoverflow</a>
          </li>
          <li>
            <a href="http://serverfault.com/questions/tagged/libvirt">serverfault</a>
          </li>
        </ul>
      </div>
      <div id="conduct">
            Participants in the libvirt project agree to abide by <a href="governance.html#codeofconduct">the project code of conduct</a></div>
      <br class="clear"/>
    </div>
  </body>
</html>