使用默认 mt19937 RNG 生成的提升 UUID 是否对会话 ID 安全?
Are boost UUIDs generated using default mt19937 RNG secure for session IDs?
我需要生成 UUID 以用作不可预测/可猜测的会话 ID。
这可以使用 boost's UUID library 轻松完成:
boost::uuids::uuid newUUID()
{
static boost::uuids::random_generator gen;
return gen();
}
返回的UUID很容易转换为字符串。
以上代码等价于:
boost::uuids::uuid newUUID()
{
static boost::uuids::basic_random_generator<boost::mt19937> gen;
return gen();
}
所以我们使用的是 Mersenne Twister 19937 伪随机数生成器。看起来 boost 认真对待 seeding it properly 的任务。
但是,我想知道通过使用像 boost::random_device 这样的非确定性 RNG 是否可以获得重要的安全方面的东西,以及它将如何影响 UUID 生成的速度。
boost::uuids::uuid newUUID()
{
static boost::uuids::basic_random_generator<boost::random_device> gen;
return gen();
}
非常感谢具有安全洞察力的人的建议。
MT 不是加密安全的 RNG。
boost::random_device
保证(由文档)仅在 cruptographically 安全且不确定的情况下存在。请注意,std::random_device
.
并非如此
对于任何严肃的应用程序,您都不能相信仅仅有文件证明的保证。但是对于一个不重要的小规模它应该做。
编写自己的加密安全代码或系统通常不是一个好主意。描述有人破坏您的系统有多糟糕,因为这对您需要付出多少努力非常重要。
我需要生成 UUID 以用作不可预测/可猜测的会话 ID。
这可以使用 boost's UUID library 轻松完成:
boost::uuids::uuid newUUID()
{
static boost::uuids::random_generator gen;
return gen();
}
返回的UUID很容易转换为字符串。
以上代码等价于:
boost::uuids::uuid newUUID()
{
static boost::uuids::basic_random_generator<boost::mt19937> gen;
return gen();
}
所以我们使用的是 Mersenne Twister 19937 伪随机数生成器。看起来 boost 认真对待 seeding it properly 的任务。
但是,我想知道通过使用像 boost::random_device 这样的非确定性 RNG 是否可以获得重要的安全方面的东西,以及它将如何影响 UUID 生成的速度。
boost::uuids::uuid newUUID()
{
static boost::uuids::basic_random_generator<boost::random_device> gen;
return gen();
}
非常感谢具有安全洞察力的人的建议。
MT 不是加密安全的 RNG。
boost::random_device
保证(由文档)仅在 cruptographically 安全且不确定的情况下存在。请注意,std::random_device
.
对于任何严肃的应用程序,您都不能相信仅仅有文件证明的保证。但是对于一个不重要的小规模它应该做。
编写自己的加密安全代码或系统通常不是一个好主意。描述有人破坏您的系统有多糟糕,因为这对您需要付出多少努力非常重要。