标准(PKCS#1)表示用于签名的消息长度必须是emBits = modBits - 1.但它来自哪里?我的意思是在这个标准签名中基于散列和散列补充到长度emBits。但为什么它必须是modBits - 1?要创建合适大小的数字签名吗?
答案 0 :(得分:0)
让我们假装你的模数值为0b1010111111
(10位)。
如果你运行EMSA-PSS-Encode(M, 10)
它可以(如果能够产生小数字)产生0b1111001011
。该值超过模数,因此它在数学上等同于0b100001100
。运行时验证您获得0b100001100
的中间值,然后发现您的签名无法验证。你再次签名,这次它有效。混乱比比皆是。
最终的答案是,有一个稳定的算法,它尽可能接近模数值而不超过它#34;。同样,EMSA-PKCS1-v1_5
以零字节开头,以确保模数始终大于编码值。