检测伪随机数?

时间:2018-04-05 14:30:25

标签: security machine-learning cryptography probability uuid

我的客户端代码生成UUID并将它们发送到服务器。

例如,'6ea140caa83b485f9c98ebaacfb536ce'将是一个有效的uuid4发回。

有没有办法检测或阻止用户发回有效但“用户生成”的uuid4,如'babebabebabe4abebabebabebabebabe'

例如,防止某些类别的一种方法是查看数字的二进制表示中出现0和1的次数。这可能适用于'00000000000040000000000000000000'之类的字符串,但不适用于所有字符串。

2 个答案:

答案 0 :(得分:2)

这取决于......

没有办法完全确定,但根据你在那里使用的UUID版本/子类型,可能是一种检测至少一些不规则值的方法:

https://tools.ietf.org/html/rfc4122#section-4.1定义了UUID的原始版本1,以及uuid字段的布局......

例如,您可以检查版本和变体字段是否有效...

如果您的UUID生成实际上使用版本1,除了第一次测试版本和变体之外,还可以测试时间戳是否在有效范围内...例如,有问题的UUID可能不太可能在1600年......或将来产生的

所以可以应用这样的测试来检查值是否真的有意义,或者是完全的胡言乱语......它无法保护你免受某人的思考:好的......让我们分析一下并提供一个满足的手动选择值所有条件

答案 1 :(得分:1)

没有办法将用户生成的UUID与随机生成的UUID区分开。

首先,用户生成的UUID也可能是部分随机的。但我们假设它不是。

在这种情况下,您想要检测模式。但是,尽管您提供了一个模式的示例,但模式几乎可以是任何模式。例如,以下字节数组看起来完全随机,对吧?

TempData["error"] == true

但实际上它通常是在加密社区中使用的 no-up-my-sleeve数字:它只是Pi的编码(在这种情况下是64位浮点数) ,因为我有点懒惰。)

当然有随机性测试,例如FIPS随机数测试。那些需要非常多的输入来查看某些内容是否失败或成功。即便如此:它只表明某些统计特性确实是由随机数发生器实现的。 Pi的编码很可能会成功。

令人讨厌的是,一个随机数生成器完全有可能生成一些字符串,它们看起来并不是随机的,如果只是偶然的话。比特串越小,随机数发生器产生一些看起来不随机的东西的可能性就越大。而UUID并不是那么大。

所以是的,当然你可以做一些测试,但你永远不能确定:你会误报两个误报。