从生成的数字中猜测随机种子是否容易?

时间:2017-10-17 10:56:33

标签: python c random cryptography

我需要实现一些私有数据的确定性随机化。即我们有一些原始的UUID,然后我们使用它的md5哈希为一个RNG播种并生成一个新的UUID:

input hashlib, uuid, random

# seed RNG
hex_seed = hashlib.md5(original_uuid.encode()).hexdigext()
seed = int(hex_seed, 16)
random.seed(seed)
# generate new UUID
val = random.getrandbits(128)
new_uuid = str(uuid.UUID(int=val))

原始值不仅可以是UUID,还可以是用户名或其他数据,以及结果值,因此md5哈希值。但最重要的是UUID。

现在的问题是:攻击者在给定UUID的情况下计算原始UUID值有多难?

可以使用彩虹表反转MD5。但是很难反转Python的内置RNG来确定128个生成字节的种子值吗?我试着自己找到它但是卡住了一下。 到目前为止,我发现getrandbits(128)导致4次调用genrand_int32,而seed()调出导致init_by_array调用4个32位整数数组

参考文献: 1. Python的RNG源代码(在C中):https://hg.python.org/cpython/file/2.7/Modules/_randommodule.c#l231

0 个答案:

没有答案