Bir sayı üretecinin gerçekten rastgele olmadığı nasıl tespit edilebilir?


20

Bilgisayarlarda rasgele sayı üretmenin gerçekten rastgele olmadığını duydum, ancak bunu tespit etmek için etkili bir algoritma yok. Nasıl tespit edilebilir?


1
Bu yayın size yardımcı olabilir.
Anton

6
Bilgiçlik sesi verme riski altında, yaptığınız tek şey çıktılarını inceliyorsa, belirli bir kaynağın rastgele olmadığını kesin olarak söylemek mümkün değildir. Sen adil bozuk parayı çevirebilirsiniz 10100 üst üste süreleri ve kafaları her zaman olsun ve üzerinde kuyrukları alma şansı st hala% 50 olduğunu atmak. Kaynağı inceleyerek, genellikle rastgele olmayan şeyleri tanımlayabiliriz (örneğin, yalancı sayı üreteçleri ... tohumdan ve algoritmadan gelen diziyi tahmin edebiliriz). Birçok görünür rasgelelik kaynağı güvenilir bir şekilde tahmin edebilecek kadar anlaşılamayabilir. Yine de bu felsefi. 10100+1
Patrick87

@ Patrick87 Eğer "kesinlik" ile matematik demek istiyorsan, bu doğrudur. Bununla birlikte, size keyfi önem verebilecek istatistiksel testler vardır (veriler "iyi" olduğu sürece).
Raphael

@ Patrick87 Sıradan bir ses çıkarma riskiyle karşı karşıyasınız ... " Arka arkaya 10100 kez adil bir para çevirebilir ve her seferinde kafa tutabilirsiniz" diyorsunuz . Hayır, yapamam. Hatta 103 kafaları arkada görmeme ve hala adil bir madalyonun gerçeği çok iyi yakalamadığına inanmasına izin veren herhangi bir model . Bu gerçekten de felsefi. ;-)
Don Hatch

Yanıtlar:


15

Gerçekten Rastgele Olan Bilgisayarlar:

Turing Machine için teorik anlamda gerçek rastgelelik imkansızdır ve çoğu bilgisayar gerçekten rastgele çıktı üretemez. Bu nedenle, bazı modern bilgisayarlar, bilgisayarın bir rasgele karışıklık içerecek bir dış kaynağa erişmesini sağlayan donanım içerir. Bunun nasıl gerçekleştirileceğinin bir örneği, bilgisayarın içindeki sıcaklıktaki küçük dalgalanmaları izlemek. Rasgelelik bir dış kaynaktan da elde edilebilir. Ama yazınızın tonundan, dışarıdaki rasgelelik kaynaklarının ilginizi çektiğini düşünmüyorum.

Tohumlar:

Dışarıdan bir ek olmaksızın, bilgisayarın yaptığı her şey deterministiktir. Bu büyük bir soruna yol açar: Rastgele bir sayı oluşturma programı çağırırsanız, aynı girişi her verirseniz size aynı sonucu verir. Açıkçası, her çalıştırıldığında davranışını değiştirmek için rastgele bir sayı çıkaran bir programa ihtiyacımız var (aksi takdirde özellikle yararlı olmayan aynı "rastgele" sayıyı almaya devam edeceğiz). Fikirlerden biri programa her girdiğinde değişen bazı girdiler vermektir, böylece farklı bir sayı çıkacaktır. Bu girdiye "tohum" diyoruz. Rastgele sayı üretecinin bir tohum alması, bazı işlemleri gerçekleştirmesi ve bize rastgele bir sayı vermesi gerekir.

Mevcut sistem zamanı tohumun klasik bir örneğidir. Bu, yüksek entropi ile uzun bir dize verir ve eğer zaman yeterince ayrıntılı bir şekilde takip edilirse (yani sistem saatiniz saat kullanıyorsa, "zaman" oldukça zayıf bir tohumdur), sözde numarayı beslemeniz olası değildir aynı sayıyı iki kez üretin.

Yeterince Rastgele Algoritmalar:

Şimdi, her çalıştırıldığında en azından farklı olmanın bir yolu olan bir algoritmamız var. Ona bir tohum veriyoruz ve algoritma aynı tohumla istendiğinde aynı numarayı verirken, ürettiği numaraların aksi takdirde rastgele olmasını istiyoruz. Bu yukarıdaki gibi davranır - bazı girdi alırsınız ve bazı (umarım girdiden "rastgele" olacak kadar farklı) çıktı üretir.

