33次发布

0.3.2 2024年2月27日
0.3.1 2024年2月26日
0.2.8 2024年2月25日
0.1.13 2024年2月15日

#371 in 加密学

MIT许可证

63KB
933 代码行

RGP

ci license crates.io docs.rs dependency status

"相对良好的隐私"

用法

use rgp::{
    decrypt, encrypt, extract_components_mut, generate_dh_keys,
    generate_fingerprint, Components, Decrypt, Encrypt
};

// generate sender fingerprint and public verifier
let (fingerprint, verifier) = generate_fingerprint();

// generate key pairs for sender and recipient
let (sender_priv_key, sender_pub_key) = generate_dh_keys();
let (recipient_priv_key, recipient_pub_key) = generate_dh_keys();

let mut pub_keys = vec![recipient_pub_key];

// 8mb
let content = vec![0u8; 8_000_000];

// add another 20,000 recipients
for _ in 0..20_000 {
    let (_, pub_key) = generate_dh_keys();
    pub_keys.push(pub_key)
}

// encrypt message for all recipients
let (mut encrypted_content, content_key) = encrypt(
    fingerprint,
    content.clone(),
    Encrypt::Dh(sender_priv_key, &pub_keys, None),
)
.unwrap();

// extract encrypted content key for first recipient
if let Components::Dh(encrypted_key, _) = 
    extract_components_mut(0, &mut encrypted_content) 
{
    // decrypt message
    let (decrypted_content, decrypted_content_key) = decrypt(
        Some(&verifier),
        &encrypted_content,
        Decrypt::Dh(
            encrypted_key, 
            sender_pub_key, 
            recipient_priv_key, 
            None,
        ),
    )
    .unwrap();
    
    assert_eq!(decrypted_content, content);
    assert_eq!(decrypted_content_key, content_key);
};

更多示例在示例目录中。

禁用多线程

默认情况下启用了"multi-thread"功能,并使用Rayon crate。多线程目前仅在encrypt函数中使用,当使用DhKem模式并行加密密钥和内容时,但可以通过将default-features设置为false来禁用。

[dependencies]
rgp = { version = "x.x.x", default-features = false }

模式

目前支持4个顶级模式:Dh(Diffie-Hellman)、HmacSessionKem(密钥封装机制)。所有模式都嵌入内容签名和验证;通过签名明文并加密签名以保护明文来保留否认性。

加密套件

  • 用于HMAC的Blake2s256
  • Ed25519用于签名
  • mceliece348864f用于KEM
  • X25519用于Diffie-Hellman
  • XChaCha20用于内容密钥
  • XChaCha20Poly1305用于内容

Diffie-Hellman

Dh模式通过为每条消息生成一个新的/随机的密文密钥并提供每个收件人的共享密钥来加密该密钥的副本,从而提供前向机密性。此模式可以用于管理SessionHmac模式的关键交换/回溯播种。

HMAC

Hmac模式提供向后机密性,并且当HMAC密钥保密时,可以启用前向机密性,如果只有内容密钥受到损害。此模式还跟踪迭代器,以便更容易实现回溯逻辑。

Session

Session默认不提供前向或后向机密性,并使用提供的密钥“原样”使用,而无需任何修改。当与密钥生成一起使用时,Session可以为内容密钥提供前向机密性,因为它将生成一个新的/单次使用的密文密钥,该密钥本身被会话密钥加密,从而在内容密钥受到损害时保护会话密钥。

KEM

Kem 模式旨在简化后量子加密中的公钥密码学。它通过为每条消息生成一个新的/随机的内容密钥,并使用每个收件者的相应封装密钥加密该密钥的副本来实现前向机密性。

此模式可用于管理 SessionHmac 的初始密钥交换/旋转播种,以及为 Dh 模式生成 HMAC 密钥。

此模式依赖于 classic-mceliece-rust 包。建议在底层 PQ 密码学得到充分验证之前,使用具有 Diffie-Hellman 混合选项的 Kem

尽管 Classic McEliece 的密钥大小更大,但因为它具有更小的密文,所以被选中,每个收件者在每条消息中都会包含这个密文。

性能

要检查您机器上的性能,请运行 cargo bench。您还可以查看 GitHub CI 中的最新基准测试 工作流程

所有多收件人 DhKem 模式的基准测试都是针对 10,000 个收件人进行的,所有用于签名+加密/解密+验证的基准测试都使用 5mb 有效载荷。

许可证

MIT

安全性

此代码尚未经过审计或审查。请自行承担风险使用。

依赖关系

~4–5.5MB
~92K SLoC