我有一个带有数据库的旧系统,该数据库的表具有char(20)类型的列,客户决定为某些业务需要对该列进行加密,但是对于某些系统集成,输出列的长度必须与输入的长度相似,即20,我已经读过Format-Preserving encryption
我的问题是,保留格式的加密是否像AES方法一样强大,并且是否存在任何可用于数百万条记录的SQL Server实现?
FPE
的问题是您无法告知该字段是否已加密。它通常用于信用卡号,但是即使不是原始号码,它的FPE
版本的信用卡号也被盗了,即使它不是原始号码,它仍然可以是有效的信用卡号,并被恶意人员使用。
FPE
是否像AES
一样强,答案是肯定的。与在300字符串上使用FPE
相比,在3字符串上使用AES 256
加密效果很差。但这将比AES
生成速度慢。 AES
加密时几乎具有稳定的速度,您可以估计所需的时间取决于字符串的长度,并且输出NOT
将为人类可读/可用。没有真正通过加密运行但仅为了说明区别的示例如下:名称:Frank Stall
使用FPE
加密
名称:Steve Moore
即使名称已成功加密,但仍是想要窃取身份的人可以使用的有效值(请记住,这只是为了说明区别)。从结果中您可以直观地看出该值是一个名称,但是您自己也可以,即使您知道它也无法知道它是否已加密。
使用AES
加密
名称:WOa8+6KskFZ7IdNYgZ3+9BGDJrVfSVd61dDcX1JcVK8=
正如您所看到的,如果您看的是基本AES加密的结果,则字符串长度不一定匹配,因此该值不可能人为地猜测是什么。你怎么能知道这不是我的生日,我只是放在那儿而不是名字。
might恰好对应于一些真实的信用卡号。
[FPE结果名称史蒂夫·摩尔(Steve Moore)的观点也是如此,“仍然是想要窃取身份的人可以使用的有效值。”同样,请确保身份窃贼可以出于某种邪恶目的尝试使用该名称。但是,他们使用完全随机的虚构名字的风险并不比身份反派分子只是随机虚构名字本身的风险高。窃取FPE加密的(因此是完全随机的)名称,出生日期,邮政编码,信用卡号等语料库,对于身份盗窃者而言,比起他们只是首先构成数据而言,没有更多的价值。但是,我同意FPE的一个棘手方面是,就数据本身是否被加密而言,它在数据本身中并不是固有的明显特征。这可能会带来一些问题,即管理数据的人员可能会错误地使用数据,就好像它是真实数据一样,或者相反,如果丢失了加密步骤,则可能不会意识到并因此暴露了未加密的数据。但是,解决方案是更好地管理相关的元数据,以获取信息的加密状态。