#kyber #ml-kem #post-quantum #post-quantum-cryptography #no-alloc #no-std

no-std enc_rust

模块-格标准ML-KEM和(很快)ML-DSA的纯Rust实现,也称为PQC方案Crystals Kyber和Dilithium

5个版本

0.1.4 2024年6月25日
0.1.3 2024年6月19日
0.1.2 2024年6月19日
0.1.1 2024年6月19日
0.1.0 2024年6月19日

#943 in 加密学

每月24次下载

GPL-3.0-or-later

195KB
3K SLoC

kyber_rust_ferris

enc_rust

Crates.io Version codecov License: GPL v3 dependency status

关于

模块-格标准ML-KEM和(很快)ML-DSA的纯Rust实现,也称为PQC方案Crystals Kyber和Dilithium。

此软件包包含一个库(enc_rust),以及(很快:TM:)一个二进制包装器。该库目前包含ML-KEM(Kyber)的实现,并将未来也支持ML-DSA(Dilithium)。


为什么选择enc_rust?

enc_rust旨在为任何需要量子安全加密的问题提供安全、高效和易于使用的解决方案。

  • 无安全隐患
  • no_std兼容
  • 易于使用

enc_rust目前只支持ML-KEM作为唯一的机制,但将提供

  • ML-KEM与x25519混合
  • ML-DSA
  • ML-DSA与Ed25519混合

如何使用

安装

cargo添加enc_rust

或者

cargo添加 --githttps://github.com/supinie/enc_rust.

示例

use enc_rust::kem::*;

fn alice(pk: PublicKey) -> (Ciphertext, [u8; 32]) {
    let (ciphertext, shared_secret) = pk.encapsulate(None, None).unwrap();

    (ciphertext, shared_secret)
}

fn bob(sk: PrivateKey, ciphertext: &[u8]) -> [u8; 32] {
    let shared_secret = sk.decapsulate(ciphertext).unwrap();

    shared_secret
}


fn main() {
    let (pk, sk) = generate_keypair_768(None).unwrap();

    let (ciphertext, alice_secret) = alice(pk);

    let bob_secret = bob(sk, ciphertext.as_bytes());

    assert_eq!(alice_secret, bob_secret);
}

免责声明

此库和二进制包装器按原样提供,不提供任何保证。请在生产应用程序中使用此库时谨慎行事,我们不承担与使用此代码相关的任何安全问题的责任。


Kyber算法作者

  • Roberto Avanzi,ARM Limited(DE)
  • Joppe Bos,NXP Semiconductors(BE)
  • Léo Ducas,CWI Amsterdam(NL)
  • Eike Kiltz,Ruhr University Bochum(DE)
  • Tancrède Lepoint,SRI International(US)
  • Vadim Lyubashevsky,IBM Research Zurich(CH)
  • John M. Schanck,University of Waterloo(CA)
  • Peter Schwabe,MPI-SP(DE)& Radboud University(NL)
  • Gregor Seiler,IBM Research Zurich(CH)
  • Damien Stehle,ENS Lyon(FR)

依赖关系

~2.4–3.5MB
~54K SLoC