V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
copymaster
V2EX  ›  Java

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

  •  1
     
  •   copymaster · 2020-04-14 21:41:40 +08:00 · 3650 次点击
    这是一个创建于 1677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题:

    第 1 条附言  ·  2020-04-15 18:47:07 +08:00
    感谢各位回复,app 是 Android,目前找到的方案是使用 Android Keystore,还没动手做,感觉挺靠谱,server 端和 app 端使用对称加密,挺好
    20 条回复    2020-04-15 18:43:57 +08:00
    Mroldx
        1
    Mroldx  
       2020-04-14 21:44:58 +08:00
    看你本事啊
    lcdtyph
        2
    lcdtyph  
       2020-04-14 22:03:31 +08:00
    安不安全看你的密钥是怎么协商 /分发的了
    内置静态密钥肯定是不行的
    没有密钥能不能破解数据,这要看你选择的分组方式,以及有没有设计上的漏洞
    gz911122
        3
    gz911122  
       2020-04-14 22:12:47 +08:00   ❤️ 1
    app 逆向能看出密钥吗? 能,

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

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

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

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

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

    建议搞清楚自己想要防的到底是什么。
    liuxu
        19
    liuxu  
       2020-04-15 11:46:29 +08:00
    @liuhan907 嗯。。。你我说的都不全面。。
    ssl 前面握手是非对称,nginx 配置证书就有公钥和私钥,数据通信是对称加密,这个是请求时动态分配给的,所以逆向了 app 也拿不到
    copymaster
        20
    copymaster  
    OP
       2020-04-15 18:43:57 +08:00
    感谢各位回复,app 是 Android,目前找到了一些方案,使用 Android Keystore 可以比较安全的存储密钥,还没动手做,应该挺靠谱这个方案,server 端和 app 端使用对称加密,挺安全
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:29 · PVG 23:29 · LAX 07:29 · JFK 10:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.