qq_58982645 2024-04-24 23:45 采纳率: 14.3%
浏览 1

基于混合密码算法的随机数发生器

我做的基于混合密码(sm3和sm4)的随机数发生器,产生100组随机数,然后进行NIST性能测试,但不管我怎么弄,产生的随机数都不能保证通过NIST所有指标测试,求解答

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-24 23:45
    关注

    引自免费微信小程序:皆我百晓生

    为了帮助您解决基于SM3和SM4混合密码算法的随机数发生器在NIST测试中的问题,我们需要从以下几个方面入手:

    1. 理解NIST测试

      • NIST测试包括一系列的统计测试,如频率分析、差分熵、独立性和均匀性等。确保您的随机数生成器满足这些测试要求是关键。
    2. 实现混合密码算法

      • 确保正确实现了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;
    }
    
    1. 生成随机数序列
      • 使用上述混合函数生成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);
    }
    
    1. 执行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;
    }
    
    1. 优化与调试
      • 如果测试未通过,可能需要调整SM3和SM4的组合方式,增加更多的迭代,或者考虑使用其他随机数增强技术(如随机数池、Mersenne Twister等)。
      • 检查代码中是否存在潜在的数值溢出、数据混淆错误,以及是否正确处理了边界条件。

    请确保在实际开发过程中,根据实际情况调整代码,并参考相关的文档和教程来确保正确性和安全性。如果问题依然存在,可能需要进一步分析具体的测试结果,找出问题所在并针对性地进行改进。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月24日

悬赏问题

  • ¥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螺旋图像