0

予測不能/推測可能なセッション ID として使用する UUID を生成する必要があります。

これは、 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::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 に答える