我正在尝试保护用户在一系列记录卡上提交的数据。加密/解密将(希望)在浏览器中发生,因此用户尽可能多地控制安全过程。
我找到了一个非常棒的AES库(https://github.com/mdp/gibberish-aes)。不幸的是,我依靠用户来创建加密密钥,所以我想要一个更慢的算法。有许多散列库(如PHP的PHPPass),但我需要双向的东西。
我也对其他想法持开放态度。我只需要找到解决方案。
答案 0 :(得分:2)
您将加密算法与key derivation混合在一起。您不希望加密算法变慢,因为AES不存在使用正确密钥进行暴力强制的风险。
大概是因为你说“用户创建加密密钥”,你的意思是它是一个使用密钥密钥的方案? PBKDF2是推荐的方法,已获得NIST in SP800-132
批准由于你有这个标记的Javascript,看起来crypto-js支持PBKDF2
当您从用户那里获得密码/密码短语时,您需要生成一个salt并从PBKDF2派生实际的AES密钥。它不需要是双向的,因为相同的输入(密码,盐和轮数)将始终生成相同的密钥。
请注意,即使这是一个设计合理的密码系统。您不应在没有CBC or CTR mode的情况下使用AES,并且仍需要MAC数据(或使用GCM,这将兼顾两者)。