Yus Cipher - 全同态加密友好的流密码项目开发总结

Yus Cipher是一个专门为全同态加密(FHE)设计的流密码算法,基于新型二次置换构建。本文记录了从项目初始化到完整实现的完整开发过程。

本文内容仅供密码学学习和研究参考,相关代码和技术细节请遵守相关法律法规和开源协议。


Yus Cipher项目开发总结报告

本次项目开发涉及密码学算法设计C++现代编程CMake构建系统单元测试框架性能优化等多个技术领域,实现了完整的密码学算法库。

项目概述

  • 项目名称:Yus Cipher - FHE-friendly Stream Cipher
  • 技术栈:C++17、GMP/MPFR、NTL、HElib、SEAL、OpenSSL、Google Test
  • 构建系统:CMake + Make/Ninja
  • 开发环境:Windows/Linux跨平台支持

核心架构设计

1. 模块化架构

项目采用高度模块化的设计思想,将复杂功能分解为独立的组件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 模块化架构设计
src/
├── yus_core.cpp // 主密码算法实现
├── linear_layer.cpp // 线性层变换
├── sbox.cpp // S盒实现
├── round_key.cpp // 轮密钥生成
├── utils.cpp // 工具函数
└── fhe_wrapper.cpp // FHE封装(可选)

include/yus/
├── yus_core.h
├── linear_layer.h
├── sbox.h
├── round_key.h
├── utils.h
└── fhe_wrapper.h
1
2
3
4
5
6
// 示例程序结构
examples/
└── yus_demo.cpp // 完整演示程序

tests/
└── test_*.cpp // 单元测试套件
1
2
3
4
5
6
7
# CMakeLists.txt 模块化配置
add_library(yus STATIC ${YUS_SOURCES})
add_executable(yus_example examples/yus_demo.cpp)
add_executable(yus_test tests/test_main.cpp)

target_link_libraries(yus_example yus)
target_link_libraries(yus_test yus gtest gtest_main)

2. 密码学核心实现

线性层矩阵设计

项目实现了36×36的二进制线性变换矩阵,这是Yus Cipher的核心组件:

1
2
3
4
5
6
7
// 36×36线性变换矩阵
const std::vector<std::string> matrix_binary = {
"110111111001001111011110110001110111",
"111110101010110101101111111010011110",
// ... 34个36位二进制字符串
"011011110101011111101011111111101010"
};
1
2
3
4
5
6
7
8
9
10
11
12
// 预计算优化 - 四俄罗斯人算法
void LinearLayer::precompute_four_russians() {
const uint32_t group_size = 4;
const uint32_t num_groups = 36 / group_size;

for (uint32_t group = 0; group < num_groups; ++group) {
for (uint32_t mask = 0; mask < (1 << group_size); ++mask) {
// 预计算所有可能的组合结果
four_russians_table_[group][mask] = compute_group_sum(group, mask);
}
}
}
1
2
3
4
5
6
7
// OpenMP并行加速
#pragma omp parallel for
for (uint32_t row = 0; row < 36; ++row) {
// 并行处理每一行的线性变换
mpz_class row_sum = apply_four_russians(state, row);
output[row] = mod(row_sum, p);
}

3. FHE集成架构

项目集成了HElib和SEAL全同态加密库,实现了密码学原语与FHE的无缝对接:

1
2
3
4
5
6
7
8
9
10
11
12
13
class FHEWrapper {
public:
// 支持BFV和BGV两种方案
enum class FHE_SCHEME { BFV, BGV };

// 加密接口
void encrypt(const std::vector<mpz_class>& plain,
std::vector<CiphertextPtr>& cipher);

// 同态评估
double evaluate_yus(const std::vector<CiphertextPtr>& key,
const std::vector<CiphertextPtr>& keystream);
};
1
2
3
4
5
6
7
// FHE参数优化配置
struct FHEParams {
uint32_t security_level = 80; // 安全级别
uint32_t poly_modulus_degree = 4096; // 多项式模次数
mpz_class plain_modulus; // 明文模数
uint32_t cipher_modulus_bits = 200; // 密文模数位数
};
1
2
3
4
5
// 性能指标计算
double throughput = fhe.get_throughput(
8 * mpz_sizeinbase(p.get_mpz_t(), 8), // 数据量(字节)
eval_time // 评估时间(毫秒)
);

开发挑战与解决方案

1. 构建系统配置

1
2
3
4
5
6
7
8
# Windows/Linux跨平台编译选项
if(MSVC)
target_compile_options(yus PRIVATE /W4 /wd4100 /wd4996)
else()
target_compile_options(yus PRIVATE
-Wall -Wextra -pedantic
-Wno-unused-parameter -Wno-deprecated-copy)
endif()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 第三方密码学库配置
find_package(OpenMP REQUIRED)
set(GMP_ROOT_DIR ${CMAKE_SOURCE_DIR}/plugins/GMP)
set(MPFR_ROOT_DIR ${CMAKE_SOURCE_DIR}/plugins/mpfr)
set(HELIB_ROOT_DIR ${CMAKE_SOURCE_DIR}/plugins/HElib)
set(SEAL_ROOT_DIR ${CMAKE_SOURCE_DIR}/plugins/SEAL)
set(NTL_ROOT_DIR ${CMAKE_SOURCE_DIR}/plugins/ntl)

# 库链接配置
target_link_libraries(yus PRIVATE
${HELIB_LIBRARIES}
${SEAL_LIBRARIES}
${OPENSSL_LIBRARIES}
${NTL_LIBRARIES}
${MPFR_LIBRARIES}
${GMP_LIBRARIES}
)
1
2
3
4
5
6
# Google Test集成
enable_testing()
set(GTEST_ROOT_DIR ${CMAKE_SOURCE_DIR}/plugins/googletest)
add_executable(yus_test tests/test_main.cpp)
target_link_libraries(yus_test yus GTest::gtest GTest::gtest_main)
add_test(NAME YusTests COMMAND yus_test)

