server 端和 app 客户端采用对称加密安全吗? app 逆向能看出密钥吗?或者没有密钥能暴力破解数据吗?

2020-04-14 21:41:40 +08:00
 copymaster

如题:

3688 次点击
所在节点    Java
20 条回复
Mroldx
2020-04-14 21:44:58 +08:00
看你本事啊
lcdtyph
2020-04-14 22:03:31 +08:00
安不安全看你的密钥是怎么协商 /分发的了
内置静态密钥肯定是不行的
没有密钥能不能破解数据,这要看你选择的分组方式,以及有没有设计上的漏洞
gz911122
2020-04-14 22:12:47 +08:00
app 逆向能看出密钥吗? 能,

或者没有密钥能暴力破解数据吗? 基本不能
dorothyREN
2020-04-14 23:43:47 +08:00
@gz911122 #3 没有密钥能暴力破解数据吗?能,就看你能不能熬到出结果了
classyk
2020-04-14 23:46:16 +08:00
对称将在这种情况下不安全
justfun
2020-04-14 23:50:44 +08:00
@dorothyREN 你是指让孙子看结果的那种吗(狗头)
EPr2hh6LADQWqRVH
2020-04-14 23:54:22 +08:00
现场协商一个密钥出来就行了,现在所有应用都这么干的。
liuxu
2020-04-15 00:02:10 +08:00
没看明白需求

普通连接+对称加密:逆向 app 拿到密钥就能劫持流量解密
普通连接+非对称加密:逆向 app 拿到密钥劫持流量无法解密
ssl 连接+对称 /非对称加密:多余的操作,ssl 本身非对称加密
ssl 连接+无加密数据:自己加密
wanguorui123
2020-04-15 00:35:04 +08:00
客户端集成公钥吧,动态协商出一个随机对称密钥
atfa
2020-04-15 00:45:16 +08:00
客户端首次启动时生成自己的的公钥私钥,公钥用服务器的公钥来加密,然后发给服务器,服务器用自己的私钥解密后把客户的公钥和客户 id 对应存储起来,服务器未来都通过这个私钥加密数据后再发给客户端,客户端收到数据后用自己的私钥解密,客户端未来都通过服务器的公钥来加密数据发给服务端。
可是为什么要自己来实现这些呢? https 协议不香么?
0o0O0o0O0o
2020-04-15 00:49:11 +08:00
只要对方一直能接触到客户端,只要客户端本地有加密解密的操作,那么客户端和服务端的交互的所有数据就一定能得到明文,协商密钥也没用
webshe11
2020-04-15 01:47:32 +08:00
楼主看了楼上回复,一顿操作,写出了个 TLS
AX5N
2020-04-15 02:05:49 +08:00
你是想防御哪个环节?
chinvo
2020-04-15 02:33:37 +08:00
类似不知道讨论了多少次,不可能完全杜绝用户自行编写第三方客户端

如果要防止接口被灰产黑产利用,那么问题就从保护密钥转变为了机器人识别(反爬虫)和安全控制(逻辑安全)
skypyb
2020-04-15 06:39:53 +08:00
只能密钥协商了吧。。
不过就算是密钥协商也防不了中间人攻击啊= =
maskerTUI
2020-04-15 08:51:10 +08:00
1.相比于不加密肯定时安全得多;
2.逆向能找出密钥,所以 app 需要用加固防止攻击者对 app 进行调试;
3.几乎不能。

安全是相对的,没有绝对。
liuhan907
2020-04-15 11:26:20 +08:00
@liuxu 有个毛病要挑一下,ssl 的数据是对称加密
locoz
2020-04-15 11:33:53 +08:00
安全是相对的,首先有一点很关键, [不管你再怎么加密,对于客户端来说都是明文] ,所以 APP 逆向自然能看出密钥。

如果攻击方是可以随意操作客户端的(比如爬虫开发者),那自然不管防守方再怎么折腾都能拿到通信内容的明文;
但如果攻击方不能操作客户端(比如中间人攻击),或者是受限于比防守方可控范围更高级的权限控制(比如无法获取高权限的设备,像没有越狱的 iOS 设备之类的),那你只是一个固定密钥的 AES 之类的加密也没关系,因为人家这种情况也只能暴力破解。

建议搞清楚自己想要防的到底是什么。
liuxu
2020-04-15 11:46:29 +08:00
@liuhan907 嗯。。。你我说的都不全面。。
ssl 前面握手是非对称,nginx 配置证书就有公钥和私钥,数据通信是对称加密,这个是请求时动态分配给的,所以逆向了 app 也拿不到
copymaster
2020-04-15 18:43:57 +08:00
感谢各位回复,app 是 Android,目前找到了一些方案,使用 Android Keystore 可以比较安全的存储密钥,还没动手做,应该挺靠谱这个方案,server 端和 app 端使用对称加密,挺安全

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

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

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

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

© 2021 V2EX