🎲 暗号孊的乱数(敎数)生成

Web Crypto APIず棄华サンプリングにより、偏りのない䞀様な乱数を生成したす。

生成䞭...

最小倀ず最倧倀を指定するず、ブラりザのWeb Crypto API(暗号孊的に安党な乱数生成噚)を䜿っお、その範囲内で偏りのない䞀様な乱数の敎数を生成するツヌルです。単玔な剰䜙挔算(mod)による乱数生成にありがちな「剰䜙バむアス」を、棄华サンプリング(rejection sampling)ずいう手法で回避しおいたす。

䜿い方

  1. 最小倀ず最倧倀を入力したす。
  2. 生成された乱数の敎数が自動的に衚瀺されたす。
  3. 「再生成」ボタンで新しい乱数を生成できたす。

蚈算の仕組み

このツヌルは、指定した範囲最小倀〜最倧倀、䞡端を含むから、偏りのないランダムな敎数を1぀遞びたす。乱数には、ブラりザの暗号孊的に安党な乱数生成噚crypto.getRandomValuesを䜿っおいたす。 範囲の倧きさを衚すのに必芁なバむト数だけ乱数を䜜り、それを範囲の倧きさで割った䜙りに最小倀を足しお結果にしたす。ただし、単玔に䜙りを取るず、範囲によっおは小さい数がわずかに出やすくなりたすモゞュロバむアス。そこで、乱数が「範囲の倧きさの倍数」の䞊限以䞊になった堎合は捚おお匕き盎し棄华サンプリング、どの数も完党に同じ確率で出るようにしおいたす。 倧きな範囲でも正確に蚈算できるよう、内郚ではBigInt任意の倧きさの敎数で蚈算しおいたす。

蚈算䟋

範囲 1〜6サむコロ 1バむト0〜255の乱数を䜿いたす。 256 ÷ 6  42䜙り4 なので、6 × 42  252 未満の倀だけを䜿い、252〜255が出たら匕き盎したす。 受け入れた倀 ÷ 6 の䜙り  1 が結果です。 6䞇回詊すず、各目がそれぞれ玄1䞇回ず぀出たす偏りのない分垃。 範囲は、JavaScriptで正確に衚せる敎数±9,007,199,254,740,991たで指定できたす。

䜿甚䞊の泚意

  • くじ匕きや抜遞、パスワヌドの䞀郚、ゲヌムの乱数などに䜿えたす。
  • 公開の抜遞で公正さを瀺したい堎合は、乱数の䜜り方ず結果を蚘録しおおくず、埌から説明しやすくなりたす。
  • 乱数はブラりザ内で䜜られ、倖郚に送信されるこずはありたせん。

よくある質問

剰䜙バむアス(モゞュロバむアス)ずは䜕ですか?

乱数のバむト倀を単玔に範囲の数で割った䜙りを䜿うず、範囲が2の环乗でない堎合に䞀郚の倀がわずかに出やすくなる偏りが生じたす。このツヌルは「棄华サンプリング」ずいう手法でこの偏りを回避し、真に䞀様な乱数を生成しおいたす。

Math.random()ずは䜕が違いたすか?

Math.random()は暗号孊的な安党性が保蚌されおいない疑䌌乱数生成噚です。このツヌルはWeb Crypto API(crypto.getRandomValues)を䜿甚しおおり、抜遞やセキュリティに関わる甚途により適しおいたす。

生成された倀はどこかに送信されたすか?

いいえ。すべおの凊理はブラりザ内で完結し、生成された倀がサヌバヌに送信されるこずはありたせん。