代码之家  ›  专栏  ›  技术社区  ›  c00000fd

RtlGenRandom/CryptGenRandom或其他WinAPI生成加密安全随机数(2018年第一季度)[已关闭]

  •  1
  • c00000fd  · 技术社区  · 8 年前

    我发誓,每次我查看MSDN文档时,这似乎都在改变。当我编写可执行文件时,微软建议使用 RtlGenRandom API生成加密强随机数。

    现在,当我检查RtlGenRandom的文档时,这里的注释建议使用 CryptGenRandom 相反但CryptGenRandom的另一个注释指出:

    重要提示:此API已弃用。新软件和现有软件应 开始使用 Cryptography Next Generation APIs . Microsoft可能会删除 此API将在将来的版本中发布。

    那么,有人能用C语言举例说明如何使用这些工具吗?” 加密新一代API “要生成Microsoft现在推荐的随机数字节数组?

    1 回复  |  直到 8 年前
        1
  •  7
  •   Anders    8 年前

    这并不重要,在Windows XP和更高版本上,默认提供程序最终会调用相同的函数。2000年和未修补XP上的RNG主要在内部使用SHA1+RC4,它有一些 security issues .

    我刚刚在Windows 8上做了一些实验,我发现:

    • RtlGenRandom (又名 advapi32!SystemFunction036 )呼叫 CRYPTBASE!SystemFunction036 &燃气轮机&燃气轮机&燃气轮机; bcryptPrimitives!ProcessPrng &燃气轮机&燃气轮机&燃气轮机; bcryptPrimitives!AesRNG* .
    • CryptGenRandom 电话 CRYPTSP!CryptGenRandom &燃气轮机&燃气轮机&燃气轮机; %provider%!CPGenRandom &燃气轮机&燃气轮机&燃气轮机; CRYPTBASE!系统功能036 . %provider% 在我的测试中是rsaenh还是dssenh,但如果您特别要求第三方提供商,则可能是不同的实现。
    • BCryptGenRandom 电话 bcryptPrimitives!MSCryptGenRandom &燃气轮机&燃气轮机&燃气轮机; bcryptPrimitives!GenRandomAes &燃气轮机&燃气轮机&燃气轮机; bcryptPrimitives!AesRNG公司* 使用 BCRYPT_RNG_ALGORITHM CNG算法标识符( BCRYPT_RNG_DUAL_EC_ALGORITHM 结束于 bcryptPrimitives!GenRandomDualEcc 而是)。

    这当然是可能会改变的未记录的实现细节,但我真的认为您不需要担心选择哪个函数。如果您的目标是Vista+,则可以使用BCrypt。 加密随机 不会被删除,它会破坏太多的应用程序,如果您支持,则应选择它<远景