区块链握手:无需信任的密钥交换
在两个 Z-Text 用户交换消息之前,他们必须完成一次加密握手。本文解释其工作原理及其对安全性的重要意义。
在两个 Z-Text 用户交换消息之前,他们必须完成一次"握手"——一种建立共享加密密钥的密码学协议。本文介绍它的工作原理以及它对安全性的重要意义。
为什么需要握手?
在传统的加密通讯工具中,中心服务器负责协调密钥交换。当你在 Signal 上给某人发消息时,他们的服务器会促成初始密钥协商。这种方式运作良好,但引入了信任依赖——你必须信任服务器会传递正确的密钥。
Z-Text 没有服务器。握手完全通过区块链交易执行,使其无需信任且可验证。没有任何中间方可以篡改或窥探密钥交换过程。
协议详解
Z-Text 的握手遵循一种改良的 Diffie-Hellman 密钥交换协议,适配了基于区块链的传输方式:
第一步:发起
Alice 想给 Bob 发消息。她知道 Bob 的 z-地址。Alice 的应用程序生成一个临时密钥对,并创建一笔发送到 Bob z-地址的屏蔽交易。交易的备注字段包含 Alice 的临时公钥和她的 z-地址。
因为这是一笔屏蔽交易,所以区块链上的任何观察者都无法看到 Alice 向 Bob 发送了什么,也无法看到备注的内容。
第二步:检测
当 Bob 同步钱包时,他的应用程序检测到传入的交易并读取备注。由于备注格式中包含特定的协议标记,应用程序将其识别为握手请求。
Bob 的应用程序显示带有 Alice z-地址的握手请求,提示他接受或拒绝。
第三步:响应
如果 Bob 接受,他的应用程序会生成自己的临时密钥对,并向 Alice 的 z-地址发送一笔响应交易。备注中包含 Bob 的临时公钥。
第四步:密钥派生
此时 Alice 和 Bob 都拥有了对方的临时公钥。双方各自独立使用椭圆曲线 Diffie-Hellman (ECDH) 计算出共享密钥。ECDH 的数学特性保证双方得到相同的共享密钥,而该密钥从未在网络上传输过。
这个共享密钥随后被用作派生对称加密密钥的基础,用于 Alice 和 Bob 之间所有未来的消息通信。
安全特性
区块链握手提供了几个重要的安全特性:
- 保密性:密钥交换隐藏在屏蔽交易内部,对观察者不可见
- 完整性:区块链的工作量证明确保交易无法被篡改
- 真实性:只有持有 z-地址私钥的人才能创建握手响应
- 无中间人攻击:没有中心服务器,就没有可以替换密钥的中间方
与 Signal 协议的比较
Signal 协议使用中心服务器来存储和传递预密钥。虽然这实现了异步密钥交换(你可以给离线的人发消息),但需要信任 Signal 的服务器会传递正确的密钥。
Z-Text 的区块链握手同样是异步的(Alice 发送请求时 Bob 不需要在线),但传输机制是去中心化的区块链而非企业服务器。握手步骤通过 G-stream 内存池推送来检测,每个步骤在几秒内完成,而且信任模型从根本上更强。
实际考量
通过 G-stream 内存池推送,握手通常在每个步骤的几秒钟内完成。每个步骤需要少量的 BTCZ 交易费用。一旦建立,共享密钥会存储在本地,无需更新——两个联系人之间所有未来的消息都使用同一个密钥。
如果删除联系人后重新添加,则必须执行新的握手,生成全新的共享密钥。