【问题标题】:What entropy sources are available on Windows?Windows 上有哪些熵源?
【发布时间】:2011-02-10 09:51:36
【问题描述】:

我想在 Windows 上生成一个随机加密密钥。我在哪里可以获得熵?

我希望我的熵函数能够在没有网络连接的情况下工作,并且在 Windows 2000 及更高版本上可靠。即使可能提供或不提供少量熵的源也可能有用,因为所有源都将被合并。

这是我最初的函数列表:

GetCurrentProcessID, GetCurrentThreadID, GetTickCount, GetLocalTime, QueryPerformanceCounter, GlobalMemoryStatus, GetDiskFreeSpace, GetComputerName, GetUserName, GetCursorPos, GetMessageTime, GetSystemInfo, CryptGenRandom, GetProcessHandleCount, GetProcessMemoryInfo.

【问题讨论】:

  • 你为什么要列出 CryptGenRandom,什么时候,嗯,你想要什么?
  • 我不确定它是否适用于所有计算机和 Windows 版本。你是说我绝对应该使用那个功能吗?我应该按照它的建议为其提供熵吗?
  • 适用于所有版本的 Windows。检查您链接到自己的documentation。支持的最低版本是 Windows 2000,正是您声明的要求。
  • @Martinho 和@Cody:我刚刚阅读了Wikipedia page about CryptGenRandom,它说它在Windows 2000 上的安全性不是很好。我将使用它作为主要的,但不是我的密钥的唯一随机来源。

标签: windows winapi random cryptography entropy


【解决方案1】:

尽管 CryptGenRandom 函数 may contain weaknesses 的早期版本遵循安全标准(请参阅 CrypGenRandom 页面上的备注。)

弱于just use time as your seedWhat is the most secure seed for random number generation? 下有一个答案,它解释了不可预测的随机种子可能只需要 128 位即可产生安全的 PRNG。因此,可能没有必要找到比问题中列出的更多的源,并且通常 CryptGenRandom 函数已经包含并为其自身生成足够的熵,调用者不需要执行任何这些操作。

CryptGenRandom 和必须在它之前的函数CryptAcquireContext 可以是called from Delphi like this.

【讨论】:

    【解决方案2】:

    如果它是一个选项,您可以要求用户移动鼠标指针一段时间。

    【讨论】:

      【解决方案3】:

      大多数机器唯一的外部来源是Mic In/Line In,调用waveInOpen+waveInPrepareHeader+waveInAddBuffer+waveInStart。这可能取决于硬件的随机性......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        相关资源
        最近更新 更多