#ristretto #protocols #group #privacy #token #pass #challenge

不依赖std challenge-bypass-ristretto

使用Ristretto群(WIP)实现的隐私通行证加密协议

7个版本 (4个稳定)

2.0.0 2024年6月20日
1.0.2 2024年1月18日
1.0.1 2022年4月18日
1.0.0 2021年10月28日
0.1.0-pre.22018年12月14日

#268 in 加密学

Download history 170/week @ 2024-05-06 225/week @ 2024-05-13 55/week @ 2024-05-20 19/week @ 2024-05-27 25/week @ 2024-06-03 13/week @ 2024-06-10 125/week @ 2024-06-17 17/week @ 2024-06-24 49/week @ 2024-07-01 181/week @ 2024-07-08 217/week @ 2024-07-15 43/week @ 2024-07-22 69/week @ 2024-07-29

每月527次下载

MPL-2.0 许可证

69KB
1.5K SLoC

Rust 1K SLoC // 0.0% comments Go 243 SLoC

challenge-bypass-ristretto 构建状态

使用Ristretto群实现的隐私通行证加密协议

该库使用了出色的curve25519-dalek,它是Ristretto群操作的纯Rust实现。

它仅是加密协议的实现,不提供用于其他语言的服务和FFI。

该crate仍在开发中,不建议外部使用。

FFI

该库公开了一些旨在辅助FFI创建的函数,但自身不实现FFI。

有关FFI,请参阅challenge-bypass-ristretto-ffi

盲令牌

如最初在挑战绕过服务器扩展存储库中实现的那样,盲令牌使互联网用户能够匿名绕过互联网挑战(CAPTCHA)。

在这种情况下,用户完成CAPTCHA后,将颁发可以代替完成更多CAPTCHA的令牌。颁发者可以验证令牌的有效性,但不能确定它们颁发给了哪个用户。

此方法创建令牌通常很有用,因为它允许以不可链接的方式进行授权。此库旨在用于可能需要这些组合属性的应用程序。


以下是协议的简要描述,更详细的说明也可用

盲令牌协议有两个参与者和两个阶段。客户端和发行者首先执行签名阶段,之后客户端可以生成在赎回阶段可以使用的令牌。

签名

客户端准备随机令牌,将这些令牌盲化以便发行者无法确定原始令牌值,然后将它们发送给发行者。发行者使用密钥对令牌进行签名,并将它们返回给客户端。客户端随后反转原始盲化以生成签名令牌。

赎回

客户端向服务器证明其签名令牌的有效性。服务器将令牌标记为已使用,因此无法再次使用。

使用

警告 此库尚未经过审计,请自行承担风险!

示例用法

tests/e2e.rs

基准测试

运行 cargo bench

安全合约

此软件旨在确保以下内容

  1. 签名服务器/发行者无法将签名过程中看到的盲令牌与其赎回时使用的令牌预像或其他信息相关联。
  2. 客户端必须与服务器执行 VOPRF 协议才能创建有效的签名令牌。每次协议运行产生一个有效的令牌,该令牌不能用于创建其他有效的令牌。

鉴于

  1. 客户端保留盲密钥,在发行时只发送盲令牌,在赎回时只发送有效负载、验证签名和令牌预像。客户端验证 DLEQ 证明,确保令牌是由之前提交的公钥签名的,而不是用户的唯一密钥。客户端确保其他非带外标记(如 IP 地址)不能用于唯一关联发行和验证。
  2. 服务器保留签名密钥秘密。服务器在第一次成功赎回后将令牌预像标记为已使用。

特性

默认情况下,此 crate 使用 stdcurve25519-daleku64_backend。但是它与 no-std 兼容,并且可以选择其他 curve25519-dalek 后端。

可选特性包括 base64serde

  • base64 提供了用于对各种结构进行 base64 编码/解码的方法。
  • serde 实现了 serdeSerialize / Deserialize 特性。

开发

安装 rust。

构建

运行 cargo build

测试

运行 cargo test

依赖关系

~2.8–4MB
~84K SLoC