对于 Rockbox 的密码存储插件(用 C 编写),我需要生成初始化向量。
问题是我没有很好的随机性来源。Rockbox 提供的 random() 不是加密 RNG。而且我几乎没有任何可以访问的随机源(没有鼠标移动,......在运行 Rockbox 的 iPod 上)。
该密钥当前是通过 PBKDF2 从用户提供的密码和盐(这是一个常量前缀 + 来自 random() 的一些数据)中派生的。我认为伪随机数据对于具有 10000 次 PBKDF2 迭代的盐来说应该足够好。
但是,我从哪里获取初始化向量?如果我获取一些半随机数据(时间 + 随机())和 SHA,比如 10000 次,可以吗?我应该使用从 random() 中获取的种子来使用 arc4random 吗?
如果我实际上从不使用相同的密钥两次(每次更改存储的数据时都会重新计算盐),我什至需要 IV 吗?处理此类情况的最佳方法是什么?
编辑:只有一个用户(我,拥有 IPod),加密算法:AES-CBC 256 位。该文件仅存储各种网站的站点/帐户/密码列表。它很少被修改(每当我在网站上创建一个新帐户时),当这种情况发生时,就会生成一个新的盐和一个新的 IV。