Dizi verilirse sözde rastgele sayı üretecinin başlangıç ​​değerlerini nasıl belirleyebilirim?


10

Farzedin ki, doğrusal bir konjügasyon jeneratörü tarafından rastgele bir sayı dizisi üretildi. Yani,

xn+1=(aXn+c)modm

Tüm dönemi (veya en azından bitişik olarak büyük bir ardışık) verirsem , bu diziyi üreten ve x 0 parametrelerini nasıl yeniden yapılandırabilirim ? Sahte rasgele sayı üreteci biliniyorsa, başlangıç ​​parametrelerini belirlemek mümkün olacak genel bir yöntem arıyorum.a,c,mx0


Tam olarak ne biliniyor? Bitişik bir alt diziden , öğeler sırayla dizine eklenmedikçe dizinin nerede başladığını olarak söyleyemezsiniz . Eğer m bilinen, daha sonra bir ve c kolaylıkla tespit edilir. x0mac
hardmath

Yanıtlar:


11

Doğrusal Konjügasyon Jeneratörünün nasıl kırılacağı , Haldir ("Tersine Mühendislik Ekibi", Aralık 2004) makalesine bakınız :

Bu yazıda altı veya daha fazla ardışık sayıda PRNG çıkışı olan modül de dahil olmak üzere LCG'nin tüm değerlerini çözecek bir yöntem sunacağım.

Makale, genişletilmiş hassasiyetli aritmetik için Victor Shoup'un NTL'sini kullanarak C ile yazılmış "kavram kanıtı" kaynak kodunu içerir.


Harika bir gazeteydi! :) Sadece doğrusal uyumlu değil, diğer rasgele sayı üreteçlerine de uygulanabilecek daha genel bir yöntem biliyor musunuz?
Paul

@Paul: Elbette, parametreleri için yeterli çıktı verilerinden (ters problem) kolayca "çözülebilen" RNG'ler bulunabilir, ancak RNG ne kadar iyi olursa (çıktı görünümü daha rasgele), ters o kadar zor sorun olurdu. LCG vakasının çözümü, iyi bilinen belirli boyutsal kümeleme etkileri ile ilgilidir ve üretilen değer çiftlerini eşit olmayan bir şekilde dağıtır. Daha fazla bilgi için Doğrusal Olarak Oluşturulmuş Dizileri Dönüştürerek Kriptografik Olarak Güçlü Jeneratör Tasarımı
hardmath
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.