【问题标题】:Basic Cryptography Understanding: RSA signature基本密码学理解:RSA 签名
【发布时间】: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


【解决方案1】:

简而言之:不要重新发明轮子,尤其是在您没有密码学专业知识的情况下。

采用现有的加密方案,例如 OpenPGP 或 PKI(您需要它的 CMS 部分)并使用它。如果您没有集中式密钥管理(即不涉及证书颁发机构等),OpenPGP 很好。如果您想依赖现有的证书(和密钥)分发和管理基础架构,PKI 是很好的选择。 PKI在各种软件中都有较好的支持,但是如果客户端和服务端都是你自己设计的,那就无所谓了。

【讨论】:

  • 谢谢。好的,我将研究 OpenPGP。但是把实现放在一边。您如何看待签名本身的加密?基本上我想更好地了解这个概念
  • @user489152 Dan D. 在他的评论中针对您的上述问题发表了精彩且值得一读的答案。
猜你喜欢
  • 2012-02-19
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多