#schnorr-signature #digital-signature #blake3 #schnorr #ristretto #signature

无std r255b3

使用Ristretto255和Blake3的短Schnorr签名

4个版本 (2个重大更新)

0.3.0 2023年9月15日
0.2.0 2023年9月6日
0.1.1 2023年9月1日
0.1.0 2023年5月27日

#1579 in 密码学

每月30次下载

无许可

31KB
474

r255b3: 使用ristretto255和blake3的schnorr签名。

此crate提供基于Schnorr签名的短签名,基于Ristretto255Blake3

注意:这不是Ed25519,如果您想使用Ed25519,请使用优秀的ed25519-dalek crate。

警告!这是一个稍微新颖的密码学原语。它尚未经过审计!请在自己的(而非他人的)风险下使用!

API和密码学构造可能会根据审计结果而更改,但从版本0.3.0开始可能被认为是相对稳定的。

为什么?

最初的动机是为converge的嵌入式版本提供最小的占用空间。它已经广泛使用了Blake3哈希函数,为了Ed25519签名而将其更改为SHA512也不是什么大问题。

话虽如此,它相对于Ed25519还有一些其他优点

  • 使用Schnorr签名公式的更小的密钥。
  • 对领域分隔的正确(并强制执行的)支持。
  • 明确定义的密钥,公钥或签名中没有可变因素。
  • 默认模式支持流式处理,并且可以单次传递签名数据。
  • 使用更快的哈希函数,对于大输入更快。

如何?

Schnorr签名方案已经积累了多种变化,这个方案

  • 提供了内置的领域分隔
  • 使用标量作为密钥和群生成器乘以该标量作为公钥
  • 使用小的标量、大的标量元组作为签名
  • 从领域、消息、密钥和公钥中派生一个确定的随机nonce
  • 将公钥混合到消息哈希中

密钥生成

r255b3使用Ristretto255标量作为密钥。这些是通过采样256位的安全随机数然后通过群阶进行约简生成的。这个群阶是 相对 略微大于2²⁵²,这限制了与均匀分布的总偏差约为2⁻¹²⁶。

sk ←ᴿ Scalars
pk := sk*B

消息哈希准备

我们首先使用Blake3的上下文哈希从领域派生一个密钥哈希

hk := Blake3Ctx("Schnorr-Ristretto255-Blake3", domain)

签名

接下来,我们生成一个标量nonce,k,要么通过采样随机值,要么确定性地生成

k := Blake3Keyed(hk, message || "Secret Nonce for Schnorr-Ristretto255-Blake3" || sk || pk)

现在,k 将生成器缩放以获取 Ristretto255 点 rr 被压缩,与消息和公钥连接,然后输入到 Blake3 中以派生短标量 e

r = k*B
e = Blake3(hk, message || "Message Hash for Schnorr-Ristretto255-Blake3" || pk || r)

这里的 e 是哈希的前 128 位,后 128 位被丢弃。

请注意,ke 的哈希共享一个公共前缀,这使我们能够在将上下文字符串、密钥和点用于哈希之前复制哈希状态。

最后,我们将 e 与秘密密钥相乘,并从 k 中减去它们的乘积,得到(完整大小)标量 s。这产生了我们的签名,它是 es 的元组。

s = k - sk * e
sig = (e, s)

e 是 16 字节,而 s 是 32 字节,结果是一个 48 字节的签名。

验证

验证过程是通过重构 r 来进行的。

rᵥ = s*B + e*pk = (k - sk*e)*B + (e*sk*B) = k*B - sk*e*B + e*sk*B = k*B

现在我们有了 rᵥ,我们使用与签名时完全相同的方式使用我们的带密钥的 Blake3 哈希消息。这产生了 e 的另一个副本,我们称之为 eᵥ

eᵥ = Blake3(hk, message || "Message Hash for Schnorr-Ristretto255-Blake3" || pk || r)

最后,我们可以将 eᵥ 与签名中的 e 进行比较,如果它们匹配,则我们有一个有效的签名。

测试向量

秘密密钥:“Did gyre and gimble in the wabe\n” 公钥:161bf5685cfbb674ad88dbbb266e15ec5aa93406135ec471704acb79cd246564 在域:“All mimsy were the borogroves,” 在消息:“And the mome raths outgrabe” 签名:9028a67bf5ca00771b15ab30535bba69d4991415d864503cd87e589712d0e0186d4c03629416d51e639817ba9009520c

许可证

本项目奉献给公共领域,有关详细信息,请参阅 UNLICENSE

依赖项

~2.8–4MB
~95K SLoC