交替密码(块密码和流密码)

Alternating ciphers (block cipher and stream cipher)

我正在审查我们团队开发的产品代码,其中信用卡信息存储在本地数据库中。在没有互联网连接的情况下可以访问该数据库。我遇到了加密方法。

编写这部分代码的开发人员在 AES 上对 RABBIT 进行了 AES 加密。我见过 AES over AES 的实现(我认为与 Triple DES 相同的概念)但我从未见过或研究过流上的堆栈块。我不知道这样做的结果是一致的(即没有数据损坏)还是安全的。

我认为它们会是因为我认为使用不同密钥的堆叠加密永远不会比一次性加密更安全。下面是我找到的代码示例。

function classSecureMessage(message){
 this.secretA=security.randomAlphaNum(56);
 this.secretB=security.randomAlphaNum(56);
 this.secretC=security.randomAlphaNum(56);
 var passStr=message;
 passStr=CryptoJS.AES.encrypt(passStr, this.secretA);
 passStr=CryptoJS.Rabbit.encrypt(passStr.toString(), this.secretB);
 passStr=CryptoJS.AES.encrypt(passStr.toString(), this.secretC);
 this.message=passStr; 
 this.decrypt= function(){
  var passStr=CryptoJS.AES.decrypt(this.message, this.secretC).toString( CryptoJS.enc.Utf8 );
  passStr=CryptoJS.Rabbit.decrypt(passStr, this.secretB).toString( CryptoJS.enc.Utf8 );
  passStr=CryptoJS.AES.decrypt(passStr, this.secretA).toString( CryptoJS.enc.Utf8 );
  return(passStr);
 }
}

编辑:添加这方面的表现并不可怕。加密和解密信用卡数据需要 0.012 秒。

我可以看到关于拥有块流块密码 here 的参考资料,其中提到了 Bruce Schneier 的《应用密码学》一书。

我从未见过堆叠相同的密码(正如它在 link 上所说)的想法是每一方都信任不同的密码......所以在堆叠 AES 时没有增加安全性AES,暴力攻击除外。

我会将其中一个 AES 密码与另一个块密码交换,因此在这两个密码之一被泄露的情况下,您的数据仍然是安全的。