كيف يمكنني معرفة ما إذا كان ويد التي تم إنشاؤها بواسطة كويد::كرياتيويد() ويستند على إنتروفي من جودة التشفير?

StackOverflow https://stackoverflow.com//questions/25038169

  •  21-12-2019
  •  | 
  •  

سؤال

من مرجع كيو تي 5 على كويد:

كويد كويد::كرياتيويد () [ثابت]

على أي منصة أخرى من ويندوز ، هذه الوظيفة بإرجاع ويد جديد مع البديل كويد::دس والإصدار كويد:: عشوائي.إذا كان / ديف / أوراندوم الجهاز موجود ، ثم الأرقام المستخدمة لبناء ويد سيكون من جودة التشفير ، الأمر الذي سيجعل ويد فريدة من نوعها.خلاف ذلك ، فإن سيتم الحصول على أرقام ويد من شبه عشوائي المحلية عدد المولدات (قرند () ، الذي هو المصنف من قبل كسراند ()) وهو عادة لا من نوعية كريبتوغرافيك ، مما يعني أن ويد لا يمكن أن تكون مضمونة لتكون فريدة من نوعها.

عندما على منصة مع / ديف / أوراندوم, كيف يمكنني معرفة ما إذا كان / ديف / أوراندوم في الواقع هو متاح وسيتم استخدامها من قبل هذه الوظيفة عند تشغيله?

أظن أنه لم يكن في حالتي ، بناء على هذا الرمز الصغير الذي ركضته في الغالب من أجل الفضول:

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 (باستثناء 4 في بداية العمود 3 الذي كان من المتوقع).

شكراً!

هل كانت مفيدة؟

المحلول

enter image description here

الإخراج الخاص بك على الخط 4 يكاد يكون من المؤكد مجرد فرصة عشوائية.6 ويد ليست عينة كبيرة بما فيه الكفاية لتقديم أي مؤشر على العشوائية ، إذا كنت تريد حقا أن تعرف على وجه اليقين سوف تحتاج إلى اختبار عدد هائل من ويد (أكثر مما هو ممكن واقعيا).

وفيما يتعلق العمود 3 و 4 ، كما كنت قد لاحظت الرائدة "4" في العمود 3 ومن المتوقع لأنه يشير إلى إصدار ويد.القيمة البادئة في العمود 4 (b 55 دال, 8 285, 9 303, ...) على الرغم من المتوقع أيضا ، هذه القيمة سيكون دائما 8 أو 9 أو أ أو ب.خارج هذه القيم ، وأنا لا أرى أي التماثلات معينة في الأعمدة 3 و 4.

للتحقق مما إذا كان /dev/urandom أو qrand() تم استخدامه ، فئة كويد لا تجعل هذه المعلومات متاحة ، ولكن إذا كنت تريد حقا أن تعرف هل يمكن أن تفعل دائما ما الطبقة كويد لا ومحاولة لفتح وقراءة البيانات من /dev/urandom.أود أن أزعم أن هذا ربما يكون مبالغة.بينما أنا بالتأكيد لن تعتمد على qrand() في أي حالة حيث هناك حاجة إلى أرقام عشوائية الجودة للأمن ، انها التنفيذ (بالنظر إلى كيفية تصنيفه ، ~ السطر 959) هو على الارجح جيدة بما فيه الكفاية لتوليد ويد.

نصائح أخرى

بشكل عام ، يمكنك تجربته على وحدة التحكم بهذه الطريقة

random="$(dd if=/dev/urandom bs=10 count=1)";
echo $random

إذا كان هذا يعطيك 10 أحرف, urandom يعمل.إذا كان كل شيء على ما يرام مع الإعداد الخاص بك, كيو تي أيضا سوف استخدامه.

بقدر ما أعرف ، وهذا هو أيضا مجرد مولد رقم عشوائي بسيدو العمل مع الانتروبيا التي تم إنشاؤها بواسطة النظام.بينما /dev/random كتل عند استخدام الانتروبيا منخفضة جدا, urandom يستمر في إعطائك الأرقام.

لذلك إذا كنت بحاجة إلى الاعتماد على الأمن المطلق ، وشراء حقيقية RNG.إذا كنت على ما يرام مع "العشوائية" من /dev/random, ، استخدمه.إذا كنت لا تخلق هذا العدد الكبير (الملايين ربما أكثر) uuids ولا يعمل عند بدء تشغيل النظام, urandom على ما يرام ولكن لاستخدام بحذر.

أوه ، لماذا /dev/random و /dev/urandom ليست حقيقية RNG ?

ببساطة لأنه يمكنك إعادة إنتاج إنتاجه عن طريق إعادة إنتاج الموقف.حسنا هذا لن يكون ممكنا دون مراقبة بالضبط نظام في حين يتم استخدام الكون لمثل هذه المتعة...ولكن من الناحية النظرية ممكن.لعشوائية حقيقية قد ترغب في الحصول على جهاز مراقبة الدول الكم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top