C# 中 HashCode 的随机种子可以被认为是密码随机的吗?

Can the random seed of HashCode in C# be considered cryptographically random?

HashCodedocumentation 提到使用 'random seed' 即 'only deterministic within the scope of an operating system process'。

我的问题是:

一起来看看吧。 HashCode is here 的来源。我们可以看到这一行:

private static readonly uint s_seed = GenerateGlobalSeed();

那么让我们来看看GenerateGlobalSeed:

private static unsafe uint GenerateGlobalSeed()
{
    uint result;
    Interop.GetRandomBytes((byte*)&result, sizeof(uint));
    return result;
}

好的,Interop.GetRandomBytes

Sys.GetNonCryptographicallySecureRandomBytes(buffer, length);

相当大 give-away 那里:NonCryptographicallySecureRandomBytes。这不是加密源。

如果我们进一步观察 the implementation,我们可以看到它使用 arc4random_buflrand48,这肯定不是加密的。

即使种子是加密的,请注意它在整个过程中都是不变的。根据您要防范的攻击类型,弄清楚它是什么并不难。