可以与C / C ++一起使用的最强密码?

时间:2010-04-02 17:27:54

标签: c++ c security encryption

我只是想知道你是否应该编写一种真正安全的应用程序,数据通过不安全的网络传输,你会使用什么样的加密算法来保证它的安全?我知道几个用于加密的c ++库提供了不同算法的不错功能,但我不太确定使用哪种密码 - AES,DES,RSA,Blowfish或者更不同的东西?

请提供您的想法和建议。

9 个答案:

答案 0 :(得分:5)

虽然一些加密算法比其他加密算法更容易破解,但弱点更多的是密钥生成。如果您的密钥生成算法是可预测的,那么更容易找出密钥并解密数据包。

所以,我不会说出哪种加密算法(AES很好)。但请确保您有良好的真实随机性来源来生成密钥。

如果您使用的是任何常见的POSIX操作系统,请使用/dev/random生成密钥。

答案 1 :(得分:4)

使用AES进行数据加密,并使用RSA在各方之间交换AES密钥

答案 2 :(得分:1)

您列出的加密需求要求太少。这取决于具体情况。

例如,如果通信链路的两个端点都是可信的,您可能只是担心加密,并且让它们都为另一端生成公钥以加密信息。在这种情况下,RSA将是我个人的选择。

但是,如果您不信任另一个端点,并且使用加密来确定它是否“具有密钥”,那么您将指望预设密钥,而不是私有/公共加密。在这种情况下,Triple DES(DES被认为有点弱)这可能是一个不错的选择。

希望这有帮助!

答案 3 :(得分:1)

任何熟知的密码都有很好的安全级别,因此部分很容易。我会更关心您使用的库的质量和信任级别以及您使用它时的错误。您是否考虑使用ssh等外部程序来处理密钥并处理连接,并使用API​​库驱动它?

答案 4 :(得分:1)

Crypto++,也许是C ++最着名,最大,最好的加密库,包含几种可以使用的算法。它还可以为您提供一个良好的加密安全随机库,以便与这些算法一起使用。

根据他们的FAQ,这在很大程度上取决于你想做什么。来自recommended list of algorithms

  

分组密码:DES-EDE3,AES,Serpent(Serpent比AES慢,但具有更大的安全边界,不易受到时序攻击。)
  stream cipher:CTR模式下的任何上述分组密码
  快速流密码:Salsa20,巴拿马,Sosemanuk(5.5版本)   散列函数:SHA-256,SHA-512,Whirlpool
  消息认证码:具有上述散列函数之一的HMAC / SHA1或HMAC
  公钥加密:RSA / OAEP / SHA1,ECIES
  签名:RSA / PSS / H,ECDSA / H,其中H是上述哈希函数之一   关键协议:DH,ECDH
  随机数生成器:RandomPool,AutoSeededRandomPool

我们无法给出确切的答案,因为没有人不了解你想要完成的事情。

答案 5 :(得分:1)

首先,您必须使用公钥密码拆分对称分组密码

  • 他们的表现确实不同
  • 他们的实施真的不同
  • 他们的优势/劣势基于不同的因素

顺便说一下:

  • DES 不再被视为安全,您应该始终避免使用它
  • AES 仍然被认为是安全的(您可以使用256位密钥)
  • RSA (以及其他公钥算法,如 ElGamal Ellipctic Curve )安全性是基于数学问题的硬度这些算法基于哪些。例如:数字因子分解。如果用于存储密钥的位数足够大,则可以认为它们足够安全。

然而,事情可能会根据几年内CPU的功率而改变,所以你不应该永远认为它们是安全的。

要考虑的一件事是公钥密码通常比块密码慢,这就是为什么commong协议通常使用第一个协议来交换simmetric密钥然后是与AES等算法一起使用。

答案 6 :(得分:1)

答案是:不要。如果它必须是安全的并且您提出这个问题则意味着您需要找到一位安全专家来执行此操作。您不会通过在SO上寻求帮助来设计安全协议。你可以[可能]使用现有的协议,如ssh或TLS,但如果你自己推出,你就会失败。

答案 7 :(得分:1)

如果您想通过不安全的网络传输数据,则需要的不仅仅是密码,还需要安全的协议,可能包括密钥分发和身份验证。

如果你真的认真对待加密实现,不仅仅是为了理解加密的基本数学,那么你需要做的不仅仅是正确实现数字运算。您还需要担心侧通道攻击。例如,如果您的实现需要不同的时间,具体取决于密钥,那么攻击者可以从您的各种响应时间中推断出有关密钥的信息。这只是基本的算法,不要介意把它们放在一起。

这通常是一个未解决的问题和正在进行的研究领域。大多数或所有实现都是有缺陷的,尽管最新版本的常用库可能不是任何人公开宣布可以利用的方式。过去已经证明了对OpenSSL的基于定时的攻击,尽管只能在高度可预测的本地网络AFAIK上进行。你可以基本上花费你喜欢的时间,直到并包括你的整个职业生涯。

在实践中,只需使用SSL,无论您的平台附带什么实现。

答案 8 :(得分:0)

实际上,我们可能不需要了解所有细节。但是,恕我直言,将这些算法与责任链模式或复合+策略级联。

相关问题