あるくじの抽選は、運営を信じてもらう代わりに、誰でも自分の手で当選番号を再計算して確かめられる仕組みです。やさしい概念の解説は別記事にありますが、この記事ではその技術的な中身——実際に公開している値と、自分で検証する手順——を説明します。
この記事の位置づけ
「なぜ運営が結果を操作できないのか」をやさしい比喩(封筒を先に渡す)で解説したのが検証可能な抽選の記事です。この記事はその技術編として、実際に公開している値と、検証の具体的な手順に踏み込みます。
抽選の前に固定される「コミットメントハッシュ」
毎回の抽選では、締切の時点で参加者の番号リストが確定します。このリストは「匿名化した参加者ID」と「その番号」の組で作られていて、確定と同時に、リスト全体から SHA-256 というハッシュ関数で「指紋」を計算し、その場で公開します。これをコミットメントハッシュと呼びます。
SHA-256 は、入力が1文字でも変わると出力がまったく別の値になる関数です。先に指紋を公開してしまえば、後からリストをこっそり書き換えることはできません。書き換えた瞬間、公開済みの指紋と合わなくなるからです。加えて、確定後のレコードはデータベース側のルール(アクセス制御と変更禁止のトリガー)で書き換え自体を拒否しています。
クジの種(シード)の作り方
当選番号を選ぶ「クジ引き」には乱数を使います。この乱数の種(シード)は、次の式で決まります。
- シード = SHA-256(コミットメントハッシュ + ":" + 公開乱数の値)
公開乱数には drand(ドランド) という国際的な公開乱数サービスの値を使います。drand は世界中の複数組織が共同運営し、一定間隔で誰にも予測できない乱数を発行し、誰でも取得できます。あるくじは「何時のdrandの値を使うか」をコミットメントハッシュと一緒に事前宣言します。その値は抽選の瞬間まで運営にもわからないため、運営が都合のいい結果になる乱数を選ぶ余地がありません。
こうして決まったシードから乱数列を作り、参加者の実番号の中から当選番号(本賞)と追加の当選番号を順番に抽出します。
検証ページで公開している値
検証ページ(/verify)では、毎回の抽選について次の値を公開しています。
- コミットメントハッシュ(締切時のリストの指紋)
- 使った drand の値(公開乱数)
- シード(上の式で計算された値)
- 当選番号(本賞)と、追加の当選番号
これらがそろっているので、第三者が同じ計算を再現できます。
自分で検証する4ステップ(技術に詳しい方向け)
プログラムに詳しい方なら、ご自身のパソコンで次のように確かめられます。
- 公開された参加者リストを取得し、SHA-256 を計算する → 公開済みのコミットメントハッシュと一致するか確認
- 事前宣言された回の drand の値を取得する(drand は誰でも取得できます)
- シード = SHA-256(ハッシュ + ":" + drand値) を自分で計算する
- 公開されている抽選コードで同じ抽出を実行し、当選番号が発表と一致するかを確認する
抽選コードは検証ページからたどれる形で公開しています。すべてのステップが公開情報だけで再現できるので、途中でごまかしがあれば計算が合わなくなり、誰かが必ず気づけます。
技術に詳しくない方も、「確かめられる状態で公開されている」こと自体が抽選の正しさの担保になります。手を動かせる人が世界に一人でもいれば、不正はいずれ露見するからです。
なぜ、ここまで公開するのか
懸賞アプリに対する一番の不安は「本当に公正に抽選しているのか」だと、運営として考えています。だからあるくじは、「信じてください」と言う代わりに、信じなくても確かめられる形を選びました。透明性は、あとから足す機能ではなく、最初から設計の中心に置いています。
まとめ
- 締切時にリストの**コミットメントハッシュ(SHA-256)**を公開 → 後から書き換え不可。
- クジの種は SHA-256(ハッシュ + drandの公開乱数) で決まる → 運営が結果を選べない。
- 検証ページでハッシュ・drand値・シード・当選番号を公開 → 誰でも再計算して検証可能。
- 手順はすべて公開情報だけで再現できる = ごまかせば必ず気づける構造。
概念のやさしい解説は検証可能な抽選、抽選や賞金の全体像はあるくじの仕組みからどうぞ。実際の公開値は検証ページで確認できます。