سؤال

أنا أبحث عن PRNG (عشوائي زائفة) أنك في البداية بذرة مع مجموعة تعسفية من البايتات.

سمعت عن أي؟

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

المحلول

سيضمن تجزئة بذور الطول التعسفي (بدلاً من استخدام XOR كما اقترح Paxdiablo) أن التصادم غير مرجح للغاية ، أي يساوي احتمال تصادم التجزئة ، مع شيء مثل SHA1/2 هذا استحالة عملية.

يمكنك بعد ذلك استخدام بذور التجزئة كمدخلات إلى PRNG لائق مثل المفضل لدي ، The Mersenne Twister.

تحديث

يبدو أن تطبيق Mersenne Twister المتاح هنا بالفعل يقبل مفتاح الطول التعسفي: http://code.msdn.microsoft.com/mersennetwister/release/projectrelease.aspx؟releaseid=529

تحديث 2

لتحليل لمدى تصادم SHA2 غير المحتمل أن يرى مدى صعوبة العمل في العثور على واحدة ، نقلاً http://en.wikipedia.org/wiki/sha_hash_functions#sha-2 :

هناك هجمات preimage لقاء في الوسط ضد SHA-2 مع انخفاض عدد الجولات. أول واحد يهاجم 41 جولة SHA-256 من أصل 64 جولة مع تعقيد الوقت 2^253.5 وتعقيد الفضاء من 2^16 ، و 46 جولة SHA-512 من 80 جولة مع الوقت 2^511.5 والفضاء 2^3 . الهجمات الثانية 42 جولة SHA-256 مع تعقيد الوقت 2^251.7 وتعقيد الفضاء من 2^12 ، و 42 جولة SHA-512 مع الوقت 2^502 والفضاء 2^22.

نصائح أخرى

لماذا لا تقم فقط بتسلسلك التعسفي إلى نوع من الطول الصحيح (قم بتجميعه مع جزء من نفسه إذا لزم الأمر)؟ على سبيل المثال ، إذا كنت تريد بذرة "Paxdiablo" ولديك PRNG لديه بذرة بأربعة بايت:

paxd    0x70617864
iabl    0x6961626c
opax    0x6f706178
        ----------
        0x76707b70 or 0x707b7076 (Intel-endian).

أعلم أن البذور تبدو مصطنعة (وبعد اختيار المفتاح من شخصيات ألفا). إذا كنت ترغب حقًا في جعلها متباينة حيث من المحتمل أن تأتي العبارة من نطاق مماثل ، فإن xor مرة أخرى مع تمييز مثل 0xdeadbeef أو 0xa55a1248:

paxd    0x70617864    0x70617864
iabl    0x6961626c    0x6961626c
opax    0x6f706178    0x6f706178
        0xdeadbeef    0xa55a1248
        ----------    ----------
        0xa8ddc59f    0xd32a6938

أنا أفضل الثانية لأنها ستتحرك بسهولة أكبر بايت مماثلة إلى نطاقات متباينة (البتات العليا من البايتات في المميز متباينة).

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