我做的基于混合密码(sm3和sm4)的随机数发生器,产生100组随机数,然后进行NIST性能测试,但不管我怎么弄,产生的随机数都不能保证通过NIST所有指标测试,求解答
5条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
为了帮助您解决基于SM3和SM4混合密码算法的随机数发生器在NIST测试中的问题,我们需要从以下几个方面入手:
-
理解NIST测试:
- NIST测试包括一系列的统计测试,如频率分析、差分熵、独立性和均匀性等。确保您的随机数生成器满足这些测试要求是关键。
-
实现混合密码算法:
- 确保正确实现了SM3和SM4的加密过程,特别是SM3的散列函数和SM4的块加密算法。对于SM3,可能需要使用其输出作为输入到SM4,形成一个迭代的过程。
// 示例代码片段(简化版) #include "sm3.h" // 假设这是SM3的库 #include "sm4.h" // 假设这是SM4的库 std::vector<uint8_t> sm3_sm4_rng(size_t num_bytes) { std::vector<uint8_t> output(num_bytes, 0); for (size_t i = 0; i < num_bytes; i += SM3_BLOCK_SIZE) { if (i > 0) { sm4_encrypt(output.data(), output.data() + i, output.data() + i - SM3_BLOCK_SIZE, key); // 使用SM4 } sm3_hash(output.data() + i, output.data() + i + SM3_BLOCK_SIZE); // 使用SM3 } return output; }
- 生成随机数序列:
- 使用上述混合函数生成100组随机数,并确保每次生成的数据量足够大,以便涵盖各种NIST测试。
std::vector<std::vector<uint8_t>> random_sequences(100); for (size_t i = 0; i < 100; ++i) { random_sequences[i] = sm3_sm4_rng(SIZE_OF_YOUR_CHOICE); }
- 执行NIST测试:
- 使用NIST提供的测试工具或第三方库(如Dieharder、TestU01等)对生成的随机数序列进行评估。
#include "nist_test_library.h" // 假设这是NIST测试库 bool passed_all_tests = true; for (const auto& sequence : random_sequences) { passed_all_tests &= nist_test_suite(sequence).run_all_tests(); } if (!passed_all_tests) { std::cout << "Random number generator failed some NIST tests." << std::endl; }
- 优化与调试:
- 如果测试未通过,可能需要调整SM3和SM4的组合方式,增加更多的迭代,或者考虑使用其他随机数增强技术(如随机数池、Mersenne Twister等)。
- 检查代码中是否存在潜在的数值溢出、数据混淆错误,以及是否正确处理了边界条件。
请确保在实际开发过程中,根据实际情况调整代码,并参考相关的文档和教程来确保正确性和安全性。如果问题依然存在,可能需要进一步分析具体的测试结果,找出问题所在并针对性地进行改进。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥30 设计一个图形用户界面来控制你机械臂的运动
- ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
- ¥15 RPG游戏架构设计和开发方法
- ¥30 为什么会失败呢,该如何调整
- ¥15 前端返回pdf时不显示内容
- ¥50 如何在不能联网影子模式下的电脑解决usb锁
- ¥20 服务器redhat5.8网络问题
- ¥15 如何利用c++ MFC绘制复杂网络多层图
- ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
- ¥15 python螺旋图像