SQL Server格式 - 保留加密

时间:2015-05-15 10:29:15

标签: c# asp.net sql-server security encryption

我的旧系统包含数据库,其中包含char(20)类型的列,客户决定加密该列以满足某些业务需求但是对于某些系统集成需要输出列的长度类似于输入是20岁,我读过Format-Preserving encryption

我的问题是,格式保留加密是否像AES方法一样强大,是否有任何SQL Server实现可用于大量数百万条记录?

2 个答案:

答案 0 :(得分:0)

您可以构建基于AES的安全格式保留加密。 Here是我对另一个问题的回答,我在其中展示了使用AES作为构建块实现格式保留加密的代码。有关如何完成此操作的详细信息,请参阅斯坦福大学Boneh教授关于格式保留加密的this lecture

答案 1 :(得分:0)

问题FPE无法判断字段是否已加密。它通常用于信用卡号码,但FPE版本的信用卡号码如果被盗,即使它不是原始号码,它仍然可以是有效的信用卡号码并被恶意使用人。

FPEAES一样强,答案是肯定的,不是。对于3个字符的字符串,FPE将是一个非常差的加密,而如果您在300个字符的字符串上使用它,那么它可能会超过AES 256。但生成速度比AES要慢。 AES在加密时几乎具有稳定的速度,您可以根据字符串长度估计所需的时间,并且 NOT 的输出将是人类可读/可用的。

示例不是通过加密实现的,而是为了说明不同之处:

姓名:Frank Stall

使用FPE加密

姓名:Steve Moore

即使名称已成功加密,它仍然是想要窃取身份的人可用的有效值(请记住它只是为了说明差异)。从结果中您可以直观地看出价值是一个名称,但即使您知道它也无法判断它是否已加密。

使用AES加密

姓名:WOa8+6KskFZ7IdNYgZ3+9BGDJrVfSVd61dDcX1JcVK8=

正如您所看到的,如果您查看基本AES加密的结果,字符串长度不必匹配,则该值无法用人类猜测它是什么。你怎么能告诉我这不是我的生日我只是把它放在那里而不是名字。