• 请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX  ›  程序员

真正的点对点聊天通讯隐私实现想法

  •  
  •   brader · Jul 28, 2021 · 16250 views
    This topic created in 1755 days ago, the information mentioned may be changed or developed.

    实现想法:

    A 发送消息给 B

    检测是否持有 B 的公钥  
    
        若有,使用 B 的公钥对消息进行 RSA 加密并发送。  
        若无,则先请求 B 传输公钥过来,B 生成公私钥并缓存在本地。  
    
    B 收到消息后,使用自己的私钥进行消息解密。  
    

    B 发送消息给 A
    同理

    我想,这样应该才是能实现真正隐私通讯的,连服务提供方都无法窃取消息的,而不是市面上一些聊天软件慌称的“隐私”。

    这种通讯隐私方案可实现吗?会有软件愿意为了用户隐私而实现吗?

    Supplement 1  ·  Jul 28, 2021
    看了大伙回答,补充几点我的想法:
    这里我说的是解决聊天内容隐私问题。
    我看到大家说中间人攻击,我想法是这不需要我去处理吧,上一层网络通讯的时候是 HTTPS 呢,这一层可以解决。

    第二个,大家说 RSA 效率问题,这怎么会有问题呢,AB 客户端,只解自己的消息,CPU 这点能力都没有吗?这根本不在考虑问题内。
    服务端才要考虑这个问题,因为服务端 RSA 解密的话,是要面对 N 多个客户端的。
    125 replies    2021-07-31 09:38:45 +08:00
    1  2  
    blackshow
        101
    blackshow  
       Jul 29, 2021
    jim9606
        102
    jim9606  
       Jul 29, 2021
    你这个已经是大幅简化的模型,E2E 聊天软件通常是使用 A 和 B 的 RSA/ECC 密钥对通过密钥交换算法(例如 DHE/ECDHE )获得双方共享的 Session Key (对称密钥),用这个进行消息加解密。

    问题在于虽然 Session Key 建立后服务器无法窃取信息,但它可以干涉公钥传递,A 不能保证拿到的公钥是 B 的公钥还是 C 的公钥。
    Huelse
        103
    Huelse  
       Jul 29, 2021
    @jim9606 所以要有数字签名
    liuidetmks
        104
    liuidetmks  
       Jul 29, 2021
    @lonnyzhang 交换 m 和 n 过程中,服务器被黑客攻击了,服务器自己生成 m1 n1 ,替换发给对 A,B,一人分饰两角, 后面所有的消息都能被服务器拦截并转发。
    当然,AB 也可在建立信道之后,给对方发一次自己的随机数,这样就知道是否被攻击,可相应的黑客也能篡改消息内容,更进一步的欺骗。
    rpman
        105
    rpman  
       Jul 29, 2021   ❤️ 1
    我一直认为计算机是民科最泛滥的行业
    rrfeng
        106
    rrfeng  
       Jul 29, 2021   ❤️ 2
    好家伙,100 多层楼里一半多想法安全的都跟筛子一样……
    lonnyzhang
        107
    lonnyzhang  
       Jul 29, 2021
    @liuidetmks 再仔细看看,key 只在 AB 端生成,不会经过网络传输,包括服务器都是不可能知道的。所以即使服务器自己就是“黑客”,它也不可能知道 AB 两端用 key 对称加密后传输的是什么内容。
    maybedk
        108
    maybedk  
       Jul 29, 2021
    @liuidetmks 哈哈,抓包软件都是这么抓 https 的
    0576coder
        109
    0576coder  
       Jul 29, 2021
    @agee
    如果端到端的代码还是被看到的话 ecdh 也没用 也能伪造中间人攻击 或者被中间人猜出了算法 也有可能是中间人攻击
    jimmyismagic
        110
    jimmyismagic  
       Jul 29, 2021
    telegram, keybase 了解一下
    LnTrx
        111
    LnTrx  
       Jul 29, 2021
    @rpman 但也是最好拆穿民科的行业,因为往往可以用构造性证明( show me the code )
    Meano
        112
    Meano  
       Jul 29, 2021
    楼里的人都不在一个层次啊,楼主还在想怎么用 RSA 做(密钥?数据?)交换呢,有些朋友已经在讨论公钥可靠性了。

    加密通信的风险除了监听风险外,主要还是密钥协商时的公钥风险( CA 劫持,公钥伪造等),也没人提 IBE 啊,相比 DHE/ECDHE,IBE 用 User ID (公开,比如邮箱,相当于见字如面,不易伪造)+ 随机数(私钥)生成用户协商公钥,用户可以互相通过主公钥和 User ID 验证协商公钥是否来自于对方,相当于签名,可能的风险就看算法有没有后门了,主公钥如果受到干扰协商也不会成功。

    @jim9606 这样应该没法做公钥干涉吧

    倒是计算开销比较大,目前看到的 IBE 算法都是用双线性对,前段时间搞过 SM9 通用 CPU 计算,不用 Native code 耗时到秒级了
    lonnyzhang
        113
    lonnyzhang  
       Jul 29, 2021 via Android
    @liuidetmks 真正的端到端加密只会在端生成密钥,是不会经过网络传输的,服务端也破解不了传输的内容。
    anonymous256
        114
    anonymous256  
       Jul 30, 2021
    keybase,信息完全密钥加密
    LeslieLeung
        115
    LeslieLeung  
       Jul 30, 2021 via iPhone
    跟楼主有一样的想法 所以我做了一个这个 目前只开源了客户端 服务端暂时没时间上传
    其实这个方案考虑不完全 不能防范中间人攻击 但是加上证书和签名就可以了
    https://github.com/LeslieLeung/silbo
    clearc
        116
    clearc  
       Jul 30, 2021 via iPhone
    看内容和讨论,有一种十来年前复古的味道了
    godblessumilk
        117
    godblessumilk  
       Jul 30, 2021
    zl939144892
        118
    zl939144892  
       Jul 30, 2021
    量子纠缠 手动狗头
    liuidetmks
        119
    liuidetmks  
       Jul 30, 2021
    liuidetmks
        120
    liuidetmks  
       Jul 30, 2021
    @lonnyzhang
    你的意思我了解,可能是我没说清楚,你没了解我说的意思

    服务器生成 (x,y)时候,同时自己模拟两个客户端 A1(用于和 B 通信,并生成 m1= x^r3 %y ) B1 (用于和 A 通信,并生成 m2 = x^r4 %y ),r3 ,r4 随机

    AB 在交换中间 m 和 n 的时候,肯定会通过服务器,服务器这时候 收到的 m 和 n 截流,把 n1 发送给 A,把 m1 发送给 A 。
    A 得到的密钥 m^n1 = n1 ^ m = x^(n1*m) % y
    B 得到的密钥 n^m1 = m1 ^ n = x^(n*m1) % y

    这样 A 和 B 不知情的情况下,分别和服务器建立了点对点加密通信,这样,服务器就完成中间人攻击了。
    newmlp
        121
    newmlp  
       Jul 30, 2021
    https 加可信任证书才能保证不被劫持,只有 https 是不能保证不被劫持流量的
    wa007
        122
    wa007  
       Jul 30, 2021 via iPhone
    @finab 这就不是通信能解决的问题了
    wa007
        123
    wa007  
       Jul 30, 2021 via iPhone
    @lakehylia 哈哈哈哈哈哈哈哈,说到点子上了
    lonnyzhang
        124
    lonnyzhang  
       Jul 30, 2021
    @liuidetmks DH 算法本身不具备身份鉴定功能,一般要和数字签名结合才能防止中间人攻击。
    piku
        125
    piku  
       Jul 31, 2021
    你们
    唉,不知道说什么好
    真正的点对点通讯,为什么会走公网环境,必然是点对点专线啊
    还可以走大功率无线网桥
    或者搞一对数字对讲机,随便加个密码,第三方就没辙了
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1251 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 23:29 · PVG 07:29 · LAX 16:29 · JFK 19:29
    ♥ Do have faith in what you're doing.