RandomSource.getRandomValues()

RandomSource.getRandomValues() メソッドは、暗号強度の強い乱数値を取得します。引数に与えた配列は、すべて乱数 (暗号的な意味でランダムに) で埋められます。

十分なパフォーマンスを保証するため、実装は真の乱数生成器を用いませんが、疑似乱数生成器が十分なエントロピーを持つシード値を使用します。他のある実装とは異なる PRNG が使われますが、暗号化に使うには適当なものです。実装には、システムレベルのエントロピーソースのように、十分なエントロピーを持つシード値を使う必要があります。

構文

cryptoObj.getRandomValues(typedArray);

引数

typedArray
整数値を基数とした TypedArrayInt8Array または Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array。配列内のすべての要素は乱数で上書きされます。

例外

/* window.crypto.getRandomValues が利用可能であると想定 */

var array = new Uint32Array(10);
window.crypto.getRandomValues(array);

console.log("Your lucky numbers:");
for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

より安全なMath.randomの実装例としては以下のように使えます。

function secureMathRandom() {
  // 0から1の間の範囲に調整するためにUInt32の最大値(2^32 -1)で割る
  return window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;
}

仕様

仕様書 策定状況 備考
Web Cryptography API 勧告 初期定義

ブラウザーの実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
getRandomValues()Chrome 完全対応 11Edge 完全対応 12Firefox 完全対応 26IE 完全対応 11Opera 完全対応 15Safari 完全対応 6.1WebView Android 完全対応 ≤37Chrome Android 完全対応 18Firefox Android 完全対応 26Opera Android 完全対応 14Safari iOS 完全対応 6.1Samsung Internet Android 完全対応 1.0

凡例

完全対応  
完全対応

関連情報