1

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

消息数据小于密钥。我正在使用 RSA,密钥大小为 3072 位。

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

  1. sha512 的消息。
  2. 使用私钥对哈希进行签名。
  3. 使用私钥对消息进行签名。
  4. 连接和传输。

收到后,验证过程是:

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

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

我目前正在零填充消息以匹配密钥大小,这可能是一个糟糕的举动(我认为我应该使用 PKCS 填充算法,如 1 或 1.5?)

这个策略看起来有效吗?是否有任何明显的缺陷或我忽略的观点?

4

1 回答 1

3

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

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

我不确定您为什么要费心加密消息本身-正如您已经注意到的那样,任何人都可以使用公钥对其进行解密,因此除了混淆之外没有添加任何内容。您不妨只发送消息和加密填充哈希。

我建议使用提供“签名消息”功能的高级库,例如cryptlibKeyCzar(如果可以的话)。这些受益于比您的代码可能看到的更多的眼球,并处理所有琐碎的填充问题和类似问题。

于 2009-07-20T06:05:32.630 回答