Yii2加密生成不同的加密数据

时间:2017-09-29 13:03:43

标签: encryption yii2

我在Yii2中使用encryptByKey()进行SSN和帐号加密。问题是当我尝试重新生成它时,它会为同一个帐号生成不同的加密数据。

我无法在数据库中将其匹配,如下所示:

{ bar: 'test' }

每次加密时,是否有可用于生成相同加密数据的加密方法?

谢谢,

1 个答案:

答案 0 :(得分:1)

通常,这就是加密应该起作用的方式。它有时被称为"ciphertext indistinguishability."每次加密给定的明文时产生相同的密文,通过允许攻击者分析模式的密文集合来破坏安全性。

在这种情况下,您似乎只存储加密帐号的一个实例;你可以争辩说,因为"消息"永远不会重复,密文无法区分是没有实际意义的。这可能会导致您证明使用ECB模式(如果您的API提供)或HMAC(消息身份验证代码,由hashData()方法提供)来计算查找密钥。如果攻击者可以访问您的数据库,则每个密钥只会有一个实例,并且不会显示任何内容。

但是,如果攻击者可以提供系统加密的帐号,则仍然不安全。例如,攻击者可以在注册期间构成合法用户并提供SSN。如果他们选择重复的号码,然后查看数据库,他们的恶意选择的加密值将匹配合法的记录。或者,如果系统拒绝其帐号,因为它是重复的,则攻击者将知道它是合法用户使用的号码。这称为oracle attack.

如果您使用HMAC(或ECB模式加密),则必须非常小心地设计应用程序,以防止选择明文和oracle攻击。而且,坦率地说,如果您现在第一次遇到这些想法,那么您的知识中可能存在许多其他缺陷,这些差距将导致您的应用程序中容易被利用的漏洞。