【问题标题】:SQL Server Format-Preserving encryptionSQL Server 格式保留加密
【发布时间】:2023-03-29 12:11:01
【问题描述】:

我有一个带有数据库的旧系统,该系统的表具有 char(20) 类型的列,并且客户决定为某些业务需求加密该列,但是对于某些系统集成,输出列的长度需要与输入相似是 20 岁,我读过 Format-Preserving encryption

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

【问题讨论】:

  • FPE 的问题是您无法判断该字段是否已加密。它通常用于信用卡号码,但如果 FPE 版本被盗,即使它不是原始号码,它仍然可以是有效的信用卡号码,因此被盗。 FPE 是否与 AES 一样强大?答案是肯定的和否定的。 3 个字符串上的 FPE 将是一种非常糟糕的加密,就像您使用 300 个字符的字符串一样,我很确定它会超过 AES 256。但是生成速度会比 AES 慢。 AES 几乎具有稳定的速度,并且输出不可读/不可用。
  • 非常感谢您的回复@Franck,我的情况是要加密 20 个字符,所以我认为它很小但是我很感兴趣,如果您能指导我了解碰撞部分,而不是评论您可以将上述评论作为答案发布

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    FPEAES 一样强吗?答案是肯定的和否定的。 FPE 在 3 个字符的字符串上将是一个非常糟糕的加密,而不是如果你在 300 个字符的字符串上使用它,那么它可能会超过 AES 256。但这会比AES 慢。 AES 在加密时几乎具有稳定的速度,您可以根据字符串长度估算所需时间,并且输出将可读/可用。

    以下示例并非通过真正的加密运行,只是为了说明差异:

    姓名:Frank Stall

    使用FPE加密

    姓名:Steve Moore

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

    使用AES加密

    姓名:WOa8+6KskFZ7IdNYgZ3+9BGDJrVfSVd61dDcX1JcVK8=

    您可以看到,如果您查看基本 AES 加密的结果,则字符串长度不必匹配,该值无法人工猜测它是什么。你怎么知道这不是我的生日我只是放在那里而不是名字。

    【讨论】:

    • "FPE版本的s信用卡号,即使不是原来的号码,如果被盗,它仍然可以是有效的信用卡号,被恶意人员使用"这个不是真的,使用后fpe,它就像一个无效的随机数。在 16 个整数中,碰巧发生碰撞是非常困难的。罪犯可以只尝试随机数,这仍然是徒劳的。
    • @Samuel 我当时确实提到过“它仍然可以是一张有效的信用卡”。为什么我这么说是因为我们有一个在 FPE 上加密的城市公共汽车通行证系统,并且我们遇到了一些案例,因为某些系统无法解密并且确实使用了原始值,因此我们收取了错误的信用卡。也是有效的信用卡号,只是不是正确的月度用户。
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2021-11-12
    • 2022-06-21
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多