我正在研究一个使用 Rijndael 算法(C#,ASP.Net 4.5)的加密类,出于好奇,我想知道对字符串进行两次加密会有多大好处。我的意思是用一个密钥加密字符串,然后用另一个密钥加密得到的加密?
这是否使它更加安全(我知道没有什么是安全的,而且我的软件中可能还有其他漏洞可用于利用)?是否值得 CPU 开销(不确定这有多重,但我无法想象它会变轻)?
我在网上寻找一些建议,但找不到任何建议。有什么想法吗?
我正在研究一个使用 Rijndael 算法(C#,ASP.Net 4.5)的加密类,出于好奇,我想知道对字符串进行两次加密会有多大好处。我的意思是用一个密钥加密字符串,然后用另一个密钥加密得到的加密?
这是否使它更加安全(我知道没有什么是安全的,而且我的软件中可能还有其他漏洞可用于利用)?是否值得 CPU 开销(不确定这有多重,但我无法想象它会变轻)?
我在网上寻找一些建议,但找不到任何建议。有什么想法吗?
有几个问题可能对您有用:
大致思路似乎是这一点:
好吧,这样想吧。如果用蛮力破解一个加密需要比宇宙寿命更长的时间,那么使用一种需要两倍于宇宙寿命的加密方案是否更安全?不,第一次加密不能被破解。添加第二次加密只会增加计算开销,并没有真正的好处。- 米凯佐
我建议在https://crypto.stackexchange.com/中提出这个问题,他们可能会为您提供有关该主题的更详细信息。
密码学中有一个简单的规则。所有的安全都应该在密钥中。基于此,加密两次不应该有额外的安全性,因为您所有的安全性都应该在您的密钥的选择和存储中。
话虽如此……如果您做出错误的选择,您可以获得一些额外的安全性。例如,假设您第一次使用 ECB 模式(电子密码本)加密,由于该模式的工作方式(通过分别加密明文的每个块),您可以通过在更安全的模式下第二次加密来获得额外的安全性(CBC 或点击率)。但是......您也可以第一次在 CBC 模式下加密。
您可以使用不安全的算法(例如 DES)进行第一次加密,然后使用更好的算法(例如 AES)进行第二次加密。
但这些情况是假设性的,需要你故意犯错误或极度疏忽。如果您在 CTR 或 CBC 等安全模式下使用 AES (Rijandael) 两次,那么只要您的密钥安全存储并以安全方式选择,您将不会从两次加密中获得任何额外的安全性。