0x00 前言
最近接触到一种文件加解密的机制,对流程里边的某一部分操作稍有困惑,分析之后豁然开朗,遂记录之。
0x01 加密流程
- (1)从otp上获取soft key(IMK)(soft key是M2M模块选择otp soft key)
- (2)从rng模块获取随机数(EIK)
- (3)通过M2M模块对EIK解密(解密key为IMK,算法为AES128,模式为ECB)生成IK
- (4)通过M2M模块对u盘里面的image进行加密(加密key为IK,算法为AES128,模式为CBC)生成Encrypted image
- (5)最终输出EIK和Encrypted image到u盘
0x02 解密流程
- (1)从u盘获取EIK和Encrypted image
- (2)从otp上获取soft key(IMK)
- (3)通过M2M模块对EIK解密(解密key为IMK,算法为AES128,模式为EBC)生成IK
- (4)通过M2M模块对Encrypted image进行解密(解密key为IK,算法为AES128,模式为CBC)生成image
安全性分析
这个流程里边令我困惑的地方是加密第三步,这里为什么是解密而不是加密呢。
我先是这样理解的,EIK是要写到U盘的,所以它肯定是密文,而IK则是明文。把密文变成明文就是解密了。
但是这样并没有接触到问题的本质,继续思考:
为了安全性,每次对文件加密要用不同的IK,那么怎么才能生成不同的IK呢,我们先假设存在一个IK,用IMK加密可以得到EIK.反之,用IMK解密EIK就可以得到IK了。
由于EIK是个随机数,所以IMK解密得到的IK也是一个随机数。这样每次加密文件的key(IK)都不一样而且没法预测。安全性得到了提高。
OVER