Skip to content

轮换密钥

Lli0o1oIl101ILo01o0oo0OO0o1li0i0i10oil0 edited this page Mar 28, 2025 · 2 revisions

轮换密钥

轮换密钥具有不可逆的向前安全性,
可做到发送的信息一定时间后无法解密
对比时间锁: 时间锁只是简单的在当前密钥后方添加日期然后作为密钥进行加密解密,修改日期即可绕过
轮换密钥会使用哈希算法利用当前的密钥和日期等信息,动态的计算出下一个密钥,并删除之前的密钥,
只要初始密钥和系统时间是同步的,即可在不需要网络的环境下同步轮换密钥
可自定义轮换间隔(小时)
缺点: 不具有向后安全性,当前密钥的状态被泄漏可计算出以后状态的所有密钥

生成

在app的密钥菜单中,点击生成轮换密钥即可生成,备注不可重复
例如轮换时间为1小时,发送信息后的2小时之后,信息将不可解密(此操作不可逆,除非备份了初始密钥)

格式

轮换密钥识别格式为: _r:密钥备注:缓存密钥:当前密钥:时间戳:轮换间隔(小时):已轮换次数
例如: _r:test:a:b:170001:12:0

原理

加密时会使用当前密钥进行加密
计算时会根据轮换间隔动态计算密钥,当当前时间减去初始时间除以轮换间隔大于0时,就会开始计算下一个密钥替换掉当前密钥
同时把缓存密钥的值设置为之前的当前密钥
APP每隔10秒以及进入界面时会自动检测密钥是否需要轮换,并且自动计算时间差来判断轮换次数,每次计算最多轮换100次(防止卡顿)

解密

使用轮换密钥时,将会逐一尝试三个密钥,分别是过去(缓存的密钥),现在(当前的密钥),未来(动态计算出的下一个密钥),来解密信息
使用缓存密钥是为了防止自己的设备已经轮换到下一轮,但是对方的设备比标准时间慢几秒(信息用的是上一轮密钥加密),防止无法解密
使用未来的密钥是为了防止对方的设备已经轮换到下一轮(信息是用下一轮密钥加密),防止无法解密
2台设备之间的时间差只要不超过轮换1轮的时间,都可保证密钥正常同步,收发信息
所以需要至少轮换2轮之后才可让发送的信息无法解密

密钥传递

分享轮换密钥时不必分享初始密钥,只要复制当前状态的密钥,对方添加后即可直接同步
即使对方收到密钥后在很久时间后再添加,也会根据时间差计算出正确的密钥

Clone this wiki locally