GPIO pin kullanan rasgele sayı üreteçleri?


22

Ben sadece AVR Rastgele Sayı Üreticisi sorusunu okudum ve bir AVR'de rastgele tohum üretmek için bir çok yolla karşılaştım:

  • Özel amaçlı "Secure AVR" kullanın
  • Dahili bir sıcaklık sensörü kullanın
  • Yazılmamış EEPROM'u okuyun
  • Kullanıcı girişi arasındaki zaman aralıklarını ölçün
  • Yüzen bir ADC pimi kullanın.

Neden sadece çekmeli ve kayan olmadan giriş olarak yapılandırılan tek bir dijital pin olmasın? Teoride bu rastgele bitlerin bir akışını üretmek gerekir. Neden bunu kullanmıyorsun? Devlet çok yavaş değişiyor mu? 1'de mi yoksa 0'da mı kalıyor? Başka sorun var mı?


1
Güvenli AVR öldü AFAIK
vicatcu

1
Yazılmamış eeprom her zaman 0xFF değil midir?
vsz

@vsz, belki bir şeyler yazıp yazdıklarını unutursanız, şimdi "rastgele" olur. lol.
Vorac

Yanıtlar:


5

"Rastgele" zor bir kelimedir. Bazı bağlamlarda, basitçe "öngörülemez" anlamına gelir, ancak diğer bağlamlarda - özellikle, sinyal işleme ve şifreleme ile ilişkili olanlar - "istatistiksel olarak ilişkilendirilmemiş" anlamına gelir.

Yüzen bir pimden okunan değer tahmin edilemez olsa da (ilk anlamda "rastgele"), ikinci anlamda yararlı olması muhtemel değildir.


15

Dijital giriş ve analog giriş arasındaki belirgin fark, analogda mümkün olan daha fazla sayıda tohum değerinin mevcut olmasıdır.

İkincisi, ama belki de daha önemli: Eğer dijital pinin değişken "medyan" değeri, mantıksal algı seviyeleri arasında tam olarak ortada değilse (bu güç ve toprak rayı seviyeleri değil, giriş devresi için eşiklerin değiştirilmesi) ortaya çıkan bit akımının 1 veya 0'a doğru kuvvetli önyargı Bu önyargı, tohumları analog seviyelerdeki eğriltiden çok daha güçlü bir şekilde büker.

Ya yakındaki izlerden ya da sinyallerden ya da "dirençli" bir dijital pimi açılmak için itmek için tasarlanan ya da kazayla, bazı dirençli yukarı çekme / aşağı çekme yoluyla çok az birleşme gerçekleşirdi. konuşlandırma. Herhangi bir tasarımın mühendisliğinde, bu başarısızlık modundan en iyi şekilde kaçınılabilir.


14

Yüzen bir giriş tanımsız. Size rastgele bitler verebilir, ancak 0 veya 1'de sıkışıp kalmaya da meyilli olabilir. Çoğu zaman sıkışır. Ve gerçekten yüzerken, sistem gürültüsünün artmasına ve güç tüketimine neden olabilir. Yüzen girişler, girişler hiçbir şey için kullanılmasa bile, genellikle kötü bir şeydir.


Bu sadece 0 veya 1 biraz zaman takılıp alacak, fakat tampon girişinin ilk aşamasını oluşturan iki transistör sürece MÜKEMMEL dengeli veya öyle ya da bazı dış akım kaynağı yoktur, giriş edecek yüzer sonunda 1'e kadar veya 0'a kadar.
wjl

9

En basit çözüm, yanlış kullanılan bir açık-kollektör transistör devresinden bir donanım rasgele sinyal üretme devresi oluşturmaktır. Mikro denetleyicideki bir girişe bit akışı çıkışı kullanın. Gelen bitleri aralıklarla örnekleyin. Kabaca eşit sayıdaki 1 ve 0 sayısını sağlamak için, durum değişikliğini 1 olarak kullanın ve sıfır olarak değişiklik yapmayın. Daha fazla bilgi için transistör gürültü üreticisi için Google.


İlginç. "Yanlış kullanılan açık kollektör transistör devresi" neye benziyor?
Stephen Collings,

7
@Remiel - Bir transistörün taban-verici bağlantısını ters çeviriyorsunuz ve gerçekten çirkin bir zener gibi davranıyor. Çok gürültülü zener alırsınız ve rastgele bit-akışı elde etmek için gürültüyü yükseltirsiniz. Bkz robseward.com/misc/RNG2
Connor Kurt

3

Birçok mikrodenetleyicide bulunan rastgele bir jeneratör, iki saat kaynağı arasındaki (belki bir dahili ve diğer harici) hatadır. Bunları karşılaştırdığınızda, gürültüden dolayı hafifçe kayırlar ve bu kullanılabilir.

Sonunda, neye ihtiyacın olduğuna bağlı? Biraz randomizasyon ve hiçbir şeye bağlı olmayan bir ADC pinini bile kullanabilirsiniz. Veya sadece bir algoritma kullanın

Mersenne twister http://en.wikipedia.org/wiki/Mersenne_twister

Bu, kriptografik olarak güvenli olsa da yok, ancak çoğu amaç için yeterince iyi.


başvurulan önceki soru msp430 uygulama notunda alınan yaklaşım, benim bilgime göre AVR saat sistemi bu tekniği desteklemiyor
vicatcu

Doğru. Doğrudan desteklenmese bile, aynı saat kaynağında bunu yapmak mümkün olmalıdır.
Gustavo Litovsky,

3

Rastgele bir tohumun kalitesi ve algoritması, her rastgele bit içindeki entropi veya belirsizlik miktarı ile belirlenir. Daha sonra, bir tohumun en iyi jeneratörü, birçok düşük entropi adımından ziyade, birkaç adımla yüksek entropi kullanır.

İyi bir yüksek entropi örneği, Latin Kareleri yöntemini rastgele bir tohum için kullanır .

Yüzen giriş, kusurlar, sızıntı veya giriş gürültüsü ile kolayca önyargılıdır.


0

Bir PIC18F mikroişlemcide rastgele sayılar için bir tohum almanız gerekir. Tohum 0 ila 32767 arasında bir şey olabilir (15 bit). Programın başında pinlerden birini ve analog giriş pinini kullanmanızı öneririm. Bu pimi okuyup en az anlamlı olanı alın ve 16 bitlik bir değişkene yerleştirin. Sonra değişkeni 1 ile sola kaydırın. Pimi tekrar okuyun ve ADC sonucunun LSB'sini, son biti sakladığınız değişkenin ilk bitine yerleştirin. Tekrar sola kaydırın .....

Değişkeninizde 15 bit olana kadar bunu tekrarlayın. Bu, tohumunuza atmanız gereken sayıdır.

Bunu yaptıktan sonra, sadece analog giriş pinini dijital giriş pinine yapabilir ve zayıf bir şekilde çekmesini sağlayabilir veya dijital çıkış pinini yapabilirsiniz. Her ikisi de bu iğnenin yüzmesini engeller.

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.