0

我需要生成 UUID 以用作不可预测/可猜测的会话 ID。

这可以使用boost 的 UUID 库轻松完成:

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 需要认真对待它的播种任务。

但是,我想知道是否可以通过使用像boost::random_device这样的非确定性 RNG 来获得重要的安全性,以及它将如何影响 UUID 生成的速度。

boost::uuids::uuid newUUID()
{
  static boost::uuids::basic_random_generator<boost::random_device> gen;
  return gen();
}

感谢具有安全洞察力的人的建议。

4

1 回答 1

2

MT 不是加密安全的 RNG。

boost::random_device保证(由文档)仅在密码安全且不确定的情况下才存在。请注意,这不是真的std::random_device

对于任何严肃的应用程序,您都不能相信仅仅有文件证明的保证。但对于一个小规模的不重要的,它应该这样做。

编写自己的密码安全代码或系统通常是个坏主意。描述有人打败你的系统有多糟糕,因为这对你需要付出多少努力真的很重要。

于 2016-09-16T13:19:23.077 回答