验证器
验证器有助于禁止对加密字段进行整个值替换。例如,请考虑下面的工资单数据表。
Employee_ID |
Standard_Title |
Base_Pay |
---|---|---|
345 |
Copy Room Assistant |
Fskj%7^edhn00 |
697 |
Chief Financial Officer |
M0x8900f56543 |
694 |
Data Entry Supervisor |
Cvc97824%^34f |
黑客无需进行解密,即可根据存储密文的上下文推断出重要信息。由于 Chief Financial Officer 的工资高于 Copy Room Assistant 的工资,因此 M0x8900f56543 的加密值必须大于 Fskj%7^edhn00 的加密值。如果是这样,则对表具有 ALTER 权限的任何用户都能提高 Copy Room Assistant 的工资,方法是:使用 Chief Financial Officer 的 Base_Pay 字段中存储的数据的副本替换 Copy Room Assistant Base_Pay 字段中的数据。这种整个值替换攻击可以完全绕过加密。加密纯文本前在该文本中添加上下文信息,可避免上述整个值替换攻击。此上下文信息用于验证未移动的纯文本数据。
如果加密数据时指定了验证器参数,则对数据进行解密时,需要相同的验证器。在加密时,验证器的哈希将与纯文本一起加密。解密时,必须将同一验证器传递给解密函数。如果这两个验证器不匹配,则解密将失败,这指示该值在加密之后已发生移动。建议使用存储结果的表的主键作为验证器。