CryptoStudy密码学Yus Cipher - 全同态加密友好的流密码项目开发总结
Aurorp1gYus 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 ├── round_key.cpp ├── utils.cpp └── fhe_wrapper.cpp
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
| 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
| const std::vector<std::string> matrix_binary = { "110111111001001111011110110001110111", "111110101010110101101111111010011110", "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
| #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: 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
| 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
| 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
| 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); 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
| 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); }
|
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
注:本文基于实际项目代码和构建日志撰写,所有技术细节均来自真实实现。