专栏名称: 程序人生
十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过数十人的团队,还带领一班兄弟姐妹创过业,目前在硅谷一家创业公司担任 VP。关注程序人生,了解程序猿,学做程序猿,做好程序猿,让我们的程序人生精彩满满。
目录
相关文章推荐
老刘说NLP  ·  48个流行开源ML数据集及KG三元组抽取工具 ... ·  2 天前  
稀土掘金技术社区  ·  我在 pre 直接修改 bug,被领导批评了 ·  6 小时前  
蚂蚁技术AntTech  ·  报名开启 | ... ·  昨天  
程序员技术  ·  某程序员:感觉身边35岁后月薪稳定在40k以 ... ·  昨天  
大淘宝技术  ·  大模型微调知识与实践分享 ·  昨天  
51好读  ›  专栏  ›  程序人生

Noise 框架:构建安全协议的蓝图

程序人生  · 公众号  · 程序员  · 2019-12-11 15:57

正文

请到「今天看啥」查看全文


我们先要明确一件事情:Noise 协议虽然其初衷是为网络协议提供安全信道,但它并没有规定使用什么样的通讯协议 — TCP / UDP 甚至是任何满足 read / write 接口的子系统,比如文件,管道(pipe),都可以使用 Noise 协议。

Noise 协议原文除去附录,有 41 页之多,这里面有大量的概念和协议细节的描述,在深入细节之前,我们从用户的角度,或者说产品的角度,看看如何使用一个 Noise 协议做出来的系统。

首先是协议的握手。在握手阶段,发起者和应答者(initiator / responder,注意 Noise 没有使用 Client / Server,但我们可以简单认为 initiator 是 client,而 responder 是 server)通过交换信息对使用何种算法,密钥是什么达成一致。

握手阶段双方需要使用同样的协议变量 —— 和 TLS 不同的是,Noise 把协议变量设计为静态而非协商出来的。这是一个很大的简化,而从用户的角度,用户写出来的使用 Noise 的应用往往是自己的节点跟自己的节点通讯,因而无需协商。我们上次讲到的 WireGuard 使用的是这样的变量:Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s。稍微解释一下:

  • I: 发起者的固定公钥未加密就直接发给应答者

  • K: 应答者的公钥发起者预先就知道

  • psk2: 把预设的密码(Pre-Shared-Key )放在第 2 个握手包之后

  • ChaChaPoly: 对称加密算法

  • BLAKE2s: 哈希算法

协议变量各个部分是这样规定的:Noise 。其中握手模式有很多种,适用于各种不同的场合。其中IK 模式的握手方式是这样的,只需要 1-RTT,我们随后细讲:







请到「今天看啥」查看全文