成功实现了不需要通信的加密向前安全性

32 天前
 e4fjui
前向安全性,也称为完美前向保密( Perfect Forward Secrecy, PFS ),是指即使长期密钥在未来被破解或泄露,也不会危及过去的通信内容,从而保护过去的通信内容不被破解。 具体来说,如果一个密码系统具有前向安全性,那么在某个时刻之后泄露的密钥将无法解密在此之前加密的数据

做了一款辅助加密聊天 app(能在 QQ 微信等 app 中发送加密信息),想做到消息在一定时间后无法解密
刚开始是搞了个时间锁的功能,就是在当前密钥的后方加上日期作为密钥进行加密
然后解密的时候使用相同操作即可,但是这样直接把设备的日期改了就可以解密之前的内容了

然后想出了轮换密钥功能
https://gitlab.com/ivgeek/MixMessage/-/wikis/%E8%BD%AE%E6%8D%A2%E5%AF%86%E9%92%A5
原理就是利用哈希算法使用当前的密钥计算出下一轮使用的密钥,然后销毁上一轮密钥
这样即使修改日期,由于哈希算法的不可逆性,也无法逆向推断出之前的密钥
可自定义轮换的时间(小时),例如 1 小时轮换一次,2 小时后,发送的信息就永远无法解密了
功能已经全部实现,顺便还会缓存一轮密钥和推断下一次密钥来进行解密(防止存在时间差导致信息无法解密)
只要 2 台设备的时间差不小于轮换一轮的时间,不需要网络就可进行动态的轮换密钥同步
而且轮换密钥不需要一直运行 app,例如 1 小时轮换一次,10 天再之后再开机 app 也会自动计算轮换差值立马将密钥轮换到当前日期的正确值

不过目前的缺点就是没有办法在不需要通信的情况下实现向后安全性(当前密钥泄漏,以后的信息就都能解密了)
感觉也不可能实现
项目地址: https://gitlab.com/ivgeek/MixMessage
1914 次点击
所在节点    程序员
24 条回复
e4fjui
31 天前
@exiledkingcc 但是没有这方面的解决方案,而且只是单纯的哈希算法,并没有造出来新的算法
e4fjui
31 天前
@churchmice
@hanyuwei70 说了是离线应用了,没有服务器的,没必要实现通信,单纯的加密信息在 QQ 或者微信里面发
busier
31 天前
@x2420390517 没关系啊,就按照断线处理,重新初始化连接,重新协商新的密钥对。
Esec
31 天前
看来,以后要默认封禁不用地球语言交流的用户了,就像现在部署的过滤规则那样……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1065872

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX