一個完全在您的瀏覽器內執行、透過 Web Crypto 運作的隨機數產生器,對於日常使用來說是安全的;而一個絕不會將您的最小值、最大值或結果傳送到遠端伺服器的工具,則消除了大多數人擔心的大部分隱私風險。無論任務是在課堂上抽出幸運兒、為測試選擇隨機樣本、排定簡報輪替順序,或是在幾家餐廳之間打破僵局,真正重要的問題並不是「隨機數產生器安不安全」,而是「這個工具實際上會如何處理我的資料,隨機位元又是從哪裡來的?」對於那些公開原始碼、使用平台密碼學亂數介面並採用無偏誤範圍對應的瀏器端工具,簡短的答案是肯定的,對於一般用途而言是安全的。一個安全的線上隨機數產生器行為是可預期的:它不會回傳資料到主伺服器、不需要帳號、不會記錄您的輸出,而且不依賴 Math.random,因為它在每個主流瀏覽器引擎中都是非密碼學的產生器。

誠實的答案比單純的「是」或「否」更有層次。並非每個自稱「隨機」的線上工具都是以相同方式打造的。有些會將您的範圍傳送到遠端後端、記錄您的抽樣結果,或是把非密碼學的 PRNG 包裝在行銷頁面中。最強的隱私與公平性保證,來自那些在您自己的瀏覽器內產生隨機位元、永不傳輸您的輸入或輸出,並將原始位元無偏誤地對應到您所要求範圍的工具。隨機數產生器符合上述全部三項條件,因此對於一般用途而言,它已達到網頁工具所能合理達到的安全程度。

is random number generator safe to use online
線上隨機數產生器安全嗎?

對線上隨機數產生器而言,「安全」實際上代表什麼

三項具體特性區分了安全與不安全的隨機數產生器,而讀者無需相信行銷文案,就能逐一審核這些特性:

  • 本地產生:隨機位元是在您自己的瀏覽器分頁內產生,而非在他人伺服器上,後者可能會被記錄或販售。
  • 密碼學來源:原始數值來自平台 Web Crypto 介面,而非 Math.random 這類非密碼學的 PRNG;後者是為了速度而非不可預測性而設計的。
  • 無偏誤對應:原始位元會被轉換為您所選擇的範圍,使每個整數(包括兩個端點)出現的機率相同。

不夠完善的工具通常會違反其中一項。將您的最小值與最大值 POST 到後端的網站,其記錄中預設就會包含您的輸入。使用 Math.random 的網站看起來很隨機,但對於略懂技術的人來說已足夠被預測。以簡單的模運算將原始位元轉換為範圍的網站,只要範圍大小不是 2 的精準次方,就會產生偏誤的輸出,因為原始數值遺留的「尾巴」會對應到被偏好的整數。可信任的產生器必須正確處理該尾巴。

隨機數產生器如何保護您的輸入

隨機數產生器完全在您目前的瀏覽器中執行。您的最小值、最大值、數量、重複偏好設定以及產生的整數,絕不會被傳送至 Lizely 或任何第三方。隨機性來源是瀏器的 Web Crypto 介面,具體來說是 Crypto.getRandomValues,相關說明記載於 MDN Web Crypto 參考文件 以及 W3C Web Cryptography API 規格。該介面會回傳密碼學強度足夠的 32 位元隨機字組。

該工具會將這些 32 位元數值組合成 JavaScript 能精確表示的 53 位元非負整數。原始隨機位元無法單純透過取餘數乾淨地對應到每個整數範圍:當範圍大小不是 2 的精準次方時,天真的模運算會留下一小段不完整的原始數值尾巴,對應到被偏好的整數。隨機數產生器透過拒絕抽樣(rejection sampling)來避免這種偏誤——它會捨棄不完整尾巴中的數值並重新抽取,因此您含端點範圍內的每個整數,都是透過相同數量的被接受原始數值所達成的。每個整數獲得相同的機率。

當允許重複時,每次抽樣都是獨立的。當關閉重複時,該工具使用稀疏部分 Fisher–Yates 洗牌,根據數量而非範圍大小成比例地在記憶體中挑選唯一偏移量,因此即便在極大的含端點範圍中只要求少數得獎者,仍能保持快速。

