Rust后量子密码学库pqcrypto-hqc的使用,支持HQC抗量子加密算法的安全实现
Rust后量子密码学库pqcrypto-hqc的使用,支持HQC抗量子加密算法的安全实现
概述
该crate包含对以下方案的C实现绑定,来自PQClean项目。该项目打包参与NIST PQC标准化工作的后量子密码算法,目前是围绕PQClean项目中C实现的包装器集合。
序列化支持
如果需要serde
支持,请启用serialization
功能。
包含的PQClean实现
下面是包含的方案列表及对应的实现:
hqc-128
clean
实现
hqc-192
clean
实现
hqc-256
clean
实现
许可证
本项目中的包装器和包装器生成脚本涵盖MIT或Apache 2.0许可证,由您选择。但是我们链接的实现不在此范围内。请参阅PQClean项目了解适当的许可证。
安装
在项目目录中运行以下Cargo命令:
cargo add pqcrypto-hqc
或在Cargo.toml中添加以下行:
pqcrypto-hqc = "0.2.1"
完整示例代码
以下是使用pqcrypto-hqc库进行HQC加密的完整示例:
use pqcrypto_hqc::hqc128::*;
use pqcrypto_traits::kem::*;
fn main() {
// 生成密钥对
let (pk, sk) = keypair();
// 加密 - 生成密文和共享密钥
let (ct, ss1) = encapsulate(&pk);
// 解密 - 从密文中获取共享密钥
let ss2 = decapsulate(&ct, &sk);
// 验证两个共享密钥是否相同
assert_eq!(ss1, ss2);
println!("HQC加密成功完成!共享密钥匹配。");
}
代码说明:
- 使用
keypair()
生成公钥/私钥对 encapsulate()
用公钥加密并生成共享密钥decapsulate()
用私钥解密密文获取共享密钥- 最后验证两个共享密钥是否一致
完整示例demo
以下是一个更完整的HQC加密示例,展示了不同安全级别的使用方式:
use pqcrypto_hqc::{hqc128::*, hqc192::*, hqc256::*};
use pqcrypto_traits::kem::*;
fn main() {
// 示例1: 使用HQC-128
println!("--- HQC-128 示例 ---");
hqc128_example();
// 示例2: 使用HQC-192
println!("\n--- HQC-192 示例 ---");
hqc192_example();
// 示例3: 使用HQC-256
println!("\n--- HQC-256 示例 ---");
hqc256_example();
}
fn hqc128_example() {
// 生成密钥对
let (pk, sk) = keypair();
println!("生成HQC-128密钥对成功");
// 加密
let (ct, ss1) = encapsulate(&pk);
println!("生成HQC-128密文和共享密钥");
// 解密
let ss2 = decapsulate(&ct, &sk);
println!("解密HQC-128密文成功");
// 验证
assert_eq!(ss1, ss2);
println!("HQC-128验证成功: 共享密钥匹配");
}
fn hqc192_example() {
// 使用HQC-192模块
let (pk, sk) = pqcrypto_hqc::hqc192::keypair();
let (ct, ss1) = pqcrypto_hqc::hqc192::encapsulate(&pk);
let ss2 = pqcrypto_hqc::hqc192::decapsulate(&ct, &sk);
assert_eq!(ss1, ss2);
println!("HQC-192验证成功: 共享密钥匹配");
}
fn hqc256_example() {
// 使用HQC-256模块
let (pk, sk) = pqcrypto_hqc::hqc256::keypair();
let (ct, ss1) = pqcrypto_hqc::hqc256::encapsulate(&pk);
let ss2 = pqcrypto_hqc::hqc256::decapsulate(&ct, &sk);
assert_eq!(ss1, ss2);
println!("HQC-256验证成功: 共享密钥匹配");
}
可用功能
该库提供以下HQC算法实现:
- hqc-128 (128位安全级别)
- hqc-192 (192位安全级别)
- hqc-256 (256位安全级别)
可以根据需要选择不同安全级别的实现。
Rust后量子密码学库pqcrypto-hqc的使用指南
概述
pqcrypto-hqc是一个Rust实现的HQC(Hamming Quasi-Cyclic)抗量子加密算法库,属于后量子密码学(PQC)范畴。HQC是基于编码的密码系统,被选为NIST后量子密码标准化项目的第四轮候选算法之一。
安装
在Cargo.toml中添加依赖:
[dependencies]
pqcrypto-hqc = "0.4"
pqcrypto-traits = "0.3"
核心功能
- 密钥对生成
- 加密/解密操作
- KEM(密钥封装机制)
基本使用方法
密钥生成
use pqcrypto_hqc::hqc128::*;
use pqcrypto_traits::kem::{PublicKey, SecretKey};
fn main() {
// 生成密钥对
let (public_key, secret_key) = keypair();
println!("Public key: {:?}", public_key.as_bytes());
println!("Secret key: {:?}", secret_key.as_bytes());
}
加密与解密
use pqcrypto_hqc::hqc128::*;
use pqcrypto_traits::kem::{PublicKey, SecretKey, Ciphertext, SharedSecret};
fn encrypt_decrypt() {
// 生成密钥对
let (pk, sk) = keypair();
// 加密(封装共享密钥)
let (ciphertext, shared_secret_enc) = encapsulate(&pk);
// 解密(解封共享密钥)
let shared_secret_dec = decapsulate(&ciphertext, &sk);
assert_eq!(shared_secret_enc.as_bytes(), shared_secret_dec.as_bytes());
println!("Encryption/decryption successful!");
}
直接加密数据
use pqcrypto_hqc::hqc128::*;
use pqcrypto_traits::kem::{PublicKey, SecretKey};
fn encrypt_data() {
let (pk, sk) = keypair();
let message = b"Hello, post-quantum world!";
// 加密
let ciphertext = encrypt(&pk, message).unwrap();
// 解密
let decrypted = decrypt(&sk, &ciphertext).unwrap();
assert_eq!(message, &decrypted[..]);
println!("Decrypted message: {:?}", String::from_utf8_lossy(&decrypted));
}
安全注意事项
- 密钥管理:确保私钥安全存储
- 随机数生成:库内部使用安全的随机数生成器
- 参数选择:当前实现使用hqc128参数集,提供128位量子安全性
性能考虑
HQC算法相比传统加密算法会有更高的计算开销,建议:
- 对性能敏感场景进行基准测试
- 考虑混合加密方案(如HQC加密对称密钥)
示例:完整KEM流程
use pqcrypto_hqc::hqc128::*;
use pqcrypto_traits::kem::{PublicKey, SecretKey, Ciphertext, SharedSecret};
fn kem_example() {
// 1. 接收方生成密钥对
let (pk, sk) = keypair();
// 2. 发送方封装共享密钥
let (ct, ss1) = encapsulate(&pk);
// 3. 接收方解封共享密钥
let ss2 = decapsulate(&ct, &sk);
// 4. 双方现在有相同的共享密钥
assert_eq!(ss1.as_bytes(), ss2.as_bytes());
println!("KEM completed successfully. Shared secret: {:?}", ss1.as_bytes());
}
可用参数集
pqcrypto-hqc提供不同安全级别的参数:
- hqc128 (128位量子安全性)
- hqc192 (192位量子安全性)
- hqc256 (256位量子安全性)
使用方法相同,只需替换模块路径即可,例如:
use pqcrypto_hqc::hqc256::*;
完整示例demo
下面是一个完整的HQC加密解密示例,展示了密钥生成、加密、解密的全过程:
use pqcrypto_hqc::hqc128::*;
use pqcrypto_traits::kem::{PublicKey, SecretKey};
fn main() {
// 1. 密钥生成
println!("Generating key pair...");
let (public_key, secret_key) = keypair();
println!("Public key generated ({} bytes)", public_key.as_bytes().len());
println!("Secret key generated ({} bytes)", secret_key.as_bytes().len());
// 2. 准备要加密的消息
let message = b"This is a secret message that needs post-quantum protection!";
println!("\nOriginal message: {}", String::from_utf8_lossy(message));
// 3. 加密消息
println!("\nEncrypting message...");
let ciphertext = encrypt(&public_key, message).expect("Encryption failed");
println!("Message encrypted to ciphertext ({} bytes)", ciphertext.len());
// 4. 解密消息
println!("\nDecrypting message...");
let decrypted = decrypt(&secret_key, &ciphertext).expect("Decryption failed");
println!("Decrypted message: {}", String::from_utf8_lossy(&decrypted));
// 5. 验证解密结果
assert_eq!(message, &decrypted[..]);
println!("\nDecryption successful! Original and decrypted messages match.");
}
结论
pqcrypto-hqc为Rust开发者提供了方便的HQC抗量子加密算法实现,适用于需要防范量子计算威胁的安全场景。通过简单的API接口,开发者可以轻松集成后量子加密功能到现有系统中。