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加密成功完成!共享密钥匹配。");
}

代码说明:

  1. 使用keypair()生成公钥/私钥对
  2. encapsulate()用公钥加密并生成共享密钥
  3. decapsulate()用私钥解密密文获取共享密钥
  4. 最后验证两个共享密钥是否一致

完整示例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位安全级别)

可以根据需要选择不同安全级别的实现。


1 回复

Rust后量子密码学库pqcrypto-hqc的使用指南

概述

pqcrypto-hqc是一个Rust实现的HQC(Hamming Quasi-Cyclic)抗量子加密算法库,属于后量子密码学(PQC)范畴。HQC是基于编码的密码系统,被选为NIST后量子密码标准化项目的第四轮候选算法之一。

安装

在Cargo.toml中添加依赖:

[dependencies]
pqcrypto-hqc = "0.4"
pqcrypto-traits = "0.3"

核心功能

  1. 密钥对生成
  2. 加密/解密操作
  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));
}

安全注意事项

  1. 密钥管理:确保私钥安全存储
  2. 随机数生成:库内部使用安全的随机数生成器
  3. 参数选择:当前实现使用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接口,开发者可以轻松集成后量子加密功能到现有系统中。

回到顶部