二人控制的数据存储加密系统

简介

这个项目是一个硬件机制,提供安全的“二人控制”的数据存储。这是一个USB microSD读卡器,但它需要两张卡。数据以RAID 0的样式进行条纹,但数据也使用存储在每张卡上的密钥存储块中的密钥进行加密。从本质上讲,每张卡片都是无用的。由于拥有这两张卡片,数据可以无限制地使用,但是只有一个,其余的数据是完全不透明的。

这允许您将数据集写入一对卡片,并将它们分别传输到目的地进行重新组合,从而安全地传输数据集。

其目的是,只有两张牌的配对在任何方面都变得特别。卡对可以插入到任何Orthrus设备中,并且数据是可用的。但如果只有一张卡,你得到的只有一半的数据被密钥加密,而密钥只有一半。

OrthUS极大地简化了提供安全加密数据存储的问题。没有密码或密钥材料来管理。将两张卡片配对在一起的动作自动地产生了保证商店无需任何人为行动所必需的所有关键材料(除了通过按压和按住单个按钮启动配对过程)。OrthRUS提供的安全性很容易解释和使用。很简单,如果你有这两张牌,你就有数据。如果你只有其中一个,那么它是密码不透明的。

每个卡的第一块被保留为密钥存储块。向USB主机报告的卷的大小是通过取两个卡大小中的较小的,减去一个并加倍来确定的。每个卡上的第一个块包含以下结构: - 一个魔术常数编译到固件,以识别卡属于Orthurs卷。 - 一个标志位识别卡作为“A”或“B”卡(卡可以按任何顺序插入,它仍然应该工作)。 - 一个64字节的卷ID。 - 一个32字节的卡密钥值。 - 用于块调整的16字节的随机值(其中使用12字节)。

当设备初始化时(无论是当它插入到已经安装了两张卡的主机上,还是在插入第二张卡时),检查每个键块。如果魔术值是错误的,或者如果两个卷ID值不匹配,或者如果没有一个“A”和“B”卡,那么错误灯被打开并且音量没有被安装。这样可以防止错误插入的卡片被损坏。要启动,板上有一个按钮。如果在错误灯亮时按下按钮,则初始化两个键块,设备准备就绪。

如果预初始化检查成功,则将两个卡键值混合在一起(以“A”B顺序)来生成64字节缓冲器。该混响数据的两半通过全零密钥AES CMAC馈送,这两个结果串联在一起。其结果变成新的AES密钥,CMAC在卷ID的两个半部分上运行,同时将两个结果串联在一起。其结果成为卷的AES密钥。在那一点,驱动器已经准备好了。

为了读取和写入单独的块,使用AES XEX模式。请求中传入的块号通过使用LSB来选择“A”或“B”卡。块编号的其余部分被右移一次,并且添加1来制作卡的物理块编号。XEX模式使用16字节的随机数。NANCE由存储在相反卡片上的12字节的第一字节(从读或写的)中,与(逻辑)块号串联。使用卷密钥对Noice进行加密,以形成第一个“TWIP”块。对于磁盘扇区的每个16字节AES块,明文与TWIKE块XORD,然后用AES ECB模式加密,然后用TWEB块再次加密XORed以形成密文。解密是相同的,除了在中间执行AES ECB解密操作(TWIP仍然由ECB加密形成)。在处理每个块之后,通过在2 ^ 128的伽罗瓦域中乘以2,将TWIKE块转换成新的TIGUT块(我承认我并不真正理解GF数学)-我只是在网络上读取了一组示例和伪代码,然后准备好下一个16字节块。

在OrthRUS的较早迭代中,使用AES计数器模式,这允许我们预先计算用于卡数据的XORE的密码流字节,但是计数器模式具有弥补背景预计算提供的速度优势的一些密码弱点。XEX模式不能预先计算,不幸的是给了我们33%的速度惩罚,但几乎所有的模式都用于整个磁盘加密(大多数实现实际上使用XTS,但是如果扇区大小可以被加密块大小整除,那么这两个是相同的)。

为了初始化一张卡,需要一个完整的密钥生成160字节的随机数据——一个卷ID的64个字节,每个卡的密钥块的32个字节,最后对于每个卡随机值,最后使用16个字节(其中只有12个字节)。控制器具有可用于此目的的内置真随机数发生器(TrNG)。

如果在安装音量时按下按钮(或者插入未成对的卡),则错误灯将开始闪烁。如果按钮被释放,那么什么都不会发生,但是如果按钮被保持5秒,错误灯停止闪烁,音量被强制卸载,重新键入,然后重新安装。主机看到一个新的磁盘充满了随机的垃圾。卷的前一个内容是不可挽回地失去.

V3.0硬件以ATAMS707019为中心。它是一个ARM处理器,具有高速(480 Mb/s)USB和4位传输SD卡(HSMCI)接口。它还内置了AES硬件加速和一个真正的随机数生成器(它有很多,但这就是我们所需要的)。

V2硬件使用SPI在16 MHz的理论原始吞吐量为2 Mb/s,但是考虑到SPI具有一些字节间的间隙,这导致更低的吞吐量。但是真正杀了东西的是散布AES操作。即使它们发生在硬件中,它们也必须序列化为XEX模式。最重要的是,全速USB的理论极限为1.5 Mb/s,但你很少能接近USB的理论最大传输。对于V3,HSMCI将能够运行在50 MHz,这是理论传输速率为25 Mb/s。理论上的USB传输速率是60 Mb/s,所以它应该能够毫无困难地跟上。剩下的速度限制是加密所带来的限制,加上事实上,由于交叉存取的需要,我们只限于卡上的单块I/O操作。

不幸的是,HSMCI接口只能与单个卡对话。我们需要使用一种机制来在两个时隙之间切换它。解决方案是QS3VH257PAG8总线复用芯片。它实际上是一个4位双向A/B交换机。不幸的是,我们需要切换6个信号,所以我们需要两个信号,但是事实证明,HSMCI接口的引脚在控制器芯片的相对侧是两个组,所以从布局的角度来看,这并不坏。

与V2硬件一样,我们有一个GPIO引脚作为电源开关的电源卡,我们有两个更多的GPIOS作用在总线开关-使能引脚(持有它高将断开两个卡从总线-我们可以用这个来序列电源)和一个!A/B信号来选择使用哪种卡。功率开关信号连接到p沟道MOSFET的栅极。MOSFET的漏极直接进入AP23 31限流开关。该AP23 31保护控制器免受浪涌和可能出现的短路SD卡。卡电源引脚和卡启用引脚具有硬件上拉,以确保卡保持电源关闭和关闭总线,而控制器启动。

整个电路运行在3.3伏特,但USB设备电源是在5伏特。以PAM2305为中心的Buck变换器用于板的3.3伏供电。

控制器有一个断电检测器,如果3.3伏总线低于3伏特,它将保持芯片复位,但是在启动过程中有一个竞争条件-在芯片开始执行代码后设置BOD检测器。如果我们限制攻击者只访问SD卡插槽,按钮和USB端口,那么几乎每一个篡改的途径,可以避免在固件,除了干预权力。降低电源电压是一种经常尝试和安全系统混乱的技术,因此增加UVLO监视器芯片的额外成本是值得的。如果3.3伏总线处于或低于3伏特,监督员将保持NRST低,保持芯片复位。3伏特足以使芯片正常工作,甚至到适当支持USB的点。唯一剩下的攻击矢量是擦除跳线,并且改进是一个带有明显的密封的情况。

其目的是,提供的固件将被加载到GPNVM寄存器中设置为1的安全位。这将禁用所有调试接口,并保护系统免受潜在的恶意固件安装。击败安全位的唯一方法是在启动时保持擦除引脚高。这不仅清除了安全位,而且擦除了固件。擦除引脚将留在板上,但它不会方便地与董事会的情况下(篡改明显的印章可以用来检测案件是否安全)。但是任何潜在的固件更新过程都需要从一个擦除操作开始。可以使用SAM-BA ROM Bootloader在USB上上传新固件(以及安全位再次设置)。

控制器的USB、电源和SWD(编程)素材都是从数据表中直接得到的。PAM2305降压转换器也直接从它自己的数据表。除了总线交换之外,SD卡连接也直接来自数据表。TrNG和AES子系统内置于控制器。从硬件的角度来看,V3很少。

Orthrus项目相关文件下载

Orthrus-firmware.zip
Orthrus_3_0_3.pdf


相关文章