如何安全地在線上產生隨機數

  1. 在範圍欄位中輸入最小與最大安全整數。兩個端點都是合格的結果,因此範圍 1 到 10 可以產生 1、10 或介於其間的任何整數。只要每個值都是 JavaScript 安全整數,就支援負數邊界。
  2. 選擇介於 1 到 1,000 之間的結果數量,然後決定是否允許重複。對於重複的模擬,請保持重複開啟;當挑選不同的位置、識別碼或編號參與者時,請關閉重複。
  3. 點選「產生數字」。該工具會驗證您的輸入,從您的瀏覽器抽取所要求的數值,並以逗號分隔的清單顯示。
  4. 檢視輸出並複製它。更改任何輸入會清除先前的清單,因此絕不會將舊結果誤認為新設定所產生的輸出。

若您要求的唯一值數量超過範圍所能容納的數量,該工具會將該請求回報為不可能,而不會無限重試或悄悄傳回較少的數字。例如,從 1 到 3 抽出 5 個唯一值是無法完成的,您會看到明確的錯誤訊息,而非靜默失敗。

理解範圍、邊界與重複規則

含端點範圍與重複切換是驅動所有其他行為的兩項控制項,因此了解每項究竟改變了什麼會有所幫助:

設定行為典型用途
含端點邊界結果中可出現兩個端點從 1–10 範圍中抽出包含 1 與 10 的結果
允許負數邊界最小與最大值可為負數或跨越零抽樣溫度、有正負號的差值、債務或貸項記錄
允許重複每次抽樣獨立;可能重複重複模擬、擲骰式抽樣、隨機化測試資料
關閉重複稀疏部分洗牌回傳唯一值挑選得獎者、識別碼、名單中的排序位置
數量等於範圍大小,且關閉重複每個整數的隨機排列洗牌小型固定集合,例如有編號的簡報順序

每次請求最大 1,000 筆的數量上限與安全整數邊界是刻意設定的限制。它們能防止意外造成耗用大量記憶體的請求,並使不可能的唯一請求以錯誤呈現,而非以四捨五入的結果呈現。小數值、空白欄位、倒的邊界、無限大以及不安全的整數會在輸入時即被拒絕,因此您絕不會看到誤導性的結果。

覽器型隨機數產生器適用的情境

對於課堂抽獎、從簡短清單中挑選隨機餐廳、產生隨機化測試資料、為桌遊之夜建立洗牌後的牌組,或排定簡報順序,瀏覽器型隨機數產生器已經綽綽有餘。公平性——每個整數出現的機率相同——正是彩票式抽獎所依賴的特性,而無偏誤的對應確保了範圍中較小的數字不會被暗中偏袒。由於沒有任何資料離開您的裝置,結果對於產生該結果的網站而言也是私密的。

對於快速的 50/50 問題,專注的硬幣翻轉在更精簡的介面中執行相同的 Web Crypto 抽樣;對於像 2d6 或 1d20 這類骰子記法,專屬的骰子骰器是更直接的選擇。這兩項工具依賴相同的底層瀏覽器隨機介面,因此整個類別的安全性事保持一致。

仍應使用專業系統的情境

密碼學強度加上私密的瀏器分頁,並不等同於受監管的彩券或經過稽核的安全系統。隨機數產生器不公開種子、不會發出簽署過的紀錄、不會聯繫外部的隨機性信標,也無法讓您事後證明是哪個瀏覽器熵源產生了特定清單。若您正在舉辦具法律後果的獎勵抽獎、產生密碼或存取權杖、產製金鑰材料,或執行任何貴組織需要稽核的決策,請遵循貴組織既有的稽核程序。此工具旨在用於便利的一般用途隨機整數產生,並且坦率說明這一點,以免您將其誤用於重大決策。

同樣的注意事項也適用於超出 JavaScript 安全整數範圍的整數大小。該工具會拒絕無法精確表示的數值;若您需要任意精度的隨機整數,請使用接受整數字串而非一般瀏覽器數字的系統。堅持使用安全整數可讓每次抽樣都精確可表示,而這正是無偏誤對應得以保持無偏誤的原因。

若要更廣泛地了解如何將此工具應用於抽獎、讀書會與桌遊之夜等常見任務,如何為任何任務產生隨機數的實用指南可與上述安全性敘事相互搭配閱讀。

關於線上隨機數產生器安全性的結論

當隨機數產生器結合密碼學瀏覽器來源、本地執行的拒絕抽樣,以及完全不透過網路傳輸您的輸入或輸出時,對於「線上使用是否安全」這個問題,日常任務的實務答案是肯定的。開啟隨機數產生器、設定您的範圍,並相信結果僅反映您自己的瀏覽器所產生的熵。將經過稽核的專業系統保留給那些確實無法僅靠私密瀏覽器端抽樣因應的少數決策。

如果您正在權衡選項,活動用隨機詞彙產生器:挑選合適的點子對此有詳細說明。