我想编写一个程序,通过使用ANSI X9.31和AES 128位来生成随机数据,但是我只能用密码符号找到standart,但我不清楚。
I = ede *K(DT)
R = ede *K(I XOR V)
V = ede*K(R Xor I)您能解释一下算法是如何工作的吗?或者建议我使用任何文档来理解它,我试着从表示法中理解,但我无法理解。谢谢你的进阶。
发布于 2017-09-29 13:00:27
让我们详细介绍以下步骤:
I = ede*K(DT)K是一个长期的秘密密钥;这是一个随机值,它是X9.31的键;它是以某种方式被选中的(X9.31没有指定如何),随机数的安全性取决于它。因为您使用的是AES,所以这将是一个随机的128位值。
当它说' ede *K(X)‘时,X9.31的意思是’取值X,并通过块密码操作(在加密方向)发送它。X9.31称它为ede,因为它是按照3 DES编写的(这是通过在ede模式下执行3 DES操作完成的);对您来说,您只需用一个AES加密操作来替换它。
DT是当前的日期/时间(每次迭代都会更新);对于您来说,这将是一个128位值,您为如何表示当前时间而选择的格式并不重要。
结果被放置在一个临时位置(称为I)
R = ede*K(I XOR V)V是X9.31当前状态(也需要保密);对于您来说,这是一个128位值。
在这个步骤中,采用当前状态V (独占状态或使用我在前一步中生成的temp变量),通过AES发送。
R是X9.31生成此迭代的128位输出。
V = ede*K(R Xor I)在这里,您将在前两个步骤中生成的两个值,即独占值或它们一起,通过AES发送;这是您将用于下一次迭代的更新的X9.31状态。
而且,请记住,当您这样做时,R包含了您要求的128个随机位.
https://crypto.stackexchange.com/questions/51900
复制相似问题