HUK
HUK, Hardware Unique Key,指硬件唯一密钥,类似与人体指纹,对于硬件具有唯一性。HUK是烧写在芯片eFuse中的一段随机值,类似于TPM中Storage Root Key。
这段随机值无法通过CPU访问,但可以通过SOC内部安全引擎访问,将安全引擎视为一个函数接口,如
(Cipher, Tag) = AES-GCM-256(HUK, IV, AAD, PLAIN_TEXT)。
用户输入IV, AAD, PLAIN_TEXT,安全引擎将返回密文Cipher和Tag。
由于HUK的机密性与唯一性,通过芯片加密后的数据,仅能在该芯片解密。该芯片加密后的数据,存储下来后,被拷贝到别处将无法解密。
实际应用中,IV/AAD可以通过硬件真随机数生成。安全引擎的驱动代码一般部署在安全世界,如optee/ATF中,加密过程在安全世界处理。HUK一般不直接作为加密密钥,先由HUK派生出工作密钥(work key),再由work key对用户数据进行加密。这样软件流程为:
- (work_key, Tag) = AES-GCM-256(HUK, IV, AAD, PLAIN_TEXT)
- (Cipher, Tag) = AES-GCM-256(work_key, IV, AAD, PLAIN_TEXT)
Cache属性
由于CPU与安全引擎均需存储系统交互,需要注意cache属性设置问题,确保cpu与安全引擎获取数据的一致性。ARM core发出地址访问需要经过MMU,而硬件安全引擎访问内存则经过SMMU;需要通过设置页表保持访问空间cache属性的一致性,一般设置为Normal uncached unbuffered,即不经过cache去访问内存。
参考
https://optee.readthedocs.io/en/latest/architecture/secure_storage.html
https://www.jianshu.com/p/ba56e6a0d788
https://blog.csdn.net/shuaifengyun/article/details/73715950
https://zhuanlan.zhihu.com/p/42527644
https://blog.csdn.net/Thanksgining/article/details/111564548?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2-111564548-blog-73715950.pc_relevant_multi_platform_featuressortv2dupreplace&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2-111564548-blog-73715950.pc_relevant_multi_platform_featuressortv2dupreplace&utm_relevant_index=5