如果攻击者控制签名请求,是否有可能泄漏私钥数据?
每个人都知道N
和E
,因为它们是公开的。
我的服务器被设计来解密传入的请求,该请求是用公钥加密的。
对于具有SHA-2的解密数据,请返回该数据的RSA符号。
攻击者有可能知道我的私钥吗?
为了教育目的,我正在当地的工作坊里测试这一点。
对于传入的请求,我使用PKCS#1公钥加密消息;数据由我的私钥解密,它有SHA-2,所以我只需将签名数据签名并返回给客户端。
Python中的示例:
消息和密钥对生成:
message = struct.pack('>IIII', 0, 0, 0, 1)
(pub, priv) = rsa.newkeys(512) //only for example, I know no one uses 512 bit
收到的请求:
encrypted = pkcs1.encrypt(message, pub)
服务器操作:
decrypted = pkcs1.decrypt(encrypted, priv)
signature = pkcs1.sign(decrypted, priv, 'SHA-256')
然后返回答案。
发布于 2021-09-23 12:22:42
从示例中可以看出,加密和签名使用了PKCS#1中的一些填充模式;可能是RSAES-PKCS1 1 1-v1_5用于加密,RSASSA-PKCS1-v1_5使用SHA-256作为签名。
是否有可能泄露私钥数据?
据我们所知,no,它解密了一条消息并使用相同的密钥对其进行签名,这一事实不会泄露私钥数据。这与加密和签名所使用的确切填充方案无关:我们只是不知道,任何限制在没有侧通道的黑匣子中计算x\mapsto x^d\bmod n
的RSA私钥D6
的使用,都不可能泄漏私钥数据。
在可能发生的类似事件中:
x\mapsto x^d\bmod n
计算任意x
的甲骨文,给出一个(非常慢的)相当于知道可与服务器通信的私钥的攻击者。在学术上使用相同的公钥/私钥对进行加密和签名是不正确的,但是在PKCS#1中的四种加密和签名模式下,它不允许任何已知的攻击。安全链中最薄弱的环节是
https://crypto.stackexchange.com/questions/95201
复制相似问题