【发布时间】:2021-12-30 06:23:06
【问题描述】:
我目前正在研究低内存嵌入式系统的固件更新机制。
部分系统要求在发送文件之前对二进制文件进行哈希处理(使用 SHA-256)(添加了其他安全功能,但不影响此问题)。设备必须在验证此哈希之前对其进行验证,但内存非常低。它将以小块的形式接收数据,我想知道是否可以“即时”计算部分哈希,以避免在完全传输后再次加载整个二进制文件。
例如,假设要散列的数据是“part1part2part3”。完整数据的哈希为“hash”,“part1”的哈希为“hash1”,“part2”的哈希为“hash2”,“part3”的哈希为“hash3”。
我可以做任何数学运算来将部分散列转换为完整散列吗?类似的东西
hashReceived = hash
tempHash = operation(hash1,hash2)
tempHash = operation(tempHash, hash3)
if(hashReceived == tempHash)
... continue
else
... fail
我正在寻找 SHA-256 的数学属性(类似于分配属性),它可以在不破坏任何 SHA-256 属性的情况下允许此类行为。
【问题讨论】:
-
是的,这是可能的,至少在原则上是这样。 SHA 哈希是按顺序计算的,因此只要保留计算的状态,您就应该能够根据需要将计算分成块。
-
是的,您可以将数据流式传输到大多数语言的散列函数中。您需要哪种语言的解决方案?
标签: algorithm security hash sha256