【问题标题】:Highest number of bytes taken from Rfc2898DeriveBytes class从 Rfc2898DeriveBytes 类中获取的最大字节数
【发布时间】:2014-07-19 04:53:12
【问题描述】:

我对 PBKDF2 及其处理步骤知之甚少。为了了解更多信息,我开始阅读它并查看代码。我在谷歌看到过这样的代码。对于 AES-128bit,N 的值为 16。我的问题是,对于随机使用,我可以将 N 的值增加多远?可以是50吗?还是100?有上限吗?

        string password = "123456789";
        string salt = "987654321";
        Rfc2898DeriveBytes keyGenerator = new Rfc2898DeriveBytes(password, Encoding .UTF8 .GetBytes (salt ),10000);
        byte[] key1 = keyGenerator.GetBytes(N);

【问题讨论】:

    标签: security cryptography pbkdf2


    【解决方案1】:

    根据RFC 2898,派生密钥的最大长度是(2^32 - 1) * hLen,其中 hLen 是 伪随机函数输出的字节长度。

    您在代码示例中引用的 .NET 框架中的Rfc2898DeriveBytes 类使用输出 20 个字节的 HMAC-SHA1 伪随机函数,因此在您的情况下 N 的最大理论值为 85899345900。

    【讨论】:

    • 奇怪!我使用此代码获取 AES-256bit 的 32 字节密钥,它对加密和解密都非常有用!但是你说的 20bytes.......那是怎么发生的!!!
    • 我希望其余的字节可能是零。
    • 由于Rfc2898DeriveBytes 类输出 20 字节,因此它适用于 AES-128 位。有没有为 AES-256bit 输出 32byte 的标准 KDF?
    • @Giliweed 20 字节长只是 HMAC-SHA1 伪随机函数的输出,用于 ​​PBKDF2 的内部实现。当您请求 PBKDF2 派生超过 20 个字节时,它会一次又一次地调用 HMAC-SHA1,直到请求的字节数可用。有关该算法的更多详细信息,请参阅 RFC 2898 或尝试自己实现它。您可以安全地使用 Rfc2898DeriveBytes 类来派生 256 位密钥。
    • 噢耶!我是多么愚蠢!它的价值 N 你说话 85899345900 !!!我只需要 32 个 .... 所以它肯定会工作! :) 对不起,我误解并问了那些愚蠢的问题。谢谢你把我带回地球。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多