【发布时间】:2009-05-25 01:22:07
【问题描述】:
我正在编写一个加密程序,它可以在 c++ 中为 win32 执行哈希 (sha1)、加密、数字签名等操作 内置于 cryptoapi 安全中,或者我应该使用其他一些库,如 crypto++ 我需要最大的安全性并适用于所有系统 xp 和 vista(以及可选的 2000),但同时我需要最小化 exe 大小,因此不想要不需要的外部库
【问题讨论】:
标签: c++ cryptography cryptoapi
我正在编写一个加密程序,它可以在 c++ 中为 win32 执行哈希 (sha1)、加密、数字签名等操作 内置于 cryptoapi 安全中,或者我应该使用其他一些库,如 crypto++ 我需要最大的安全性并适用于所有系统 xp 和 vista(以及可选的 2000),但同时我需要最小化 exe 大小,因此不想要不需要的外部库
【问题讨论】:
标签: c++ cryptography cryptoapi
定义“安全”。内置的 windows 加密 api 做了它宣传的事情,并且没有任何没有得到纠正的缺陷,至少我知道。 “下一代加密货币”API 可能值得一看。
通常,在安全程序中,问题在于人们对 API 所做的事情——密钥长度不足、以纯文本形式留下密钥等——这确实会造成麻烦,而不是供应商软件。
【讨论】:
“安全是一个过程,而不是一个产品。” - Schneier
哈希、加密和签名等加密算法只是该过程的一部分:
CAPI 尤其是CNG on Vista 已经考虑过这些问题并且总体上是不错的。您可能想观看 CAPI 团队中的两个人的this video,以了解是谁设计的。
此外,如果人们可以物理访问您的机器并放入键盘记录器,那么所有这些都没有实际意义。
唉,这是一个过程……
【讨论】:
“最大安全性”将由您如何使用您选择的加密 API 来定义。它不会由 API 本身定义。
只要 API 正确实现了各种加密算法,它就与任何其他加密 API 一样好。
【讨论】:
如果您需要“最大”的安全性,您确实需要聘请专家来帮助您。正如查理·马丁指出的那样,您不仅可以通过滥用加密 API 来结束不安全的程序,还可以通过正确使用错误类型的加密,通过滥用正确使用的 API 的结果,甚至在其他部分的不安全设计你的程序。
这是软件行业非常常见的问题。
【讨论】:
如果使用得当,CryptoAPI 将尽其所能。
您会发现有两种用于 Windows 加密的外部库:一种是重新实现所有内容的库,因为它们旨在支持多平台开发,另一种是在 CryptoAPI 之上为特定目的充当简化层。如果您属于前一类人群,请务必使用信誉良好的平台中立库。如果您发现在原始 CryptoAPI 中无法高效工作,请找到一个信誉良好的库,它可以在较少的步骤中完全满足您的需求。但是不要假设另一个库会因为它“更好”而解决您的安全风险;只要确保你使用的任何东西都是有信誉的。
正如许多其他人指出的那样,如果您真的需要“最大安全性”(无论您的“最大”级别是多少),您可能需要聘请专家。此外,您确实需要从整体角度看待安全性;加密数据只是一方面。
最后,不言而喻,不要梦想编写自己的密码库,甚至不要实现现有算法。你会失败的,很惨。
【讨论】:
出于安全考虑,请选择具有 fips 140-2 认证的库。之后,一切都取决于您是否安全地使用它。
【讨论】:
Crypto API 已弃用,在 Vista 中仍可使用,但您应该使用 CNG(下一代加密 API)。我不确定 Crypto API 在 Windows 7 中是否仍然可用。
【讨论】: