在签署握手消息摘要时,MGF1函数接受一些与摘要长度相同的盐值。但是盐的缓冲液中必须含有什么内容呢?
我研究了libnettle的源代码,特别是rsa_pss_sha256_verify_digest方法,发现里面使用的salt是32个类似的字节- 0x22。使用这个值,我能够自己生成一个有效的签名。但我在任何文件中都没有发现有关盐的信息。它是如何为TLS1.3 CertificateVerify消息实际生成的?此值是固定的还是取决于证书或密钥.?
发布于 2021-05-11 18:15:30
盐应该是随机产生的。PSS编码就是这样定义的: salt长度是输入,编码过程生成指定长度的随机盐。PSS验证过程将从签名中读取的salt作为输入来处理,该输入可以是预期长度的任意字符串。
TLS 1.3规范声明盐分长度必须等于哈希长度。(这是用于哈希输入的相同算法,对于MGF建议使用相同的哈希,TLS 1.3要求这样做。)PSS本身允许更长、更短的盐类,但使用哈希长度是非常普遍的,即使在TLS 1.3以外的不强制盐分长度的情况下也是如此。PSS的安全性证明是基于这一共同选择,但据我所知,使用更短、甚至是空盐或非随机盐没有已知的弱点。
为PSS选择一个非随机(或太短)的盐可以显示消息,因为它使消息可以从签名中猜测。这与TLS握手无关,因为消息本身包含随机输入(ClientHello.random和ServerHello.random)。
https://crypto.stackexchange.com/questions/89925
复制相似问题