我正在编写一个加密程序,它执行诸如散列(sha1),加密,c++中win32的数字签名之类的东西是内置在cryptoapi安全中的,或者我应该使用像crypto++这样的其他库我需要最大的安全性并且适用于所有系统xp和vista(和可选的 2000),但同时我需要最小化 exe 大小,所以不想要不需要的外部库
7 回答
定义“安全”。内置的 windows 加密 api 做了它宣传的事情,并且没有任何没有得到纠正的缺陷,至少我知道。“下一代加密货币”API 可能值得一看。
通常,在一个安全的程序中,问题在于人们对 API 所做的事情——密钥长度不足、以纯文本形式留下密钥等——这确实会造成麻烦,而不是供应商软件。
“安全是一个过程,而不是一个产品。” -施奈尔
散列、加密和签名等加密算法只是该过程的一部分:
- 你是如何存放你的钥匙的?它们会通过页面文件意外泄漏到磁盘上吗?
- 你如何生成随机数?糟糕的随机数真的会削弱一切。只需向Debian或Netscape询问恐怖故事即可。
- IT 管理员能否更新允许使用组策略的算法?
- 该解决方案是否支持外部强化设备?
- 你可以在内核模式下进行加密吗?
- 在受到攻击或弱点的情况下如何分发更新?
CAPI,尤其是Vista 上的 CNG已经考虑过这些问题,总的来说还不错。您可能想观看CAPI 团队中的两个人制作的这段视频,以了解是谁设计的。
此外,如果人们可以物理访问您的机器并放入键盘记录器,那么所有这些都没有实际意义。
唉,这是一个过程……
“最大安全性”将由您如何使用您选择的加密 API 来定义。它不会由 API 本身定义。
只要 API 正确实现了各种加密算法,它就与任何其他加密 API 一样好。
如果您需要“最大”的安全性,您确实需要聘请专家来帮助您。正如查理·马丁指出的那样,您不仅可以通过滥用加密 API 来结束不安全的程序,还可以通过正确使用错误类型的加密,通过滥用正确使用的 API 的结果,甚至在其他部分的不安全设计你的程序。
这是软件行业中极为常见的问题。
加密 API 已弃用,在 Vista 中仍然有效,但您应该使用 CNG(下一代加密 API)。我不确定 Crypto API 在 Windows 7 中是否仍然可用。
出于安全考虑,请选择具有 fips 140-2 认证的库。之后,一切都取决于您是否安全地使用它。
如果使用得当,CryptoAPI 将尽其所能。
你会发现有两种用于 Windows 加密的外部库:一种是重新实现所有内容的库,因为它们旨在支持多平台开发,另一种是在 CryptoAPI 之上为特定目的充当简化层。如果您属于前一类,请务必使用信誉良好的平台中立库。如果您发现在原始 CryptoAPI 中无法高效工作,请找到一个信誉良好的库,它可以在较少的步骤中完全满足您的需求。但是不要假设另一个库会因为它“更好”而解决您的安全风险;只要确保你使用的任何东西都是有信誉的。
正如许多其他人指出的那样,如果您真的需要“最大安全性”(无论您的“最大”级别是什么),您可能需要聘请专家。此外,您确实需要从整体角度看待安全性;加密数据只是一方面。
最后,不用说,甚至不要梦想编写自己的密码库,甚至不要实现现有算法。你会失败的,很惨。