验证器

验证器有助于禁止对加密字段进行整个值替换。例如,请考虑下面的工资单数据表。

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 字段中的数据。这种整个值替换攻击可以完全绕过加密。加密纯文本前在该文本中添加上下文信息,可避免上述整个值替换攻击。此上下文信息用于验证未移动的纯文本数据。

如果加密数据时指定了验证器参数,则对数据进行解密时,需要相同的验证器。在加密时,验证器的哈希将与纯文本一起加密。解密时,必须将同一验证器传递给解密函数。如果这两个验证器不匹配,则解密将失败,这指示该值在加密之后已发生移动。建议使用存储结果的表的主键作为验证器。