使用默认mt19937 RNG生成的升级UUID是否对会话ID安全?

时间:2016-09-16 13:05:33

标签: c++ security boost uuid boost-uuid

我需要生成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();
}

对具有安全洞察力的人的建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

MT不是加密安全的RNG。

boost::random_device保证(通过文档)仅在存在伪像安全且不确定的情况下才存在。请注意,std::random_device并非如此。

对于任何严肃的申请,您不能相信仅仅是文件保证。但对于一个小规模的不重要的人应该这样做。

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