代码之家  ›  专栏  ›  技术社区  ›  Dave Gamble

这个基于RSA的签名(带恢复)方案是否加密可靠?

  •  1
  • Dave Gamble  · 技术社区  · 15 年前

    我正在实现一个简单的许可证文件系统,想知道我在当前的实现过程中是否犯了任何错误。

    消息数据小于键。我使用的是RSA,其密钥大小为3072位。

    许可证的颁发者生成要签名的消息,并使用基于直接转发RSA的方法对其进行签名,然后应用类似的方法对消息进行加密。加密消息和签名作为许可证文件存储在一起。

    1. sha512信息。
    2. 用私钥对哈希签名。
    3. 用私钥签署消息。
    4. 连接并传输。

    收到后,验证过程为:

    1. 用公钥解密消息
    2. 散列消息
    3. 用公钥解密文件中的哈希,并与本地哈希进行比较。

    到目前为止,实现工作正常,并且 出现 是有效的。

    我目前正在对消息进行零填充以匹配keysize,这可能是 一个错误的移动(我想我应该使用pkcs填充算法,比如1或1.5?)

    这个策略看起来有效吗? 有没有明显的缺陷,或者我忽略的观点?

    1 回复  |  直到 15 年前
        1
  •  3
  •   caf    15 年前

    我注意到的主要缺陷是:你 必须 验证解密时填充是否仍然存在。

    (如果您提前知道消息长度,那么您可能可以使用自己的填充方案,但如您所提到的,使用现有填充方案仍然是一个好主意)。

    我不知道您为什么要对消息本身进行加密——正如您所指出的,任何拥有公钥的人都可以对它进行解密,因此它不会添加除混淆之外的任何内容。您也可以发送消息和加密的填充哈希。

    我建议使用提供“签名消息”功能的高级库,例如 cryptlib KeyCzar (如果可以的话)。这些好处来自于比您的代码可能看到的更多的眼球,并且要注意所有的填充问题和类似的问题。