交替密码(分组密码和流密码)

Posted

技术标签:

【中文标题】交替密码(分组密码和流密码)【英文标题】:Alternating ciphers (block cipher and stream cipher) 【发布时间】:2016-01-31 15:33:15 【问题描述】:

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

编写这部分代码的开发人员在 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 秒。

【问题讨论】:

这种解决方案可能会让您的公司倒闭并让很多人不高兴。如果您要成为 VISA 或 Mastercard 商户,则禁止存储信用卡信息。 @DarkWander 不禁止存储信用卡信息。但是您必须获得 PCI 认证.. @DarkWanderer 没有指南明确规定,如果存储的信用卡信息必须使用“强”加密算法进行加密,以达到或超过 AES128 中规定的标准。并且在任何情况下都不能存储整个轨道数据。这是市场上几乎所有 POS 系统在无法立即处理信息时获取并存储信息的标准程序。 @EbbeM.Pedersen 我们完全符合 PCI 标准,经过了 firstData(我们的首选网关服务)的审核,并执行了第 3 方 PCI 合规性和风险评估。 好的,我的立场是正确的。我确实希望这些秘密存储在不同的位置(因为 AES 上的 AES 只有在那时才有意义) 【参考方案1】:

我可以看到对拥有块流块密码 here 的引用,其中提到了 Bruce Schneier 的《应用密码学》一书。

我从未见过堆叠相同的密码(正如它在链接上所说),这个想法是每一方都信任不同的密码......所以在 AES 上堆叠 AES 并没有增加安全性,除非在这种情况下蛮力攻击。

我会将其中一个 AES 密码与另一个块密码交换,因此,如果 2 个密码中的一个被泄露,您的数据仍然是安全的。

【讨论】:

以上是关于交替密码(分组密码和流密码)的主要内容,如果未能解决你的问题,请参考以下文章

分组密码的模式

分组密码与流密码

密码学基础知识分组密码

分组密码加密模式选择都有哪些?

技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)

密码编码学与网络安全(第五版)课后习题-CH03