予測不能/推測可能なセッション 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();
}
セキュリティに詳しい方からのアドバイスをお待ちしております。