我第一次尝试使用椭圆曲线密码系统,所以我对此感到困惑。
这是一个场景:首先我想散列一条消息,然后签名。我使用javascript,所以我尝试遵循这段代码。
我之所以感到困惑,是因为为什么这段代码使用'sha256‘算法散列消息?有什么理由吗?
另外,是否有任何自定义或首选的散列算法用于ECC?
更清楚的是,ECC是否用于签名和生成密钥,但没有一个特殊的算法来散列消息?
谢谢。
发布于 2020-06-06 13:34:13
你真的有两个问题,所以我试着解决这两个问题;看来你的问题确实是第二个问题,但第一个问题的答案会说明第二个问题:
我之所以感到困惑,是因为为什么这段代码使用散列函数来散列消息?有什么理由吗?
我们使用一些公钥转换将“消息”和“私钥”转换为“签名”;但是,这种转换需要固定大小的输入。也就是说,它不能处理比预期更长的消息(对于所有签名算法都是如此:椭圆曲线签名算法、RSA签名算法、后量子签名算法)。
现在,我们可能希望签署比原始公钥操作所能处理的最大值大得多的文档。带有P256的ECDSA内部部分一次只能处理256个比特,通常,我们希望签署大于32个字节的文件。要处理这个问题,我们要做的是通过一个‘散列函数’发送实际的消息,也就是说,转换将我们的长消息转换成一个固定的长度(原始公钥操作可以处理这个长度)。我们散列消息,然后将该哈希传递给ECDSA内部逻辑。然后,为了验证签名,验证者将它所拥有的消息交给相同的散列逻辑,计算哈希,然后将该哈希传递给ECDSA验证逻辑。
通过上面的描述,有几件事情是显而易见的:
这是为什么这段代码使用'sha256‘算法?是否有任何自定义或首选用于ECC的散列算法?
不,ECC没有专门的哈希算法。如果您查看我给出的哈希函数的条件,那么没有任何特定于公钥方法的东西。对RSA有好处的散列函数对ECC也有好处。
我们有一些函数看起来是很好的散列函数;SHA256就是其中之一,而这恰好是它们所选择的。
https://crypto.stackexchange.com/questions/81184
复制相似问题