已经有一段时间没有与 DragonFlyBSD 讨论任何令人兴奋的功能开发了,但上周合并了 dm_target_crypt_ng,这是他们用于磁盘加密的 DM-crypt 代码的下一代实现。
DragonFlyBSD 开发人员 Michael Neumann 为这个 BSD操作系统重新设计了 DM-crypt 代码,作为与 Linux 的 dm-crypt 兼容的透明磁盘加密实现。
Michael Neumann 在发布下一代代码的初始提交中解释说:
“dm_target_crypt_ng – 添加下一代实现
* 不再使用 opencrypto 或 cryptodev。这些是异步的,并导致了很多 (!) 代码的复杂性。
* 相反,请使用我们自己的 crypto_cipher 中实现的加密密码集。{c,h} 的 API 来使用对称分组密码。它主要调用 sys/crypto 下包含的实际加密算法实现。
* 交互性大大提高!当使用旧的 dm_target_crypt 模块运行 “blogbench” 时,“blogbench” 基本上会将系统“冻结”在大约 400 个数字博客 (Nb) 上。鼠标光标持续冻结约 1 秒。虽然计算机在运行时变慢dm_target_crypt_ng,但无法观察到鼠标滞后。最终的 “blogbench” 性能结果大致相同。例如:
# dm_target_crypt (旧)
写入的最终分数:2136 读取
的最终分数:200584# dm_target_crypt_ng(新)
写入的最终分数:2265 读取
的最终分数:203668* BIO 由两个工作线程池处理,每个工作线程池都有一组绑定到特定 CPU 的线程。读请求需要解密,而写请求需要加密。为读取和写入请求提供单独的 worker pool 应该提供更高的公平性。使用循环将请求调度到 worker,而 “struct bio” 用于链接要由 worker 线程处理的 “requests”。读取工作线程不需要分配更多内存即可解密数据块。write worker 像以前一样使用共享的 mpipe,因为我们需要在加密之前复制写入缓冲区。
* 目前,dm_target_crypt_ng仅支持 AES-CBC 和 AES-XTS。不支持 Twofish 和 Serpent。据说它们更安全,但也更慢,并且没有硬件支持。让他们重新回到crypto_ciphers应该很容易。{c,h} 来获取。
* 如果你想尝试新模块,请在 /boot/loader.conf 中添加以下行:
dm_target_crypt_ng_load=YES
这可能不适用于 “swapon”,因为它会尝试手动加载 “dm_target_crypt”。
* 我的计划是将 “dm_target_crypt_ng” 设为默认值,并在更深入的测试和反馈后删除旧的 “dm_target_crypt”。
自从几天前的初始提交以来,已经合并了其他 dm_target_crypt_ng 补丁。后续补丁重构了加密密码,改进了加密密码 API,并引入了 Twofish/Serpent CBC/XTS 密码。对于那些想要使用 DragonFlyBSD 的磁盘加密的人来说,有一些不错的改进。
由于该操作系统的上一个版本DragonFlyBSD 6.4已经过去了两年多,希望下一个版本能很快完成这个下一代DM-crypt目标和在此期间排队的许多其他增强功能。
转自 DragonFlyBSD Lands “Next-Gen” Disk Encryption Code – Phoronix