RSA PKCS#1 V2.1在C++中的实现

RSA PKCS#1 V2.1 implementation in C++

本文关键字:实现 C++ PKCS#1 V2 RSA      更新时间:2023-10-16

在哪里可以找到C++中的RSA PKCS#1 V2.1实现
我在这里找到了一个实现,但我不确定它是否符合那个标准
有人能解释RSA算法的各种实现之间的主要差异吗?这些差异可能会导致操作上的不一致?

RSA算法是一个基元,可以用于两个目的:

  • 保密性(即公钥加密),或
  • 原产地证明(即,与加密哈希相结合的数字签名)

PKCS#1是标准,现在大多数人都提到基于RSA的加密和签名。更特别的是,PKCS#1(2.1)的最新版本定义了四种不同的方案:

  • PKCS#1 v1.5加密(仅用于遗留目的,任何人都不应该再使用它)
  • OAEP加密(对于任何新的实现都是首选)
  • PKCS#1 v1.5签名
  • PSS签名

换句话说,当你说"RSA PKCS#1 V2.1"时,你真的应该参考上面的任何一个方案,因为库可以实现这些方案的子集。

PKCS#1标准写得非常好,所以它的所有正确实现都是相互兼容的。由于除第一个方案外的所有方案都依赖于加密哈希,因此您还需要验证所选库是否包含您计划使用的库(例如SHA-256)。

我强烈建议通过查看测试向量集(有多少以及它们来自哪里)来判断库的质量。

尽管如此,正确的实现不一定是安全的

像Botan或Crypto++这样的开源C++库是一个不错的选择。您可能只想检查它们在目标平台上是否足够快,它们的许可证(分别为BSD和Public Domain)是否可接受,以及它们是否与您的平台兼容。

不要使用studentware库进行加密。它们维护不善,可能会导致错误。请使用众所周知的加密框架,如Crypto++。它们应该声称与标准兼容。您可以检查它们是否根据标准的参考测试向量进行测试;通常存在类似的东西。

如果库是FIPS或通用标准批准的(例如OpenSSL是FIPS批准的),则奖励额外的分数。