Hash 为什么emBits=modBits—;1英寸RSASSA-PSS

Hash 为什么emBits=modBits—;1英寸RSASSA-PSS,hash,cryptography,rsa,Hash,Cryptography,Rsa,标准(PKCS#1)规定用于签名的消息长度必须为emBits=modBits-1。但是它是从哪里来的呢?我的意思是,在这个标准中,签名是基于散列的,而散列是对长度emBits的补充。但是为什么它必须是modBits-1呢?要创建正确大小的数字签名?让我们假设模数值为0b1010111111(10位) 如果运行EMSA PSS Encode(M,10)它可以(如果能够生成这么小的数字)生成0b1111001011。该值超过了模数,因此在数学上等于0b100001100。运行verify时,您会得到

标准(PKCS#1)规定用于签名的消息长度必须为emBits=modBits-1。但是它是从哪里来的呢?我的意思是,在这个标准中,签名是基于散列的,而散列是对长度emBits的补充。但是为什么它必须是modBits-1呢?要创建正确大小的数字签名?

让我们假设模数值为
0b1010111111
(10位)

如果运行
EMSA PSS Encode(M,10)
它可以(如果能够生成这么小的数字)生成
0b1111001011
。该值超过了模数,因此在数学上等于
0b100001100
。运行verify时,您会得到中间值
0b100001100
,然后发现您的签名无法验证。你再签一次,这次就行了。混乱无处不在


最终的答案是“有一个稳定的算法,它尽可能接近模值而不超过模值”。类似地,
EMSA-PKCS1-v1_5
以零字节开始,以确保模数始终大于编码值。

堆栈溢出是编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。