Şimdi bunu yapmak için kendi algoritmanızla geldiğinizi ve bir sürü farklı tohum verdiğinizde ortaya çıkardığınız sayıların rasgele oldukça yakın olduğunu iddia edelim. Ne kadar iyi olduğunu nasıl test edebiliriz?

Şimdi bir tohum alacak, bazı işlemler yapacak ve rastgele bir sayı üretecek bazı algoritmalar istiyoruz. En basit haliyle, algoritma sadece tohumun çıktısını alabiliyordu - her seferinde bize aynı sayıyı vermiyor ve rastgele tohumlar bize rastgele çıktılar veriyor. Ama açıkça istediğimiz bu değil. Öte yandan, bir algoritma, pek çok gerçek sahte model gibi oldukça karmaşık olabilir. Hangi algoritmaların bize mutlaka rastgele olmayan tohumlarımızdan "rastgele" sayılar verdiğini nasıl anlayabiliriz? Tam olarak alamıyorsak, hangisinin en iyisi olduğunu nasıl anlayabiliriz?

Bu testlerden hangilerinin ideal olduğunu söylemek zor, ancak bize "rastgele" sayılar vermeden önce bu algoritmaların karşılaması gereken bazı minimum gereksinimleri bulmak kolaydır. Belki algoritmanızın çift sayıları yarı yarıya verdiğinden emin olmak istiyoruz. Belki ile arasında rastgele bir sayı istersem , bu aralıktaki tüm sayıların işlevinize bazı girdiler için çıkacağından emin olmak istiyoruz. Açıkçası yapabileceğimiz birçok test var; algoritmanız bazı test paketlerini geçerse, bu bir sahte modeldir. Hangi testlerin kullanılacağı çok ilginç ve iyi kullanılmış / araştırılmış bir bilgisayar bilimi alanıdır.n1n

Bir Saldırganı Kandırmak İçin Rastgele:

Şimdi bahsetmek isteyebileceğiniz şey, Şifreli Olarak Güvenli Yalancı Jeneratörler. Bunu açıklamanın en iyi yolunun yukarıdaki bağlamda olduğunu düşünüyorum - burada, kriptografi için rasgeleliğimizi kullanıyoruz, bu yüzden testler tasarlarken gerçekten umursadığımız şey birisinin kırılamayacağı güvenliğimizi hangi rastgele sayıyı seçtiğimizi tahmin ederek. Kriptografiye aşina olduğunuzu bilmiyorum, ancak basit bir yedek şifre yaptığımızı hayal edin - her harfin yerine başka bir harf konur. Bu değiştirmeleri rastgele seçmek istiyoruz, bu yüzden bir saldırganın tahmin etmesi zor. Ancak rastgele sayı üretecimin nasıl çalıştığını anlayabilirse, tüm şifreyi çözebilir! Bu nedenle, kriptografik algoritmalar, özellikle tahmin edilmesi zor olan rasgele sayı üreteçleri gerektirir.

Bu nedenle, CSPRG'ler diğer algoritmaların bunları ne kadar iyi çözdüğü ile tanımlanır (nihayetinde sorunuza geliyoruz). Özellikle, R'yi arayacağım bir CSPRG'ye sahip olduğumu varsayalım. R, yalnızca bir sonraki çıktıyı hangi bitin tahmin edeceğini tahmin edebilecek bir HİÇBİR algoritma yoksa ve bir CSPRG'dir. Önceki bitlerin hepsini bilseniz bile bu doğrudur!

Diyelim ki CSPRG'imin çıktığı ilk beş bit 10100. Programa kullandığım girişi bilmiyorsunuz, ancak CSPRG'imi yazmak için kullandığım koda erişiminiz var. O zaman iddia, bir sonraki bit çıkışının 101000 mi yoksa 101001 mi olacağına karar vermek için bir program yazmanın imkansız olduğudur.

Bu nedenle, kriptografi nedenleriyle, bazen bir sahte sayı üreticisinin ne kadar iyi yaptığı, diğer programlara ne kadar tahmin edilebilir olduğu açısından tanımlanır. Eğer tüm rastgele çıktıların tuhaf olacağını biliyorsanız, bu "rasgelelik" sezgisinin çoğunu hala veriyor unutmayın, ne kriptografik olarak güvenli ne de sağduyu rastgele test.


7
Bu genel olarak iyi (ama eksik) bir cevaptır, ancak birkaç nokta yanlıştır. “Bilgisayarlar için gerçek rastgelelik imkansızdır, çünkü yaptıkları her şey deterministiktir.” Bu her zaman doğru değildir, bazı işlemciler bir donanım RNG içerir. Bilgisayarlar rasgele olabilen harici girişlere de tepki verebilir. “… Kriptografi için, dağıtım açısından ne kadar“ rastgele ”olduklarını umursamıyoruz”: aslında kriptoda muntazam bir dağılım önemlidir, örneğin CBC için IV ve DSA'daki k parametresi.
Gilles 'SO- kötü olmayı kes'

"Dışarıdan bir ek olmaksızın bilgisayarın yaptığı her şey deterministiktir" yazdı. Dıştaki ekleme, bahsettiğiniz gibi RNG'ler gibi cihazlara bir referanstır. Bu eklemeler olmadan, hesaplama yeteneklerimiz, gerçek rastgeleliğin imkansız olduğu bir TM'nin yeteneklerine eşittir.
Kent Munthe Caspersen

Doğru hatırlıyorsam bunu Gilles'in yorumundan sonra ekledim.
SamM

4

Son zamanlarda MIT CSAIL Computation of Computation Group blogunda hesaplamada rasgelelik hakkında güzel bir yazı buldum: Biraz rasgele olup olmadığını söyleyebilir misiniz?

Gönderi , bir Avi Wigderson'un hesaplamadaki rasgeleliğin gücü ve sınırlamaları, rastgele randomize algoritmaların güzel alanını araştırmak ve sahte ve hesaplanabilir çekilmezlik arasındaki şaşırtıcı bağlantı hakkındaki harika konuşmasından elde edilen bazı fikirlerle başlar .

Sonra kuantum kriptografisinde bazı yeni sonuçları özetlemektedir; özellikle belirli bir tür cihazın çıkışının gerçekten rastgele olup olmadığını etkin bir şekilde test etmenin yolu (rastgele genişleme protokolleri).

Örneğin, Umesh Vazirani, Thomas Vidick, Sertifikalandırılabilir Kuantum Zar'ın (Veya test edilebilir üstel rastgele genişleme)

Özet: Bir çift kuantum mekanik cihazın, O (log n) muntazam bitlerden oluşan bir tohumdan gerçek rastgele n tane üretmek için kullanılabileceği bir protokol sunuyoruz. Oluşturulan bitler, yalnızca kullanıcı tarafından gerçekleştirilebilen basit bir istatistiksel test ve cihazların sinyalizasyon ilkesine uyduğu varsayımına dayalı olarak sertifikalandırılabilir şekilde rastgele. Cihazların iç işleyişine dair başka varsayımlar yoktur ....



0

Bu, bilgisayar biliminde SamM'in diğer cevabının bazılarına hitap ettiği geniş / karmaşık bir konudur. Sizin spesifik soru bilgisayarlar ne denir varsa ilgili gibi görünüyor PRNGs , yani sözde rasgele sayı jeneratörler, kimse bu nasıl algılayabilir?

Kısa cevap, önemsiz PRNG'lerin algoritmalarının algılanamayacağı (türetilemediği) şekilde inşa edilmesidir. Genel olarak, PRNG "güvenli" olarak adlandırılırsa, bir saldırgan sözde diziyi oluşturmak için kullanılan algoritmayı biliyor olsa bile, diziyi oluşturmak için kullanılan belirli parametreleri tahmin edemez. Bu yolla sahte anlamanın kriptografiyle derin bağları vardır ve bir PRNG'nin bir kriptografik algoritmanın "kırılabileceği" gibi "kırılması" hakkında konuşulabilir. Bu alanda birçok araştırma makalesi var, kriptografinin önündeki aktif bir alan.

"Önemsiz" PRNG'ler için, örneğin, doğrusal bir kongruratif jeneratör deyin , eğer saldırgan onu oluşturmak için kullanılan algoritmayı biliyorsa ve "bignum" ile oluşturulmamışsa , arama alanı "nispeten küçük" olur ve saldırgan teorik olarak parametreleri de bulabilir Belirli PRNG tarafından temel olarak kaba kuvvet tarafından ve tüm kombinasyonların denenmesinde kullanılır.

PRNG'ler pratikte (yine "güvenliklerine bağlı olarak") bazı durumlarda bunlara karşı büyük bir istatistiksel rastgele testler uygulayarak kırılabilir. örneğin bu, "Dieharder" programının mantığıdır (Brown tarafından). NIST süiti de vardır .

PRNG'leri kırmanın asıl zorluğu / sertliği henüz teorik olarak kanıtlanmamıştır, ancak temel olarak bir yönde verimli bir şekilde hesaplanabilen ancak tersine çevrilmesi (tersine çevrilmesi "zor" olan "trapdoor" veya "tek yönlü fonksiyonlar" olarak adlandırılanlarla ilişkilidir. . Kriptografide rastgelelik sertliği ile ilgili bazı açık problemler vardır. Bu sorular karmaşıklık sınıfı ayrımlarıyla yakından ilgilidir, örneğin ünlü P =? NP sorusu.

PRNG'lerin kırılmasıyla ilgili sorular aynı zamanda sekans üretebilen en küçük Turing Makineleri'ni inceleyen bir alan olan Kolmogorov karmaşıklığıyla da ilgilidir . PRNG'nin kırılması, aynı zamanda, bir sahte diziyi hesaplamak için "en kısa" programı bulmakla da ilgilidir. Ve Kolmogorov karmaşıklığı genel olarak hesaplamak için kararsızdır.

Gilles'in bir yorumda belirttiği gibi, kuantum gürültüyle ilgili fiziksel elektronik süreçlerden oluşan donanım tabanlı RNG'ler var . bunlar doğru bir şekilde tasarlanmışsa kırılmaz.


"önemsiz PRNG'ler, algoritmalarının algılanmaması (türetilmesi) için oluşturulmuştur" - Bunun doğru olduğunu düşünmüyorum. Aslında, bir sonraki cümleniz bununla çelişir. Bunu düzeltmek için cevabınızı düzenlemek ister misiniz?
DW

daha hassas bir şekilde ortaya çıkabilir, ancak takip edilmez, özel itirazınız nedir? nokta şu ki, sekansı üreten algoritma, algoritmanın güvenli olması durumunda kaba kuvvet haricinde sadece veri dizisinden belirlenemez ve kaba kuvvetin bu durumda başarılı olma olasılığı düşüktür.
vzn

1
Benim özel itirazım, cümlenin bana yanlış geldiğidir: PRNG'lerin çıktılarını gözlemleyen birinin algoritmanın ne olduğunu çıkartamayacağı şekilde tasarlandığını söylüyorsunuz, ancak gerçek hayatta işler böyle değildir. Çoğu PRNG, birisinin algoritmayı öğrenmesini önlemek için tasarlanmamıştır; genellikle, algoritma herkese açıktır. Belki de PRNG'lerin çıktılarının gerçek rastgele bitlerden ayırt edilemeyeceği şekilde inşa edildiğini mi söylüyorsunuz?
DW

1
"sekansı oluşturan algoritma, algoritmanın güvenli olması durumunda kaba kuvvet haricinde sadece veri dizisinden belirlenemez" - Bu da doğru değildir. Algoritma , tipik olarak genel. Sadece halka açık olmayan tohumdur ve çıktılardan türetilmesi zor olan tohumdur.
DW

-1

Aslında klasik bir bilgisayarın yaptığı her şey deterministiktir, çünkü onlara bazı görevler verdiğinizde onları belirleyici bir şekilde takip eder. Eğer sahip olmak istiyorum Dolayısıyla eğer bir rastgele sayı size (kullanıcının giriş zamana dayalı) zaman buna göre hesaplayabilir, ancak sahip olmak istiyorsanız bir takım rasgele sayı nedeniyle, bir sonraki sayılar için zaman kullanamazsınız sayılar artık bağımsız olmayacaktı.

İnsanların yaptığı şey, bir tohumu olan sahte rastgele jeneratörler kullanmaktır, yani sahte rastgele sayı üretecinin tüm sayılarını hesaplamak için kullanılan bir sayıdır (bazı daha karmaşık simülasyon veya diğer görevlerde daha fazla tohum gerekebilir) , birden fazla bağımsız rasgele sayı kümesi gerekiyorsa). Tekrarlanabilir sonuçlar istiyorsanız tohum genellikle 0 veya belirli bir sayıdır veya siz ve farklı tekrarlanamayan sonuçlar istiyorsanız zaman.

Sözde rasgele sayı üreteçlerinin yeterince iyi olması, verimli bir şekilde hesaplanmaları ve gerçek rasgele sayılar gibi davranmaları için "sözde rasgele sayı üretiminin temel özelliklerini" takip etmeleri gerçeğinde yatmaktadır:

  • üretilen sayılar tekdüze bir dağılımı takip etmelidir (bu dağıtımdan başka herhangi bir dağıtım elde edebilirsiniz);
  • üretilen sayılar istatistiksel olarak bağımsız olmalıdır;
  • sekans yeniden üretilebilir (bu nokta, klasik bir bilgisayarın donanımının bu özelliği nedeniyle uygulanır ve bu nedenle "sahte rasgele sayılar" olarak adlandırılır);
  • dizinin süresi yeterince büyük olmalıdır;
  • sayı üretimi hızlı olmalıdır.

Yalancı rasgele sayılar dizisinin her sayısından yeni bir sayı hesaplanır (genellikle tamsayılarla çalışırız). Bununla birlikte, sayıları ifade etmek için sınırlı sayıda mevcut bit ile (örneğin ikili) belirli bir bazda çalışmak üzere hazırlanan bir sahte-rasgele sayı üreteçleri dizisinde bir n süresi vardır. Eğer bu n yeterince büyük olmazsa ciddi problemler olacaktır, ama endişelenmeyin, bilgisayar bilimcileri iyi bir n'ye sahip olmak için sahte rastgele jeneratörlerin tohumlarını ve diğer parametrelerini iyi seçerler.

Örneğin, en eski ve en iyi bilinen sahte rasgele sayı üreteci algoritmalarından biri olan doğrusal eşlenik yöntemli olası bir sözde rasgele sayı üreteci aşağıdakilere göre tanımlanabilir:

dört değeri vardır:
- x_0 ≥ 0
- a ≥ 0
- c ≥ 0
- m> x_0, burada:

x0 başlangıç ​​değeridir, a, c ve m sabittir: burada m> a, m> c ve fornula ile diziyi üretir:

x_ {i + 1} = (a * x_i + c) MOD m

Bu sabitler için değerler dikkatle seçilmelidir. Bir olasılık:

x_ {i + 1} = (1664525 * x_i + 1013904223) MOD 2 ^ 32, ref. [1-2]

Önceki algoritmaların bazı sorunlarından kaçınarak rastgele sayılar üretmek için daha karmaşık diğer algoritmalar da vardır: [3]

  • bazı tohum durumları için beklenenden daha kısa süreler (bu tohum durumları bu bağlamda 'zayıf' olarak adlandırılabilir);
  • büyük miktarlarda üretilen sayılar için dağılımın eşitliğinin olmaması;
  • ardışık değerlerin korelasyonu;
  • çıkış dizisinin zayıf boyutlu dağılımı;
  • belirli değerlerin meydana geldiği mesafeler, rastgele bir dizi dağılımındakinden farklı olarak dağıtılır.

Gelecekte, klasik bilgisayarlar, gerçekten rasgele sayılar sağlayabilen ve dağıtabilen kuantum sistemlerle birleştirilebilir. [4]

referanslar:
[1] http://en.wikipedia.org/wiki/linear_congruential_generator
[2] William H., et al. (1992). "Fortran 77'deki sayısal tarifler: Bilimsel hesaplama sanatı" (2. bs.). ISBN 0-521-43064-X.
[3] http://en.wikipedia.org/wiki/pseudorandom_number_generator
[4] http://www.technologyreview.com/view/418445/first-evidence-that-quantum-processes-generate-truly-random-numbers /


Bu soruya gerçekten cevap vermiyor. Belirli bir RNG'nin rastgele olup olmadığını tespit etmek için değil, rastgele sayıların nasıl oluşturulacağını açıklarsınız. O zaman bile açıklamalarınız biraz eksik, doğrusal uyumlar neredeyse “en iyilerinden biri”. Donanım RNG'leri şu anda mevcut, kuantum hesaplamaya gerek yok; PC'nizde, telefonunuzda ve hatta kredi kartınızda bir tane olması iyi bir şans.
Gilles 'SO- kötü olmayı kes'
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.