有许多已发布的报告称,在旧版Android上,我们需要提供自己的基于SecureRandom
的初始化向量(IV),因为默认值不是随机的:
相反,从API级别23开始,如果您尝试提供自己的IV,则还必须Android cryptography API not generating safe IV for AES,否则您在加密时不会获得"来电者提供的IV"异常。
据推测,在线路的某个地方,Android来自可怕的"足够好"在IV生成方面。
什么是截止值,在此之下我们应该生成自己的IV而不是使用Android生成的IV?
答案 0 :(得分:2)
从安全的角度来看,您应该始终提供自己的IV,因为您可以完全控制其随机化质量,并消除一个潜在的安全弱点。
关于例外情况,在您看来,IV是随机且好的。但是从Android的角度来看,你提供的IV是固定的,因此不好,API不知道它是否是随机生成的。因此异常"Caller-provided IV not permitted when encrypting"
只是一个警告,试图警告开发人员不要使用坏IV并鼓励他们使用内置的IV。
但请注意,内置IV只是构建IV的一种方法。正如您所看到的,从API级别23开始,没有人能够保证其质量,因此最佳做法仍然是自己确保自己的IV质量。