#blind #rsa #signatures #crypto #signature

已删除 rust-blind-rsa-signatures

纯Rust实现的RSA盲签名

0.1.0 2021年2月25日

#13#blind

MIT 许可协议

12KB
242 代码行

盲RSA签名

作者盲化的RSASSA-PSS RSAE签名。

这是基于RSA盲签名提案,并基于Zig实现的一个实现。

协议概述

客户端请求服务器对一个消息进行签名。服务器接收到消息,并返回签名。

使用该 (message, signature) 对,客户端可以本地计算第二个有效的 (message', signature') 对。

任何人都可以验证 (message', signature') 对是否适用于服务器的公钥,即使服务器之前没有看到这对,但除了客户端外,没有人可以将 (message', signature')(message, signature) 链接起来。

使用该方案,服务器可以发行一个令牌并验证客户端是否拥有有效的令牌,而无法将这两个动作与同一客户端链接。

  1. 客户端创建一个随机消息,并用一个随机、秘密的因子对其进行盲化。
  2. 服务器接收到盲消息,对其进行签名并返回一个盲签名。
  3. 从盲签名和已知秘密因子中,客户端可以本地计算出一个 (message, signature) 对,该对可以使用服务器的公钥进行验证。
  4. 因此,任何人,包括服务器,都可以在以后验证 (message, signature) 是否有效,而不需要知道步骤2发生的时间。

该方案由David Chaum设计,最初用于匿名化DigiCash交易。

使用方法

let kp = KeyPair::generate(2048)?;
let (pk, sk) = (kp.pk, kp.sk);

let msg = b"test";
let blinding_result = pk.blind(msg)?;
let blind_sig = sk.blind_sign(&blinding_result.blind_msg)?;
let sig = pk.finalize(&blind_sig, &blinding_result.secret, &msg)?;
sig.verify(&pk, msg)?;

依赖项

~9MB
~168K SLoC