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
getRandomValuesChrome 完全対応 11Edge 完全対応 12Firefox 完全対応 26IE 完全対応 11Opera 完全対応 15Safari 完全対応 6.1WebView Android 完全対応 ありChrome Android 完全対応 18Firefox Android 完全対応 26Opera Android 完全対応 14Safari iOS 完全対応 6.1Samsung Internet Android 完全対応 あり

凡例

完全対応  
完全対応

関連情報