3

我正在编写一个加密程序,它执行诸如散列(sha1),加密,c++中win32的数字签名之类的东西是内置在cryptoapi安全中的,或者我应该使用像crypto++这样的其他库我需要最大的安全性并且适用于所有系统xp和vista(和可选的 2000),但同时我需要最小化 exe 大小,所以不想要不需要的外部库

4

7 回答 7

6

定义“安全”。内置的 windows 加密 api 做了它宣传的事情,并且没有任何没有得到纠正的缺陷,至少我知道。“下一代加密货币”API 可能值得一看。

通常,在一个安全的程序中,问题在于人们对 API 所做的事情——密钥长度不足、以纯文本形式留下密钥等——这确实会造成麻烦,而不是供应商软件。

于 2009-05-25T01:31:48.970 回答
2

“安全是一个过程,而不是一个产品。” -施奈尔

散列、加密和签名等加密算法只是该过程的一部分:

  • 你是如何存放你的钥匙的?它们会通过页面文件意外泄漏到磁盘上吗?
  • 你如何生成随机数?糟糕的随机数真的会削弱一切。只需向DebianNetscape询问恐怖故事即可。
  • IT 管理员能否更新允许使用组策略的算法?
  • 该解决方案是否支持外部强化设备?
  • 你可以在内核模式下进行加密吗?
  • 在受到攻击或弱点的情况下如何分发更新?

CAPI,尤其是Vista 上的 CNG已经考虑过这些问题,总的来说还不错。您可能想观看CAPI 团队中的两个人制作的这段视频,以了解是谁设计的。

此外,如果人们可以物理访问您的机器并放入键盘记录器,那么所有这些都没有实际意义。

唉,这是一个过程……

于 2009-05-25T02:35:23.943 回答
1

“最大安全性”将由您如何使用您选择的加密 API 来定义。它不会由 API 本身定义。

只要 API 正确实现了各种加密算法,它就与任何其他加密 API 一样好。

于 2009-05-25T02:25:52.183 回答
0

如果您需要“最大”的安全性,您确实需要聘请专家来帮助您。正如查理·马丁指出的那样,您不仅可以通过滥用加密 API 来结束不安全的程序,还可以通过正确使用错误类型的加密,通过滥用正确使用的 API 的结果,甚至在其他部分的不安全设计你的程序。

这是软件行业中极为常见的问题。

于 2009-05-25T02:13:13.473 回答
0

加密 API 已弃用,在 Vista 中仍然有效,但您应该使用 CNG(下一代加密 API)。我不确定 Crypto API 在 Windows 7 中是否仍然可用。

于 2009-06-24T08:56:26.333 回答
0

出于安全考虑,请选择具有 fips 140-2 认证的库。之后,一切都取决于您是否安全地使用它。

于 2009-06-11T22:10:14.150 回答
0

如果使用得当,CryptoAPI 将尽其所能。

你会发现有两种用于 Windows 加密的外部库:一种是重新实现所有内容的库,因为它们旨在支持多平台开发,另一种是在 CryptoAPI 之上为特定目的充当简化层。如果您属于前一类,请务必使用信誉良好的平台中立库。如果您发现在原始 CryptoAPI 中无法高效工作,请找到一个信誉良好的库,它可以在较少的步骤中完全满足您的需求。但是不要假设另一个库会因为它“更好”而解决您的安全风险;只要确保你使用的任何东西都是有信誉的。

正如许多其他人指出的那样,如果您真的需要“最大安全性”(无论您的“最大”级别是什么),您可能需要聘请专家。此外,您确实需要从整体角度看待安全性;加密数据只是一方面。

最后,不用说,甚至不要梦想编写自己的密码库,甚至不要实现现有算法。你会失败的,很惨。

于 2009-05-25T05:00:29.293 回答