首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHA3左、右编码函数

SHA3左、右编码函数
EN

Cryptography用户
提问于 2019-10-23 15:38:46
回答 2查看 570关注 0票数 1

本论文 (Pg.5第2.3.1节)中,我遇到了left_encoderight_encode函数,我对这些函数有一些疑问:

  1. 整数的base256编码是什么意思?
  2. x_1,x_2,\ldots,x_n是否都包含相同的字节,或者它们是否包含不同的字节?
  3. enc8是否有效地意味着小终端?
  4. 在连接enc8字节之后,它们是被转换回一个数字、二进制还是.?
EN

回答 2

Cryptography用户

回答已采纳

发布于 2019-10-23 18:41:36

  1. 整数的base256编码是什么意思?

它将整数x分解为字节,字节是8位,可以表示256个数字.这就是为什么实际上n被设置为满足2^{8n} > x的最小正整数。字节是小的-endian编码。

  1. x_1,x_2,\ldots, x_n是否都包含相同的字节,或者它们是否包含不同的字节?

不,x被分割成字节。

  1. enc8实际上是指大头吗?

字节没有小端码或大端码.在这里,它只是一个字节编码,但相反。第二步做小安迪安。最后,所有的位都被反转了。参见下面一个更大的例子。

  1. 在连接enc8字节之后,它们是被转换回一个数字、二进制还是.?

它是一个字节数组,通常在密码实现中,编程代码是用字节数组处理的。哈希函数的输出将被字节到。这取决于你转换成十六进制或base64。

来自cryptologie.net的一个很好的例子

left_encode:

代码语言:javascript
复制
            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 reverse

right_encode:

代码语言:javascript
复制
0001 0000 | 0011 0001 | 0111 1110               input
0111 1110 | 1000 1100 | 0000 1000               value reversed
0111 1110 | 1000 1100 | 0000 1000 | 1100 0000   length encoded
票数 2
EN

Cryptography用户

发布于 2019-11-22 23:39:18

SHA-3函数在任意位字符串上定义为输入,其长度(以位为单位)可能不是8的倍数。实现可以跳过对此的支持,并将自己限制为符合整齐字节数的序列,并且实际上通常选择这样做。

在连接enc8字节之后,它们是被转换回一个数字、二进制还是.?

不,尽管定义非常小心,您可以这样做,毫不矛盾。这个特殊的NIST SP定义了涉及连接多个输入的构造。例如,CSHAKE定义的第二个子句(用于非空N或非空S)是:

\mathrm{KECCAK}[256](\mathrm{bytepad}(\mathrm{encode\_string}(N) \| \mathrm{encode\_string}(S), 168) \| X \| 00, L)

这些定义中的关键问题之一是,产生的位字符串是不可矛盾的可解析的--您可以从任何位字符串和使用它的上下文的知识中,毫不矛盾地恢复XLNS的值。这并不是因为在连接这些值之后需要解析这些值,而是因为设计人员希望编码是一个内射函数-meaning,每个不同的输入组合都将编码到不同的位字符串。这样做的好处是,我们不必担心两个不同的输入组合会“碰撞”并产生相同的编码字符串。(请注意,如果攻击者能够找到这样的编码冲突,这将被算作派生函数的中断!)

整数的base256编码是什么意思?

同样的意思是整数的基-2、基-8、基-10或基-16编码,但基256除外。整数m由一个数字序列x_1, \dots, x_n表示,以便

m = 256^0 x_0 + 256^1 x_1 + 256^2 x_2 + \cdots + 256^n x_{n-1}

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实现会跳过对输入位字符串的支持吗?这里的所有业务都是为了满足这样的实现:

  • 整数重新编码成长度可被8整除的位字符串,这样面向字节的实现就不会被迫处理任意的位字符串;
  • 编码注意指定输入的每一个位的顺序,而面向字节的实现不会暴露任何这样的顺序。
票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/75269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档