实现一个纯 Web 界面的端到端加密临时聊天对话思路是否可行?

2024-06-05 11:24:25 +08:00
 busier
假如想实现一个纯 Web 界面的端到端加密临时聊天对话

通过 openpgpjs 项目,在客户端浏览器纯前端实现 PGP 加解密

服务器端只负责交换公钥和转发客户端传过来的加密消息,保证服务器管理员无法解密阅读消息内容

免用户注册机制,服务器通过 PGP 公钥来标识用户,列出在线用户及 PGP 公钥

用户"密钥对"在用户浏览器加载页面时随机生成,不上传不保存私钥,关闭浏览器私钥丢失,所有消息将被废弃不可解密。

这样的设计思路有无技术可行性,或者有什么重大缺陷?

已知问题:无法确认对方身份,需要通过其它渠道交换公钥来确认身份。

其它问答题希望听听大家意见
3968 次点击
所在节点    程序员
46 条回复
fruitmonster
2024-06-05 12:27:43 +08:00
第一个问题:给谁用,使用场景是啥
busier
2024-06-05 12:45:59 +08:00
@fruitmonster 场景就是加密传输临时消息啊,又不想被别人获取。比方说打个加密压缩包传给同事,但是密码又不想明文发过去。

只讨论技术实现及缺陷,这类其它问题不再讨论范畴。
makaflow
2024-06-05 12:51:53 +08:00
国内是不行,无法监管就会被叫停
7lQM1uTy635LOmbu
2024-06-05 13:27:18 +08:00
@busier 服务器不要留存信息,转发的消息确认送达后直接删除,并且应该设置 ttl ,最大存活时间,可以由发送方自定义,并且由发送方决定超时是否由服务器代替发送超时通知,但最大不能超过 x ,超时直接删除。

即便是同一对通信用户,请定期 rotate 密钥对,确保历史消息不可被物理解除后恢复。

至于安全交换公钥,印象中有看到过相关方案,反正是个已经解决的问题。

如何防止中间人攻击?(比如劫持,代理)
cassidy0134
2024-06-05 13:33:09 +08:00
@busier 本人 ops 一枚,有多台海外服务器( sg ,us ),我不想暴露自己但想帮 op 测试这个页面和 app ,ops 相关的工作可以全部我来,你只要写代码即可,如果愿意,请给我一个临时联系方式。
cassidy0134
2024-06-05 13:33:45 +08:00
其实我也早就想做这件事,奈何不会写代码~
shinsekai
2024-06-05 13:34:07 +08:00
telegram web 算 OP 所说的吗?
ltkun
2024-06-05 13:37:06 +08:00
如果不是 web 可以选择 k9mail 这种 使用普通 email 就能端到端的 app
dj721xHiAvbL11n0
2024-06-05 13:51:46 +08:00
都通过其它渠道交换公钥了,我干嘛不直接通过那个渠道顺便把加密消息一起发了得了?
dislazy2023
2024-06-05 13:54:29 +08:00
感觉可行,这个用来做临时聊天还是很有用处,我也一直在找这样的开源 web ,不太好找
jeesk
2024-06-05 13:56:14 +08:00
肯定可行, 不过没什么鸟用呀
jeesk
2024-06-05 13:58:18 +08:00
使用场景? 如果仅仅是分享问价? 那么直接临时启动一个 http-server 即可
ooolooo
2024-06-05 13:58:48 +08:00
@shinsekai 不算, tg 有账号系统
tg 也没有默认端到端加密, web 更不是
wushenlun
2024-06-05 13:58:49 +08:00
email pgp 加密不就好了 或者 whatsapp
ArthurSS
2024-06-05 13:59:52 +08:00
webrtc 不是可以直接支持?
ArthurSS
2024-06-05 14:06:47 +08:00
很早以前写了一个小 demo ,用的免费信令服务器,国内不一定能连接上: https://arthursuz.github.io/peer-link/
输入另外一边的 id ,既可建立连接,完全 p2p
Nazz
2024-06-05 14:07:19 +08:00
可行, 逻辑全部走 WASM
Nazz
2024-06-05 14:07:37 +08:00
内置证书
superkkk
2024-06-05 14:20:40 +08:00
Conda
2024-06-05 15:03:57 +08:00
我歪个楼,我们业务里的埋点和日志这类通用的服务就是基于 protobuf 传输的,发送前加密通过正常的 http 发送加密后的字符串,服务端拿到之后再解密,这个思路和你的聊天工具也是类似的吧,只要按我的格式传过来就行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1046959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX