Neden rasgele sayı üreteçlerini birleştirmiyoruz?


60

Bir sözde rasgele sayı üretecinin kullanıldığı birçok uygulama vardır. Böylece insanlar, daha sonra kusurlu olduğunu bulmak için harika olduğunu düşündüklerini uygularlar. Son zamanlarda Javascript rasgele sayı üretecinde böyle bir şey oldu. RandU da daha erken. Twister gibi bir şey için uygun olmayan ilk tohumlama sorunları da var.

İki veya daha fazla jeneratör ailesini normal xor operatörüyle birleştiren kimseye örnekler bulamıyorum. Java.SecureRandom veya Twister uygulamaları gibi şeyleri çalıştırmak için yeterli bilgisayar gücü varsa, insanlar neden onları birleştirmiyor? ISAAC xor XORShift xor RandU oldukça iyi bir örnek olmalı ve tek bir jeneratörün zayıflığını diğerleri tarafından azaltıldığını görebilirsiniz. İçsel algoritmalar tamamen farklı olduğundan, sayıların daha yüksek boyutlara dağılımına da yardımcı olmalıdır. Birleştirilmemesi gereken bazı temel ilkeler var mı?

Gerçek bir rasgele sayı üreteci yapacak olursanız, insanlar muhtemelen iki veya daha fazla entropi kaynağını birleştirmenizi önerir. Benim örneğim farklı mı?

Aynı aileden olduğu gibi birlikte çalışan birkaç doğrusal geri besleme kayma kaydının ortak örneğini hariç tutuyorum.


Cevap uygulamaya bağlı olabilir. Sözde sıra dizisini ne için kullanmak istersin?
Yuval Filmus

1
Fortuna'yı buldunuz mu ( en.wikipedia.org/wiki/Fortuna_%28PRNG%29 ), çeşitli rastgele kaynakları bir araya topladığını açıkladığınız şeye benziyor.
Küçük Kod

1
@LittleCode Aslında tamamen farklı geliyor. Fortuna, verileri tek bir karma fonksiyondan çıkarır. Sadece tek bir çıktı işlevine rağmen (yeniden) bir araya getirmeden önce birçok zayıf entropi toplama mekanizmasıyla uğraşır. Sorum çeşitli fonksiyonlardan çıkma ile ilgili (neden 10 tanesi olmasın)? Bu bir doldurma aygıtı ise, hız yine de önemli değildir.
Paul Uszak

1
PRNG alanında, çoğalmak ve çoğaltmak gibi yeni PRNG türlerini icat eden çok sayıda araştırmacı olan George Marsaglia, 1990'larda üç PRNG'nin bir birleşimi olan KISS jeneratörünü önerdiğinde tam da bunu yaptı. farklı tipte. KISS'i son yirmi yıldır başarıyla kriptografi için kullanıyorum elbette. KISS ile ilgili yararlı bir ikincil kaynak, Greg Rose'un 2011'deki bildiridir ve içinde birleştirici kavramını geçersiz kılmayan kurucu PRNG'lerden biriyle ilgili bir konuyu işaret eder
njuffa

4
Knuth, sözde rasgele sayı üreteçlerinin (hangi üreticinin kullanılacağını seçmek için bir rastgele sayı kullanarak) saf bir şekilde birleştirilmesinin sonucu olarak sabit bir değere yakınsak bir fonksiyonla sonuçlanır! Bu yüzden, mikrobilgisayar devriminden hemen önceki günlerde, bizi asla rastgele jeneratörleri karıştırmamamız konusunda uyardı.
JDługosz

Yanıtlar:


7

IIRC (ve bu bellekten geliyor), 1955 Rand'ının en çok satanı Bir Milyon Rastgele Rakam böyle bir şey yaptı. Bilgisayarlar ucuz olmadan önce insanlar bu kitaptan rastgele sayılar toplamışlardı.

Yazarlar elektronik gürültülü rastgele bitler ürettiler, ancak bu önyargılı olduğu ortaya çıktı (flipflopun flip ve flopta tam olarak eşit zamanlar geçirmesi zordur). Bununla birlikte, bitlerin birleştirilmesi dağıtımı çok daha düzgün hale getirmiştir.


45

Tabii ki, PRNG'leri bu şekilde birleştirebilirsiniz, eğer isterseniz, bağımsız olarak ekildiklerini varsayarsak. Ancak, daha yavaş olacak ve muhtemelen insanların sahip olduğu en acil sorunları çözmeyecektir.

Uygulamada, çok kaliteli bir PRNG için bir gereksiniminiz varsa, iyi işlenmiş bir şifreleme kuvveti PRNG kullanıyorsunuz ve bunu gerçek entropi ile tohumluyorsunuz. Bunu yaparsanız, en olası başarısızlık modunuz PRNG algoritmasının kendisinde bir sorun değildir; En muhtemel başarısızlık modu, yeterli entropi eksikliğidir (veya belki uygulama hatalarıdır). Çoklu PRNG'leri düzenlemek, bu arıza moduna yardımcı olmaz. Bu nedenle, çok yüksek kaliteli bir PRNG istiyorsanız, onları iyileştirmek için muhtemelen küçük bir nokta var.

Alternatif olarak, simülasyon amaçları için yeterince iyi olan istatistiksel bir PRNG istiyorsanız, tipik olarak # 1 kaygı ya hız (sözde rasgele sayılar hızlı bir şekilde üretin) ya da basitliktir (araştırma ya da uygulama için fazla geliştirme zamanı harcamak istemezsiniz). Xor -ing, PRNG'yi yavaşlatır ve daha karmaşık hale getirir, bu nedenle bu bağlamdaki birincil ihtiyaçları da karşılamaz.

Makul bir özen ve yetkinlik gösterdiğiniz sürece, standart PRNG'ler yeterince iyi, bu nedenle herhangi bir meraklıya ihtiyaç duymamız için hiçbir neden yok (xoring işlemine gerek yok). Minimal bakım veya yetkinlik seviyeniz bile yoksa, muhtemelen xorening gibi karmaşık bir şey seçmeyeceksiniz ve işleri iyileştirmenin en iyi yolu PRNG seçiminde daha fazla özen ve yetkinliğe odaklanmaktır. xor-ing yerine.

Alt satır : Temel olarak, xor numarası insanların PRNG kullanırken genellikle gerçekte yaşadıkları sorunları çözmez.


3
"yeterli entropi eksikliği ... Birden fazla PRNG oluşturmak için buna yardımcı olmuyor" - PRNG'lerinizi tohumlamak için gereken entropi miktarını arttırdığınız için gerçekten engelleyici olabilir. İşte bu yüzden, sizi gerçekten iyi değerlendirilmiş PRNG'leri birleştirmek için rutin pratik yapmak istemiyorsunuz, gerçekte tamamen çöp olduğu ortaya çıkmış PRNG'lerden birine karşı sizi korumasına rağmen (kullandığınız uygulamada) .
Steve Jessop

Diğer bir neden, uygulama hatalarının algoritmalarla ilgili temel problemlerden çok uzak, çok, çok daha yaygın olmasıdır, bu yüzden daha kolay. Standart bir algoritma en azından başka bir uygulamaya veya referans değerlerine karşı test edilebilir, ısmarlama bir xor olamaz.
Gilles 'SO- kötü olmayı'

1
@DW Neden "bağımsız ekiliyor?" Sorum, farklı üretici ailelerinin birleşimi ile ilgili olduğu için, her bir aile aynı tohumlardan benzersiz bir çıktı dizisi üretmelidir. Örneğin, java.SecureRandom ve RC4, aynı anahtardan kolayca ekilebilir ve daha sonra birleştirilebilir.
Paul Uszak

1
@DW Büyük bir varsayımla, “iyi işlenmiş bir şifreleme kuvveti PRNG” kullandığınızı varsayıyoruz. Gerçek şu ki, çoğu kriptografik şifrede, hashte vb. Olduğu gibi tespit etmek pratik olarak imkansızdır - zamanla zaaflar bulunur. Dün ya da geçmiş yılların bilgisine "iyi bakıldı".
Shiv

1
@PaulUszak, iki jeneratörü yenmenin hataya daha yatkın hale geldiğini iddia ettiğimi sanmıyorum. İyi bir PRNG (sadece bir tane) seçerseniz, en muhtemel başarısızlık modlarından birinin tohumlama ya da uygulama hatası olduğu ve iki üreticiyi tahliye etmenin her ikisine de yardımcı olmadığını söylüyorum. (Tabii ki, eğer tek PRNG başarısız olmazsa, iki jeneratörü çalıştırmak da faydalı değildir.) Yani temelde yanlış soruna değiniyor. Başka bir deyişle, xoren üreten jeneratörler kesinliği artırmaz, çünkü en önemli belirsizlik nedenlerini ele almaz.
DW

19

Aslında, bir atılım olayı, tam olarak bunu yapmak suretiyle açıklandı.

Texas Üniversitesi bilgisayar bilimleri profesörü David Zuckerman ve doktora öğrencisi Eshan Chattopadhyay, iki "düşük kaliteli" rastgele kaynağı birleştirerek "yüksek kaliteli" rastgele bir sayının üretilebileceğini buldu.

İşte makaleleri : Açık İki Kaynaklı Ekstraktörler ve Esnek Fonksiyonlar


8
Bu, UT'nin PR çabalarına rağmen, kesinlikle pratik bir ilgisi olmayan farklı bir konu hakkında tamamen teorik bir bildiridir.
Yuval Filmus

4
@Yuval Filmus - Bu yorumu genişletmek ister misiniz?
NietzscheanAI

8
Teori ve pratik arasında büyük bir fark var. Genellikle uygulayıcılar teori ile ilgilenmez ve bunun tersi de geçerlidir. Bu durumda UT'nin PR dalı, pratikte ilgili olmadığını açıklayan mükemmel bir teorik kağıda mandal koymaya karar verdi. Makalede ele alınan problemler pratik bir perspektiften çok ilgi çekici değildir ve yeterince işe yarayan basit çözümlere sahiptir, ancak bunu ispatlamak imkansızdır.
Yuval Filmus

2
Dahası, bu özel makale çıkarıcıların teorik alanındaki sadece bir çalışmadır. Bölgedeki diğer kağıtları da aynı şekilde faturalandırabilirsiniz. Hepsi güçlü bir kaynak oluşturmak için zayıf kaynakları birleştirmekle ilgilidir. Fark sadece parametrelerde.
Yuval Filmus

3
Son olarak, kağıttaki yapı, muhtemelen uygulamak isteyeceğiniz bir şey değil, büyük bir olasılıktır. Bu tür bir yapı için somut parametrelerin belirlenmesi zordur ve kağıtlar her zaman asimptotik rejime odaklandığından ve sabitleri görmezden geldiğinden, genellikle aşırı derecede kötüdürler.
Yuval Filmus

9

Diyelim ki, bir yalancı ve çiftli sekans. Yani, her bir üzerinde desteklenen rastgele bir değişkendir ve değişkenleri mutlaka bağımsız değildir. Bu dizinin şu şekilde üretildiğini düşünebiliriz: ilk önce eşit olarak rastgele bir anahtarını örnekleyelim ve daha sonra işlevini yalancı dizilim dizisini oluşturmak için kullanalım .X1,,XnXi{0,1}X1,,XnKf(K)

sözde sıra dizisinin ne kadar iyi olduğunu nasıl ölçebiliriz ? Belirli bir gerçekleştirmenin ne kadar iyi olduğunu ölçmek mümkün olsa da (Kolmogorov karmaşıklığını kullanarak), burada rastgele değişkenin dağılımının tamamına bağlı olan ölçütlere odaklanacağım . Böyle bir örnek entropidir, ancak ölçütümüzün sadece iki özelliğine ihtiyaç duyacağız : (daha büyük bir daha rastgele bir dizi anlamına gelir)X1,,Xn(X1,,Xn)LL()

  • Eğer a, deterministik dizisi (yani, sabit bir sekans) daha sonra . L ( X 1y 1 , ... , x , ny , n ) = L ( X 1 , ... , x , n )y1,,ynL(X1y1,,Xnyn)=L(X1,,Xn)

  • Eğer iki bağımsız yalancı rasgele diziler, bağımsız bir rastgele bit ve , sonra .X0,X1T{0,1}Z=XTL(Z)min(X0,X1)

İlk özellik, ölçünün bitinin çevrilmesi altında değişmez olduğu anlamına gelir . İkinci özellik, iki dağılımını karıştırırsak , sonucun en azından en kötüsü kadar iyi olduğu anlamına gelir.X , YiX,Y

Herhangi bir makul rastgelelik ölçüsü ilk özelliği yerine getirecektir. İkinci özellik, entropi ve min-entropi gibi en popüler önlemlerden karşılanır .H HH

Şimdi XORing'in iki yalancı dizinin dizilişinin daima iyi bir fikir olduğunu gösteren bir teoremi ispatlayabilir ve ispatlayabiliriz.

Teorem. Let aynı uzunlukta iki bağımsız yalancı rasgele dizileri ve izin (yukarıdaki iki koşulları karşılayan bir) kabul edilebilir bir rastgele bir önlem olarak. SonraX,YL

L(XY)max(L(X),L(Y)).

Kanıt. Diyelim ki . O zaman , dağılımına göre dağılımına göre karıştırılmış bir karışımdır . Yana ve bunların bir karışımı, en azından kötü dağılımı karıştırılmadan kadar iyi olduğu için, elde . L(X)L(Y)XYXyYL(Xy)=L(X)L(XY)L(X) 

Bu teoremin anlamı, iki bağımsız anahtar kullanılarak oluşturulan iki sözderandom sekansı XOR yaparsanız , sonucun kabul edilebilir herhangi bir rastlantısal ölçüme göre her zaman en azından XORed olan daha iyi sekans kadar iyidir.

Uygulamada, iki bağımsız anahtar kullanmak için, muhtemelen bir anahtarı takma ve rasgele şekilde iki anahtara genişletiyoruz. İki anahtar daha sonra bağımsız değildir. Bununla birlikte, bir anahtarı iki anahtara genişletmek için "pahalı" bir yol kullanırsak, ortaya çıkan iki anahtara "bağımsız" görünmesini ve böylece teoremin "ahlaki" olmasını bekleriz. Teorik şifrelemede bu açıklamayı kesin yapmanın yolları vardır.


Öyleyse, biz XOR iki sahte ve sayı üreticisi? Eğer hız ile sınırlı değilsek, o zaman kesinlikle iyi bir fikir. Fakat pratikte bir hız sınırımız var. Daha sonra aşağıdaki soruyu sorabiliriz. Her birine jeneratörün çalışma süresini (ve böylece kuvvetini) kontrol eden parametresi olan iki PRNG verildiğini varsayalım . Örneğin, , bir LFSR'nin uzunluğu veya tur sayısı olabilir. Diyelim ki bir PRNG parametresini , diğerini ve XOR parametrelerini . Toplam çalışma süresinin sabit olması için olduğunu varsayabiliriz . en iyi seçimiTTT1T2T1+T2=tT1,T2? Burada genel olarak cevaplaması zor olan bir takas var. Ayarın , veya ayarlarından çok daha kötü olması olabilir .(t/2,t/2)(t,0)(0,t)

Buradaki en iyi tavsiye, güçlü olduğu düşünülen popüler bir PRNG'ye bağlı kalmaktır. Dizinizi oluşturmak için daha fazla zaman ayırabiliyorsanız, XOR bağımsız tuşlarını kullanarak (ya da pahalı bir PRNG kullanarak tek bir tuşu genişleterek oluşturulan tuşları) birkaç kopya kopyalar.


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı . Yapıcı bir sona geldiğinde, lütfen tartışmanızın sonuçlarını dahil etmek için cevabı düzenleyin.
Raphael

4

Bunu bir şans vereceğim, çünkü diğer bazı cevaplarda verilen tavsiyelerden yeterince rahatsız oluyorum.

Let (ille ilk durum bilinen bir kez belirli olmayan PRNGs) iki RNG'ler tarafından üretilen sonsuz bit dizileri, ve sırası kullanma imkanı Deniyorsun davranışı bir anlamda iyileştirme umuduyla. in ve her birine göre daha iyi veya daha kötü olarak değerlendirilebileceği pek çok farklı yol vardır ; Burada "daha iyi" ve "daha kötü" kelimelerinin normal kullanımıyla anlamlı, kullanışlı ve tutarlı olduğuna inandığım küçük bir avuç:X,YXYXYXY

  • (0) Dizinin gerçek rasgelelik olasılığı, artar veya azalır.
  • (1) Gözlenebilir rastgele olmama olasılığı artar veya azalır (bazı gözlemcilere göre, belirli miktarda inceleme uygulayan, muhtemelen)
  • (2) Gözlenebilir rastgele olmama derecesinin şiddeti / açıklığı artar veya azalır.

Öncelikle, kesin olarak yapılacak ümidi olan üç kişiden sadece biri olan (0) hakkında düşünelim. Aslında, iki girdi RNG'den birinin gerçekten gerçekten rastgele, tarafsız ve diğerinden bağımsız olması durumunda, XOR sonucunun da gerçekten rastgele ve tarafsız olacağına dikkat edin. Bunu göz önünde bulundurarak, nin gerçekten rastgele yansız yalıtılmış bit akışları olduğuna inandığınızda durumu düşünün , ancak tam olarak emin değilsiniz. Eğer bunların her biri hakkında yanılıyorsun ilgili olasılıklar, daha sonra olasılık vardır o zaman-gerçekten rasgele değildir , aslında çok daha azX,YεX,εYXYεXεY<min{εX,εY}εX,εY , 0'a çok yakın kabul edilir ("gerçekten rastgele olduklarına inanıyorsunuz"). Ve aslında, bundan daha da iyidir, biz de ihtimalinin her ikisinin de rastgele olmadığı durumlarda bile gerçekten bağımsız olma ihtimalini göz önüne aldığımızda : Dolayısıyla, (0) anlamında, XOR'un incitemeyeceği ve potansiyel olarak çok yardımcı olabileceği sonucuna varabiliriz.X,Y

Pr(XY not truly random)min{Pr(X not truly random),Pr(Y not truly random),Pr(X,Y dependent)}.

Bununla birlikte, (0) PRNG'ler için ilginç değildir, çünkü PRNG'ler söz konusu olduğunda hiçbir sekansın rastgele olma şansı yoktur.

Bu yüzden aslında PRNG'lerle ilgili olan bu soru için, (1) veya (2) gibi bir şeyden bahsetmeliyiz. Bunlar "gözlemlenebilir", "şiddetli", "açık", "belirgin" gibi özellikler ve nicelikler bakımından olduğundan, şimdi Kolmogorov karmaşıklığından bahsediyoruz ve bunu kesin yapmaya çalışmayacağım. Ancak, "01100110 ..." (dönem = 4) 'ün "01010101 ..." (dönem = 2) değerinden daha kötü olduğunu ümitsizce tartışmasız bir iddiaya sokacak kadar ileri gideceğim. 00000000 ... "(sabit).

Şimdi, biri (1) ve (2) 'nin (0) ile aynı eğilimi takip edeceğini ve bu nedenle “XOR'un incitemeyeceği” sonucunun hala geçerli olabileceğini tahmin edebilir. Bununla birlikte, ne ne de nin gözle görülür şekilde rastlantısal olmadığı, ancak aralarındaki korelasyonların nin gözle görülür biçimde rastgele neden olduğunu . Bunun en ciddi örneği elbette, (veya ), bu durumda sabittir, olası tüm sonuçlardan en kötüsü; Genel olarak, ne olursa olsun ne kadar iyi arasında olduğunu görmek kolaydır ve vardır,Y XY X =Y X =not(Y )XY X Y X Y XYXYXYX=YX=not(Y)XYXYXve , xorlarının gözlemlenemeyen ve rasgele olmayan olmaları için bağımsızlığa "yakın" olmalıdır. Aslında, gözlemlenebilir bir şekilde bağımlı olmamak, makul olarak in gözlemlenemeyen bir olduğu şeklinde tanımlanabilir .YXY

Böyle bir sürpriz bağımlılığı gerçekten büyük bir sorun olarak ortaya çıkıyor.


Neyin yanlış gittiğine bir örnek

"Aynı aileden olduğu gibi birlikte çalışan birkaç lineer geri bildirim kayma kaydının ortak örneğini hariç tutuyorum. Ancak, XORing ile yanlış gidebilecek türden çok basit ve net gerçek hayattan bir örnek vermek için, şu an için bu dışlamayı dışlayacağım.

Örneğim 1983 dolaylarında Unix'in bazı sürümlerinde olan eski bir rand () uygulaması olacak. IIRC, rand () işlevinin bu uygulaması aşağıdaki özelliklere sahipti:

  • rand () için yapılan her çağrının değeri, sözde rastgele bit olan 15 ([0, 32767) aralığında bir tamsayıydı.
  • ardışık geri dönüş değerleri çift-tek-tek-değişken; yani, en az anlamlı bit 0-1-0-1 değişimli ...
  • en önemsiz anlamlı bit 4'üncü, sonraki 8 periyodu, en yüksek dereceli bit ise .215
  • bu nedenle rand () 'ın 15-bitlik dönüş değerlerinin sırası periyot ile periyodikti .215

Orijinal kaynak kodunu bulamadım ancak https://groups.google.com/forum/#!topic/comp.os.vms/9k4W6KrRV3A’daki birkaç yazıyı bir araya getirmeyi tahmin ediyorum . tam da aşağıdaki özelliklere dair hafızamla aynı fikirde olan aşağıdakileri (C kodu) yaptı:

#define RAND_MAX 32767
static unsigned int next = 1;
int rand(void)
{
    next = next * 1103515245 + 12345;
    return (next & RAND_MAX);
}
void srand(seed)
unsigned int seed;
{
    next = seed;
}

Tahmin edilebileceği gibi, bu rand () yöntemini çeşitli şekillerde kullanmaya çalışmak, çeşitli hayal kırıklıklarına neden oldu.

Örneğin, bir noktada, art arda alarak, rastgele bozuk para dizileri dizisini simüle etmeye çalıştım:

rand() & 1

yani en az anlamlı bit. Sonuçta basit dönüşüm kafaları-kuyrukları-kafaları-kuyrukları oldu. İlk başta inanmak zordu (programımda bir hata olmalı!), Ancak kendimi ikna ettikten sonra bunun yerine en az önemsiz olan parçayı kullanmayı denedim. Daha önce de belirtildiği gibi bu çok daha iyi değil - bu bit 4. periyotla periyodiktir. Ardışık olarak daha yüksek bitleri araştırmaya devam etmek, daha önce kaydettiğim kalıbı ortaya çıkardı: yani, bir sonraki her yüksek dereceli bit, önceki sürenin iki katıydı; Bu saygı en yüksek dereceli bit, hepsinden daha yararlı oldu. Bununla birlikte, burada "bit yararlı, bit kullanışlı değildir" siyah-beyaz eşiğinin olmadığını unutmayın; Gerçekten söyleyebileceğimiz tek şey, numaralandırılmış bit konumlarının değişen derecelerde yararlılık / yararsızlığa sahip olmasıdır.i - 1ii1

Ayrıca sonuçları daha fazla karıştırmak ya da çoklu çağrılardan rand () öğesine döndürülen değerleri bir araya getirmek gibi şeyler de denedim. Art arda rand () değerlerinin XORing çiftleri bir felaketti, elbette ki tüm garip rakamlarla sonuçlandı! Amaçlarım için (yani, "görünüşte rastgele" bir bozuk para dizisi dizisi üretmek), XOR'un sabit parite sonucu, orijinalin alternatif garip davranışından bile daha kötüydü.

Hafif bir değişiklik bunu orijinal çerçeveye yerleştirir: yani, , rand () tarafından verilen ile döndürülen 15 bitlik değerlerin dizisi ve farklı bir diziden . Yine, , orjinal değişken çift / tek davranıştan daha kötü olan tek ya da tamamen tek sayılar dizisi olacaktır. sxY s, YXYXsXYsYXY

Başka bir deyişle, bu, XOR'un (1) ve (2) anlamında herhangi bir makul yorumla işleri daha da kötüleştirdiği bir örnektir. Birkaç yönden de daha kötü:

  • (3) XORed en az anlamlı biti açıkça önyargılıdır, yani girişlerin her ikisinde de tarafsız olan herhangi bir numaralı bit konumunun aksine 0 ve 1'lerin eşit olmayan frekanslarına sahiptir.
  • (4) Aslında, her bit pozisyonu için, XOR sonucundaki bit pozisyonunun önyargılı olduğu tohum çiftleri vardır ve her tohum çifti için, XOR'da bastırılan (en az 5) bit pozisyonu vardır. sonuç.
  • (5) XOR sonucundaki tüm 15 bitlik değer dizisinin tamamı , orijinaller için e kıyasla, 1 veya . 2 15214215

(3), (4), (5) 'den hiçbiri açık değildir, ancak hepsi kolayca doğrulanabilir.


Son olarak, PRNG'lerin yasaklanmasını aynı aileden tekrar başlatmayı düşünelim. Bence buradaki sorun, iki PRNG'nin "aynı aileden" olup olmadığına, biri XOR kullanmaya başlamadan ve duygular (veya bir saldırganın bildirimleri) anlamında hiçbir şeyin daha kötüye gitmediğine kadar asla net olmadığıdır (1). ve (2), yani çıktıdaki rastgele olmayan modeller fark edilmeden farkedilene / utanç verici / felakete kadar olan eşiği geçene kadar ve bu noktada çok geç.

Burada, çoğu insanın "iyi" ve "kötü" olduğunu düşündüğü bir modelleme işi yaptığım teorik önlemlere dayanarak "XOR'un zarar veremeyeceği" niteliksiz tavsiyelerde bulunan diğer cevaplar beni korkutuyor Gerçek hayatta PRNG'ler. Bu tavsiye, XOR'un işleri daha da kötüleştirdiği açık ve net örneklerle, yukarıda verilen rand () örneğiyle çelişir. Göreceli olarak "güçlü" PRNG'lerin, XOR'un Rand () oyuncak PRNG'sine () göre XORed olduğunda ters davranış sergilemeleri düşünülebilir olsa da, XOR'u onlar için iyi bir fikir haline getirirken, bu yönde, teorik veya ampirik, bu yüzden bunun olduğunu varsaymak bana mantıksız geliyor.

Şahsen, gençliğimde XORing rand () 'ın sürpriziyle ısırıldığını ve hayatım boyunca sayısız diğer sürpriz ilişkilerini sürdürdüğümde, benzer taktikleri tekrar denersem, sonucun farklı olacağını düşünmek için çok az nedenim var. Bu nedenle, şahsen, söz konusu RNG'ler için bunu yapmanın güvenli olacağına dair bazı güven vermemiz için çok kapsamlı bir analiz ve titizlik göstermediği sürece, birçok PRNG'yi birlikte XOR için çok isteksiz olacağım. Bireysel PRNG'lerden birine veya daha fazlasına güvenim düşük olduğunda ortaya çıkacak potansiyel bir tedavi olarak, bunları XORing güvenimi arttırması pek mümkün değil, bu yüzden böyle bir amaç için kullanmıyorum. Sorunuzun cevabını, bunun yaygın bir şekilde algılanan bir düşünce olduğunu hayal ediyorum.


Peki A5 / 1 kullanımını kelimenin tam anlamıyla milyarlarca insan tarafından nasıl açıklarsınız?
Paul Uszak

@PaulUszak Hiç bir fikrim yok. Milyarlarca insan tarafından kullanılan A5 / 1 dediğim bir şeyle çelişiyor mu?
Don Hatch

Sizi rahatsız eden ve alarm veren şekilde daha iyi bir şey oluşturmak için bir araya gelerek üç gerizekalı (aslında aynı aileden gelen) ...
Paul Uszak

Rahatsız ettiğim ve endişelendiğim şey, "emin değilseniz, devam edin ve bir grup RNG ile birlikte XOR; bu işleri daha da kötüleştiremez" şeklinde nitelenmemiş tavsiyedir. XOR'un her durumda kötü olduğunu söylemek veya ima etmek istemedim ve A5 / 1 hakkında veya XOR'un kullanımı hakkında hiçbir fikrim yok. Bunu apaçık yapmak için son aptalca özet ifademi değiştirirsem yardımcı olur mu?
Don Hatch

1
Sonunda basit olan "sadece XORing RNG'lere hayır deyin" ifadesinin yerine daha gerçek ve umarım daha az yanıltıcı bir şey bıraktım.
Don Hatch

0

YASAL UYARI: Bu cevap kesinlikle “Biz yapmıyoruz” ve “işte neden çalışıp çalışamayacağına dair matematiksel kanıt” değil. XOR’un şifreleme açıkları getirdiğini (veya getirmediğini) iddia etmiyorum. Demek istediğim, yalnızca bu deneyimin bize, en basit planların bile neredeyse her zaman öngörülemeyen sonuçlar doğurduğunu gösterdiğini gösteriyor - ve bu yüzden onlardan kaçınıyoruz.

"Rastgelelik", RNG'ler ve PRNG'ler söz konusu olduğunda buzdağının sadece görünen kısmıdır. Üniforma gibi önemli olan başka özellikler de vardır.

Kendi başına oldukça iyi bir RNG olan ortak bir zar düşünün. Ama şimdi diyelim ki 1-6 yerine 1-5 aralığına ihtiyacınız var. Akla gelen ilk şey, sadece 6 yüzü silmek ve fazladan 1 ile değiştirmek. "Rasgelelik" kalıyor (sonuçlar hala gerçekten rastlantısaldır), ancak tekdüzelik büyük ölçüde acı çekiyor: şimdi 1 diğer sonuçların iki katı.

Birden fazla RNG'den elde edilen sonuçların birleştirilmesi benzer şekilde kaygan bir eğimdir. Örneğin. basit bir 2 zar eklenmesi, "7" şu anda "2" veya "12" den 6 kat daha muhtemel olduğu için herhangi bir tek biçimliliği tamamen siler. XOR'un ilk bakışta eklemekten daha iyi göründüğünü kabul ediyorum, ancak PRNG'lerde ilk bakışta göründüğü gibi hiçbir şey çıkmadı.

Bu nedenle bilinen uygulamalara bağlı kalmaya meyilliyiz - çünkü birisi onları araştırmak için çok zaman ve para harcadı ve tüm eksiklikler iyi biliniyor, anlaşılıyor ve çalışılabiliyor. Kendinizinkini düştüğünüzde, potansiyel olarak güvenlik açıkları yaratıyorsunuz ve kanıtlamak için benzer çaba göstermelisiniz. Zar ekleme örneğinin gösterdiği gibi, birleştirmek sıfırdan yeni bir tane oluşturmaktan çok farklı olamaz.

Güvenlik, en zayıf bileşeni kadar güçlü bir zincirdir. Güvenlikteki bir kural: 2 şeyi ne zaman bir araya getirirseniz, genellikle bir miktar güç elde edersiniz, bir miktar kusur alırsınız.


7
Kesinlikle katılmamak. Eğer rastgele bir dizi ile gerçekten rastgele bir dizi XOR yaparsanız, yine de gerçekten rastgele bir dizi elde edersiniz. Benzer şekilde, iki bağımsız sözde rasgele diziyi (örneğin farklı anahtarlarla oluşturulmuş) XOR yaparsanız , en az her biri kadar güçlü bir şey elde edersiniz.
Yuval Filmus

3
Bu bana yanlış geliyor. Buradaki olağan durum, esasen gerçekten rastgele bitler üreten iki yüksek kaliteli RNG'ye sahip olduğumu düşünüyorum , ancak bunlardan birinin (ya da her ikisinin de muhtemelen daha azının) yanıldığını düşündüğüm küçük bir olasılık var. Onları bir araya getirirsem, en az bir tanesinde haklı olduğum sürece, sonuç gerçekten rastlantısal olur ve iyiyim. Bu yüzden onları birleştirerek kabaca epsilon / 2'den çok küçük bir epsilon ^ 2'ye kötü bir RNG alma şansımı düşürdüm, bu kesinlikle bir kazanç. Benzer dinamikleri daha az kesinti ve denemek durumunda bile beklediğimden şüpheleniyorum.
Don Hatch

2
Hala ikna olmadım. "Gerçekten rastgele" yazdığımda "eşit derecede rastgele" demek istedim. Eğer rastgele bir dizi ile eşit olarak rastgele bir dizi XOR yaparsanız, eşit şekilde rasgele bir dizi elde edersiniz.
Yuval Filmus

2
@DonHatch Kesinlikle, bu hak kazandıracak. Diyelim ki PRNG'niz 100 uzunluğunda bir dizi, ardından aynı dizinin gürültülü bir sürümünü oluşturuyor. Diyelim ki ikinci kopyanın ilk biti korelasyonu . XOR'lanan sekansı tatmin . beri, korelasyonların “büyük ölçüde büyütülmediğini”, ancak büyük ölçüde azaldığını söylemek doğru. Z i = X iY i Pr [ Z i + 100 = Z i ] = ( 1 + ϵ 2 ) / 2 ϵ 2| ϵ |Pr[Xi+100=Xi]=(1+ϵ)/2Zi=XiYiPr[Zi+100=Zi]=(1+ϵ2)/2ϵ2|ϵ|
Yuval Filmus

3
@ YuvalFilmus Muhtemelen i ve i ile 100 arasındaki madde arasındaki korelasyonun fena halde azaldığı doğrudur, fakat konu bu değil. Çok özel ve gerçek hayattan bir örnek için: Unix üzerindeki eski boktan rand () uygulamasının, çoğu insanın farketmediği, geri dönen her 31 bitlik tamsayıların en düşük dereceli bitlerinde periyodik davranışları olduğunu hatırlıyorum. Talihsiz değişme boyutunda (farklı bir tohum kullandığınızda elde edeceğiniz şey) değiştirilmiş bir kopyasına sahip olan bu sıralar dizisi için, tüm sayıları elde edersiniz. Bu , çoğu durumda, orijinal dizideki problemden çok daha kötü.
Don Hatch
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.