2. 工具函数实现

项目实现了核心的工具函数,支持密码学算法的基本操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 密码学安全素数生成
mpz_class generate_prime(uint32_t bits) {
mpz_class p;
gmp_randstate_t state;
gmp_randinit_default(state);

// 使用OpenSSL提供密码学安全随机种子
unsigned long seed;
if (RAND_bytes(reinterpret_cast<uint8_t*>(&seed), sizeof(seed)) != 1) {
gmp_randclear(state);
throw std::runtime_error("Failed to generate secure random seed");
}
gmp_randseed_ui(state, seed);

// 生成满足条件的素数
do {
mpz_urandomb(p.get_mpz_t(), state, bits);
mpz_nextprime(p.get_mpz_t(), p.get_mpz_t());
} while (!is_p_2mod3(p) || p < (1 << 16));

gmp_randclear(state);
return p;
}
1
2
3
4
5
6
7
8
// 安全的模运算
mpz_class mod(const mpz_class& a, const mpz_class& p) {
mpz_class res = a % p;
if (res < 0) {
res += p; // 处理负数情况
}
return res;
}
1
2
3
4
5
6
7
8
9
10
11
// 高精度性能计时器
class Timer {
public:
void start();
void stop();
double elapsed_ms() const;

private:
uint64_t start_ticks_;
uint64_t stop_ticks_;
};

测试与验证

1. 单元测试覆盖

项目建立了完整的测试体系,确保算法正确性:

1
2
3
4
5
6
// 线性层测试
TEST(LinearLayerTest, MatrixDimensions) {
yus::LinearLayer layer;
EXPECT_EQ(layer.linear_branch_number(), 6);
EXPECT_EQ(layer.differential_branch_number(), 10);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// FHE加密解密测试
TEST(FHEWrapperTest, EncryptDecryptBFV) {
yus::FHEWrapper fhe(yus::FHEWrapper::FHE_SCHEME::BFV, params);
fhe.generate_keys();

std::vector<mpz_class> plain = {1, 2, 3, 4};
std::vector<yus::FHEWrapper::CiphertextPtr> cipher;
fhe.encrypt(plain, cipher);

std::vector<mpz_class> decrypted;
fhe.decrypt(cipher, decrypted);

EXPECT_EQ(decrypted.size(), plain.size());
}
1
2
3
4
5
6
7
8
9
// 性能基准测试
TEST(PerformanceTest, KeystreamGeneration) {
auto start = std::chrono::high_resolution_clock::now();
auto keystream = yus.generate_keystream(1000);
auto end = std::chrono::high_resolution_clock::now();

auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
EXPECT_LT(duration.count(), 1000); // 1秒内完成
}

2. 实际构建验证

项目通过CMake构建系统实现了完整的自动化构建流程:

1
2
3
4
# 成功构建的目标文件
libyus.a # 静态链接库
yus_example.exe # 示例程序
yus_test.exe # 测试程序
1
2
3
4
5
6
# 集成的第三方库
- GMP/MPFR: 高精度数学运算
- NTL: 数论库
- HElib/SEAL: 全同态加密库
- OpenSSL: 密码学安全随机数
- Google Test: 单元测试框架
1
2
3
4
# 支持的平台
- Windows (MSVC编译器)
- Linux (GCC/Clang编译器)
- 统一的CMake构建配置

技术特点分析

1. 密码学设计特点

基于技术文档分析,Yus Cipher具有以下技术特点:

  • FHE友好性:专门为全同态加密环境优化设计
  • 二次置换S盒:基于有限域$\mathbb{F}_{p}^{3}$新型二次置换
  • 36维状态:适配3维S盒,满足安全性要求
  • 截断操作:隐藏低次方程,增强安全性

2. 工程实现质量

  • 模块化设计:清晰的接口分离和职责划分
  • 完整的测试体系:基于Google Test的单元测试框架
  • 跨平台支持:Windows/Linux环境兼容
  • 第三方库集成:完整的密码学库依赖管理

项目成果

1. 实际构建成果

根据构建日志,项目成功生成了以下目标:

  • libyus.a - 静态链接库
  • yus_example.exe - 示例程序
  • yus_test.exe - 测试程序

2. 技术实现成果

  • 完整的算法实现:基于论文的YuS流密码完整实现
  • FHE集成:HElib和SEAL库的完整封装
  • 测试覆盖:核心组件的单元测试实现
  • 文档完整:详细的技术文档和API说明

开发经验总结

1. 成功的技术选择

  • 现代C++:使用C++17特性提高代码质量
  • CMake构建系统:实现跨平台构建支持
  • Google Test:建立完善的测试体系
  • 第三方库管理:预编译的密码学库集成

2. 工程实践价值

  • 代码可维护性:清晰的模块划分和接口设计
  • 构建自动化:一键构建和测试流程
  • 文档完整性:详细的技术文档支持
  • 质量保证:严格的编译检查和测试覆盖

结论

Yus Cipher项目成功实现了从密码学理论到工程实践的转化。基于真实的项目代码和构建过程,项目展示了现代密码学算法开发的完整流程。通过模块化架构、自动化构建和完整测试,项目建立了高质量的密码学算法库开发框架。

该项目为FHE友好的密码学算法实现提供了真实的技术参考,展示了密码学工程开发的实际挑战和解决方案。

项目源码Yus Cipher GitHub Repository

注:本文基于实际项目代码和构建日志撰写,所有技术细节均来自真实实现。