跳到主要内容

保存哈希引擎状态并稍后恢复

DA1469x

1个月前

保存哈希引擎状态并稍后恢复

发布的BrokenGravelBox15分 3回复
0的问题

你好,

我试图通过mbedtls使用硬件加密引擎(通过MBEDTLS_SHA256_ALT和使用hw_aes_hash_…)。

对于某些功能,mbedtls需要能够复制当前哈希状态,并能够独立地恢复其中任何一个状态。

是否有一种方法可以获得哈希引擎的当前状态并在稍后恢复它?

提前感谢。

1个月前

PM_Dialog

嗨BrokenGravelBox,

感谢你在网上提出的问题。让我检查一下,我会尽快回复你。

谢谢,PM_Dialog

1个月前

PM_Dialog

嗨BrokenGravelBox,

根据帖子描述,据我所知,您正在使用HW加密块来馈送MBEDTLS,然后在SW级别做一些事情。如果我说错了,请纠正。

我无法理解你所说的“获取哈希引擎的当前状态并在稍后恢复它”是什么意思,所以你能澄清一下吗?

HW块的结果可以保存在数组或其他任何地方。哈希将密钥作为输入并计算输出。结果可以存储在任何用户定义的区域中——没有任何特定的缓冲区供低电平驱动程序使用。

如果检查hw_aes_hash_cfg_dma() API,您将看到输出的目的地是由用户定义的。

此外,请分享您正在使用的序列,以便计算has输出并馈送MBEDTLS。

谢谢,PM_Dialog

1个月前

BrokenGravelBox 15分

嗨PM_Dialog,

我知道如何让引擎计算哈希值。

我的问题是,mbedtls假设了一种实现,可以随意从先前的状态恢复哈希计算。

从我所能看到的,只有一种方法来使用引擎:做哈希设置,启用时钟,然后给它一个或多个数据块,然后得到结果并关闭时钟。

mbedtls实现允许的内容如下:

开始哈希操作A,输入一些数据A1,复制状态A,得到一个中间结果哈希(A1)

开始哈希操作B,输入一些数据B1

将更多的数据A2提供给哈希A,然后获得哈希A的结果:

向哈希B提供更多的数据B2,然后得到哈希B的结果:hash(B1 || B2)

使用hw_aes_hash_…函数,这只有在缓存所有数据时才有可能,每当需要(中间)哈希时,就对缓冲区中的所有数据进行哈希。

这显然不是一个好的解决方案,因为在本例中,除了必须缓冲数据之外,还需要两次计算A1上的哈希值。

如果可以保存和恢复哈希引擎的状态,那么只需在获得结果或切换到不同的哈希操作之前保存状态即可。

如果无法访问哈希引擎的内部状态,我可以使用mbedtls软件实现(它可能比硬件引擎慢,需要更多的功能),但我认为询问一下也无妨。

提前感谢。