疑似乱数は鬼門

不正ではなくバグだろう.不正ならバレないように,もっと巧妙にやるって.

楽天で(totoBIGを)買ったんだけど
5口

5口10口別々に買ったら、5口分は一致してました。
ランダムじゃねーのかよ!?

ネタじゃなければ,おそらくは疑似乱数周りのバグでは.

これくらい簡単なバグでも,同じ条件で繰り返し実行して出力結果をちゃんと読んでないと気づかない.一見しただけだとランダムな出力を返してるようにも見えるから.


まして出る数字の偏りとなるなるどと,きちんと検証しないと気付くわけがない.

たとえばユーザーIDとかメールアドレスとかログイン時刻みたいな「一人一人異なるけど,同じユーザーだと不変」な値を疑似乱数の種にしちゃうと,こういうバグは簡単に出る。しかも同じユーザーが連続して購入しないとなかなか発覚しない恐れも.

疑似乱数生成器 (PRNG) は、乱数に近い性質の数列を生成できる決定性アルゴリズムである。各数列は、PRNG の初期状態と状態を変化させるアルゴリズムによって決定される。大半の PRNG は初期状態 (シード状態 とも呼ばれる) を設定可能である。初期状態を設定することを「PRNG にシードを設定する」と表現する。

明示的にシードを設定しない、あるいは同じシード値を設定するなど、同一の初期状態で PRNG を呼び出している場合には、プログラムを実行し直しても同一の数列が生成される。シードを設定して PRNG 関数を10 回連続で呼び出し、10 個の乱数からなる数列 S = {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10} が生成されたとする。この後、同一のシード値を設定して再度このコードを実行すると、まったく同じ数列 S が生成される。

したがって、一度 PRNG が実行されれば、攻撃者は次に生成される乱数列を予測することができる。PRNG に不適切なシード値を設定したり、そもそもシードを設定しなかったりすると、脆弱性につながる可能性がある。特にセキュリティプロトコルでは重大な問題になる。

解決策は、常に PRNG に適切なシード値を設定することである。PRNG に適切なシード値を設定することで、異なる乱数列が生成される。

すべての乱数生成器でシードを設定できるわけではない。ハードウェアで予測不可能な結果を生成する真の乱数生成器にはシードを設定する必要はないし、設定できるようなつくりにはなっていない。一部の UNIX システムで実装されている /dev/random デバイスなどのような高品質な PRNG もシードの設定はできない。このルールは、シードを設定することが可能なアルゴリズム的疑似乱数生成器にのみ適用されるものとする。

https://www.jpcert.or.jp/sc-rules/c-msc32-c.html


クライスラージープがハッキング可能な脆弱性も,ランダムに初期化すべき部分がランダムになってなかったせいだったな.

「Black Hat USA 2015:ジープのハッキングの全容が明らかに」

蓋を開けてみれば、Wi-Fiの乗っ取りはそれほど難しくありませんでした。Wi-Fiのパスワードが、自動車とマルチメディアシステム(ヘッドユニット)を初めて起動した時間を基に自動生成されていたからです。

理論上、日付と時刻を1秒の精度で表せば、無数の組み合わせができるため、安全性の高い方法です。ですが、ターゲットとなる車の製造年がわかり、製造月を推測できれば、組み合わせは1500万通りまで減らせます。製造時刻は日中であると仮定すれば、約700万通りにまで絞れます。ハッカーならこの程度の分量は簡単に処理することができ、片っ端から試しても1時間かそこらでパスワードを突き止められます。

クライスラー車のWi-Fiパスワードは、実際の時刻と日付が設定される前に生成されること、そして既定のシステム時間に、ヘッドユニットが起動するまでの何秒かを足した値をベースにしていることが判明しました。

今回のケースでは、グリニッジ標準時の2013年1月1日00:00、もっと厳密に言うと00:00:32でした。組み合わせの数はとても少なく、未熟なハッカーでも正しいパスワードを推測するのは簡単です。

https://blog.kaspersky.co.jp/blackhat-jeep-cherokee-hack-explained/8480/

さすがに使ったことはないが.

コンピューティング・システムは本来決定論的 (デターミニスティック) であるため、これらの特性 (統計的に独立し、一様分布で、予測できない) を持つ品質の乱数を生成することは、一般に思われているよりもはるかに困難です。

システムクロックから秒の値をサンプリングする一般的なアプローチは十分ランダムに思えますが、プロセス・スケジューリングとその他のシステムの影響により、一部の値がほかの値よりも頻繁に出現することはよくあります。ユーザーのキーストロークやマウス移動の時間のような外部エントロピー・ソースを用いた場合も同様に、詳しく解析すると、すべての値が平等に分布することはまずありません。一部の値はほかの値よりも多く出現し、特定の値はほとんど出現しません。

すべての PRNG の重要な特徴は、PRNG は決定論的であることです。そのため、同じシードが指定されると、同じ PRNG は完全に同じ「ランダムな」数のシーケンスを常に生成します。これは、PRNG は特定の内部状態と十分に定義されたアルゴリズムに基づいて次の値を計算しているためです。その結果、生成される値のシーケンスがランダムな統計的特性 (独立、一様分布) を示していたとしても、PRNG のすべての動作を完全に予測することができます。

状況によっては、PRNG の決定論的性質は利点になります。例えば、シミュレーションや実験で、研究者が同じ入力データのシーケンスを使用して異なるアプローチの結果を比較したい場合、同じシード値の、同じ PRNG を使用して、繰り返し可能な、長いランダムデータ入力のシーケンスを生成することができます。

