8个版本
0.1.7 | 2023年12月15日 |
---|---|
0.1.6 | 2020年11月30日 |
0.1.5 | 2020年5月14日 |
#1670 in 密码学
10KB
174 行
CPace-Ristretto255,一种平衡的PAKE
Rust的CPace实现。
这是对libsodium的CPace实现的移植。
简介
CPace是一种协议,用于两个共享低熵秘密(密码)的实体,在不向离线字典攻击泄露秘密的情况下派生出强共享密钥。
CPace是一种平衡的PAKE,这意味着双方都必须知道低熵秘密。
应用包括使用临时PIN码、QR码、序列号等配对物联网和移动应用。
用法
CPace协议需要一个往返。
它返回一个包含两个256位(SHARED_KEY_BYTES
字节)密钥的集合,可用于双向通信。
use pake_cpace::CPace;
// client-side
let client = CPace::step1("password", "client", "server", Some("ad")).unwrap();
// server-side
let step2 = CPace::step2(&client.packet(), "password", "client", "server", Some("ad")).unwrap();
// client-side
let shared_keys = client.step3(&step2.packet()).unwrap();
// both parties now have the same set of shared keys
assert_eq!(shared_keys.k1, step2.shared_keys().k1);
assert_eq!(shared_keys.k2, step2.shared_keys().k2);
注意
- 此实现使用Ristretto255群和SHA-512作为哈希函数,因此与C实现兼容,可以轻松移植到wasm-crypto。
- 客户端和服务器标识符的最大大小为255字节。
no_std
兼容,WebAssembly兼容。
依赖关系
~1.3–2.3MB
~47K SLoC