quid :: createuuid()によって生成されたUUIDが暗号化品質のエンクロフィーに基づいているかどうかを教えるにはどうすればよいですか。
-
21-12-2019 - |
質問
QT5リファレンスからQUID:
quid quid :: createuuid()[静的]
Windows以外のプラットフォームでは、この関数は新しいUUIDを返します Variant Quid :: DCEとバージョンのQuuid :: Random。 / dev / urandomの場合 デバイスが存在し、UUIDを構築するために使用される数字は 暗号品質、それはユダインをユニークにするでしょう。そうでなければ、 UUIDの数は、ローカル疑似ランダムから取得されます 数値発生器(qsrand()によって播種されたqrand()) 通常は暗号化品質のものではありません。これは、UUIDがユニークであることを保証することはできません。
/ dev / urandomのプラットフォーム上で、実際に/ dev / urandomが利用可能であるかどうかをどのように指示することができ、それが実行されるときにこの関数によって使用されますか?
私は私が主に好奇心のために走ったこの小さなコードに基づいて、私の訴訟にはないと思われる:
while(true){
QUuid u=QUuid::createUuid();
QString str=u.toString();
if(str.contains("2222")){
qDebug()<<"UUID:"<<str;
return;
}
}
.
繰り返し実行すると、次の出力が生まれました。
1 UUID: "{8b42222b-bac3-4c93-b55d-0255a33115a2}"
2 UUID: "{5122227e-473e-4885-8285-8780cc51f71a}"
3 UUID: "{bfeed28f-f8da-4a69-9303-77388752222e}"
4 UUID: "{0000beee-690c-4875-9589-9e222222cedc}"
5 UUID: "{e5a2646d-1c81-4974-94ad-8b222265b67a}"
6 UUID: "{bb77d756-6726-4e9f-94d8-3d4892222a2f}"
.
ライン#4のむしろ奇妙な出力、および3番目と4番目の列の他の明白な対称性(予想される列3の開始時の4を除く)。
ありがとう!
解決
4行目の出力はほぼ確実にランダムなチャンスです。 6 UUIDは、大量のUUIDをテストする必要があることを確認したい場合は、ランダム性の表示を提供するのに十分な大きさのサンプルではありません(現実的に実行可能な以上の)。
列3と4について、3番目の列の先頭の "4"がUUIDバージョンを示しているため予期されています。 4列目の主要値( b 55d、 8 285、 9 303、...)も予想されますが、この値< href="https://en.wikipedia.org/wiki/universally_unique_identifier#version_4_.28random.29" rel="noreferrer">は常に8,9、a、またはb です。これらの値の外側には、3列目と4列目の特定の対称性がありません。
/dev/urandom
またはqrand()
を使用したかどうかを確認するために、QuiDクラスはこの情報を利用できませんが、本当に知りたいのであれば、Quuidクラスが実行して/dev/urandom
からデータを開いて読み取ります。私はこれがおそらくあふれていると主張します。セキュリティのために品質の乱数が必要な状況では、私は確かにqrand()
に頼らないでしょうか。プラグイン/ quid.cpp#l927-959 "REL=" NOREFERRER ">それがどのように播種されているかを与えられた、~Rine 959 )はおそらくUUIDを生成するのに十分良いです。
他のヒント
一般にあなたはこのようにコンソールで試すことができます
random="$(dd if=/dev/urandom bs=10 count=1)";
echo $random
.
これが10文字である場合、urandom
が機能しています。セットアップですべて問題ない場合は、QTも使用します。
私が知っている限りでは、これはシステムによって生成されたエントロピーを使用して作業するPSEDO乱数ジェネレータでもあります。 unedエントロピーが低すぎると、/dev/random
ブロックがブロックされている間、urandom
はあなたに数字を与え続けます。
だから絶対的なセキュリティに頼る必要がある場合は、Real RNG
を購入してください。 /dev/random
の「ランダム性」でOKの場合は、それを使用してください。システムの起動時に、多くの(何百万もの場合もっと)uuids
を作成していない場合は、urandom
は細かいですが、注意して使用しています。
OH、/dev/random
と/dev/urandom
はReal RNG
ではないのですか?
状況を再現することで出力を再現できるからです。そのような楽しさのためにエントロピーが使用されている間は、システムを正確に観察することなくまあこれは不可能です...しかし理論的にはそれが可能です。本物のランダム性のために、量子状態を観察する装置を持つことをお勧めします。