V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
e4fjui
V2EX  ›  分享创造

基于安卓实现了在任何 IM 中使用端到端加密(无需手动复制粘贴)

  •  1
     
  •   e4fjui · 56 天前 · 3284 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。
    无需手动复制粘贴文字,无需手动切换软件,非外挂,无需 root
    可直接下载体验
    项目地址: https://gitlab.com/ivgeek/MixMessage
    在加密界面输入 rsa 然后发送公钥,对方即可使用公钥发送密钥
    把密钥添加到对称加密的密钥列表即可
    接下来的对话都会使用此密钥进行 aes256 加密
    理论支持所有 im,例如 QQ 微信 只要能发文字的地方都能使用
    基于安卓无障碍服务识别文字自动解密,非入侵,非外挂插件
    支持多种编码格式,例如随机的中文,韩文,emoji 表情,零宽字符(将信息隐写到正常文本中)
    可加密发送视频,图片.以及任意文件,最大 20mb

    目前缺点:
    只支持安卓(苹果不能注册无障碍服务)
    可能受到中间人攻击,例如微信把你发的公钥信息替换成自定义的密钥对的公钥,然后再把对方发的信息替换一次,不过可能性不大
    43 条回复    2024-07-15 11:39:17 +08:00
    adrianzhang
        1
    adrianzhang  
       56 天前
    缺点 2 ,用现有的证书体系不就能避免中间人攻击了吗?
    e4fjui
        2
    e4fjui  
    OP
       56 天前
    @adrianzhang 现有的话得需要域名才能签发,太麻烦了,现在用的是直接本地生成的 rsa 密钥对
    adrianzhang
        3
    adrianzhang  
       56 天前
    @e4fjui 中间人攻击是非常普遍的,作为一款加密用途的软件,这是一个大坑。域名只需要申请一个,当你的域名得到了上级机构签发的证书后,用域名的私钥对所有手机发出来的公钥签名就行。而且现在免费证书都是三个月更新,保障性很高。
    e4fjui
        4
    e4fjui  
    OP
       56 天前
    @adrianzhang 可以通过截图确认下发送的公钥是否被篡改,除非微信官方连截图都伪造一个然后把真实的截图给修改掉,感觉可能性不大,微信官方都作为中间人攻击的话,那 CA 又怎么确保一定不会泄漏证书呢
    GeekGao
        5
    GeekGao  
       56 天前
    有点意思
    adrianzhang
        6
    adrianzhang  
       56 天前
    @e4fjui #4 截图的问题,一是明文,二是增加用户人工对比的复杂度,就算老油条,哪有时时刻刻注意检查的。中间人攻击一般不会是微信这种官方。举个简单例子,你在家里,好巧不巧无线路由器因为有个默认密码漏洞被人掌握了,能够抓包,看到这种明文的 rsa ,那篡改一个就行了,难度很低。公钥体系中的根 CA 本就不会去签发用户证书,只给中间 CA 签发,再怎么中间人攻击,得拿到根 CA 私钥才行。把整个公钥体系再找资料读一读,理解一下这个体系怎么防止中间人攻击。
    SteveRogers
        7
    SteveRogers  
       56 天前
    厉害啊
    XiLingHost
        8
    XiLingHost  
       56 天前
    @e4fjui #4 其实不需要截图,再互相发一下 fingerprint 然后交叉签名重发一下就可以了,可以实现一个密钥交换,这样除非中间人也实现同样的逻辑并且持续篡改,这就产生很高的成本了
    e4fjui
        9
    e4fjui  
    OP
       56 天前
    @adrianzhang rsa 是用微信发的,除非微信没有做加密,软件本身不负责发信息的,除了上传文件以外不联网
    adrianzhang
        10
    adrianzhang  
       56 天前
    @e4fjui #9 哦,明白这个意思了,微信作为公钥交换渠道了,不仅仅是自己的加密信息。那就是公钥安全靠微信的安全性来保证。这样也行,除非微信作恶,或者微信成了明文,否则公钥是安全的。
    adrianzhang
        11
    adrianzhang  
       56 天前
    @e4fjui #9 那用户使用的时候,即使是用别的 IM ,也得开着微信来交换公钥,是这样吗?
    e4fjui
        12
    e4fjui  
    OP
       56 天前
    @adrianzhang 随便什么 IM 都可以,不只是微信,没有基于任何 IM 单独写代码,交换密钥只要该 IM 安全就行
    adrianzhang
        13
    adrianzhang  
       56 天前
    @e4fjui #12 明白了,挺巧妙的设计。相当于 Android IM 版的 GPG mail
    adrianzhang
        14
    adrianzhang  
       56 天前
    来,这是我的公钥,x​︋︎︁︄︉︍︄︍︍︋️︋︁︎︇︁︊︍︇︆︅︍︎︅︎︉︇︉︈️︈︁︂︆︅︆︄︀︂︁︇︃︊︀︊︄︂︎︊︆︃︄️︃︆︉︇︋︊︁︇︅︋️︁︆︃︇︉︈︉︇️︃︇︂️︆︊︈︍︉︆️︄︈︂︌︂︋︆︈︇︊︈︉︋︈︆︇︌︀︇︆︍︅︁️︇︂︍︈︆︋︄︃︌️︂︄︎︂︍︃︅︈︊︃︊︎︎︇︂︆︉︇︎︇︍︂︌︆︁︎︁︃︆︂︇︃︄️︂︇︇︊︌︉︆︀︃︂︀︍︂︉︀︈︁︂︇︌︁︌︁︉︆︃︋︈︊︆︁︁︌︎︌︋︉︅︊︄︍︋︂︄︄︍︊︇️︊︎︌︉︌︍︃︇︎︆︅️️️︅︊︀︃︅︈︇︈️︉︃︊︆︂︆︈︄︎︀︀︎️︍️︋︀︉︅︍︊︌︍︈︄︆︊︂︅︁︋︊︊︌︂︂︊︄︍︆︀︂︍︄︊︁︊︇︈️︌︅︍︅︈︁︉︇︃︅︍︅︂︉︊︇︀︃︋︃︎︀︇︅︇︌︈︆︊️︊︋︇︂️︅︊︀︇︉︄︅︇︀︈︄︎︄︂︅︌︂︌︇︇️︀︉︇︈︇︋︈︌︈︀︁︎︋︁︅︃︎︀︁︇︇︍︈︁︎︍︁︁︉️︆︋︃︁︋︉︁︋︉︎︃︈︂︂︉︂︃︌︀︄︂︇︀︊︀︊︋︃︋️︍︂︊︁︉︌︁︀︂︋︅︊︇︀︍︃︀︄︂︋︉︉︁︁︌︀︅︃︌︃︃︇︋︌︀︃︌︅︀︊️︆︍︆︎︇︋︉︆︎️︀︂︂︎︋︀︈️︈︍️︇︍︌︀︈︃︇︆︅︌︄︁︊︌︌︇︃︍︁︆︉︁︀︆︅︂︆︈︍︍︎︍︌︈︂︀︄︍︍︍︊︍︈︆︉︋︄︃︅️︎︅️︉️︎︈︂︊︃︆︍︆︌︄︎︀︊︊︄︊︍︎︂︂︋︋︂︎︌︌︈️︊︇︆︁︊︍︉︌︂︍︆︀︂︍︀︎︇︂︉︀︈︊︇︉︁︋︈︋︊️︁︂︍︀︀︀︅︈︅︅︃︁︄︃︊︁︇︆︃︋️️︄︊︀︌︈︊︌︂︎︃︌︋︈︉︈︌︄︇︊︀︈︀︄︌︍︃︊︉︄︃︁︃︅︂︆︉︌︎︊︅︉︆︍︋︄︊︂︄︋︇︀︂︂︃︌︊︉︁︅︎︊︊︊︂︋︎︈︂︀︋︉︈︋︁︋︆︎︉︂︋︎︊︉︎︃️︅︆︂️︆︀︇️︇︍︎︅︂︋︎︅︃︋︃︆︇︃︆︊︃︌︁︇︈️︍︅︂︋︆︁︅︊︁︀︍︁︈︄︍︎︊︆︌︌︌︌️︄︅︂︊︂︊︉︇︃︀️︋︆︉︁︆︁︈︂︇︇︈︌︀︄︍︄︃︎︋︆︂︅︍︎︈︉︋︌︊︈︊︁︍︂︆︎️︁︉︃︉︄︈︃︃︆︉︀︅︄︈︈︀️︂︋︀︍︈︊︉︄︃︅︅︇︆︆︁︉︃︉︈️︃︄︄︈︂︌︊︈︄︃︁︉︅︌︂︇︊︌︁︊︀︊︎︁︉︃︀︈︊︃︎️︆︅️︍︄︁︉︆︍︂︇︅︈︌︋︊︀︅️︊︁︄︄︂︂︅︃︄︋︄︊827 ,发个加密信息出来。
    e4fjui
        15
    e4fjui  
    OP
       56 天前
    @adrianzhang x​︋︈︀︅︇︌︉︂︇︅︎︈︅︉︍︍︂︉︉︃︅︈︋︎︉︀︍︇︃︄︄︄︈︀︆︆︍︊︊︈︇︂︄︍︀︇︍︅️︁︇︄︉︃︍︀︆︌︀︃︉︇︈︌︍︌︉️︋︎︎︌︍︌︊︂︄︋︆️︌︃︋︌︎︅︎︀︅︌︁︃︎︅︁︎︇︍︇︌︅️︉︍︉︃︄︃︍︎︌︀︅︌︄︃︃︍︉︃️️︅️︂︃︎︆︉︀︋︂︋︉︅︆︇︋︂︍︎︊︊︁︉︅︅︅︁︋︃️︋︍︉︅︅︄︆︈︇︉︅︁︌️︎︊︀︊︅︉︈︂︋︂︅︈︋︅︈︄︀︃︂︆︆︄︌︉︍︅︋︍︀︌︅︃︁︄︋︂︄︇️︆️︃︍︆︊︉︇︊︄️︇︂︉︈︉︍︇︎︆︍︁︃︈︋︅︄︀︆︍︆︇︍︈︆︂︍︆︁︈︌︆︁︍︋︄︁︌︉︃︋︆︅️︂︊️︃︃︎︅︋︃️︂︇︃︌︁︎︁︋️︎︉︁︎︃️︈︌︁︂︋︊︋︁︉︃︁︂︀︇︋︍︁️︆︍︇︍︁︇︌︀︂︈︍︇︍︁︋︂︃︅︍︆︋︎︍︆︆︍︃︀︌︀︎︂︎︎︆︉︁︍︁︁︁︀︉︌︈︍︇️︀︌︂︌︂︅︌︇︂︌︄︇︊︉︂︄︁︀︀︉︁︃︀︅︃︉︇︉︉︋︊︄︎️︎️︈︇︉︇︎︄︁︇︌️︊︈︇︊︆︂️︇︅︁️︀︁︄️︍︁︀︉︍︄︍︂︅︈︊︃︁︄︊︌︈︎️︁︇️︋︆️︂︅︇︃︉︈︉︅︁︍︆︋︂︁︍︀️︇︃︋︅︆︌︌︇︌︋︂︂︎︎︅︍︅︂︍︌︌️︆︆︄︎︍︊︉︄︆︄︇︃︂︄︂︄︀︁︉︄︁︁︃︃︌︈︃︁︈︊︌︁︄︄︌︉︎︇︃︆︍︂︎︈︄️︁︅︍︊︃︋︃︄︈︃︍︌︅︎︆︆︎︅︍️︍︀︎︉︄︂︄︃︀︆︌︃︌︉︅️︇︊︀︌︅︈︄︆︂︈︈︇︍︄︃︆️︈︀︋︇︂︈︄︉︂︌︆︋︇︉︎︌︀︊︄︀︉︋︌︂︊︁️︉︂︊️︄︋︄︀️︇️︍︋︆︆︍︃︈︁︋︇︎️︋︈︊️︀︁︍️︆︇︀︇︇︃︀︋︂︀︆︈︁︆︅︂︅︆︎︍︈︇︂︊︀︍︆︌︍︃︁︊︇︌︎︎︆︊︁︃︉︃︆︊︋︂︄︇︌︋︊️︊️︂︊︅︁︃︂︍︈︅︀️︇︊︊︃︂︁︃︆︀︅︂︈︎︆︌︊︍︆︇︊︃︆︋︃︈︇︎︀︅︌︂︀︋︎︃︊︉︈︁︆︉︃︉︊︂️️︂︊︁︆︌️︁️︌︇️︋️️︆︆︃︎︄︅︍︇︂︊️︋︆︎︎︁︍︇︄︆︈︎︎️︁️︄︆︃︃650
    adrianzhang
        16
    adrianzhang  
       56 天前
    @e4fjui #15 在主页-解码-输入内容,粘贴 x650 ,但解码还是 x650……
    adrianzhang
        17
    adrianzhang  
       56 天前
    @e4fjui #15 测试 233 ?
    e4fjui
        18
    e4fjui  
    OP
       56 天前
    @adrianzhang 那就是解码失败了,我这里看长度是 793 ,你可能复制的信息的空白字符内容被过滤掉了
    e4fjui
        19
    e4fjui  
    OP
       56 天前
    @adrianzhang 对,不过 rsa 是用来传输对称加密使用的密钥的,不是直接发信息的,效率太低了
    adrianzhang
        20
    adrianzhang  
       56 天前
    @e4fjui 所以这个“测试 233”应该存到密钥列表?
    e4fjui
        21
    e4fjui  
    OP
       56 天前
    @adrianzhang 对,然后用这个当密钥,来完成对称加密发送信息,对方密钥列表也有这个就能自动解密
    adrianzhang
        22
    adrianzhang  
       56 天前
    @e4fjui 好玩!不过对一般用户来说门槛可不低。最好做成步骤 1 ,2 ,3 。
    forvvvv123
        23
    forvvvv123  
       56 天前
    看是不是要跟所有人都搞端对端加密,如果不是的话就当面交换密钥,更放心
    e4fjui
        24
    e4fjui  
    OP
       56 天前
    @adrianzhang 也可以直接通过其他安全的途径交换密钥,不一定非得用 rsa
    adrianzhang
        25
    adrianzhang  
       56 天前
    @e4fjui 还是 rsa 好玩,就像咱们这个交换信息的过程。v2 上经常有人需要别人的联系信息,而别人可能会不想公开,那么用这个软件,求的人 po 出自己的公钥,给的人加密后给出来。这个应用场景除了你这个软件,还没有哪个软件能做到。
    e4fjui
        26
    e4fjui  
    OP
       56 天前
    @adrianzhang 主要是用来在 im 里面聊天的,能做到自动解密,点击信息就能显示解密内容,目前 rsa 的缺点就是只能发送文字,如果是对称密钥可以发图片视频和 20M 大小的任意文件,文件内容也是用对称密钥使用 aes 算法加密的
    adrianzhang
        27
    adrianzhang  
       56 天前
    @e4fjui #26 思路打开一下嘛。广大论坛上求联系方式,求梯子的,这些应用场景非常合适。IM 加密反而不是特别强的需求,因为有替代方法,当面说个密码,或者用其他渠道传密码,都可以。
    adrianzhang
        28
    adrianzhang  
       56 天前
    配合摸鱼论文: https://www.v2ex.com/t/1055809 ,这个软件会无敌的。
    bluedawn
        29
    bluedawn  
       56 天前 via iPhone
    这也太棒了,可惜现在用的 iOS 没法体验,请问自己和好友的密钥有备份和恢复渠道嘛?如果有 one drive 之类的用 master key 加密存储就好了
    e4fjui
        30
    e4fjui  
    OP
       56 天前
    @bluedawn 可以一键导出到剪贴板,也支持导入
    bluedawn
        31
    bluedawn  
       56 天前 via iPhone
    @e4fjui 好嘞这倒也行,谢谢回复
    busier
        32
    busier  
       56 天前
    对于中间人攻击,通过其它通道与目标核对一下公钥指纹不就可以了
    hhacker
        33
    hhacker  
       56 天前
    哈哈哈哈, 建议口头传递密钥
    92DISPfZMyn9IZaw
        34
    92DISPfZMyn9IZaw  
       56 天前
    这比 gnupg 好在哪?
    iminto
        35
    iminto  
       56 天前 via Android
    类似这样的软件很多年前就有了,不过是用的输入法,输入法加密更自然一些
    adrianzhang
        37
    adrianzhang  
       56 天前
    @TrembleBeforeMe 这玩意一看密文就知道它算法不行,能被破解。
    yshtcn
        38
    yshtcn  
       55 天前 via iPhone
    iOS 可以做成输入法(类似于 pin )
    e4fjui
        39
    e4fjui  
    OP
       55 天前
    @iminto 已经试过输入法类的了,基本都需要手动复制才能解密,我这个只需要点一下信息就能自动解密
    godall
        40
    godall  
       54 天前
    你发公钥的时候,被别人(比如马化腾)截取了,那他不是也可以解密你的文本信息?
    e4fjui
        41
    e4fjui  
    OP
       54 天前
    @godall 只有私钥能解密,公钥只能用于加密,公钥加密的信息公钥是没办法解密的
    godall
        42
    godall  
       54 天前
    @e4fjui 说错了,这要求每个手机端都需要维护一个对方公钥的 list ,还要及时更新(有有效期的话)公钥,不然过期了又得重新握手一次。
    e4fjui
        43
    e4fjui  
    OP
       54 天前
    @godall 不需要这样维护,rsa 只是用来传输对称加密的密钥的,比如密钥是 123,rsa 可以安全的告诉对方这个密钥,简单来说,如果对方已经知道密钥是 123 了,他直接在密钥列表里面添加一个 123 就行,然后你们之间的对话用 123 这个密钥来进行 aes 对称加密,只要这个密钥不更换,就无需任何维护
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 23:26 · PVG 07:26 · LAX 16:26 · JFK 19:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.