http 加密的正确方法

2022-10-25 15:35:58 +08:00
 senx0000
如果不上 https 的话,直接生成一对密钥,前端应用预置对应的公钥来加密,后端直接用私钥来解密,这样一来是不是中间人就无法知道请求的具体内容了?
除了性能问题,暂时没想到有啥其他问题,不知道大家有没有建议?
不考虑伪造或者篡改请求的情况,需求只是实现中间人无法得知请求内容。
5980 次点击
所在节点    程序员
68 条回复
swulling
2022-10-25 19:49:22 +08:00
客户让怎么搞就怎么搞,糊弄过去就完了。哪那么较真
heiher
2022-10-25 20:10:23 +08:00
我理解的中间人问题防止的是密钥(公钥)分发过程中被篡改,使中间人有能力解密密文。TLS 是服务端动态分发公钥,而不是客户端静态预置,所以还需要 CA 机制验证公钥是不是可信的,确实来自真实服务端。如果是客户端静态预置公钥,那么仅在传输层面是没有中间人攻击的可能性的。客户端静态预置公钥的问题之一是一旦服务端的密钥泄漏,没有吊销机制。
cwek
2022-10-25 20:22:01 +08:00
TLS 有 SM 魔改方案。
nlzy
2022-10-25 20:26:23 +08:00
遇到客户要求使用国密的话,建议不要自己发明密码协议,也不要整什么 RFC 8998 ,就正常用 TLS ,然后在应用层用国密加密一下完事。
lovelylain
2022-10-25 20:28:08 +08:00
直接非对称加密有个问题是能加密的明文长度太小,分组多次非对称加密的话性能又太差,可以改成前端随机生成对称密钥,用公钥加密对称密钥,对称加密真实明文。本身 https 在加密方面也基本是这个原理,只是引入了证书体系来将公钥可靠的传给前端,你写死在代码里跳过证书体系也不是不行。当然正如楼上所说,非必要情况下最好还是用现成的 https ,以免有未考虑到的问题,https 应该也是支持国密的。
systemcall
2022-10-25 22:33:18 +08:00
国密的东西,政治上站好队就行了
多一事不如少一事,不要自己造轮子,能跑起来就行了
xyjincan
2022-10-25 22:43:04 +08:00
拉 VPN ,国产的
cnrting
2022-10-25 22:51:00 +08:00
客户什么都不懂的,能忽悠就忽悠🐶
ajaxgoldfish
2022-10-25 23:03:20 +08:00
我就是干这个的,看我之前发的贴。国密有非对称 sm2 现在上海国密局要求过检硬件加密设备以及软件程序都要支持国密,杂凑有 sm3 类似于 sha256 ,用 sm2 就得用 sm3 ,用 sm2 需要有特殊支持 sm2 的客户端来支持,否则大部分内置都是 RSA 的。而且我说个大问题,现在 sm2 的性能大约是 RSA 的 0.5 倍,这里说的是吞吐量以及 TPS 。sm147 为对称,就不展开说了。
Laussan
2022-10-25 23:38:00 +08:00
如果你跟客户可以线下交付公钥应该就没啥问题?
julyclyde
2022-10-26 09:03:55 +08:00
@senx0000 确实是只有少部分国产浏览器支持
但客户肯定可以接受
这东西都是全套的
newmlp
2022-10-26 09:47:41 +08:00
放弃 tls ,然后自己再实现一遍 tls ?意义在哪?
libook
2022-10-26 10:11:12 +08:00
HTTPS 的安全性其中有一点是客户的系统或浏览器预装信任的 CA 证书,不管中间人怎么折腾,只要本地的证书都是可信的就不会有问题。
而题主的方案的缺陷在于前端的公钥是需要跟随前端页面资源从服务器拉下来的,这个过程中中间人可以拦截 response 然后替换成自己的公钥。又因为真正的公钥是任何人只要访问服务器就可以拿到的,所以可以形成完整的中间人攻击链路。
除非这个前端不只是网页,比如是 App 内嵌的 WebView ,由 App 预置公钥。
unco020511
2022-10-26 10:21:30 +08:00
tls 就是安全的呀,为啥还要自己造轮子呢
barbery
2022-10-26 10:36:55 +08:00
最近过等保,https 加密那边不认,厂商就是要求再进行加密传输
senx0000
2022-10-26 10:41:18 +08:00
@libook 对,核心缺陷就是这个,公钥是可以被替换的,这种方案只是增加了一些成本,防止不了被替换,一旦替换等于就是明文传输了。
libook
2022-10-26 11:04:54 +08:00
@senx0000 #56 其实你在主题里描述的方案,把一些安全漏洞都补好,基本就是 TLS 了,所以不如直接上 HTTPS ,毕竟经过那么多人检验可行。

@barbery #55 敏感信息是需要二次加密的,不是说 HTTPS 不行,而是需要在 HTTPS 基础上再进行一次加密,因为 HTTPS 是用户确保安全的,但用户可以主动或被动放弃这个安全(比如装私签证书);二次加密是服务方确保安全的,即用户难以去掉这个安全机制。具体哪些属于敏感信息可以参考 GB/T-35273 附录 A 、B 。
gaifanking
2022-10-26 11:12:20 +08:00
感觉都没回复在点上,你这种公私钥加密我理解为 RSA 吧,主要问题是公钥加密对长度有限制。
512bit 的公钥,最长只能加密长度为 53 的明文,所以不适合用来加密内容,只适合加密一个对称加密算法的密钥。
xz410236056
2022-10-26 11:26:46 +08:00
@tool2d #12 并不是,实际上国内推动 https 是国内大厂,14 年大家一起推的,主要是防止国内越来越严重的运营商劫持和 DNS 污染
tuwulin365
2022-10-26 12:12:19 +08:00
TLS 传递 SM4 或者 SM2 密钥,后续用 SM4 或者 SM2 加密

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

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

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

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

© 2021 V2EX