• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Verified Boot
2@jd:body
3
4<!--
5    Copyright 2015 The Android Open Source Project
6
7    Licensed under the Apache License, Version 2.0 (the "License");
8    you may not use this file except in compliance with the License.
9    You may obtain a copy of the License at
10
11        http://www.apache.org/licenses/LICENSE-2.0
12
13    Unless required by applicable law or agreed to in writing, software
14    distributed under the License is distributed on an "AS IS" BASIS,
15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16    See the License for the specific language governing permissions and
17    limitations under the License.
18-->
19<div id="qv-wrapper">
20  <div id="qv">
21    <h2>In this document</h2>
22    <ol id="auto-toc">
23    </ol>
24  </div>
25</div>
26
27<p>Android 4.4 and later supports verified boot through the optional
28device-mapper-verity (dm-verity) kernel feature, which provides transparent
29integrity checking of block devices. dm-verity helps prevent persistent rootkits
30that can hold onto root privileges and compromise devices. This
31feature helps Android users be sure when booting a device it is in the same
32state as when it was last used.</p>
33
34<p>Clever malware with root privileges can hide from detection programs and
35otherwise mask themselves. The rooting software can do this because it is often
36more privileged than the detectors, enabling the software to "lie" to the
37detection programs.</p>
38
39<p>The dm-verity feature lets you look at a block device, the underlying storage
40layer of the file system, and determine if it matches its expected
41configuration. It does this using a cryptographic hash tree. For every block
42(typically 4k), there is a SHA256 hash.</p>
43
44<p>Because the hash values are stored in a tree of pages, only the top-level
45"root" hash must be trusted to verify the rest of the tree. The ability to
46modify any of the blocks would be equivalent to breaking the cryptographic hash.
47See the following diagram for a depiction of this structure.</p>
48
49<img src="../images/dm-verity-hash-table.png" alt="dm-verity-hash-table" id="figure1"/>
50<p class="img-caption">
51  <strong>Figure 1.</strong> dm-verity hash table
52</p>
53
54<p>A public key is included on the boot partition, which must be verified
55externally by the OEM. That key is used to verify the signature for that hash
56and confirm the device's system partition is protected and unchanged.</p>
57
58<h2 id="prerequisites">Prerequisites</h2>
59
60<h3 id="verified-boot">Establishing a verified boot flow</h3>
61<p>To greatly reduce the risk of compromise, verify the kernel using a key
62burned into the device. For details, see <a href="verified-boot.html">Verifying
63boot</a>.</p>
64
65<h3 id="block-otas">Switching to block-oriented OTAs</h3>
66<p>To enable dm-verity for a device, you must use block-based over-the-air
67(OTA) updates to ensure all devices use the same system partition. For details,
68see <a href="{@docRoot}devices/tech/ota/block.html">Block-Based OTAs</a>.</p>
69
70<h3 id="config-dm-verity">Configuring dm-verity</h3>
71
72<p>After switching to block-oriented OTAs, incorporate the latest Android kernel
73or use a stock upstream kernel and enable dm-verity support by including the
74relevant configuration option <code>CONFIG_DM_VERITY</code>.</p>
75
76<p>When using the Android kernel, dm-verity is turned on when the kernel is
77built. For details, see <a href="dm-verity.html">Implementing dm-verity</a>.</p>
78
79<h2 id="supporting-docs">Supporting documentation</h2>
80<p><a href="verified-boot.html">Verifying Boot</a><br/>
81<a href="{@docRoot}devices/tech/ota/block.html">Block-Based OTA</a><br/>
82<a href="dm-verity.html">Implementing dm-verity</a><br/>
83<a href="https://gitlab.com/cryptsetup/cryptsetup/wikis/DMVerity">cryptsetup -
84dm-verity: device-mapper block integrity checking target</a><br/>
85<a href="http://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot">The
86Chromium Projects - Verified Boot</a><br/>
87<a
88href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/device-mapper/verity.txt">Linux Kernel Documentation: verity.txt</a></p>
89