Skip to main content

零知识证明 Schnorr 流程

Schnorr 交互流程图

以下是使用 Mermaid 语法来描述上述公钥交换、Schnorr 签名生成和验证以及可选的消息加密流程的图表。你可以将这段代码复制到支持 Mermaid 的编辑器中,如 Markdown 编辑器或在线 Mermaid 工具,以可视化这个流程。

如何使用这个 Mermaid 图表

  1. 复制 这段 Mermaid 代码。
  2. 打开一个支持 Mermaid 的 Markdown 编辑器或在线工具,如 HackMD、Notion、或者 Mermaid Live Editor。
  3. 粘贴 代码到编辑器中,它应该自动渲染成流程图。

这个流程图展示了从密钥生成到公钥交换、签名的生成和验证,以及可选的消息加密和解密的步骤,是对 Schnorr 签名协议及其可能扩展的一个直观展示。

公钥交换和消息加密的完整流程图

下面是一个涉及公钥交换和消息加密的完整流程图,以 Schnorr 签名协议为例。这个流程图包括了密钥生成、签名生成、签名发送、以及签名验证的步骤。虽然 Schnorr 签名本身不涉及消息的加密,但它是一种常用于身份验证和数字签名的技术,可以和消息加密协议配合使用。

流程图

1. 密钥生成

  • Alice:
    1. 生成私钥 r1r_1
    2. 计算公钥 R1=r1GR_1 = r_1 \cdot G
  • Bob:
    1. 生成私钥 r2r_2
    2. 计算公钥 R2=r2GR_2 = r_2 \cdot G

2. 公钥交换

  • Alice -> Bob:
    • 发送 R1R_1
  • Bob -> Alice:
    • 发送 R2R_2

3. 签名生成

  • Alice:
    1. 选择随机数 kk
    2. 计算 K=kGK = k \cdot G
    3. 发送 KK 给 Bob。
    4. 接收来自 Bob 的挑战 ee
    5. 计算响应 s=k+er1s = k + e \cdot r_1
    6. 发送 ss 给 Bob。

4. 签名验证

  • Bob:
    1. 接收 KKss
    2. 验证 sGs \cdot G 是否等于 K+eR1K + e \cdot R_1

5. 消息加密 (可选) /zkp/ecc-zk-authenticated_key_exchange

  • Alice:
    1. 使用 Bob 的公钥 R2R_2 和自己的私钥 r1r_1 生成共享秘密。
    2. 使用共享秘密对消息进行加密。
    3. 发送加密消息给 Bob。
  • Bob:
    1. 使用 Alice 的公钥 R1R_1 和自己的私钥 r2r_2 生成相同的共享秘密。
    2. 使用共享秘密解密消息。

总结

这个流程涵盖了从密钥生成到公钥交换、生成和验证 Schnorr 签名,以及可选的消息加密和解密步骤。在实际应用中,这些步骤可以通过安全的通信协议(如 TLS)进一步增强,以确保交换过程的安全性和完整性。