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

我做了一个极致安全的消息分享网站

  •  2
     
  •   maggch97 · 2023-03-24 01:40:53 +08:00 · 3193 次点击
    这是一个创建于 645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://supersafemessage.github.io/

    访问->分享链接->其他人通过你的分享链接向你发送加密消息

    数据目前绝对安全,2048 位的 rsa 加密,量子计算机出现之前你的信息应该暂时是安全的

    代码一切从简,不引入任何外部库,欢迎审查

    为什么要做:

    和朋友亲人分享一些"机密信息",你应该没有在 telegram 上加你的女朋友吧?

    普通人也有"机密信息",至少你不应该用微信发信用卡的 CVV

    不需要手机号,不需要邮箱,没有人知道谁在接收信息,谁在发送信息。

    没有聊天记录,关闭接收页面,没有人能再次解码你的信息。你可以不相信我的服务器,可以不相信一切,但是永远可以相信密码学。

    还能更安全吗?

    用一个足够干净的系统,最新的浏览器,不要安装任何第三方证书

    关闭掉所有浏览器插件,打开浏览器的无痕模式,看到消息,记住,然后关闭浏览器不要把信息保存到本地

    想办法确认你的收件人、发件人真的是本人,确认你分享的链接没有被篡改。当然这一步应该不太会有人需要

    未来打算

    分享图片?建立双向的加密通信?一个极致安全的信息收发设备?

    Github: https://github.com/SuperSafeMessage/SuperSafeMessage.github.io

    第 1 条附言  ·  2023-03-24 10:27:44 +08:00
    越不信任越安全,安全就是不要相信任何人,包括不要相信我提供的这个页面不会上传你的信息。

    所以如果你对安全有更极致的追求,每次打开页面后请右键查看网页源代码,确保这里面没有一行可能泄漏信息的代码。

    代码没有引入任何第三方库,加上所有的文字一共 200 行,所以审查起来应该会很轻松。
    第 2 条附言  ·  2023-03-24 23:58:25 +08:00
    非对称加密被广泛用于计算机的各个加密环节。

    安全是有成本的,但是对于普通人,使用非对称加密进行一次临时的消息传递成本太高了。即使对于程序员来说,这个成本也是非常高的。

    纵使你了解这方面的知识,你也很难教会其他人什么是私钥公钥,如何通过公钥加密,如何通过私钥解密。

    过去因为一些需要,我在 Google 搜索过类似的的产品,无一例外都是对称加密。现在我的产品彻底隐去了公钥私钥的细节,作为一个普通用户只需要打开网页,分享链接就可以实现。

    使用这个可以说简陋的产品,也能帮用户践行了一些安全的 Best Practice

    1. 没有私钥导出,避免了私钥泄露的最大途径。私钥只存在当前页面的运行环境中,关闭页面后彻底消失。

    2. 每次打开网页都会重新生成私钥。网页强迫了用户一个私钥基本只能用来接收一件事的信息。密码这个东西,使用次数越少,使用时间越短,越安全。

    3. 足够简单的代码,最少的外部依赖。每个人都有能力审查代码。



    这个世界上有 PGP ,GPG ,有各种各样的端到端加密。但我并没有能力和精力说服其他人用各种繁琐的方式向我发送信息,但有了这个工具之后,这件事请会变得简单很多。
    第 3 条附言  ·  2023-03-25 14:28:43 +08:00
    现在已经支持图片分享, 并且图片是经过压缩后分享的, 凑巧解决了最近一些截图软件爆出来的安全漏洞
    23 条回复    2023-04-01 16:07:39 +08:00
    Drumming
        1
    Drumming  
       2023-03-24 01:42:43 +08:00 via Android   ❤️ 2
    截图录屏,我相信密码学,但是我不相信人类
    40EaE5uJO3Xt1VVa
        2
    40EaE5uJO3Xt1VVa  
       2023-03-24 01:50:45 +08:00
    项目才新建,没有明确的引导,我摸索了一下才知道怎么用的。
    iBugOne
        3
    iBugOne  
       2023-03-24 02:32:09 +08:00
    我为什么要用这个服务而不是 One Time Secret 呢?
    maggch97
        4
    maggch97  
    OP
       2023-03-24 02:44:31 +08:00 via Android
    @iBugOne 当然可以用其他的,每个人对安全的要求都不一样。但就原理上来说,这个是最安全的
    benedict00
        5
    benedict00  
       2023-03-24 07:23:03 +08:00 via Android
    可以用 SHA512 校验消息完整性
    wbrobot
        6
    wbrobot  
       2023-03-24 08:50:09 +08:00
    如何保障链接分享过程中的安全呢?(链接不被别人窃取)
    pianjiao
        7
    pianjiao  
       2023-03-24 09:20:44 +08:00
    当面说不好吗
    maggch97
        8
    maggch97  
    OP
       2023-03-24 09:23:40 +08:00 via Android
    @wbrobot 窃取的话最多收到假消息,要是被篡改就麻烦了
    cmdOptionKana
        9
    cmdOptionKana  
       2023-03-24 09:24:53 +08:00
    访问->分享链接->其他人通过你的分享链接向你发送加密消息

    第二步 “分享链接”,假设通过微信分享,是否意味着微信服务器可以拿到这个链接,从而获取机密?
    cmdOptionKana
        10
    cmdOptionKana  
       2023-03-24 09:26:27 +08:00
    密钥是前端生成,还是后端生成?
    maggch97
        11
    maggch97  
    OP
       2023-03-24 09:35:12 +08:00 via Android
    @cmdOptionKana 不可以,这个链接里面的密钥是公钥,只能用来加密,不能用来解密。这是 rsa 这类非对称加密算法保证的。非对称加密广泛用于 https

    这也是为什么我说这是最安全的,其他所有的服务都提供的是对称加密,加密解密用的是同一个密钥。one time secret 等等,你需要信任服务器的"只显示一次就销毁"的逻辑,才能保证信息不泄露。并且也有可能泄露,只不过能让你在泄露之后知晓补救。

    安全里面最重要的就是不信任任何人,虽然这个网站依然依赖了你的浏览器是安全的,系统是安全的,CPU ,内存是安全的。但至少比依赖服务器是安全的靠谱多了(后者同样需要依赖浏览器系统 CPU 内存安全。
    cmdOptionKana
        12
    cmdOptionKana  
       2023-03-24 10:13:22 +08:00
    @maggch97 原来如此!明白了,看起来真的不错啊!
    vazo
        13
    vazo  
       2023-03-24 13:42:00 +08:00
    @maggch97 部分区域访问不了 workers.dev
    maggch97
        14
    maggch97  
    OP
       2023-03-24 13:58:53 +08:00 via Android
    @vazo 直接用最简单的方式上线的,后续换个服务商稍微解决一下国内访问的问题。不过肯定有被屏蔽的风险,不可能 100%可访问
    duke807
        15
    duke807  
       2023-03-24 14:24:39 +08:00
    “每次打开页面后请右键查看网页源代码,确保这里面没有一行可能泄漏信息的代码”

    每次都查代码不现实,如果不这么做,又没法确保你代码是安全的,可以参考我这个 CDEncrypt 项目,使用 PWA 方式,可以离线使用,每个版本的代码只要检查一次,因为代码修改和升级无法避免会弹窗通知用户:

    https://v2ex.com/t/832302
    duke807
        16
    duke807  
       2023-03-24 14:27:38 +08:00
    而且我这个是纯粹静态网站,不需要服务器中转数据,用户自己也很容易部署,不担心全部被屏蔽
    duke807
        17
    duke807  
       2023-03-24 14:44:35 +08:00
    “和朋友亲人分享一些"机密信息"”

    OP 这个非对称加密不合适这种场景,特别是同时分享给多个人
    而 CDEncrypt 就是为这个场景服务的,支持大段文字、文件、图片、视频
    对方打开连接就行,只有首次打开才需要输入密码,绝对不能对对方的计算机水平有任何要求
    至于密码的安全,提前帮对方输入一次密码,或者打电话告知,或者用阅后即焚分享密码,都是主动提供给对方
    而 OP 这个,要反过来让对方提供给自己,完全不现实
    neptuno
        18
    neptuno  
       2023-03-24 15:52:27 +08:00
    gpg 邮件?
    maggch97
        19
    maggch97  
    OP
       2023-03-25 14:28:31 +08:00
    现在已经支持图片分享, 并且图片是经过压缩后分享的, 凑巧解决了最近一些截图软件爆出来的安全漏洞
    enopkf
        20
    enopkf  
       2023-04-01 13:56:24 +08:00
    用什么方法来保证分享链接(公钥)没被篡改呢?
    打个电话来验证吗?发微信,如果微信在中间篡改公钥呢?
    公钥本身需要依赖 CA ,需要先有个可信的渠道来保证公钥的正确
    enopkf
        21
    enopkf  
       2023-04-01 14:00:45 +08:00
    如果用电话分享,那就是认为从电话听到的语音是可信的。通过某个通信软件分享,就认为这个通信软件是可信的 CA 。以这个为前提。
    enopkf
        22
    enopkf  
       2023-04-01 14:35:05 +08:00
    那如果每次我要发消息给某个人,都要某个人通过一个可信的 ca 渠道给我公钥,那为何我不直接通过这个可信的 ca 通信呢?
    maggch97
        23
    maggch97  
    OP
       2023-04-01 16:07:39 +08:00 via Android
    @enopkf 我水平太次,你水平太高了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:26 · PVG 10:26 · LAX 18:26 · JFK 21:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.