节点密钥补全的技术原理
由于平台要对节点进行密钥补全,但残缺私钥的补全部分不能就这么直接通过明文在信道上发送,这样就相当于把残缺部分的私钥直接告诉了攻击者(attacker),就起不到保护节点私钥的作用了。
所以,这种通过这种明文传递的方法是不能被采用的。
为了保护在信道中传输的节点私钥的残缺部分,我们可以采取诸如加密之类的措施。
但考虑到椭圆曲线加密等公钥加密方式的运算效率,这样会造成平台时间消耗的增加。
所以为了减少平台的时间消耗,这里采用一种映射的方法。
基本原理如下:
由于在节点和平台初始化时,在内部都会内置一条椭圆曲线,所以为了方便起见,我们就采用这个椭圆曲线的一部分。
具体方法和原理如下图所示:
图4-1 补全映射原理图
图4-1就是椭圆曲线的示意图。
我们只使用椭圆曲线的椭圆部分。
将椭圆按照斜率,等分成16等分,分别代表16进制的0~F这16个数。
平台和节点都首先在初始化时内置了好几组用于补全的密钥池y,开始补全时,平台将选取一组y,并随机生成一组对应的x,与y 组成在平面上一点(x,y),原点与(x,y)的射线与椭圆交于一点,该交点必会落在椭圆的16等分的某一段弧上,那段弧所代表的16进制数就是要补全的密钥当中的一位。
然而,这样的映射只有一个自由度,由于要补全的密钥是确定的,所以光靠这样的映射,还无法完成密钥的完整映射。
为了完整地映射密钥,我们不妨再引入一个变量α,代表椭圆绕原点顺时针旋转的角度;这样,射线与椭圆的交点就会落在椭圆上代表其他数字的等分弧上。
平台可以通过点(x,y)和需要补全的密钥当前位,计算出椭圆需要旋转的角度α。
完成上述计算后,平台就会讲x和α压入消息中对应的数组中,发送给节点。
由于攻击者并不了解椭圆曲线的信息,也不知道密钥池y的组合,所以,光要靠x和旋转角α来推算出要补全的私钥,显然是困难的。
这样就实现了对补全密钥的保护。
在本仿真程序中,节点的完整密钥为48位16进制数,残缺密钥为30位16进制数,所以我们在密钥补全时,只需要补全18位16进制数即可。
由于节点拥有和平台一样的数组密钥池y,所以当节点收到消息后,只需要读取其中包
含的x和α信息,按照平台一样的运算步骤,逆推出需要补全的密钥即可;最后将补全的密钥和原先残缺的密钥组合在一起,这样就完成了密钥补全。
节点密钥更新的技术原理
在物联网中,当节点的私钥被启用一段时间后,随着使用时间的上升,该私钥被攻击者(attacker)破解的风险也会随之上升;用该密钥通信的次数越多,被破解的风险也就越大。
为了降低节点私钥被破解的风险,在适当的时候,平台有必要进行密钥更新的操作。
笔者在上文中已经提到,在本网络通信系统中,节点的私钥是通过残缺的私钥保存的——即节点的完整私钥是48位16进制数,而残缺的私钥为30位16进制数,也就是说有18位16进制数是残缺的。
由于残缺私钥不需要更新全部私钥,只需要更新剩余不残缺的部分即可(例如完整私钥为四十八位十六进制数,残缺私钥为三十位十六进制数,残缺位为十八位十六进制数,所以在更新私钥时,只需要更新那三十位十六进制数即可),所以比起将整个完整的私钥更新,这种方法更具有其速度优势;而即使被攻击者(attacker)攻破节点,攻击者(attacker)也不能得到完整的节点私钥信息,比完整私钥体系更具有安全性。
节点的密钥更新,归根结底就是平台发送一个新的私钥给节点,告诉节点从今以后开始启用这个私钥。
然而,平台与节点之间用于通信的信道并不是安全的,可能会被攻击者(attacker)随时监听,所以节点这个私钥并不能通过明文发送,故需要加以一定的加密手段。
考虑到对称密钥的局限性和公钥体制的运算效率问题,在这个问题上我们仍然采取上文4.1节笔者提到的映射手段。
这样既保证了节点的密钥安全,又大大降低了平台和节点的时间消耗。