请告知我们使用加密的情况

时间:2009-11-20 09:32:24

标签: encryption aes

我们的客户想给我们一个数据库。原始数据库有一个电话号码列。他不想给我们一个电话号码。不知怎的,我不确定为什么 - 决定客户端会给我们加密的电话号码加密128位AES密钥。

我们会告诉客户哪个电话号码是出于某种目的而入围,但我们永远不会知道实际的电话号码是什么。我们只知道加密号码。

以下是我不明白的事情:

  1. 是否使用适合此目的的128位AES密钥加密?
  2. 客户端是否应保留用于转换数字的AES密钥或 客户应该而不是 保留密钥创建数据库 用原型映射原始数字 加密号码
  3. 应该使用相同的密钥来转换所有数字或不同的
  4. 如果使用随机生成的密钥来加密数字则不然 可能是两个电话号码 加密文本可能相同吗?

2 个答案:

答案 0 :(得分:5)

IMO这是错误的做法。客户端应该用一个指向带有真实电话号码的表的ID替换它们,而不是加密电话号码,这仍然有可能让你解密它(例如,因为有人泄漏了密钥)。当然,这个查找表和他在一起,你永远不会得到它。

原始表:

Name   | Phone
-------+---------
Erich  | 555-4245
Max    | 1234-567

你得到:

Name   | Phone
-------+---------
Erich  | 1
Max    | 2

只有您的客户有:

ID | Phone
---+---------
1  | 555-4245
2  | 1234-567

答案 1 :(得分:1)

按顺序解决您的疑虑:

  1. 可能是,可能不是。事实上你还没有真正提到目的是什么:

    • 为什么需要加密?
    • 是谁受到保护?
    • 数据的价值(或对您承担的责任)是什么?
    • 假设攻击者的动机是多少?
    • 安全性收益可接受哪些性能损失?
    • 您有哪些硬件?
    • 谁拥有对系统各个部分的物理/逻辑访问权限?

    等等,等等。在不知道情况的情况下,无法确定这是否是适当的加密方案。 (虽然它可能是一个可靠的选择)。

  2. 当然这是由客户决定的?不过,我会说,后一种情况似乎完全打败了加密的目的。
  3. 应该使用相同的密钥来转换所有数字,除非你喜欢玩杂耍的密钥来尝试记住哪一个用于解密哪些电话号码。如果安全系统设计得很好,这将不会带来任何额外的安全性,只会是一个奇怪的头痛。
  4. 根据加密的定义,没有。它始终是一个可逆映射,这意味着不会丢失任何信息,例如您可以使用哈希。因此,密文的每个实例都有一个唯一的明文,它将加密到它(使用给定的密钥)。
  5. 虽然总而言之这听起来并不像是需要的。这听起来像是有人根据外观而不是技术优势做出决定 - “我们使用浏览器中使用的相同128位加密来加密您的电话号码”听起来不错但实际上是否需要?