1

我想創建一個使用JavaScript的指數隨機數生成器,它使用以前的StackOverflow答案中的方法。 :這個指數分佈採樣器是密碼保密的嗎?

function randomNumGen() { 
     var u = Math.random(); 
     var mu = 0.3; 
     return -Math.log(1.0 - u)/mu; 
} 

不過,我後來發現,使用Math.random()是不是從另一個StackOverflow答案加密安全。但是,我不完全確定它是否對我來說是密碼保密的,因爲它使用u的統一隨機性對指數分佈進行抽樣,但我認爲它不安全。

在第二個站點,它推薦其他庫,但它們使用不同的分佈,而不是指數。我假設我不能簡單地用它們的一個(例如window.crypto.getRandomValues)替代Math.random(),因爲它不統一。

關於我能做些什麼的見解?

+0

你是什麼意思的「數學安全」?密碼安全涉及狀態空間太大而不能暴力,以及根據過去的輸出預測未來輸出的計算不可行性。在蒙特卡羅模擬(這是主要的指數隨機變量將被使用的地方)等事情中,這些考慮都不是非常重要。你試圖抵禦什麼樣的攻擊? –

+0

@JohnColeman我的歉意,我認爲他們是同義詞。我試圖實現密碼安全 – user153882

+1

你想達到什麼作爲最終目標?指數分佈和密碼安全的組合看起來有些奇怪。 – kraskevich

回答

2

,呈現的指數分佈採樣器是加密不安全。 JavaScript的Math.random()加密不安全,您用於抽取分佈的inverse transform method不會改變這一事實。

雖然我不清楚爲什麼你真的想要使用密碼安全的隨機來源,你可以,如果你願意。

但是,您可能對術語感到困惑。你是否真的需要大量的密碼學不可預測性,或者只是大量的統計隨機性?

如果你真的需要密碼學的安全性,然後用CSPRNG轉化爲浮點區間[0,1),而不是Math.random(),否則你應該罰款用一個簡單的高品質PRNG