在本论文 (Pg.5第2.3.1节)中,我遇到了left_encode和right_encode函数,我对这些函数有一些疑问:
base256编码是什么意思?enc8是否有效地意味着小终端?enc8字节之后,它们是被转换回一个数字、二进制还是.?发布于 2019-10-23 18:41:36
它将整数x分解为字节,字节是8位,可以表示256个数字.这就是为什么实际上n被设置为满足2^{8n} > x的最小正整数。字节是小的-endian编码。
不,x被分割成字节。
字节没有小端码或大端码.在这里,它只是一个字节编码,但相反。第二步做小安迪安。最后,所有的位都被反转了。参见下面一个更大的例子。
它是一个字节数组,通常在密码实现中,编程代码是用字节数组处理的。哈希函数的输出将被字节到。这取决于你转换成十六进制或base64。
来自cryptologie.net的一个很好的例子
0001 0000 | 0011 0001 | 0111 1110 input
0111 1110 | 1000 1100 | 0000 1000 value reversed
1100 0000 | 0111 1110 | 1000 1100 | 0000 1000 length encoded. the size 3 in reverse0001 0000 | 0011 0001 | 0111 1110 input
0111 1110 | 1000 1100 | 0000 1000 value reversed
0111 1110 | 1000 1100 | 0000 1000 | 1100 0000 length encoded发布于 2019-11-22 23:39:18
SHA-3函数在任意位字符串上定义为输入,其长度(以位为单位)可能不是8的倍数。实现可以跳过对此的支持,并将自己限制为符合整齐字节数的序列,并且实际上通常选择这样做。
在连接enc8字节之后,它们是被转换回一个数字、二进制还是.?
不,尽管定义非常小心,您可以这样做,毫不矛盾。这个特殊的NIST SP定义了涉及连接多个输入的构造。例如,CSHAKE定义的第二个子句(用于非空N或非空S)是:
这些定义中的关键问题之一是,产生的位字符串是不可矛盾的可解析的--您可以从任何位字符串和使用它的上下文的知识中,毫不矛盾地恢复X、L、N和S的值。这并不是因为在连接这些值之后需要解析这些值,而是因为设计人员希望编码是一个内射函数-meaning,每个不同的输入组合都将编码到不同的位字符串。这样做的好处是,我们不必担心两个不同的输入组合会“碰撞”并产生相同的编码字符串。(请注意,如果攻击者能够找到这样的编码冲突,这将被算作派生函数的中断!)
整数的base256编码是什么意思?
同样的意思是整数的基-2、基-8、基-10或基-16编码,但基256除外。整数m由一个数字序列x_1, \dots, x_n表示,以便
x_1, x_2, \dots, x_n是否都包含相同的字节,或者它们是否包含不同的字节?
x_i's不是字节,它们是大本营--抽象地说是256位数字。当然,这些数字是一对一的关系字节,但定义并不假定数字的任何具体表示形式--不管它们是如何表示的,enc_8函数将把它们编码成位字符串。
enc8是否有效地意味着小终端?
Kelakala在定义endianness是关于字节顺序的基础上,用"no“来回答这个问题。这不是一个不合理的观点,但我认为重要的是,SHA-3是在任意位串上定义的,而enc8的定义是确保基-256位被编码成8位位串,其中先有较小的重要位数,这与小的endianness相同,除了在位上而不是字节上。
还记得我前面说过很多SHA-3实现会跳过对输入位字符串的支持吗?这里的所有业务都是为了满足这样的实现:
https://crypto.stackexchange.com/questions/75269
复制相似问题