对 Raspberry Pi 上的根文件系统 (RFS) 进行加密的原因有很多,从保持 WiFi 凭证不可变到防止专有软件和敏感数据被克隆。对于许多 Raspberry Pi 配置,仅存在两个分区:
因此,将根分区加密作为加密所有内容的一种方式是有意义的。
LUKS ( L inux Unified Key S etup ) 是 dm - crypt的流行密钥管理设置,它是 Linux 块设备加密的事实标准。
LUKS 为多个用户(和服务)提供了一个强大而灵活的机制来连接和访问 Linux 的“ dm-crypt ”基础设施。
dm-crypt是 Linux 内核 2.6 及更高版本中的透明磁盘加密子系统,是设备映射器基础架构的一部分,并使用来自内核 Crypto API 的加密例程。两者都在 IT 社区中被广泛使用和理解。
dm-crypt 有一个主密钥,用于加密/解密块内/外的数据。为了确保长期安全并应对不断变化的授权用户/服务,有必要经常更改主密钥,并可能定期与多个用户/服务共享它。主密钥的每一次新迭代都需要每次都对底层数据块进行重新加密。在实际系统中,由不同的用户/服务接触,这是不切实际的。
一个更实用的解决方案是进行分层密钥管理设置,其中为用户/服务提供用于释放 MasterKey 的用户密钥。用户密钥可以很容易地更改和撤销,而无需重新加密底层数据块。这样一个分层密钥管理器的管理就是 LUKS 的角色。
在这篇文章中,我们将展示如何使用 Zymkey 锁定用户密钥,该用户密钥随后用于解锁主密钥并提供对根文件系统的访问。如果您想了解更多关于 LUKS 的信息,请参阅本文底部的参考资料。
LUKS 加密 RFS 的安全效力很大程度上取决于用户密钥的生成方式和存储位置。
不断壮大的 Raspberry Pi 家族很棒,我们喜欢它!它价格低廉,具有令人难以置信的嵌入式设备计算能力,并且具有非常强大的软件开发生态系统。
然而,Raspberry Pi 有一个致命弱点:SD 卡是主要的软件部署媒体,它可以很容易地移除和操作。
自然倾向是使用 dm-crypt 上的 LUKS 加密文件系统,但对于许多部署单元的无人值守使用,显而易见的问题是:LUKS 密钥存储在哪里?当然是文件系统。即使您尝试通过各种程序化手段对其进行混淆,密钥仍然很容易受到攻击。
Zymkey 提供了一种通用的“锁定”服务,通过该服务对纯文本数据块进行加密和签名。
当与 LUKS 一起使用时,用户密钥被发送到 Zymkey 以在文件系统创建时被锁定(加密和签名)。当系统启动并需要解密根文件系统时,锁定的 LUKS 密钥被“解锁”(签名验证和内容解密)并呈现给 dm-crypt。如果密钥已成功解锁,则启动过程会正常继续。以下是 LUKS/dm-crypt 文件系统的启动顺序,其中密钥受 Zymkey 保护:
*要求 Zymkey 操作状态为“安全”
Zymkey 的主要功能之一是根据测量特定系统组件的指纹为主机系统生成唯一身份 (ID)。此指纹识别过程用于将特定 Zymkey(信任根、密钥存储、加密服务)、特定主机和特定 SD 卡“绑定”在一起。一旦绑定,这些组件就形成了主机系统的永久且不可变的 ID。
每次 Pi 启动时,以及之后的随机间隔,Zymkey 都会重新检查 ID 指纹。如果任何系统组件更改了指纹更改并且系统被认为已被破坏,则身份验证失败并且所有安全服务都将关闭。
使用此 ID / 身份验证功能,Zymkey 可用于在无人看管的应用程序中保护 LUKS 用户密钥,在这些应用程序中,可以轻松删除和复制 SD 卡内容。(Zymkey 还具有其他物理安全功能,也可用于锁定/启用安全服务)
LUKS 用途广泛,可应用于 SD 卡和外部存储介质。让我们回顾一下每个选项的优缺点:
转换 SD 卡上现有的根文件系统仍然需要一个外部设备(例如 USB 闪存驱动器)用作临时引导根文件系统:这为转换和复制原始内容提供了一种更简单、风险更低的方法。外部设备需要比现有的根文件系统大一点,以便存储旧的文件系统。
优点:
缺点:
工艺步骤:
现有的根文件系统可以迁移到外部 LUKS 加密的 USB 闪存、硬盘或 SSD。
优点:
缺点:
工艺步骤:
确保您的 Zymkey 软件套件已经在运行和运行,并确保您的 Zymkey 已绑定。此处的说明:(入门:ZYMKEY4i 与 RASPBERRY PI )。
要将您的根文件系统转换为 LUKS/dm-crypt,您需要连接一个外部 USB 磁盘(作为临时存储)。如前所述,这是必要的,因为不可能就地加密分区,因此在进行转换时需要外部磁盘作为临时存储和临时根文件系统。外部磁盘需要至少是根分区的两倍。接下来,运行以下脚本:
curl -G https://s3.amazonaws.com/zk-sw-repo/mk_encr_sd_rfs.sh | sudo bash
该脚本是参数化的,因此如果您有特殊要求(例如根文件系统位于 /dev/mmcblk0p4 上),您可以通过以下方式调用它:
curl -G https://s3.amazonaws.com/zk-sw-repo/mk_encr_sd_rfs.sh | sudo bash -s -- -x -m
在上面没有参数的调用中,默认值为:
在新的临时外部 USB 磁盘上首次运行此脚本可能需要很长时间。此外,在脚本完成之前需要重新启动两次。
需要注意的一点是,如果外部存储设备上有一个带有原始根文件系统分区(例如 /dev/mmcblk0p2)的 ext4 格式化分区,此脚本将使用外部存储设备上已有的内容来转换 SD卡片。这减少了转换大量 Pi 根文件系统的时间,并允许在大规模生产部署中使用该脚本。
在带有连接 USB SSD 作为裸 Jessie “完整”版本 (~4GB) 的外部设备的 Pi3 上,此脚本的第一次运行需要大约一个小时才能完成第一阶段。第二阶段大约需要 15 分钟。
具有 Jessie“精简版”(约 1.6GB)的同一平台在第 1 阶段大约需要 20 分钟,在第 2 阶段需要 5 分钟。
综上所述,使用格式化后的外接设备转换后续单位只需 15/5 分钟。
要将根文件系统迁移到外部 USB 设备,可以运行以下脚本:
curl -G https://s3.amazonaws.com/zk-sw-repo/mk_encr_ext_rfs.sh | sudo bash
该脚本是参数化的,因此如果您有特殊要求,可以通过以下方式调用:
curl -G https://s3.amazonaws.com/zk-sw-repo/mk_encr_ext_rfs.sh | sudo bash -s -- -x -p -m
在上面没有参数的调用中,默认值为:
请注意,新的根文件系统至少应该比原来的根分区大一点
在根分区约为 16GB(SanDisk Ultra Class 10)的 Pi Model 3 上运行此脚本,其中包含基本 Jessie 安装以及 Zymkey 软件套件(~1GB)到32GB SanDisk Cruzer Fit大约需要 30-40 分钟。Zymkey 的 LED 快速闪烁,直到该过程完成。
上面的示例旨在帮助您启动和运行单个和低容量的应用程序。
如果您在开发大批量制造加密工作流程方面需要支持,请联系我们讨论我们的 OEM 工程服务。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !