blob: cf35db3adefcbbd496018423e3e154c01003cdb6 [file] [log] [blame]
<html devsite><head>
<title>启用 Adiantum</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2018 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>
<a href="https://eprint.iacr.org/2018/720.pdf" class="external">Adiantum</a> 是一种加密方法,专为搭载 Android 9 及更高版本且其 CPU 缺少 <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard" class="external">AES</a> 指令的设备而设计。如果您要寄送启用 ARMv8 加密扩展程序的基于 ARM 的设备或启用 AES-NI 的 x86 设备,则<strong>不得</strong>使用 Adiantum。AES 在这些平台上的运行速度更快。
</p>
<p>对于缺少这些 AES CPU 指令的设备,Adiantum 在您的设备上提供了加密功能,且性能开销非常少。要查看基准数据,请参阅 <a href="https://eprint.iacr.org/2018/720.pdf" class="external">Adiantum 论文</a>。要查看在您的硬件上运行的基准源代码,请参阅 <a href="https://github.com/google/adiantum" class="external">GitHub 上的 Adiantum 源代码</a>
</p>
<p>要在搭载 Android 9 或更高版本的设备上启用 Adiantum,您需要更改内核和用户空间。
</p>
<h2 id="kernel-changes">内核变更</h2>
<p>择优挑选对内核进行的 Adiantum 更改并应用其他 <code>dm-crypt</code> 补丁程序。如果您在择优挑选时遇到了问题,使用<a href="https://source.android.com/security/encryption/full-disk" class="external">全盘加密</a> (FDE) 的设备可以排除“fscrypt:”补丁程序。
</p>
<table>
<tbody><tr>
<th>内核版本</th>
<th>内核变更</th>
<th><code>dm-crypt</code> 补丁程序</th>
</tr>
<tr>
<td>4.19
</td>
<td><a href="https://android-review.googlesource.com/q/topic:%22adiantum-4.19%22+(status:open%20OR%20status:merged)" class="external">4.19 内核</a>
</td>
<td><a href="https://android-review.googlesource.com/c/kernel/common/+/851273" class="external"><code>dm-crypt</code> 补丁程序</a>
</td>
</tr>
<tr>
<td>4.14
</td>
<td><a href="https://android-review.googlesource.com/q/topic:%22adiantum-4.14%22+(status:open%20OR%20status:merged)" class="external">4.14 内核</a>
</td>
<td><a href="https://android-review.googlesource.com/c/kernel/common/+/851275" class="external"><code>dm-crypt</code> 补丁程序</a>
</td>
</tr>
<tr>
<td>4.9
</td>
<td><a href="https://android-review.googlesource.com/q/topic:%22adiantum-4.9%22+(status:open%20OR%20status:merged)" class="external">4.9 内核</a>
</td>
<td><a href="https://android-review.googlesource.com/c/kernel/common/+/851278" class="external"><code>dm-crypt</code> 补丁程序</a>
</td>
</tr>
</tbody></table>
<h3 id="enable-adiantum-kernel">在内核中启用 Adiantum</h3>
<p>
在集成内核更改后,通过添加以下行来更改内核配置:
</p>
<pre class="devsite-click-to-copy">CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y
</pre>
<p>
如果您的设备使用 4.4 内核,还要添加:
</p>
<pre class="devsite-click-to-copy">CONFIG_CRYPTO_SEQIV=y
</pre>
<p>
如果您的设备使用文件级加密 (FBE),还要添加:
</p>
<pre class="devsite-click-to-copy">CONFIG_F2FS_FS_ENCRYPTION=y
</pre>
<p>
要确保在 32 位 ARM 内核上实现良好的性能,请为该内核启用 NEON 指令:
</p>
<pre class="devsite-click-to-copy">CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y
CONFIG_KERNEL_MODE_NEON=y
</pre>
<h2 id="userspace-changes">用户空间更改</h2>
<p>对于搭载 Android 9 的设备,请在 AOSP 中 <code>pie-platform-release</code> 分支上的 <code>userspace_adiantum_support_pie</code> 主题中择优挑选 <a href="https://android-review.googlesource.com/q/topic:%22userspace_adiantum_support_pie%22+(status:open%20OR%20status:merged)" class="external">Adiantum 用户空间更改</a></p>
<p>
<a href="https://android-review.googlesource.com/q/topic:%22userspace_adiantum_support%22+(status:open%20OR%20status:merged)" class="external">AOSP 的 master 分支</a>中也包含这些更改。
</p>
<h2 id="enable-adiantum-device">在您的设备中启用 Adiantum</h2>
<p>
这些设置适用于设备上的 userdata,也适用于可合并的存储设备。
</p>
<h3 id="fbe-devices">支持文件级加密的设备</h3>
<p>
要启用 Adiantum 并提高其性能,请在 <code>PRODUCT_PROPERTY_OVERRIDES</code> 中设置以下属性:
</p>
<pre class="devsite-click-to-copy">ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096
ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
</pre>
<aside class="caution"><strong>重要提示</strong>:此设置会引用 FDE,但在 FBE 设备上也需要这么做;它会影响可合并的存储设备。
</aside>
<p>
<code>fde_sector_size</code> 设置为 4096 可以提高性能,但 Adiantum 无需此设置也可正常运行。设置扇区大小要求为 userdata 分区设置偏移量和对齐方式,且可合并的存储设备必须实现 4096 字节对齐。
</p>
<p>
<code>fstab</code> 中,对 userdata 使用以下选项:
</p>
<pre class="devsite-click-to-copy">fileencryption=adiantum
</pre>
<p>
要验证您的实现是否有效,请生成错误报告或运行:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">adb root</code>
<code class="devsite-terminal">adb shell dmesg</code>
</pre>
<p>
如果正确启用了 Adiantum,您应该会在内核日志中看到以下内容:
</p>
<pre class="devsite-click-to-copy">fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
</pre>
<aside class="note">
<strong>注意</strong>:对于基于 ARM 的设备,实现名称应完全匹配。如果您没有看到对 <code>neon</code> 的引用,则您的设备也将无法执行。要详细了解如何启用 NEON 指令,请参阅<em><a href="#enable-adiantum-kernel">在内核中启用 Adiantum</a></em> 部分。
</aside>
<h3 id="fde-devices">支持全盘加密的设备</h3>
<p>
要启用 Adiantum 并提高其性能,请在 <code>PRODUCT_PROPERTY_OVERRIDES</code> 中设置以下属性:
</p>
<pre class="devsite-click-to-copy">ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096
</pre>
<p>
<code>fde_sector_size</code> 设置为 4096 可以提高性能,但 Adiantum 无需此设置也可正常运行。设置扇区大小要求为 userdata 分区设置偏移量和对齐方式,且可合并的存储设备必须实现 4096 字节对齐。
</p>
<p>
<code>fstab</code> 中,对 userdata 设置以下选项:
</p>
<pre class="devsite-click-to-copy">forceencrypt
</pre>
<p>
要验证您的实现是否有效,请生成错误报告或运行:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">adb root</code>
<code class="devsite-terminal">adb shell dmesg</code>
</pre>
<p>
如果正确启用了 Adiantum,您应该会在内核日志中看到以下内容:
</p>
<pre class="devsite-click-to-copy">device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
</pre>
<aside class="note">
<strong>注意</strong>:对于基于 ARM 的设备,实现名称应完全匹配。如果您没有看到对 <code>neon</code> 的引用,则您的设备也将无法执行。要详细了解如何启用 NEON 指令,请参阅<em><a href="#enable-adiantum-kernel">在内核中启用 Adiantum</a></em> 部分。
</aside>
</body></html>