此功能产生的盐有多独特?



我使用此函数为每个用户注册时生成唯一的盐(随机字母和数字(。盐碰撞的几率有多大?

// length is for the underlying bytes, not the resulting string.
String generateSalt([int length = 94]) {
final Random random = Random.secure();
var values = List<int>.generate(length, (i) => random.nextInt(256));
return base64Url.encode(values);
}

到第一个近似值,它们不会碰撞! 事实上,我建议length更小,这样你就不会透露RNG的熵。

您的算法当前生成log2(256**94)= 8*94 = 752 个随机位。 通过生日问题,我们知道您必须产生2**(752/2)= 2376个值才能有 50% 的几率发生冲突。 生成这么多值是不可能的。

让我们将其降低到更合理的 2128终身碰撞几率。 这意味着您希望生成 256 个随机位,并且意味着您的length256/8= 32。

请注意,上述所有内容都依赖于Random.secure实际上是一个csPRNG,并且任何攻击者都不知道其任何状态。 鉴于上述概率,这是该系统更大的漏洞。

相关内容

  • 没有找到相关文章

最新更新