題:
使用GPIO引腳的隨機數生成器?
Vorac
2012-12-03 20:23:46 UTC
view on stackexchange narkive permalink

我剛剛閱讀了問題 AVR隨機數生成器 ,並遇到了多種在AVR中生成隨機種子的方法:

  • 使用專用的“安全AVR”
  • 使用內部溫度傳感器
  • 讀取未寫入的EEPROM
  • 測量用戶輸入之間的時間間隔
  • 使用浮動ADC引腳。

為什麼不將單個數字引腳配置為輸入而沒有上拉和浮空?從理論上講,應該生成隨機位流。為什麼不使用這個?狀態變化太慢了嗎?它傾向於卡在1還是0?還有其他問題嗎?

安全AVR已失效AFAIK
未編寫的eeprom是否始終為0xFF?
@vsz,也許如果您向其中寫一些東西而忘記了您寫的內容,那麼它現在是“隨機的”。大聲笑。
七 答案:
Anindo Ghosh
2012-12-03 20:49:37 UTC
view on stackexchange narkive permalink

使用數字輸入和模擬輸入之間的不言而喻的區別是,模擬中可能會有更大的種子值跨度。

第二,但也許更關鍵:如果數字引腳是浮動的“中值”值並非恰好介於邏輯檢測電平(不是電源電平和接地軌電平,而是輸入電路的開關閾值)之間的中間值,因此所得的位流將對1或0產生強烈的偏倚。

與附近的走線或信號,或者通過一些電阻性上拉/下拉(無論是設計的還是偶然的),耦合所需的信號耦合很少。將“浮動”數字引腳推到浮動位置-部署後也可能會發生這種情況。在工程設計中,最好避免這種形式的故障模式。

user3624
2012-12-03 20:49:55 UTC
view on stackexchange narkive permalink

未定義浮動輸入。它可以為您提供隨機的位,但也可能會卡在0或1上。在大多數情況下,它會卡住。當它真正浮動時,可能會導致系統噪聲和功耗增加。浮動輸入通常是一件壞事,即使輸入沒有被使用。

它不僅有時會卡在0或1上,而且除非構成輸入緩衝器第一級的兩個晶體管處於“完美”平衡狀態,或者某個外部電流源或另一個外部電流源處於輸入狀態*將*最終浮動為1或0。
chris
2013-01-02 18:56:59 UTC
view on stackexchange narkive permalink

最簡單的解決方案是從濫用的集電極開路晶體管電路中構建硬件隨機信號發生器電路。使用位流輸出到微控制器的輸入。間隔採樣輸入的位。要確保1和0的數目大致為偶數,只需將狀態變化作為1而不將狀態變化作為0。 Google提供了晶體管噪聲發生器,以獲取更多信息。

有趣。 “濫用的集電極開路晶體管電路”是什麼樣的?
@Remiel-對晶體管的基極-發射極結進行反向偏置,它的作用就像是一個很爛的齊納二極管。您會選擇非常嘈雜的齊納二極管,然後放大噪聲以獲得隨機比特流。參見http://robseward.com/misc/RNG2/
Dave Tweed
2012-12-04 00:15:25 UTC
view on stackexchange narkive permalink

“隨機”是一個棘手的詞。在某些情況下,它僅表示“不可預測”,但在其他情況下(尤其是與信號處理和加密相關聯的情況),則表示“統計上不相關”。

即使從浮動讀取的值引腳是不可預測的(從第一個意義上講是“隨機”),從第二個意義上說,它不太可能有用。

Gustavo Litovsky
2012-12-03 22:07:53 UTC
view on stackexchange narkive permalink

在許多微控制器中可用的一個隨機發生器是兩個時鐘源(也許是一個內部時鐘源,另一個是外部時鐘源)之間的誤差。當您比較它們時,它們會由於噪聲而略有漂移,因此可以使用。

最後,這取決於您需要什麼?稍微隨機化,您甚至可以使用未連接的ADC引腳。或者,只要使用

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

之類的算法,即使該算法在密碼學上是安全的,但足以滿足大多數用途。

據我所知,這是前面引用的問題中的msp430應用筆記中採用的方法,據我所知AVR時鐘系統不支持該技術。
正確。即使不直接支持,也應該可以使用相同的時鐘源進行操作。
Tony Stewart Sunnyskyguy EE75
2012-12-03 22:20:43 UTC
view on stackexchange narkive permalink

隨機種子及其算法的質量由每個隨機位中的熵或不確定性量決定。然後,種子的最佳生成器使用極少步驟的高熵,而不是許多低熵的步驟。

高熵的一個很好的例子是對隨機種子使用 Latin Squares方法。

浮動輸入容易受到缺陷,洩漏或進入噪聲的影響。

portreathbeach
2015-05-09 02:42:45 UTC
view on stackexchange narkive permalink

在PIC18F微處理器中,您需要具有隨機數的種子。種子可以是0到32767(15位)之間的任何值。我建議在程序開始時,使引腳和模擬輸入引腳之一。讀取該引腳並取最低有效位並將其放入16位變量中。然後將變量向左移動1。再次讀取該引腳,並將ADC結果的LSB放入存儲了最後一位的變量的第一位。再次向左移動.....

重複此操作,直到變量中有15位為止。這是您需要放入種子中的數字。

完成此操作後,您可以簡單地將模擬輸入引腳設為數字輸入引腳並對其進行弱上拉,或者將其設為數字輸出引腳。任一個都會阻止該引腳浮空。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...