ただし、ほかの状況では、この決定論的性質は大きな欠点になります。


ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ

ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ

http://b.hatena.ne.jp/entry/gahalog.2chblog.jp/archives/52398785.html

  • id:inade9 当選確率は変わっても期待値は変わらない、と一瞬思ったけど、賞金総額が決まってるから期待値も下がってアカンやつやね… 優良誤認で消費者庁に報告したうえで訴訟かな
  • id:pixmap ランダム前提のくじなら、同じ組み合わせが出てこようが期待値は同じでは?と思ったが、賞金山分け系のくじか。ビッドが重複すると、期待値は下がっちゃうね。
  • id:shinji BIGのことか。totoとは区別しよう。BIGは非予想系、totoは予想系。

へー.

たとえば1万人の購入者のうち9999人に同じ番号をローテーションでわりふって,残り一人がバラの数字で買えば,仮に当たっても9999人はその人数で山分けなのに,残りの一人は独り占め.特別待遇の一人のみ期待値が上がるってわけだ.

わざわざこんな面倒なイカサマはしないと思うが,ギャンブルとしての公正さには疑問符がつく.


良い乱数を作るのは,実は意外と難しい.通常使用で疑似乱数の規則性が問題になることは珍しいけど,ギャンブルは真のランダムさと無限の周期が必用な分野だから,専用ハードを使ってでも疑似乱数は避けるべきじゃなかったのかな.

  • id:koseki 「1人のユーザの2回の購入で発生している」「1人の報告しかない」「10年間発覚してない」という条件で、どんなバグだったらあり得るか想像するのは楽しい(つらい)。

疑似乱数でシードにユーザーIDとかログイン時刻(分まで)とかを使っちゃっただけでは.アルゴリズムも勉強したことない初心者なら良くあるレベル.*1

  • id:demandosigno 「完全な乱数なんて不可能だから問題なし」というコメントがあるが、ハード的に真の乱数を生成する方法もあると同じくコメントで指摘されてるし、totoBIGでこんな低レベル乱数を使われちゃあさすがに問題あるでしょ。

そもそも疑似乱数は「紛い物」だからこそ「疑似乱数」と呼ばれるわけで.本物の乱数じゃないことはプログラマなら常識.

公式発表

え,マジか.
「バグは夜更け過ぎに 仕様へと変わるだろう」という格言もあるけどさ.いいなあ,「コレは仕様です」って言えば責任取らなくてすむなんて.

日ごろからスポーツくじtoto・BIGをご愛顧くださり誠にありがとうございます。

さて、先般インターネット上に『楽天totoサイトにおいて、お客様が第909回BIGを複数回購入した際に、5口分の投票内容が一致していた券面があった。』という事例が掲載されておりました。
この事象につきまして、日本スポーツ振興センター及び『楽天totoサイト』を運営している楽天株式会社において事実確認を行ったところ、実際に販売されていたことを確認いたしました。

また、コンピューターが投票内容(「1」「2」「0」)を発番する際の仕組みにおいて、重複した投票内容の出現はあり得るものであり、この事象につきましても、システムの不具合や不正な操作等によるものではないことを確認いたしました。(発番の仕組みの詳細につきましては、セキュリティ上の観点から公表しておりません。)

今後とも多くのお客様に安心してくじを楽しんでいただけるよう努めてまいりますので、引き続きスポーツくじtoto・BIGをよろしくお願いいたします。

独立行政法人日本スポーツ振興センター
楽天株式会社

http://www.toto-dream.com/press/20170220.html

ふーん.



バグだったら責任者は引責辞任する覚悟はあるのかな.


それとも「システムの不具合や不正な操作等によるものではない」なので,あくまで「ハードウエア故障や不正アクセスはなかった(けどソフトウエアのことは下々に丸投げしてるからオラ知らね)」という意味なのかな。

http://b.hatena.ne.jp/entry/www.toto-dream.com/press/20170220.html
  • id:kz14 公平性が問題視されてるのに不具合がないとか言っちゃうとか。totoBigの不公平さは仕様なんですか。
  • id:tenari 「システムの不具合によるものではない」乱数の不完全さにより真のランダムより天文学的に高い確率で同じ組合わせが生じうることを不具合と呼ぶか仕様と呼ぶか/当選数の期待値と実際の乖離がどうだったか気になる

これを「仕様です」と言い張っちゃうと,これ全部が計画的犯行ってことになるんですが.

  • id:sakuya_little よく「星の数ほど」と言いますが、それは200垓個です。 今回の発番重複の確率は25溝316穣分の1です。 宇宙に輝く星の1251億5800万倍の中からたった一つを射抜く奇跡を我々は目撃しているのですね。 すごーい!
  • id:junmk2 これも日本社会の自浄能力のリトマス試験紙になるけども。公営ギャンブルの公然とした欠陥に責任を取らせられるのか。出来ないなら他のギャンブルの公正性も怪しくなる。
  • id:tsu_nyan ソシャゲのガチャ操作が発覚した時の対応と同じ匂いがする。「問題ない」「詳細は公表しない」「第三者は介入させない」で突っぱねてお終い。法的な対応を取られない限り痛くも痒くもないしね。
  • id:fugofugo どう考えてもバグなんだから炎上しないうちに払い戻ししたほうがいいのでは。
  • id:babi1234567890 エンジニアは真っ青だと思うけどね。「この事象につきましても、システムの不具合や不正な操作等によるものではないことを確認いたしました」

「だから言ったじゃないか」って場合もあるよ.

*1:だからアルゴリズムとデータ構造くらい勉強しておけとあれほど.