在存储在数据库中的个人信息已加密但其中一个字段仅包含少数情况下的数据的系统中,将字段留空而不是加密空字符串是否更有意义?
一方面,如果我选择将该字段留空,我将泄露有关记录内容的信息(填充与否)
另一方面,如果我加密空字段,大多数时候我会给潜在的攻击者一个已知的明文。
使用的算法是 AES-256。
我知道即使攻击者获得了密文/明文对,攻击者仍然必须暴力破解密钥,但是我很好奇社区认为最佳实践方法会在这里。
在存储在数据库中的个人信息已加密但其中一个字段仅包含少数情况下的数据的系统中,将字段留空而不是加密空字符串是否更有意义?
一方面,如果我选择将该字段留空,我将泄露有关记录内容的信息(填充与否)
另一方面,如果我加密空字段,大多数时候我会给潜在的攻击者一个已知的明文。
使用的算法是 AES-256。
我知道即使攻击者获得了密文/明文对,攻击者仍然必须暴力破解密钥,但是我很好奇社区认为最佳实践方法会在这里。
由于只有少数记录可能包含该字段中的实际数据(非空),因此攻击者可以高概率猜测明文(空的)。所以你的假设是正确的。幸运的是,据我们所知,对于您和我们来说,AES 并不真正容易受到已知明文攻击。
我们已经知道的攻击需要大量的明文及其对应的密文,并且计算复杂度非常高(256 位密钥为2254.4 )。
我会说不用担心。继续加密该数据字段。
我建议您尝试对数据加盐(任何形式的不同盐)。这样,即使是一个空字段也有“数据”,并且一旦加密就会是一个随机的 blob。