Rand () işlevi ile RNG (Rasgele sayı üreteci) çevre birimi arasındaki farklar nelerdir?


9

STM32F4XXXX MCU'larında RNG (Rasgele sayı üreteci) çevre birimine merak ediyorum. bakmak bu Başvuru Kılavuzu (sayfa 748). Öte yandan stdlib kütüphanesinde aynı görevi yapan rand () fonksiyonuna sahibiz. Şimdi iki sorum var:

  1. Rand () işlevi ile RNG (Rasgele sayı üreteci) çevre birimi arasındaki farklar (avantaj ve dezavantaj) nelerdir?
  2. Şu kısma bakın:

özellikleri

Lütfen bu iki seçenek hakkında açıklayınız (özellikle ikinci seçenek).

Yanıtlar:


12

Dave'in cevabı oldukça güzel bir şekilde devam ediyor, ancak ikinci seçenekte biraz daha netleştirmek için:

gerçek bir donanım rastgele sayı üreteci fiziksel bir entropi kaynağı kullanır. Böyle bir entropi kaynağı kozmik radyasyon, elektriksel gürültü, ters yönlü bir diyottan (veya BJT transistöründen) avanlanche etkisi, chua devresi vb. Olabilir. Entropi kaynağı ne kadar az belirleyiciyse, rastgele çıkışın kalitesi o kadar iyi olur. İdeal bir entropi kaynağı kuantum fiziği etkisi veya deterministik denklemlerle modellenemeyen bir şey kullanmak olacaktır.

Rasgele sayı üreteçleri ile bir başka önemli faktör entropi kaynağının birim zaman başına sadece sınırlı miktarda entropi üretebilmesidir. İyi bir örnek chua devresidir: oldukça rastgele olmasına rağmen, çok düşük bir hıza sahiptir ve gerçek hayatta uygulama için kullanılamaz.

Yerleşik RNG'lere sahip birçok işlemci / mikrodenetleyicide, kasıtlı olarak yanlış senkronize edilen 2 ila 4 saat arasındaki saat kayması kullanılır. Daha sonra, deseni daha da rastgele hale getirmek ve bir kayıtta sonucu değiştirmek için hem analog hem de dijital filtreleri kullanırlar. Bu tür bir filtrelemenin gerçekleştirilmesi birkaç döngü gerektirir; bu, yeni bir değer kullanılabilir olmadan önce belirli bir saatte gereken minimum döngü miktarını açıklar.

Saatin sürüklenmesi tam bir kuantum etkisi değildir, bu yüzden modellenebilir, ancak sıcaklık, silikon işlemi, çalışma sıklığı, elektrik gürültüsü, arka plan radyasyonları vb.Gibi birçok parametreye bağlı olduğu için yeterince rasgele. .

Donanım RNG'sinin yeterli geçişe sahip olmadığı uygulamalarda (oldukça zorlu şifreleme uygulamalarında olduğu gibi), donanım RNG'sini sdtlib'deki rand () işlevi gibi sahte bir rasgele sayı üreteci için bir tohum olarak kullanmak oldukça yaygındır. Bununla birlikte, bu tür bir uygulama genellikle, gerçek rastgele değerlerle çok sık atılabilen bir tohumdan çalıştırılmak üzere özel olarak tasarlanmış rand () yönteminin daha iyi uygulanmasını sağlar . Entegre donanım RNG'lerine sahip daha yeni Intel işlemcide, sözde rasgele algoritma parçası doğrudan silikona entegre edilmiştir, bu nedenle donanım tarafından gerçekleştirilir ve çok yüksek rasgele geçiş sağlar.

Rand () yönteminin kendisini düşünürseniz, bu sadece yeterince büyük miktarda entropi üretmek için tasarlanmış bir methematik ifadedir. Uygulamaya bağlı olarak yeterince büyük: kriptografik anahtar nesiller için, rasgeleliğin en sevdiğiniz müzik çalarınızda basit bir rasgele karışıklık için gereken rasgele olandan daha yüksek kalitede olması gerekir. Rasgele çıktının kalitesi ne kadar yüksek olursa, rasgele sayının hesaplama maliyeti de o kadar yüksek olur.

Rastgele bir sayıyla ilgili işlemler, bir dosyanın MD5 karmasını hesaplamakla ilişkili işlemlere oldukça benzer: bir tür bit çığ efekti kullanmaya çalışırlar, böylece bir tohum değerindeki tek bir bit değişikliği tüm oluşturma modelini değiştirir. Bir yan not olarak, sahte rasgele sayı üreteci olarak MD5 kullanarak tavsiye ETMEM; sadece bir örnekti. Hem verimsiz hem de çok rasgele değil, ama nokta var: Aynı dosyayı bir MD5 has algoritmasına beslerseniz, her zaman aynı deterministik çıktıyı alırsınız, aynı çıktıyı her zaman aynı şekilde alırsınız uygulamanız şu anki zaman gibi rastgele öğelere bağlı olmadığı sürece aynı çekirdeği girerseniz rand () işlevi.


