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

时间:2012-07-12 08:08:31

标签: c++ cryptography rsa

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

2 个答案:

答案 0 :(得分:3)

RSA算法是原语,您可以将其用于两个目的:

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

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

  • PKCS#1 v1.5加密(仅限遗留用途,任何人都不应再使用它)
  • OAEP加密(适用于任何新实施)
  • PKCS#1 v1.5签名
  • PSS签名

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

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

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

但是,正确的实现不一定是安全。除了缓冲区溢出等普通事物之外,还应该验证库是否考虑了针对RSA实现的所有最新攻击(至少包括最实用的side channel attacks on RSA)。这很难评估,但是 - 对于开源图书馆 - 您可以通过查看社区的大小和活动以及发现它们后publish vulnerabilities来获得感受。

开源C ++库(如BotanCrypto++)是个不错的选择。您可能只想检查它们在目标平台上是否足够快,它们的许可证(分别是BSD和Public Domain)是否可接受,并且它们与您的平台兼容。

答案 1 :(得分:0)

不要使用学生软件库进行加密。他们维护不善,可能会导致错误。使用众所周知的加密框架,例如Crypto++。他们应声称与标准兼容。您可以检查他们是否针对标准的参考测试向量进行测试;通常这样的东西存在。

如果图书馆获得FIPS或Common Criteria批准(例如OpenSSL获得FIPS批准),则可获得额外积分。