基于FIPS 186-2的伪随机数发生器

时间:2011-06-10 09:19:46

标签: c# .net cryptography encryption

大家好我需要根据给定的密钥在.net中生成基于FIPS 186-2的随机数(160字节)(讨论可以在RFC 4186 eap-sim实现中找到)。我所知道的是,FIPS 186-2在.net上实现为DSA,它将提供40字节的签名字节而不是160.有人能告诉我我做错了什么吗?

3 个答案:

答案 0 :(得分:2)

您需要在RFC 4186的附录B中实现该算法(或者替代FIPS 186-2的附录3)。 .NET框架中没有实现它。由于此情况下的算法用于密钥派生,因此不能将其替换为另一个随机数生成器。

在此过程中,您还需要重新实现大部分SHA-1,因为所需的G函数是SHA-1的压缩函数,无法从公共接口访问.NET框架。

祝你好运: - )

答案 1 :(得分:1)

不是我的区域,但我认为FIPS 186使用160 键和盐(或种子)。那只有20个字节。

在任何情况下,System.Security.Cryptography.RandomNumberGenerator都会很乐意为您填充任意长度的字节数组。它对于加密工作来说是安全的。

答案 2 :(得分:0)

我修改了SHA1 Source code

中的代码

技巧是填充消息(512 - message.length in bits)0而不是SECURE HASH STANDARD中定义的填充

如果要散列的消息是使用hexa字符串:

message = message.PadRight((512/4),'0');

对于模数和指数运算,我使用的是Org.BouncyCastle.Math.BigInteger