7

Temel fark, rand()kütüphane fonksiyonunun sahte bir sayı üreteci olmasıdır - herhangi bir belirli başlangıç ​​(tohum) değeri verildiğinde, her zaman aynı sayı dizisini üretecektir.

Öte yandan, RNG periferik gerçek bir rastgele sayı üretecidir ve tekrarlanamayan sayı dizileri üretecektir.


Teşekkürler. ve her ikisi de seçenek ..?
Roh

2
"Ve her ikisi de seçenek ..?" anlamına gelmek? Bu bir soru mu?
John U

2

Ana hatlarıyla belirttiğiniz iki konu nispeten kolayca açıklanabilir:

  • 1: Her 40 saat döngüsünde bir defadan daha hızlı rastgele sayılar üretemezsiniz, bu da 48MHz / 40 = ~ 1M Sample / s ile sonuçlanır
  • 2: Donanım, üretilen her sayıyı garip davranışlar için kontrol edecek bir monitör içerir. Örneğin, sıcaklığı kaynak olarak kullandıysanız ve oldukça kararlı bir sıcaklık ortamına sahip olsaydınız, RNG'nin aynı sayı dizilerini tekrar tekrar üretmesi olabilir (aynı tohum değeri ile başlarsanız sözde rastgele bir sayı üretecinin yaptığı gibi) . Bileşen bunu izler ve RNG beklendiği gibi çalışırsa size bir sinyal verir. Rakamlarınızın "gerçekten" rastgele olması gerekiyorsa, gerçekten olup olmadıklarını görmek için bu bayrağı izlemek isteyebilirsiniz. Bunun ne kadar tam olarak yapıldığı ve RNG'nin gerçekte nasıl çalıştığı muhtemelen kalan metinde verilmiştir.

1

Birinin belirli bir süre boyunca bir motora enerji veren mekanik bir rulet tekerleği tasarladığını, tekerleğin ve topun dinlenmesini beklediğini ve topun hangi cepte olduğunu gözlemlediğini varsayalım. Normalde her dönüşten sonra top ve tekerlek biraz farklı bir yere dönüşür ve bir dönüşten sonra topun bulunduğu yerdeki küçük değişiklikler, bir sonraki dönüşte nerede biteceği konusunda büyük bir fark yaratabilir. Böylece, motora her zaman aynı süre boyunca enerji verilse bile, bir topun bir dönüşe indiği cep, daha önce dönüşü aldığı yerden bağımsız olacaktır.

Bununla birlikte, şimdi, birkaç sayının bunlarda hafif depresyonlar olduğunu veya geliştiğini ve motor yataklarının düz noktalar geliştirdiğini varsayalım. Daha sonra bazı dönüşler rastgele olurdu, ancak topun bir çöküntüye inmesine ve düz bir noktada yatağa neden olan bir dönüşten sonra, bir sonraki dönüş, meydana gelen son dönüşle aynı sonuca sahip olmak için çok iyi bir şekilde eğilebilir. Çoğu spin aynı anda divot ve düz noktaya çarpmazsa, varlıkları muhtemelen işleri çok fazla etkilemez. Öte yandan, eğer bir divot / flat combo doğru yerleştirilirse, bir top makul bir şekilde bir saniyeye inecektir ve biri birinciye geri gönderecek şekilde yerleştirilecektir. son derece çarpık davranışlarla sonuçlanır.

4 ve 23'e iniş yaptıktan sonra, bir sonraki spin 4 ise, bu mutlaka bir problemi göstermez. Bu durumda zamanın yaklaşık 1 / 38'i 4 olmalıdır. Ayrıca, rastgele verilerin elde edilmesi sadece cep numarasını yakalamalıdır, çünkü topun cebin çeşitli kısımlarında ne sıklıkta dinlenmesi gerektiği hakkında yararlı bir şey bilinmemektedir. Bununla birlikte, sayıları kaydedenlerin cepte topun nerede durduğunu "gözlemlemesi" ve olağandışı kalıpları izlemesi yararlı olabilir. Konumların dağılımı, bir sorun belirtmeden öne veya arkaya doğru eğilebilir, ancak dağıtımda endişe yaratabilecek dar bir artış varsa.

Rastgele bir üretecin ardışık okumaları istatistiksel olarak bağımsızsa , önyargıları telafi etmek zor değildir (gerekli süre belirsizdir). Bununla birlikte, bir jeneratör okumaların bağımsız olmadığı bir duruma düşerse (örneğin, yukarıdaki tekerleğin döngüsel durumu), telafi temelde imkansız hale gelir - bu nedenle, bu tür davranışları tespit etmek için devre içermesi için bir donanım RNG'sine ihtiyaç vardır.

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.