我必须为大型数据库表提供数据完整性。因此,如果狡猾的管理员手动更改表(而不是通过 UI),我希望能够检测到它。
我的想法是为每条记录设置 HMAC,并在用户通过 UI 更改表时计算表的增量 HMAC:
- 计算第一条记录的 HMAC - HMAC_Current。
- 计算新记录的 HMAC - HMAC_i
- 将表的新 HMAC 计算为 HMAC_Current = HMAC(HMAC_Current + HMAC_i)。
优点:
- 每次用户通过 UI 添加记录时,无需计算整个表的 HMAC。
缺点:
- 当用户删除或更改记录时,我必须从该记录重新计算表的 HMAC 到表的末尾。
- 当我想检查数据完整性时,我必须检查每条记录的 HMAC。然后从上到下计算整个表的 HMAC,并将其与 HMAC_Current 进行比较。
有更好的方法吗?