| <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> |