在哪里可以找到C++中RSA PKCS#1 V2.1的实现?
我发现了一个实现here,但我不确定它是否符合该标准。
任何人都可以解释可能导致操作不一致的RSA算法的各种实现之间的主要区别吗?在C++中使用RSA PKCS#1 V2.1实现
2
A
回答
0
不要使用studentware库进行加密。他们不善于维护并可能导致错误。改为使用众所周知的加密框架,例如Crypto++。他们应该声称与标准兼容。你可以检查他们是否对照标准的参考测试向量进行测试;通常存在这样的事情。
如果图书馆已通过FIPS或通用标准(例如OpenSSL已通过FIPS认证),则额外奖励点数。
3
RSA算法是原始可用于两个目的:
- 机密性(即公钥加密),或
- 证明原产地(合并时是,数字签名用加密散列)
PKCS#1 的标准主要是大家都指的是时下基于RSA加密和签名。更特别的是,最近的PKCS#1(2.1)版本定义了四种不同的方案:
- PKCS#1 v1.5的加密(用于传统仅供参考,任何人都不应再使用它)
- OAEP加密(应优先用于任何新的实现)
- PKCS#1 v1.5的签名
- PSS签名
换句话说,当你说 “RSA PKCS#1 V2.1”,你建议立即进行删除d实际上是指以上任何一种方案,因为一个图书馆可以实施这些方案的一个子集。
PKCS#1标准写得很好,所以它的所有正确实现在定义上都是相互兼容的。由于除第一个以外的所有方案都依赖加密散列,因此还需要验证所选库是否包含您计划使用的库(例如SHA-256)。
我强烈建议通过查看一组测试向量(它们来自哪里以及它们来自哪里)来判断图书馆的质量。
仍然,一个正确实施不一定安全。除了缓冲区溢出之类的普通事情之外,还应该验证该库是否考虑了所有针对RSA实施的最新攻击(至少包括最实际的side channel attacks on RSA)。这很难评估,但是 - 对于开源库 - 您可以通过查看社区的大小和活动以及它们是否在发现后立即获得感受。
像Botan或Crypto++这样的开源C++库是一个不错的选择。您可能只想检查它们在目标平台上的速度足够快,它们的许可证(分别为BSD和公共域)是可以接受的,并且它们与您的平台兼容。
相关问题
- 1. RSA PKCS#1兼容签名
- 2. PyCrypto:使用RSA和PKCS#1加密两次字符串#1
- 3. 是否为Java实现了PKCS#1 V2.0?
- 4. 从内存加载RSA PKCS#1私钥?
- 5. 移植从C++到C#代码 - 与RSA PKCS#加密1私钥
- 6. 在Android中以PKCS#1格式在Android中生成RSA密钥
- 7. 如何在Java中将PKCS#8编码的RSA密钥转换为PKCS#1?
- 8. 使用java的RSA实现
- 9. 在Haxe中使用RSA实现
- 10. 使用RSA(PKCS 7)分配/验证签名(PKCS 7)
- 11. 在python中实现RSA
- 12. 蟒RSA FPGA实现与PKCS1
- 13. C#:RSA实现不能用大键
- 14. OpenSSL RSA签名和PKCS#1填充不正确验证
- 15. 为128bits-C++实现RSA单元
- 16. 从Python到C#的AES/RSA实现#
- 17. Java中的RSA实现
- 18. 在不使用密码的情况下在Java中实现RSA
- 19. C#使用OpenSSL密钥和充气城堡实现RSA
- 20. 在Java中实现RSA算法
- 21. 在Python中实现完整的RSA
- 22. 在Java中实现RSA-SHA1签名算法(创建用于OAuth RSA-SHA1签名的私钥)
- 23. 使用pkcs#11 api签名sha256 hash with RSA?
- 24. 如何在.Net中使用PKCS#1 v1.5编码数据
- 25. 在C/C++中使用RSA实现的开放源代码(使用库或自己写)
- 26. Java RSA/CBC加密实现
- 27. 与openssl相比,RSA PKCS#1 v1.5签名提供额外的八位字节
- 28. C#PKCS签名
- 29. 在类实现中使用[],C++
- 30. MissingMethodException使用MS Solver Foundation v2.1