求求你们不要再用 RSA 私钥加密公钥解密了,这非常不安全!

最近经常在网上看到有人说巨硬的 CNG(Cryptography Next Generation 即下一代加密技术) 只提供 RSA 公钥加密私钥解密,没有提供 RSA 私钥加密公钥解密,他们要自己封装一个。。

我想说,你真的有思考过这个做法安全吗?这个做法有意义吗?

想想就知道,把一个公开的,任何人都可以拿到的公钥作为解密密钥,那和不加密有什么区别?这样的做法甚至有暴露私钥的风险!

 

那来说说正确的做法:

(1) 如果只是需要验证客户端收到的内容是服务器返回的,没有被篡改,那么可以使用 RSA 签名算法,私钥签名,公钥验证 (这个 CNG 是有提供的,其他算法库也基本都有)。

(2) 如果确实需要加密服务器返回的内容,那么可以学习 SSL 的做法:

首先客户端生成一个对称加密的密钥,然后 RSA 公钥加密(数据包 + 对称密钥) 发送给服务器。

服务器收到内容后使用私钥解密出数据包和对称密钥,然后进行业务逻辑处理,再将结果使用对称密钥进行对称加密,然后返回给客户端。

最后客户端将收到的内容后使用对称密钥解密即可。

这个做法是比较安全的,私钥和对称密钥都没有暴露的风险。

 

我好奇翻了一下,居然发现大量的 RSA 私钥加密公钥解密的开源库。。。星星还不少。。。

你们看看那些正儿八经的加密库,比如 OpenSSL, BC 等,它们也没有提供这种做法啊,难道他们就没想到,或者他们会因为任性不想做而不做?不可能吧。

再说巨硬这个大厂子了,总有他不做的道理吧。

 

我是真的希望大佬们不要再做 RSA 私钥加密公钥解密这种事了,已经做了也尽量改掉把;改完我们还是好朋友。

 

感谢阅读!

posted @ 2020-08-05 08:03  陈鑫伟  阅读(6803)  评论(14编辑  收藏  举报