多节点间加密通信的安全问题

2023-11-25 17:12:30 +08:00
 raw0xff

多节点间通信,节点每 2 秒会收到 10<n<100 条加密数据,每 2 秒要发送 n<10 条,每条数据<1kb 。 节点有自己的公私钥,ECC 算法,接收时用本地私钥解密收到的数据,发送时用接收方公钥加密。

请问这种场景选用 ECC 公钥加密私钥解密方式是否合理?会有哪些问题?大佬有什么建议?

我不太懂私钥安全性是否会有磨损,每天百万次解密运算是否可以长期使用?

另一个话题,私钥在本地如何安全存储?

6057 次点击
所在节点    程序员
43 条回复
julyclyde
2023-11-28 14:33:31 +08:00
@raw0xff 具体实现为什么缺这个功能,我也不了解呢
没看过 lib 的代码

不过 GnuPG 这种“产品”是可以用非对称进行加解密的,实际上底层还是用对称密码术的,所以可以实现“加密给多个收件人”的功能,就是把一个对称密钥分别非对称加密给多个收件人
baobao1270
2023-11-28 14:56:51 +08:00
@raw0xff 我记得 WSS 就是 WebSocket over TLS 啊,还是我记错了……
AD 是输入法打字被吃了,指的是 AEAD

其实我们讲这么多,都是密码学方案和算法的问题。大家都离题万里,其实楼主要的也是一个可以实行的方案,这里楼主出一个吧:
X.509 ECC (secp256r1) 证书 + TLS 1.3 双向认证,密钥直接保存在文件里

下面是对方案的解释:
1. 楼主想要用 ECC Keypair ,那么就选 secp256r1 吧。从代码可维护和减少编码工作量的角度考虑,建议复用现有格式,也就是 X.509 证书。自己用 openssl (或者其他你喜欢的加密库)自建一个离线 CA ,然后给客户端/节点发证书就行。
2. 通信协议方面,个人建议 TLS 1.3 。楼主喜欢 WSS 的话也可以用 WSS ,和 TLS 安全性差不多。TLS 1.3 目前所有的 cipher 都是安全的,只要禁用 TLS 1.1-1.2 即可。如果有必要可以开双向认证。用现有协议而不是。WSS 相比 TLS 1.3 的好处是可以走 CDN 。此外,如果楼主还没有决定序列化方案的话,gRPC 也是很不错的选择。
3. 鉴于你的成本,KMS 就别想啦。用云服务器的话是不可能「安全存储密钥」的——只要云服务商想看就能看。阿里云有卖带 TPM 的云服务器,但是也是贵的离谱。真要做什么的话,你可以在创建服务器的时候勾选「加密磁盘」,至少如果放你云服务器的物理机磁盘被偷了不会导致你的私钥泄露。不过轻量云好像不支持加密磁盘的功能。私钥安全性也不会有什么磨损,不泄漏就行。

@GeekGao 其实楼主的问题只是问个可以实操到加密通信方案,结果被我们话题歪到密码学原理去了。或许这就是论坛有意思的地方吧,让我看到思维碰撞的火花(
此外某小飞机的算法算不上高明,比起 Reality 来说设计的失误还是挺多的,Reality 可以说是「源于 TLS 1.3 ,高于 TLS 1.3 」了
raw0xff
2023-11-29 00:07:55 +08:00
@baobao1270 gRPC 试过了,因为连接对象有节点对节点也有节点对浏览器,grpc 对浏览器适配不如 ws ,而且项目初期通信内容经常变,已经用 JSON 搞了一套,先不折腾了。

现在反思在 wss 下,还用端到端加密解密是否多余,因为关键信息到达前已经被 user 手里的公私钥加密和签名,服务端只验证和存储。

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

https://www.v2ex.com/t/995144

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

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

© 2021 V2EX