15次重大发布
0.18.0 | 2024年7月18日 |
---|---|
0.16.0 | 2024年5月10日 |
0.15.0 | 2024年3月4日 |
0.14.0 | 2023年10月2日 |
0.3.0 | 2022年5月27日 |
#803 在 密码学
每月229次下载
用于 2 个crate(通过 proof_system)
660KB
15K SLoC
saver
使用SAVER进行可验证加密
基于SAVER
实现。实现了
- 使用
Groth16
- 以及
LegoGroth16
。
可验证加密构造的基本思想是将要加密的消息(一个域元素)分成几个小段,例如b
位,并用Elgamal加密的指数变体加密每个段。解密时,在扩展域(F_{q^k}
)中的离散对数问题通过穷举法解决,其中离散对数的位数最多为b
位,因此需要进行最多2^b - 1
次迭代。使用SNARK(Groth16)来证明每个段最多为b
位,因此是一个范围证明。
加密除了密文外还输出一个承诺。对于消息m
的加密,承诺psi
的形式如下
psi = m_1*Y_1 + m_2*Y_2 + ... + m_n*Y_n + r*P_2
m_i
是原始消息 m
的位分解,满足以下条件:m_1*{b^{n-1}} + m_2*{b^{n-2}} + ... + m_n
(大端序)其中 b
是 m
分解的基数,r
是承诺的随机性。例如,如果 m
= 325 并且 m
在 4 位块中分解,b
为 16(2^4),分解为 [1, 4, 5],如下所示:325 = 1 * 16^2 + 4 * 16^1 + 5 * 16^0
。
从分解的承诺获取完整消息的承诺。
要使用 Schnorr 协议比较承诺消息的等价性,必须将承诺转换为对完整(非分解)消息的承诺。这通过 ChunkedCommitment
实现,其文档描述了此过程。
与 BBS+ 签名一起使用
参见 tests.rs 文件
许可证:Apache-2.0
依赖关系
~7–19MB
~213K SLoC