【发布时间】:2011-06-28 07:14:38
【问题描述】:
我需要设置一个场景,客户端发送加密(AES)和签名文件,服务器解密并验证签名(RSA)。
这是我想到的步骤:
1) 计算文本文件的签名,然后将(base64 编码的)签名附加到文件头中 2)加密文本文件(带有添加的标题)。 3)将加密文件发送到服务器 4)在服务器端,解密文件,然后从头中提取签名(base64解码)。验证发件人。如果验证,则使用文本文件。
我的问题是:
你认为我应该先加密文本文件,然后添加header(base64),这样首先验证发送者,然后如果发送者被验证,操作可以继续解密文件内容吗?
底线是,当我一开始这样做时,我认为签名也可以被混淆,因此我将其全部加密。现在的问题是,签名真的应该被混淆吗? 攻击者如何使用签名(如果是明文?)?他无论如何都不能篡改它,因为验证会失败……请给我一些启示。
【问题讨论】:
-
所以问题是要签名然后加密还是其他方式? Don Davis's "Defective Sign & Encrypt in S/MIME, PKCS#7, MOSS, PEM, PGP, and XML" 显示签名然后加密方法的问题。
-
感谢您的链接 :) 这是我学到的:“当委托人签署已加密的材料时,不应推断委托人知道消息的内容。另一方面手,推断签署消息然后对其进行加密以保护隐私的主体知道消息的内容是正确的”
-
如果您先签名然后加密,并且您的服务器返回加密错误(这始终是“错误填充”异常,因为没有其他问题可以出错),那么您的服务器就是填充预言机,并且容易受到填充预言机攻击。这可以通过添加某种对称验证来避免,例如一个 HMAC。由于此攻击会在每个字节 128 次尝试后暴露您的整个纯文本消息,因此它可能比 Dan D 链接中描述的问题更重要。
标签: encryption cryptography rsa signature