首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化固定输入前缀的SHA-256实现

优化固定输入前缀的SHA-256实现
EN

Cryptography用户
提问于 2021-02-15 19:28:12
回答 1查看 267关注 0票数 3

如果输入以固定值开始,是否可以优化/预先计算SHA-256中的某些结果?我的输入总是1111||message。我可以在SHA-256中预先计算1111以节省一些周期吗?

EN

回答 1

Cryptography用户

发布于 2021-02-15 19:34:21

但是,不能完全预先计算1111,但是可以完全预先计算长度倍数为512的消息。原因很简单,SHA-256每次压缩使用512位消息块,即SHA-256的压缩功能使用512位消息输入和256位先前的哈希值。

C:\{0,1\}^{256}\times \{0,1\}^{512} \to \{0,1\}^{256}

H_i= C(H_{i-1},m_i)中,每个m_i都有512个位长,H_0IV.

每条评论下面

老实说,我的输入是32字节的1,x,32-Byte X,32-Byte Y,我要用X预先计算什么不是常数?

32-字节产生256位,因此你不能完全预先计算一个压缩.然而,您仍然可以预先计算一些轮的压缩函数,它可以帮助;

SHA-256使用64轮分组密码,每轮使用消息作为密钥,您可以计算下一次压缩调用的8轮。所述圆W_i的键i由所述块的消息词M_t形成;

W_i = \begin{cases}M_t^{(i)} & 0 \leq t \leq 15 \\ \sigma_0^{256} W_{t-2} + W_{t-7} + \sigma_1^{256}W_{t-15} + W_{t-16} & 16 \leq t \leq 63 \end{cases}

使用32字节,您只能预计算8轮压缩函数.Y没有这样的选项,因为在开始循环时,需要前面压缩函数中的前一个散列值。

使用11..11作为完整块

有一种方法,虽然并不有效,但可以计算H'=C(H_0,11..11)。这需要填充物。现在可以使用此H'作为\operatorname{SHA256'}IV;即

H_i= C(H_{i-1},m_i)中,每个m_i都有512位长,而H_0H',那么您的真正消息将变成

11..11 \mathbin\| padding_1 \mathbin\| X \mathbin\| Y \mathbin\| padding_2
票数 5
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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