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

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
1913 次点击
所在节点    程序员
24 条回复
xuanbg
32 天前
加密通信的基础:IKE 协议,使用非对称加密算法加密交换一个随机的对称加密密钥用于通信数据的加密。密钥都是随机的,哪里还有什么向前向后?泄漏是不可能泄露的,除非有后门。即使泄漏也就是当下及以后,没有什么以前的信息还能解密的可能。
e4fjui
32 天前
@xuanbg 我这个 APP 不需要网络的,也没有服务器,本身不负责发送信息以及交换密钥,是用来在其他 app 中发送信息的,例如微信或者 qq
gbadge
32 天前
啊哈?!私钥泄露也没事的加密方法?
mengzhuo
32 天前
这……TOTP 难道不比你这安全?
busier
32 天前
如果双方都用 PGP 加密,并在回复消息时,在当前密文中带上下一轮要使用的新公钥!实现每条消息都轮换密钥。

你觉得如何?
e4fjui
32 天前
@busier 那只能一对一了,没办法同时和多个人聊天
e4fjui
32 天前
@mengzhuo totp 就是用时间和主密钥来算出加密的密钥,主密钥一旦泄漏并且知道消息发送时间就能推算出所有密钥了,压根不安全
e4fjui
32 天前
@gbadge 不是没事,是需要更换密钥了,不然以后的消息对方都能解密 ,只是之前的没办法解密
gbadge
31 天前
@busier 你这个方法更绝
datocp
31 天前
在用 stunnel 说用的证书链加密

1.服务器端每 30 分钟变换公钥?
2.服务器 rr 负载打散到不同端口,不同服务器的不同端口

不知道中间人还有能力把这些信息组合起来,还得再解密。。。
hanyuwei70
31 天前
为什么不去看看 TLS 的实现呢……?
churchmice
31 天前
你用 PKI 相互协商一个随机数来做秘钥不好吗
需要整如此麻烦吗
dj721xHiAvbL11n0
31 天前
@busier 如果消息延迟或者丢了一个,是不是后面的都错乱了
dj721xHiAvbL11n0
31 天前
一小时轮换一次,假如我们俩个时间差 1 秒轮换了,我 7.59.59 ,你已经 8.00.00 了,是不是就要出问题了?
dode
31 天前
搞一个中间服务器,支持自行部署,每小时清理一下过期消息,双方同时在线才发端对端加密消息
exiledkingcc
31 天前
学而不思则罔 思而不学则殆。
密码学是很成熟的学科了,不适合闭门造车。
mengzhuo
31 天前
@e4fjui 主密钥泄露……你这也不一样么?

对自己算法有信心试试发个 arxiv ,看看有没有密码学家喷你哈。
liuidetmks
31 天前
程序员不要自创密钥交互方法。

可以去这里问问专业一点的建议
crypto.stackexchange.com
e4fjui
31 天前
@mengzhuo 我这个是定期轮换,轮换过后就会删除之前的密钥,删除之后密钥就不存在了,也就没有泄漏的可能
e4fjui
31 天前
@x2420390517 上面已经说了,会缓存上一次轮换的密钥,没有问题的,时间快了也能处理,会推算下一次的密钥进行解密

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

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

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

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

© 2021 V2EX