密钥在线下发

背景:

而在终端设备生产过程中,由于产品的生产批次和后续安全功能的扩展,通信所需要的密钥并不一定会在产品出厂之前就预置到终端设备中,此时就可使用TEE来构建终端密钥的在线下发系统来确保密钥被安全分发到特定的终端设备中,后期就可使用下发的密钥实现终端设备与服务器端进行密文通信。

该方案的核心内容:

主密钥应出厂时烧录到板子里,如果需要产生新的会话密钥,服务器可采用原来的加密方案,把生成密钥所需的数据组包、加密、签名、base64转换,发送给客户端。

密钥在线下发系统的框架

将下发的密文密钥包发送到OP-TEE中,由OP-TEE来完成对密文数据包的解密以及密钥的保存就能确保下发的密钥的安全性,如果在使用该密钥时也将相关加密操作放在OP-TEE中,这样可以确保密钥在任何时候都不被暴露在REE侧,这样可以构建一个安全的通信密文环境。整个终端密钥在线下发系统的框架图如图所示。

注意的是:如果你不是用op-tee,而是用的openssl库,那么密钥还是要加密保存的。

op-tee不管是保存在rpmb还是保存在data分区,都是加密处理过的。比如保存在data分区有一套加密算法。那保存在rpmb分区,不仅有加密算法还叠加了rpmb的安全机制。

密钥在线下发的数据包格式

密钥下发系统的数据包是以密文的形式被发送到终端设备,为确保数据的完整性和合法性,最后会对密钥数据包的内容使用RSA算法进行电子签名,数据包的格式如图所示。

整个数据包分为密文数据区域哈希区域,密文数据部分包含需要下发的数据经对称加密处理之后数据,而哈希区域则是使用SHA256算法计算的密文区域的哈希值。由于设备厂商在生产设备时会收集每台终端设备的相关硬件信息,所以可使用这些硬件信息作为因子用于生成加密使用的密钥。下发的密钥是通过盐值、密码和重复数经过PBKDF算法计算获得的。密文数据区域中包含的信息说明如下:

□ KeyType:需要被下发的密钥类型,读者可以根据自己实际需求进行定义,用于分发不通过类型的密钥;

□ MagicNum:数据包的魔术数,用于校验;

□ DataLength:整个数据包中有效数据的长度;

□ Count:用于生成密钥时使用的重复数;

□ SaltData:存放用于生成密钥时使用的盐值;

□ Length of salt dat:盐值的数据长度;

□ Password Data:存放用于生成密钥时使用的密码;

□ Length of password data:密码的数据长度;

□ Reservet:预留的区域;

□ HASH:下发的数据明文数据的哈希值,用于校验明文数据的完整性。

整个密文会使用AES128算法的CBC模式进行加密。由于在OP-TEE中AES128的CBC模式采取的是无填充的方式进行加密操作,故需要明文数据的长度为八个字节的倍数。哈希数据区域保存的是密文数据区域的哈希值,在OP-TEE中可使用该值来判定终端接收到的数据包是否完整。最后使用BASE64算法对密文数据区域和哈希数据区域的数据进行转换,最终生成的数据就是被下发到终端设备的数据包。

密钥接收操作步骤

首先,根据已有密码、盐值,根据pbkdf2算法生成密钥。

按照上节叙述的步骤反向操作,base64dec;

计算数据包的哈希值,然后和hash区进行对比;

然后实用生成的密钥对数据区进行aes-cbc解密;

解密完,计算0-79位的hash值,然后和80-112进行对比;

hash验证无误后,进行明问对比。g_MagicNum;

从明文中解析出数据,实用pbkdf2 生成会话密钥;

创建文件、打开、保存。

密钥读取操作步骤

按照文件保存框架,找到之前保存文件的文件名,直接进行读出明问密钥。

延申阅读

应用场景:

1.序列号保存:可用一个常量定义,不需要。

2.数据发送:关键数据发送需加密,采用一定的加密方案发送。

3.文件发送:文件也是由数据组成。

4.密钥下发:密钥下发可采用:摘要、加密、摘要、base64编码、签名。在需要换密钥的时候,用原来的密钥进行组包、加密等,然后发送到客户端。(但,换密钥的动机是什么呢?)

5.可信通道的建立:在发送核心数据的时侯,每次建立可信通道,通过三次握手产生的随机数,生成加密密钥。然后在发送数据进行加密验签等。

帅峰云提供了一套密钥下发方案

密钥发送:密钥需加密后发送。

数据发送:数据发送可采用密钥加密后发送。

猜你喜欢

转载自blog.csdn.net/u013921164/article/details/113657122