关于非对称加密在实际中应用的一些疑问

2017-03-30 13:10:49 +08:00
 byfar

最近看了点非对称加密的一些文章,

产生了一些疑问,不知道有没有有缘人可以帮忙解答。

如果要把这种加密加到聊天中去,我的想法是这样的: 每个客户端生成一份公钥发送给服务端,服务端也生成一份给每个客端。

这样应该就可以实现每条消息都只有两方可以查看,不过服务器需要维护一份用户和用户公钥的对应关系,在每次发送消息时取出来再对消息进行加密。

有个不知道对不对的想法:

如果像 https 一样用自己的私钥进行加密,客户端用服务端的公钥解开也能实现加密,不过这消息所有的客户端都能解开了,这样也不好。

我的问题是:

这种对于多客户端的加密,如何才能做到加密的且高效?

找了一些资料,并没有找到答案,当然你也可以: http://dwz.cn/5EbYc7 (手动滑机)

5001 次点击
所在节点    程序员
26 条回复
SBEer
2017-03-31 15:42:17 +08:00
@zzh1823 请阅读"Authenticated Key Exchange (AKE)"段,仍有兴趣的话还可以了解下“ Socialist Millionaires' Protocol (SMP)”
thekll
2017-03-31 15:44:15 +08:00
之前没看清你的要求,以为是想要端到端加密。实际上是对 TLS 理解不对,才会出现这种奇怪的想法。
TLS1.2 握手过程主要是完成服务端身份验证以及 key 交换,这个 key 用于实际的加解密。如果需要对每个客户端也进行证书验证,可以要求客户端提供自己的证书。实际的加解密 key 是和某次会话关联的,即使同一个客户端,这个 key 也可能不同,所以并不存在你说的情况。
TLS 支持 Static RSA 和 DH 两种方式实现 key 交换,前者用到了公私钥加解密,但存在 PFS 问题, TSL1.3 草案已经废弃。
另外公钥不能解密私钥加密的内容,一般用于加密和验证(非对称)。
zzh1823
2017-03-31 16:03:36 +08:00
@SBEer 。。。 RSA 的公钥实际上也是拿来做 key exchange 的,你提到的这个协议做 ake 就是用的 DH 啊。。清真是说实现起来轻么?
SBEer
2017-03-31 16:37:33 +08:00
@zzh1823 你自然可以用 signature based 的 DH 如 ECDHE 甚至直接拿 RSA 签名也行,但是 OTR 比传统的非对称加密多提供 forward secrecy 和 deniable authentication 。 forward secrecy ,即前向加密,保证私钥泄露后,攻击者无法根据之前的通信记录恢复通信明文。 deniable authentication, 保证在认证过程中不会泄露私钥信息(具体通过 SMP 实现)。一个可以接受的做法是利用 NTRU 公钥加密 psk 然后通过 SMP 验证通信对端,然后利用 psk 生成一个临时信道完成密钥交换,但这种方法依旧不够清真。对比 NTRUSign,SMP 依旧不会泄漏私钥信息。目前最清真的方法比较复杂,比较关于 NTRU 的研究还不够充分,而且,你并不知道哪天会突然冒出来一个量子通用计算机。
SBEer
2017-03-31 16:42:34 +08:00
@zzh1823 对于群聊环境,你可以看一下 Muti-party Off-the-record(mpOTR)。
https://www.cypherpunks.ca/~iang/pubs/mpotr.pdf
zzh1823
2017-03-31 16:45:20 +08:00
@SBEer 受教了,我好好消化下!

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

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

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

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

© 2021 V2EX