RAND() 是否具有低熵来生成盐?
Does RAND() has low entropy to generate salts?
我必须加密数据库中的多个数据(无密码)
我会用盐来防止彩虹攻击。
我正在生成这样的盐:
mysalt = UNHEX(SHA2(RAND(),512))
RAND()(mysql 函数)是足够的熵源吗?我应该让我所有的盐值彼此不同,但如果我的 PRNG 有太多碰撞,情况就不是这样了。它取决于数据库中的记录数吗?如果是这样,RAND()
的限制是什么?如果上述方法不好,哪种方法可能是一种很好的替代技术?最后,加盐密码也好吗?
I have to encrypt several data in my DB (no password) I would use a salt to prevent rainbow attack.
如前所述,您应该使用适当的术语来确保我们谈论的是同一件事。根据评论,我们假设您正在为 block mode (cbc, cfb or ofb) 生成一个 IV(初始化向量)。 IV 正在启用安全密钥重用。与彩虹桌无关。
mysalt = UNHEX(SHA2(RAND(),512))
RAND()
生成一个介于 0 和 1 之间的浮点数。您的函数有效地将浮点数用作字符串,因此正确的表示法应该是 sha2(convert(RAND(),CHAR),128)
,AES 无论如何都使用 128 位 IV。没有理由产生更多。
is RAND() (mysql function) an enough source of entropy?
取决于使用的模式。某些模式(CTR、CFB)的 IV 需要是唯一的(事件一个简单的计数器就足够了),对于 CBC 和 OFB 模式,IV 需要是“不可预测的”(比随机项更强)。
我无法找到 RAND() 函数的源状态,因此我无法保证它不会被暴力破解(在 NLFSR PRNG 的基于时间戳的源的情况下可以做到)。我不太愿意深入研究 mysql 源代码(据我记得 mysql 使用 OS rand 函数,所以这将取决于底层系统,我可能是错的这里)。因此,假设初始状态足够随机,RAND() 可以安全地为 CBC 生成 IV。似乎这里没有人能够证实或否认这一假设。使用 RANDOM_BYTES()
可以保证使用加密安全的随机源。
Does it depend from number of records in DB?
If it is the case what is the limit with RAND()?
您需要唯一的 key-iv 组合。您拥有的记录越多,价值冲突的可能性就越高。在这里,我们再次使用取决于系统的初始 RAND 状态大小,尽管在评论中有人声称它是 4 个字节。这真的不算多。
Which could be a good alternative technique if that above isn't good?
Finally is that good to salt passwords too?
如前所述,RANDOM_BYTES 正在使用 SSL 库中的随机生成器,这需要加密可行。
我必须加密数据库中的多个数据(无密码) 我会用盐来防止彩虹攻击。 我正在生成这样的盐:
mysalt = UNHEX(SHA2(RAND(),512))
RAND()(mysql 函数)是足够的熵源吗?我应该让我所有的盐值彼此不同,但如果我的 PRNG 有太多碰撞,情况就不是这样了。它取决于数据库中的记录数吗?如果是这样,RAND()
的限制是什么?如果上述方法不好,哪种方法可能是一种很好的替代技术?最后,加盐密码也好吗?
I have to encrypt several data in my DB (no password) I would use a salt to prevent rainbow attack.
如前所述,您应该使用适当的术语来确保我们谈论的是同一件事。根据评论,我们假设您正在为 block mode (cbc, cfb or ofb) 生成一个 IV(初始化向量)。 IV 正在启用安全密钥重用。与彩虹桌无关。
mysalt = UNHEX(SHA2(RAND(),512))
RAND()
生成一个介于 0 和 1 之间的浮点数。您的函数有效地将浮点数用作字符串,因此正确的表示法应该是 sha2(convert(RAND(),CHAR),128)
,AES 无论如何都使用 128 位 IV。没有理由产生更多。
is RAND() (mysql function) an enough source of entropy?
取决于使用的模式。某些模式(CTR、CFB)的 IV 需要是唯一的(事件一个简单的计数器就足够了),对于 CBC 和 OFB 模式,IV 需要是“不可预测的”(比随机项更强)。
我无法找到 RAND() 函数的源状态,因此我无法保证它不会被暴力破解(在 NLFSR PRNG 的基于时间戳的源的情况下可以做到)。我不太愿意深入研究 mysql 源代码(据我记得 mysql 使用 OS rand 函数,所以这将取决于底层系统,我可能是错的这里)。因此,假设初始状态足够随机,RAND() 可以安全地为 CBC 生成 IV。似乎这里没有人能够证实或否认这一假设。使用 RANDOM_BYTES()
可以保证使用加密安全的随机源。
Does it depend from number of records in DB?
If it is the case what is the limit with RAND()?
您需要唯一的 key-iv 组合。您拥有的记录越多,价值冲突的可能性就越高。在这里,我们再次使用取决于系统的初始 RAND 状态大小,尽管在评论中有人声称它是 4 个字节。这真的不算多。
Which could be a good alternative technique if that above isn't good?
Finally is that good to salt passwords too?
如前所述,RANDOM_BYTES 正在使用 SSL 库中的随机生成器,这需要加密可行。