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

问题描述:

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

+1

160字节或160位?更好地检查。 – 2011-06-10 09:32:44

+0

让我检查RFC 4186上关于文档如何与1280位散列值一起出现的过程。 – powerbox 2011-06-10 09:53:26

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

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

好运:-)

+0

Yap这就是我正在寻找的,我没有任何密码学背景开始。 – powerbox 2011-06-10 13:12:10

+1

工作的最大部分将是SHA-1压缩功能。一个好的起点是这样的:http://www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/crypto/digests/Sha1Digest.cs?view=markup – 2011-06-10 17:20:38

+0

我已经读了很多关于这个压缩现在我正在寻找sha1添加一些填充之前的那部分,根据我的理解,我不应该使用上面讨论的相同散列来填充填充。 – powerbox 2011-06-10 21:15:26

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

在任何情况下,System.Security.Cryptography.RandomNumberGenerator都会为您快乐地填充任意长度的字节数组。密码工作被认为是安全的。

我修改找到的代码在SHA1 Source code

诀窍是垫与所述消息(512 - message.length在比特)SECURE HASH STANDARD

定义0代替填充

如果散列消息是在六列使用:

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

用于模和模运算我使用或g.BouncyCastle.Math.BigInteger