2016-09-16 4 views
0

予測不可能/推測可能なセッションIDとして使用するためにUUIDを生成する必要があります。セッションIDのデフォルトmt19937 RNGセキュアを使用して、ブーストUUIDが生成されますか?

これは容易boost's UUID libraryを用いて達成することができる。

boost::uuids::uuid newUUID() 
{ 
    static boost::uuids::random_generator gen; 
    return gen(); 
} 

返されるUUIDを容易に文字列に変換することができます。だから我々は、メルセンヌツイスター19937擬似乱数生成器を使用している

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

上記のコードは同等です。ブーストのように見えるのは、seeding it properlyというタスクが深刻だということです。

しかし、代わりにboost::random_deviceのような非確定的なRNGを使用することで、セキュリティの観点から重要なことが得られたのか、それがUUID生成の速度にどのように影響するのだろうかと思います。

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

セキュリティに関する洞察力のある方からのアドバイスをいただければ幸いです。

+2

安全をどういう意味ですか? AFAIKは、暗号的に安全ではありません。 – NathanOliver

+0

MTは本当に高速でかなり高品質ですが、暗号化RNGではありません。しかし、スピードは問題ではありませんが、MTは通常のシステムで毎秒GBのランダムデータを生成できます。それ@NathanOliver –

+0

は本当に質問です:それはこれらが推測/予測可能であるべきではないか、MTは、この目的のために十分に確保されたセッションIDを使用しようとしている場合はUUIDを生成するための暗号RNGを使用する必要があります。 – mgd

答えて

2

MTは暗号化された安全なRNGではありません。

boost::random_deviceはcruptographically安全かつ非決定的場合にのみ存在する(ドキュメントによる)が保証されます。これはstd::random_deviceについては当てはまりません。

は深刻なアプリケーションのために、あなたは単なる文書化保証を信頼することはできません。しかし、小規模で重要でないものについては、それはすべきです。

独自の暗号化された安全なコードやシステムを書くことは、通常は悪い考えです。誰かがあなたのシステムを倒したことがどれほど悪いかを記述してください

+0

[OK]を、単にユニークである必要がUUIDを生成するので、MTは完璧と高速ですが、予測不能/セッションIDのように推測可能であるべきのUUIDのために、必要な暗号RNGのですか?私たちは暗号鍵を生成することではなく、推測してはならないセッションIDについて話しています。 – mgd

+0

string-generatorを使用して、 'std :: random_device'または'/dev/urandom'からデータを送ることができます – sehe

+0

@mgd暗号化されていないとは、情報が控えめな人がその機能を取り消すことができることを意味します。同様に、指定されたものの次の/前のものを探したり、値の適度な選択の後にパターンを見つけたりします。 MTがあなたのUUIDの反復の可能性を低くするために十分にユニークな値を生成するならば、私は言及しませんでした。私はそう思うだろうが、私はそれを二重チェックなしに主張するつもりはない。上記のことは、RNGのUUIDジェネレータが完全に愚かではないと仮定していることに注意してください。愚かなUUIDジェネレータは、RNGの品質を無関係にする可能性があります。 – Yakk

関連する問題