我们何时需要使用Android提供我们自己的随机初始化向量(IV)?

Com*_*are 23 security android

有许多已发布的报告,在旧版本的Android上,我们需要提供我们自己SecureRandom的初始化向量(IV),因为默认值不是随机的:

相反,随着API等级23,如果你尝试提供你自己的IV,你还必须调用setRandomizedEncryptionRequired(false)KeyGenParameterSpec.Builder,否则你会得到异常的"加密时,调用者提供IV不允许".

据推测,在线路的某个地方,Android在IV生成方面从"可怕"变为"足够好".

什么是截止值,低于该截止值我们应该生成自己的IV而不是使用Android生成的IV?

THN*_*THN 2

从安全角度来看,您应该始终提供自己的 IV,因为您可以完全控制其随机化质量,并消除一个潜在的安全弱点。

关于例外情况,在您看来,IV 是随机且良好的。但从Android的角度来看,你提供的IV是固定的,因此不好,API不知道它是否是正确随机生成的。所以这个例外"Caller-provided IV not permitted when encrypting"只是一个一般性警告,试图警告开发人员不要使用错误的 IV,并鼓励他们使用内置的 IV。

但请注意,内置 IV 只是构建 IV 的一种方法。正如您所看到的,从 API Level 23 开始,没有人能保证其质量,因此最佳实践仍然是您自己保证 IV 质量。