抓取的 TLS 加密报文拿到第三方电脑上有办法解密吗?公钥私钥都有 - V2EX
kelaoli
V2EX    SSL

抓取的 TLS 加密报文拿到第三方电脑上有办法解密吗?公钥私钥都有

  •  
  •   kelaoli 2024-01-31 17:00:25 +08:00 2295 次点击
    这是一个创建于 686 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到流行的解法基本都是自身作为通信的一方直接抓包,通过拿到的密钥在 wireshark 里是可以解密的。现在的问题是如果拿到已经抓好的 RSA 加密包,一对密钥都有,能否对其解密呢?请大佬指教。
    16 条回复    2024-02-01 23:28:58 +08:00
    tool2d
        1
    tool2d  
       2024-01-31 17:14:24 +08:00
    我试过用 chrome 实时导出 SSLKEYLOGFILE 密钥文件,然后正常抓包。过后,用 wireshark 命令行参数(tshark 的 tls.keylog_file),可以读取这个文件,并且后期解密到明文。

    但这文件里,并不是完全是密钥,主要是 masterkey 。

    /t/922534
    neilp
        2
    neilp  
       2024-01-31 17:26:53 +08:00
    大概率不行. 当今 tls 协议中, RSA 的加密方式已经废弃. 所以无论 RSA 证书还是 ECC 证书, 都只负责签名.
    Dh/ECdh 负责交换对称密钥. AES 负责加密.
    所以要想解密, 必须要有 SSLKEYLOGFILE . 来获得 AES 的密钥.
    楼上说的 wireshark 解密, 是我知道的可能唯一的方式. 你只有证书和私钥没用.
    yumusb
        3
    yumusb  
       2024-01-31 17:26:58 +08:00
    只有密钥不行
    billlee
        4
    billlee  
       2024-01-31 17:34:26 +08:00 via Android
    现在的 TLS 密钥交换都是前向保密的,要中间人攻击才行。
    iX8NEGGn
        5
    iX8NEGGn  
       2024-01-31 19:09:41 +08:00 via iPhone
    不行,密钥协商时,两端临时使用的参数,只保存在内存中,交换参数计算得到主密钥后就销毁了,这玩意叫完美向前安全
    kelaoli
        6
    kelaoli  
    OP
       2024-01-31 22:33:26 +08:00
    谢谢各位大佬,我在信息安全面前感受到了自己的无知。
    我想实现的功能是,通信双方的完整交互报文都拿到了,要在第三台机器上将 TLS 解密。
    不懂 TLS ,大概了解了下密钥是由双方生成的随机数和 pre-master-key 组成,两边的随机数虽然会变,但开始交互随机数的时候报文还是未加密的,我理解是可以拿到,就是这个 master key 不知道怎么理解?是公钥还是私钥呢,还是说对通信双方来说正好是反的。
    大神们说了很多,我还是没理解,为啥在本机上有办法可以直接抓解密后的包,到了另一台机器上就解不了?这里的区别还是没弄懂。请大佬不吝赐教。
    iX8NEGGn
        7
    iX8NEGGn  
       2024-01-31 23:41:11 +08:00   1
    我简单的介绍下“DH 密钥协商算法”,想了解更多可以搜索这个关键字。

    算法步骤:

    步骤 1 )发送方和接收方协商一个大质数 p 和 p 的一个原根 g ;

    步骤 2 )发送方秘密选择一个大随机整数 a ,计算 A = ga % p ,公开发送 A 给接收方;

    步骤 3 )接收方秘密选择一个大随机整数 b ,计算 B = gb % p ,公开发送 B 给发送方;

    步骤 4 )双方计算出密钥

    发送方:Sa = Ba % p = (gb % p)a % p = gab % p ;

    接收方:Sb = Ab % p = (ga % p)b % p = gab % p ;

    可知:K = Sa = Sb ;

    知道 p 、g 、A 、B 不能计算出密钥 K ,除非还至少知道 a 或 b 其中一个,a 、b 并不发送给对方,只保存在各自内存中,协商出 K 后就销毁了。

    也就是,虽然开始的大质数和原根 p 、g 以及随机数 A 、B 都未加密,但是算不出 K 。

    实例:

    假如 p = 23 ,g = 5

    发送方选取的秘密数字 a = 6 , 那么 A = 56 % 23 = 8 , 将 A 发送给接收方

    接收方选取的秘密数字 b = 15 ,那么 B = 515 % 23 = 19 ,将 B 发送给发送方

    发送方计算出的密钥 Sa = 196 % 23 = 2

    接收方计算出的密钥 Sb = 815 % 23 = 2
    iX8NEGGn
        8
    iX8NEGGn  
       2024-02-01 00:09:44 +08:00
    不好意思,公式里面里包含 markdown 语法,回复纯文本导致格式丢失了,我用截图重写发下:

    https://i2.100024.xyz/2024/02/01/1stnh.webp
    iX8NEGGn
        9
    iX8NEGGn  
       2024-02-01 00:37:51 +08:00   1
    “两边的随机数虽然会变,但开始交互随机数的时候报文还是未加密的,我理解是可以拿到”
    随机数就上面说的 a 、b ,你拿不到。

    “就是这个 master key 不知道怎么理解?是公钥还是私钥呢”
    既不是公钥也不是私钥,公钥和私钥是为了确保上面说的公开参数 p 、g 、A 、B 被中间人两边冒充。
    上面说的 K 便是 “pre-master-key (预主密钥)”,然后由预主密钥经过一系列变化得到“master key (主密钥)”。

    “本机上有办法可以直接抓解密后的包,到了另一台机器上就解不了”
    本机抓包就是交换公开参数 p 、g 、A 、B 时,中间人两边冒充是对方把 A 和 B 都替换掉。也就是对客户端替换掉服务端发来的 B ,自己和客户端协商了一个预主密钥。对服务端替换掉客户端发来的 A ,自己和服务端协商了另一个预主密钥。中间人拿着两个预主密钥分别和两端通信,但两端都误以为是和真正的对方通信。
    kelaoli
        10
    kelaoli  
    OP
       2024-02-01 12:43:34 +08:00
    @iX8NEGGn 感谢大佬深入浅出的讲解,既解答了我的疑惑,又让我顺便学到了 MitM 攻击是怎么回事,拜服大佬!
    kelaoli
        11
    kelaoli  
    OP
       2024-02-01 12:51:34 +08:00
    @iX8NEGGn 现在明白了,抓的包里面其实是 A 和 B ,并不是关键的随机数 a 和 b ,真的妙!向大神欧拉致敬!
    julyclyde
        12
    julyclyde  
       2024-02-01 12:59:24 +08:00
    @neilp 是“已废弃”吗?
    似乎是从来没有过吧
    iX8NEGGn
        13
    iX8NEGGn  
       2024-02-01 14:23:38 +08:00 via iPhone
    #11 ,理解正确。

    不过我有一句话少打了一个“不”字,应该是:“公钥和私钥是为了确保上面说的公开参数 p 、g 、A 、B 不被中间人两边冒充。(使用私钥、公钥对它们进行签名和验签)”。

    以及信任本机本地证书后,中间人欺骗两端替换掉 A 、B 时,可以选择替换成同一个数,这样两个预主密钥就是相同的,只有一个预主密钥。
    neilp
        14
    neilp  
       2024-02-01 15:35:21 +08:00
    @julyclyde
    早期有支持 用 RSA 作为密钥交换算法. 用 服务端的 RSA 公钥加密 对称密钥. wireshark 中最初的解密 ssl 流量就支持 RSA. 后来被废弃了. 都用 dh/ecdh 了.
    julyclyde
        15
    julyclyde  
       2024-02-01 18:03:52 +08:00
    @neilp 哪个版本是用 RSA 交换对称密钥啊??
    neilp
        16
    neilp  
       2024-02-01 23:28:58 +08:00
    @julyclyde 那个版本真记不得. 我曾经解密过.

    这个页面下:
    https://www.openssl.org/docs/man1.1.1/man1/ciphers.html

    参照这一段:

    kRSA, aRSA, RSA
    Cipher suites using RSA key exchange or authentication. RSA is an alias for kRSA.

    其他的自行谷歌吧.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4290 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:07 PVG 18:07 LAX 02:07 JFK 05:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86