加密后如何更改aes-256密钥?

Mic*_*ris 7 security aes

我有一个网站,用户提交他们的个人数据,我正在考虑使用aes-256加密这些数据,他们的密码被用作加密的密钥,然后我将加密的数据存储在mysql数据库中......

现在,如果用户更改了密码,我将如何更改加密数据的密钥

我应该从数据库中收集所有数据,然后使用旧密钥解密其数据,然后使用新密钥再次对其进行加密?

eri*_*son 14

更改密码时,无需重新加密所有用户的数据.

生成密钥以加密用户的数据; 称之为"内容加密密钥".从用户密码中导出密钥; 称之为"密钥加密密钥".使用"密钥加密密钥"加密"内容加密密钥".存储加密密钥以及salt和用于密钥派生的迭代次数.

如果他们更改了密码,请使用旧密码解密内容加密密钥,并使用从新密码派生的密钥对其进行重新加密.您应该为新密码选择一个新的盐,并确保将其与新的加密密钥一起存储.

由于内容加密密钥是从大空间中随机选择的,因此在加密时可以安全地使用ECB作为密码模式.

即使你使用了一个尚未完整的算法,也不要简单地对密码进行哈希处理,即使你使用了salt.您需要重复数千次哈希操作.在大多数平台上都有用于(正确)执行此操作的库.使用密钥派生算法(来自PKCS#5的PBKDF2)从密码创建密钥.

此概念遵循基于密码的S/MIME加密的草案.