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=r1⋅GR_1 = r_1 \cdot G。
  • Bob:
    1. 生成私钥 r2r_2。
    2. 计算公钥 R2=r2⋅GR_2 = r_2 \cdot G。

2. 公钥交换​

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

3. 签名生成​

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

4. 签名验证​

  • Bob:
    1. 接收 KK 和 ss。
    2. 验证 s⋅Gs \cdot G 是否等于 K+e⋅R1K + 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)进一步增强,以确保交换过程的安全性和完整性。