#pake #crypto #cpace

无std pake-cpace

CPace的简单实现,一种平衡的PAKE

8个版本

0.1.7 2023年12月15日
0.1.6 2020年11月30日
0.1.5 2020年5月14日

#1670 in 密码学

ISC许可证

10KB
174

Documentation

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