🌐 ZH-TW

🎲 文字亂數產生器

產生UUID、隨機字串、安全金鑰等的工具。適用於API金鑰、臨時密碼、權杖(token)產生,並以密碼學安全的方式產生亂數。

結果
※ UUID是通用唯一識別碼,重複機率極低。
※ 產生的亂數以密碼學安全的方式產生。
※ 可用於API金鑰、臨時密碼、權杖等。
指南

瞭解更多

01

1. 亂數的重要性與CSPRNG

亂數(Random Number)是無法預測的數值,對加密、資安、遊戲與模擬至關重要。一般亂數產生器產生的是演算法生成的偽亂數(Pseudo-Random),若已知種子值(seed)則可被預測。在資安要求較高的情境下,應使用CSPRNG(密碼學安全偽亂數產生器, Cryptographically Secure Pseudo-Random Number Generator)。PHP的random_bytes()與random_int()屬於CSPRNG,使用/dev/urandom或CryptGenRandom。JavaScript提供crypto.getRandomValues(),運用瀏覽器的熵(entropy)來源。一般的Math.random()不適合用於安全用途,絕對不可用來產生權杖(token)、工作階段ID或加密金鑰。

02

2. UUID與唯一識別碼

UUID(Universally Unique Identifier)是128位元的唯一識別碼,重複機率極低。UUID v4為完全隨機產生,是使用最廣泛的版本。格式為xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,其中4代表版本,y代表變體(variant)。UUID v1以時間戳記與MAC位址為基礎,可依時間順序排序,但會暴露MAC位址而有資安疑慮。UUID v7是最新版本,以時間戳記為基礎,但不會洩露個人資訊。將UUID用於資料庫主鍵、檔案名稱、工作階段ID與分散式系統,可在無需中央協調的情況下確保唯一性。

03

3. 安全金鑰與權杖產生

API金鑰、驗證權杖與工作階段ID必須具備足夠的熵。建議至少128位元(16位元組)以上,256位元(32位元組)則更安全。可透過Base64編碼轉換為URL安全字串。JWT(JSON Web Token)由Header、Payload、Signature組成,權杖本身即包含資訊。CSRF權杖透過在每個表單中加入唯一權杖,以防止跨站請求偽造。OAuth 2.0的state參數同樣是用於防止CSRF的隨機值。權杖應設計為一次性(nonce)或設定過期時間,以防止重送攻擊(replay attack)。

04

4. 密碼學亂數產生器的實作

作業系統會從硬體雜訊、鍵盤/滑鼠時序、網路封包等來源蒐集熵。Linux提供/dev/random(阻塞式)與/dev/urandom(非阻塞式)。當熵不足時,/dev/random會進入等待狀態,這在伺服器環境中可能造成問題。較新的核心建議使用getrandom()系統呼叫。Windows則使用CryptGenRandom(舊版)或BCryptGenRandom(新版)。硬體亂數產生器(HRNG)利用Intel RDRAND指令或TPM晶片產生真正的亂數。雲端環境因虛擬化而容易出現熵不足的問題,因此會使用haveged之類的守護程式(daemon)。

05

5. 區塊鏈與智慧型合約中的亂數

區塊鏈是確定性(deterministic)環境,因此產生亂數相當困難。所有節點都必須驗證出相同的結果,故無法使用一般的亂數。以區塊雜湊(block hash)作為亂數來源,存在礦工操縱的可能性。Chainlink VRF(Verifiable Random Function,可驗證亂數函式)提供可驗證的亂數,用於鏈上樂透與NFT鑄造。Commit-Reveal機制讓參與者先提交雜湊值(commit),之後再公開原始值(reveal),藉此防止操縱。Random Beacon是由NIST或drand專案提供的公開亂數服務。智慧型合約遊戲對於可信賴的亂數需求極高。

06

6. 亂數產生工具的實務應用

線上亂數產生器可應用於多種用途。發放API金鑰時,應確保足夠的長度(32字元以上)與複雜度。臨時密碼建議結合數字、英文字母與特殊符號,並設定為一次性使用。優惠券代碼通常偏好使用者易讀的大寫字母+數字組合(例如AB12-CD34-EF56)。邀請碼則多使用6~8個字元、簡短易記。為避免檔案名稱衝突,可採用時間戳記+亂數的組合。以UUID作為資料庫的分片(sharding)鍵,可克服自動遞增ID的限制。A/B測試的分組指派也依賴亂數來確保公平性。務必依照資安需求選擇合適的亂數產生器。