在哪里可以找到C ++中的RSA PKCS#1 V2.1实现?
我找到了一个实现here,但我不确定它是否符合该标准
任何人都可以解释各种RSA算法实现之间的主要差异,这可能会导致行动不一致吗?
答案 0 :(得分:3)
RSA算法是原语,您可以将其用于两个目的:
PKCS#1是 THE 标准,现在大多数人都指的是基于RSA的加密和签名。更具体地说,最新版本的PKCS#1(2.1)定义了四种不同的方案:
换句话说,当你说“ RSA PKCS#1 V2.1 ”时,你应该真正参考上面的任何方案,因为一个库可以实现这些方案的一个子集。 / p>
PKCS#1标准写得非常好,所以它的所有正确实现都是相互兼容的。由于除了第一个方案之外的所有方案都依赖于加密哈希,因此您还需要验证所选库是否包含您计划使用的那些(例如SHA-256)。
我强烈建议您通过查看测试向量集(有多少以及它们来自哪里)来判断库的质量。
但是,正确的实现不一定是安全。除了缓冲区溢出等普通事物之外,还应该验证库是否考虑了针对RSA实现的所有最新攻击(至少包括最实用的side channel attacks on RSA)。这很难评估,但是 - 对于开源图书馆 - 您可以通过查看社区的大小和活动以及发现它们后publish vulnerabilities来获得感受。
开源C ++库(如Botan或Crypto++)是个不错的选择。您可能只想检查它们在目标平台上是否足够快,它们的许可证(分别是BSD和Public Domain)是否可接受,并且它们与您的平台兼容。
答案 1 :(得分:0)
不要使用学生软件库进行加密。他们维护不善,可能会导致错误。使用众所周知的加密框架,例如Crypto++。他们应声称与标准兼容。您可以检查他们是否针对标准的参考测试向量进行测试;通常这样的东西存在。
如果图书馆获得FIPS或Common Criteria批准(例如OpenSSL获得FIPS批准),则可获得额外积分。