我正在寻找一种有效的方法来使用 AES 加密数据库中的多个字段,使用单个全局密钥,在整个大型 Web 应用程序中使用。
显然,为了重用这个密钥,每个要加密的字段都需要一个唯一的随机 IV。
我宁愿不向数据库引入更多字段来存储这些 IV 中的每一个,因此编程方法似乎是以某种方式派生这些 IV。
我正在玩弄使用以下任何一种:
key = sha256(global_key + table_name)
iv = sha256(column_name + primary_key)
甚至简单地说:
key = global_key
iv = sha256(table_name + column_name + primary_key)
我倾向于前者来生成每个表的键。
我已经读过IV不需要保密。因此,我正在假设派生密钥或 IV(即使算法已知)并不比任何其他非秘密 IV 更不安全,只要原始密钥仍然是 secret。
问题是:
我的方法有致命缺陷吗?我是否引入了任何严重的弱点,如果对手获得数据库的副本,会使他们更容易检索明文数据?
我意识到这可能会征求一个词的答案。
非常欢迎对替代/更好方案的建议,以及对现有作品的参考以及它们如何实现类似场景。