如何进行加密传输

2023-04-04 10:54:43 +08:00
 cynical666
Spring Boot 项目,对于加密传输有所疑惑。目前我的实践是用 SM4 在后端加密,然后将加密数据传输给前端,前端根据密钥来解密展示。这样做虽然能够解决传输过程中的安全问题,但是我目前的实践方案涉及到密钥存储在 js 中,这样如果 js 的密钥暴漏了,其实没有解决安全风险问题。请问各位前辈是如何处理此类问题的?
3225 次点击
所在节点    Java
35 条回复
zhywang
2023-04-04 15:37:02 +08:00
@litchinn 正解,能采用加密保证安全的前提是浏览器运行环境(包括浏览器、操作系统、甚至硬件)安全,一般在根证书可信的情况下,https 加密可以满足绝大多数场景
lysS
2023-04-04 15:51:31 +08:00
tls 双向加密呗,client 必须要安装你提供的证书才能访问
swqslwl
2023-04-04 16:30:33 +08:00
要用国密加密套件吗,是的话用 GMSSL 。
cnbattle
2023-04-04 16:40:35 +08:00
@zhywang 客户端公钥泄露,一样可以在客户端显示前 拦截或篡改相关数据,没有解决 lz 的担心,客户端的风险问题

个人看法,lz 的这个担忧,没有完美的方案, 只是增加门槛,在成本和效果间选择取舍,比如你的说方案,wasm 方案,或软硬件可信设备的方案等
yule111222
2023-04-04 16:45:54 +08:00
你可以把前端需要这些敏感数据处理的业务逻辑移到后端
yule111222
2023-04-04 16:46:30 +08:00
前端要处理的应该只是交互逻辑,这些东西需要的数据本来就应该可以完全暴露出去的
zhywang
2023-04-04 16:47:52 +08:00
@cnbattle 我说的方案对付一般的中间人攻击是没问题的。同意你的观点,在安全问题上没有完美方案,只是增加门槛(大力出奇迹各种加密算法也不是不能破解,更别说不安全的软件硬件环境,哈哈)
adoal
2023-04-04 16:50:32 +08:00
只要“在 UI 里需要拿到真实数据才能展示想要的结果”成立,加密就没用,毕竟总有一个你不可控而用户可控的环节里会出现真实数据
urnoob
2023-04-04 16:51:47 +08:00
凡是在客户端密钥 理论上都存在被偷到风险。以前是 C 类写的客户端,现在是 js 而已。
clf
2023-04-04 16:54:36 +08:00
后端才是定义业务逻辑、规则和限制的。前端是方便用户使用的。前端做的再花里胡哨,没后端限制照样白搭。后端限制做好了,管他用的啥客户端。

如果要保护中间传输和客户端,最好的方案是硬件层面的,比如直接拉专线,客户端设备做防拆和防调试,拆了就损坏数据的那种。
ren2881971
2023-04-04 16:59:06 +08:00
你现在是属于信源加密,并且还没有保护好密钥。
如果想实现你理想的安全,需要采用基于 GMSSL SM2 保持信道加密。
然后采用非对称加密实现信源加密。
但是非对称加密是有性能损耗的,需要取舍。
zhywang
2023-04-04 17:01:48 +08:00
@ren2881971 话说为啥大家都在提 SM 算法,之前貌似大量使用的是 RSA/AES/3DES ,SM 已经作为规范被强制使用了吗?
ren2881971
2023-04-04 17:28:02 +08:00
@zhywang 对呀。现在都在推广 GM 算法了。SM2 、SM3 、SM9 这种。而且 op 主自己在主题里也写了使用 SM4 算法,说明他的应用环境是要求使用 GM 算法
zddwj
2023-04-04 22:51:04 +08:00
根据你的描述,你需要的应该不是传输加密,而是业务逻辑保密的问题,这种情况一般是把业务逻辑放在后端处理,给前端传输处理后的数据,比如当用户隐藏积分大于多少的时候,就在 ui 上显示个什么按钮,你直接在后端计算好了,然后传到前端一个 bool 参数显示 ui 就行了
layxy
2023-04-07 09:25:53 +08:00
加密传输只要确保传输过程的安全就可以,浏览器一侧基本没办法确保安全,尤其是浏览器这种能后拿到你加解密算法和秘钥,除非你开发一个浏览器插件来辅助加密

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

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

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

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

© 2021 V2EX