- One Million Checkboxes(OMCB) は、誰でも同じ100万個のチェックボックスをリアルタイムで変更できるWebサイトで、運営中にデータベースから隠されたURLパターンが見つかり、予想外の協業が明らかになった
- 2024年6月26日の公開後、2週間で 50万人 が6億5千万回を超えてチェックボックスを操作し、単純な実験が大規模なインターネット上の遊びへと広がった
- チェックボックスの状態を 1ビット で保存する構造のため、8個のチェックボックスが1バイトになり、一部のユーザーはこれを利用してASCII文字やURLを二進メッセージとして隠した
- 隠されたURLはDiscordサーバーへつながっており、参加者たちは100万個のチェックボックスを 1000×1000画像 としてレンダリングし、QRコード、base64メッセージ、アニメーション、色表現を試した
- ボットは一般ユーザー体験を損なう可能性もあったが、制約を回避してシステムを探り、痕跡を残した過程は創造的なインターネット協業として残った
One Million Checkboxesの仕組み
- One Million Checkboxes(OMCB) は2024年6月26日に公開されたWebサイトで、100万個のグローバルなチェックボックスを提供していた
- ユーザーがチェックボックスをオンまたはオフにすると、その状態がサイトに接続しているすべてのユーザーに即座に反映された
- 運営者は数百人が数千個を押す程度を想定していたが、実際には2週間で50万人が6億5千万回以上チェックボックスを操作した
- このサイトはNew York Times、Washington Post、Know Your Meme、Wikipediaにも登場するほど広く拡散した
- OMCBのスケーリング技術は別の記事で扱われており、この話では運営中に見つかった隠しメッセージに焦点を当てる
絵を描きにくくした制約
- OMCBは公開インターネット上でユーザーが何を描くか予測しにくいため、自由に絵を描くこと が難しくなるよう設計されていた
- 1行に表示されるチェックボックスの数はブラウザウィンドウの幅に合わせて変化した
- 特定の幅では「EXAMPLE」のような文字を作れても、ブラウザ幅が変わると改行位置が変わり、メッセージは消えてしまう
- スマートフォンで描いた落書きはノートPCでは同じ形に見えず、同じ表示幅を持つユーザーにしか見えない
- この制約は、ユーザーが自分の書いた文字が他人には見えていないことに気づきにくいほど さりげなく 機能していた
- 多くのユーザーが絵を描けるよう「直してほしい」と求めたが、この挙動は意図的な選択だった
チェックボックスがデータとして保存される仕組み
- OMCBは100万個のチェックボックス状態を効率よく保存・転送するため、各チェックボックスを 1ビット で表現していた
- チェック済みのボックスは
1、未チェックのボックスは 0 として保存された
- 100万ビットは125,000バイト、つまり125KBに相当する
- データはRedisに保存され、クライアントへ送る際には base64エンコード が使われた
- 8個のチェックボックスで8ビット、つまり1バイトを作れたため、隠しメッセージを作る基盤が生まれた
データベースで見つかった不審なURL
- OMCB公開から数日後、負荷に対応するためバックエンドをGoで書き直した後、Redisに保存された生バイト列をASCII形式でダンプした
- ダンプの中には
catgirls.win へ続くURLが見え、最初はデータベースがハッキングされたと判断した
- アクセスログとコードを確認したが、侵入の痕跡はなかった
- データベースには0と1しかないはずだと考えていたため、文字列が入っているように見えた
- URLに対応するチェックボックス位置を確認するうちに、本当の原因が明らかになった
- 文字
h は1バイトで、1バイトは8ビット、OMCBでは8個のチェックボックスに相当した
- URLと一致する8個単位の繰り返しパターンがあり、チェックボックスを1つ変えると、すぐ元のパターンが再び現れた
- データベースがハッキングされたのではなく、誰かがチェックボックスを操作して 二進メッセージ を書いていた
ASCIIとして読まれた二進メッセージ
- RedisがデータをASCIIで出力するときは、生データを1バイト、つまり8ビット単位で読んでいた
- 各バイトは0から255までの数値に変換された
- 値が表示可能なASCII文字の範囲である32〜127にあれば、その文字が表示される
- そうでなければ
\x00 のような16進表現で表示される
- メッセージを作ったユーザーはチェックボックスをオン・オフしてビットを変え、そのビットが数値と文字を経てURLを構成するようにしていた
- このパターンは、何千人ものほかのユーザーが同時にサイトを操作する環境でも維持された
Discordへ続く隠し通路
- 隠されたURL
https://catgirls.win/omcb は Checking Boxes というDiscordサーバーにつながっていた
- 元のDiscordはその後ロックされ、URLは別の場所を指すようになった
- Discord参加者たちはOMCBの全チェックボックスデータをダウンロードし、1000×1000のグリッド画像 としてレンダリングした
- 未チェックのボックスは白、チェック済みのボックスは黒で表示された
- この画像には複数の形のメッセージが含まれていた
- 下部の繰り返しノイズは発見された二進メッセージだった
- その上には同じメッセージのbase64版があった
- 左側には誤り訂正を含むQRコードがあった
- どれもDiscordへつながるメッセージだった
- 参加者たちは、ボットを作りそうな人々がbase64データ、二進データ、1000×1000画像のいずれかを見るだろうと考え、複数の経路を同時に使った
- Discordの規模は参加時点で20人未満だったが、サイト終了時には60人以上に増えていた
ボット、絵、アニメーションの実験
- Discord参加者たちは、より良い描画システムを作り、OMCBの レート制限 をリバースエンジニアリングしながら、次第に複雑な絵を作るようになった
- 運営者はレート制限の情報を教えると提案したが、Discordのリーダーは自分たちで突き止めることを好んだ
- 時間がたつにつれ、アニメーションや色表現のプロトコルも試された
- 隣接セルを赤・緑・青のチャンネルのように扱い、より小さなグリッドに色を描く方式が一例として挙げられている
- サイト終了前日には、運営者が警告の後にすべてのレート制限を撤廃し、どれほどのトラフィックに耐えられるか、参加者たちが何を作れるかを確かめた
- このとき複数のアニメーションが作られ、例の1つはRickrollアニメーションだった
ボットをめぐる両面性
- OMCBではボットに対する不満が多く、ボットを批判するメッセージが数百件届いた
- 一般ユーザーがよく目にするボットは、チケット転売やレストラン予約ボットのように、利己的で不公平に感じられることが多い
- OMCBにも反社会的と見なせるボットが存在した
- 一部のユーザーは、可能な限りすべてのチェックボックスを解除する小さなJavaScriptボットを作り、その存在を知らせた
- こうした行動がサイト体験を壊したと語るユーザーもいた
- Discord参加者たちは、ボットをどこで使うかについてある程度のルールを設け、運営者はときどき強度を下げてほしいと頼んだ
- ボット利用が一般ユーザー体験を低下させた可能性はあるが、同時に制約の中でシステムを探究し、創造的な成果を生み出した事例でもあった
創造的ないたずらとして残った体験
- 運営者は高校時代、再帰的なメールルールを作って友人に何百万通ものメッセージを送るいたずらをし、誤って学校のメールサーバーを何度も停止させた経験がある
- 当時、周囲の大人たちはひどく怒るよりも、やめるよう言い、Tシャツまで作ってくれた
- OMCBのDiscord参加者たちが作った隠しメッセージやツール、絵は、予想外に創造的な結果だった
- 運営者はそれをリアルタイムで見て励ますことができた経験を意義深く受け止めており、DiscordがOMCBを遊びがいのある対象として見てくれたこと、そして彼らの生み出した成果を誇りに思っている
1件のコメント
Hacker News のコメント
作者です :)
サイトを運営しながら経験した話の中でいちばん好きな話で、もしかすると自分が関わった話の中で最高のものかもしれません。涙もろいほうではないのですが、この2か月、この件を思い出して文章にしようとするたびに何度も泣きました。もちろん発見の過程そのものも、恐怖から興奮へと変わっていった過程も、かなりとんでもないものでした。
こういうものを作るときに持っていた中心的な信念のひとつが検証されたことが、特にうれしかったです。少数の悪意ある人たちへの制約は必要だけれど、概してインターネットで遊んでいる人たちは善良でとても創造的で、その制約すら遊び道具にしてしまう、という信念です。
この記事はそれを示す最良の例のひとつで、サイトを作り、人々がそれをどう使うかを観察し、その経験を共有してくれたことが本当にうれしかったです。読んでとても幸せな気持ちになったので、たくさん共有するつもりです。
明らかに燃え尽きている状態なので、何か軽くて役に立たなそうなものを作るべきだと思いました。戦後10年ほど落ち込んでいた Richard Feynman が、昼食時に回転する皿の物理に再び喜びを見いだし、それまでの仕事をしばらく手放せたという話を思い出します。
おおむね善良で創造的な人が多いという点にも全面的に同意します。OMCB のクローンを作ったのですが、アイデアに取りつかれてオンラインに公開したところ、1日後には悪意ある人も何人かいたものの、誰かが巨大な**北斎の「The Great Wave」**を描き込んでいました。私のバージョンは固定幅・固定高さの大きなスクロールキャンバスを使っていたので、すぐに目に入り、それを見る感覚は本当に心地よく楽しいものでした。
この記事を読んで少し込み上げるものがありました。中学生のころソフトウェア工学を学んだのは、数学が苦手で宿題を解いてくれるプログラムを作りたかったからです。その後は LAN チャット、HTTP サーバー、アンチウイルスなど、ただ楽しいからという理由でいろいろ作り続けました。
楽しく、挑戦的で、やりがいがあり、驚きに満ちていました。ところが働き始めてからは、際限なく押し寄せる新技術、「X は有害だ」「J は K より優れている」といった論争、止まらない新しいものの爆撃のせいで、心が鈍っていきました。
工学の喜びが、もう青空のようには感じられません。今も青いのかもしれませんが、銀に洗われた目にはすべてが灰色に見えるようです。
この話を読んで、子どものころソフトウェアを学んでいたときの感情がよみがえりました。まだ楽しいものになり得るし、エグジットやきらびやかな新しい SaaS のためではなく、自分自身のために何かを作ることができます。まだ楽しめるという希望の光をくれました。
すでにご存じかもしれませんが、これは燃え尽き症候群の症状で、同じように感じている人は真剣に受け止めるべきです。以前、職場で Python を学んでいる人を手伝ったことがあり、その人がバイナリファイル形式を理解できたとき、本当に喜んでいました。そのとき私は、自分が何年もそういう感情を感じていなかったことに気づき、ほどなくして、その職場で働き続けるには疲れすぎていて、メンタルヘルスをケアする時間が必要だと分かりました。
肝心だったのは、どうしても必要でない限り新しい技術を学ぶことを無視し、ただ新しいものを作ることに集中することでした。コーディングがどれほど美しいものになり得るかを思い出させてくれたのは、Sebastian Lague の動画がきっかけだったように思います。
[https://youtu.be/X-iSQQgOd1A?si=aqriiWmcqqphOiuI]
10代のころ、必要だからではなく望んでコードを書いていた時期を思い出します。その技術を良いことにも使いましたが、「競争相手」をハックするような愚かなことにも使い、今では恥ずかしく思っています。それでも全体として、その経験が今の自分を作りましたし、次の世代もなおコーディングに喜びを見いだしていることをうれしく思います。
[1] https://news.ycombinator.com/item?id=41306128
pico-8 を手に取って、ひどいゲームやスクリプトを作るのもいいです。スペースもやる気もないので longDescriptiveVariableNames のような長い変数名ではなく、2文字の変数名を使う、といった具合に。TIS-100 や Shenzen I/O のようなゲームを遊ぶなら、マニュアルを印刷していちばん古びたフォルダーに入れ、コーヒーまでこぼしてみるとなおよいです。
この部分が本当に重要:
「私の人生にいた大人たちは、たいてい私に怒らなかった。やめなさいとは言ったが、Tシャツも作ってくれた。あのとき受けた励ましがなければ、今の自分の仕事はしていなかったと思う。」
10代には、ほどよく悪ふざけできる場、ある程度は実社会での結果が伴うものの、行き過ぎないように境界線と助けもある場が必要。そして権威者として君臨するのではなく、子どもたちが学びたいと思うような、かっこいい才能を持った大人が必要。
2枚組のスライド発表を作ったのだが、どちらも黒い背景に灰色の文字で、Windowsが削除されたように見えるDOSセッションをまねたものだった。1枚にはプロンプトに下線が付いていた。1秒ごとに自動で切り替わり、ループ再生されるようにすると、点滅するカーソルのように見え、壊れたコンピューターのように見えたが、Escapeを押すだけで抜けられた。もちろん、そのコンピューターはMacだったので、DOSもWindowsも入っていなかった。
教師がそれを見て、私がコンピューターをハッキングしたか壊したと思い、校長のところへ送った。校長は面白いとは受け取らず、その後2週間、昼休みの後半を学校のIT担当者と過ごし、彼が受けている器物損壊を見ていろという罰を与えた。ところがIT担当者は、私が何をしたのかを見るやいなや大笑いし、コンピューターを壊したかのように扱うのはばかげていると思っていた。その後も罰が終わってから、よく彼のオフィスに行って話したり、一緒に見回ってコンピューターを修理したりした。
翌年、いじってみたいものがあるのでPCにアクセスできるかと教師に尋ねたところ、彼は放課後の会計教室の使用権、ネットワークドライブの追加ストレージ、そして壊さないという条件付きでほぼ自由な権限をくれた。だから壊さなかったし、夜通し複数のマシンでTierraを走らせ、うまく動いているのを見て、朝来て保存して再起動した。将来にとって大きな基盤になった。金の卵を産むガチョウを殺したくなかったので、壊しもしなかった。
実習室のPCはとても遅く、Win+Eを押し続けるとExplorerウィンドウが何百も開いてPCが固まるいたずらが有名だった。そこで、クリックすると同じことをする「DoraTheExplorer.exe」という小さなVB6プログラムを作り、学校の共有ドライブに置いた。
最初はうまくいったが、人々はAlt+F4で素早く閉じて回避し始めたので、終了時に自分自身を再実行するようにした。しかしそれもAlt+F4連打で防がれた。最後には、閉じるたびにさらに2つ開くヒドラを作り、Explorerいたずら戦争のICBMとなって、敗北が宣言された。
管理者は最初から知っていたが、おおむねおおらかだった。誰かが作業を失ったり被害が出たりしたら責任を取らせる、と明確にしていたが、誰もがdora.exeが何をするか知っていたので、そういうことは起きなかった。人々はPCをばかみたいに落として、回避できるか見ようとして、わざと押していた。
当時もばかげていて不公平だと思ったが、幸い母も同意してくれた。今、大人の目で振り返ると、子どもを育てることに対して、ほとんど犯罪的なほど無責任な態度だったと感じる。本当に救いようがないほど狭量で情けなく、今でもああいう環境で育ち、ああいう人たちから学んでいる子どもたちがいると思うと腹が立つ。
「特にプログラミングをしない人たちがボットに触れる典型的な形は、チケット転売ボットやレストラン予約ボットのようなものだ。利己的で不公平で、反社会的に感じられるボットだ。」
この部分を見て、Palisades Tahoe スキーリゾートが昨冬、週末の駐車用に無料だが希少な駐車予約を導入したことを思い出した。Bay Areaで最も人気のあるスキー目的地の一つなので、当然ボットが作られた。新しい枠が解放されるたびに数秒で消え、明らかにボットだった。だから私も仕方なく一つ作った。
私のボットはキャンセルで空きが出るとPushoverで知らせるだけで、直接予約はしなかったが、私と同行者には十分だった。Redditでは、ボットを作らない人たちが「ボットが全部吸い上げている」と言っていて、私もかなり反社会的に感じたが、本当に選択肢がなかった。
そうしなければ、資源を最も多く支払う人に与える代わりに、プログラミング能力が最も高い人に与える「オークション」になる。その人たちはさらに、最も高く払う人に転売できる。プログラミングは専門技術であり、そもそも最も多くお金を払う人に与えることが受け入れられない文脈では、かなり不公平だ。スニーカー/ファッション業界の一部では、こういう方式が使われていると理解している。
面白いのは、毎年この山小屋予約にボットが使われているのかというニュースが出て、運営者たちは強く否定することだ。だが、自分のボットが無数の他のボットと競争していることは分かっている。
6〜12週間後の予約枠を得るためにボットと戦うか、適切な相手に50ユーロを払って数日以内に予約を取ってもらうか、という選択肢があることは公然の秘密だ。
予約を取った後はボートを9時間牽引しなければならず、道中ずっとボートに水滴が一つも残っていないことを祈っていた。ほとんどの検査員は水が見えると即不合格にして追い返すからだ。幸い、現地の検査チームはかなり素晴らしく、熱い水でボート全体を洗ってくれた。それがQuaggaムール貝の幼生や卵のようなものを殺すのだという。
この記事は本当に良くて、高校でJavaを学んでいた頃を思い出した。画面全体を「x」ボタンのグリッドで覆うアプリを作ったのだが、そのうち一つだけが実際にウィンドウを閉じた。誰かがコンピュータをロックせずに席を離れると、フロッピーディスクを入れてプログラムを実行してから立ち去った。
学校のIT担当者はいつも私たちが何をしているのか尋ね、私たちは正直に答えた。Halo CEやStarcraftのようなゲームをネットワーク上で動かす方法を見つけたと言っても怒りはしなかったが、あまり大胆になりすぎるとやめるように言われた。
私たちにはネットワークファイル共有があったのでフロッピーは不要で、みんなのコンピュータをいじるのはとても簡単だった。私は開いているウィンドウのタイトルを読んで、free games.comのような当時人気のゲームサイトを閉じるスクリプトを作った。授業中にゲームをしてはいけないからだ。ところが保存ファイル名のせいで、ある3Dモデリングプログラムを閉じてしまい、それは少し申し訳なかった。
回避方法を見つけた。メモ帳を開き、ファイルを開くダイアログに進み、その次の手順は正確には覚えていないがファイルエクスプローラーが開き、アドレスバーにURLを入れるとInternet Explorerに切り替わった。もちろんCDから起動するLinuxも持っていたが、それは目立ちすぎた。
IT担当者は、ネットワークゲームが全帯域を食い尽くし、インストールのために私がコンピュータを「ハッキング」して管理者権限を得たのだと主張した。このスレッドの多くのコメントごとに、私の話が一つずつあるように感じる。
New YorkerのReddit記事に出てきた話、特にr/Placeを説明した部分を思い出す。
昨年のエイプリルフールに、Redditはパロディ発表の代わりに本物の社会実験を公開した。名前はr/Placeで、1000ピクセル×1000ピクセルの空白の正方形だった。最初は100万ピクセルすべてが白だった。実験が始まると、誰でもグリッド上の任意の位置で、たった1つのピクセルを16色のうち1つに変えられた。唯一の制約は速度だった。アルゴリズムは各Redditユーザーが5分ごとに1ピクセルだけ変更できるようにした。「そうすれば一人が支配することはできません。遅すぎますから」と、Placeを担当したRedditのプロダクトマネージャーJosh Wardleは説明した。「大規模に何かをするには、協力しなければなりません。」
https://www.newyorker.com/magazine/2018/03/19/reddit-and-the...
私もボットが嫌いな人間の一人だった。この文章が必要だった。私も学校で、作ってはいけないプログラムを作って問題になったことがある
それでも、TI-83+ 電卓でプログラムを使っていいと言ってくれた数学の先生には一生感謝している。ただし、自分で書いたプログラムであること、他人に共有しないことが条件だった
以前 vBulletin フォーラムを管理していた頃、ゲームセンターのシステムを入れたことがある。ゲームをして、何の役にも立たない通貨「XMB Bucks」を稼ぎ、お互いに見せびらかすという楽しい機能だった
数か月後、そのゲームセンターに隠しサブフォーラム機能があり、かなり多くの人たちが活発に使っていることに気づいた。彼らは vBulletin の登録画面を迂回して、この隠れたゲームセンター機能に直接登録していたようで、まるで床板の下に住むネズミの群れのように、内輪で熱心におしゃべりしていた
大学に入った頃、WWW はまだとても新しいものだった。CIP プールで NCSA Mosaic を使ってページを見る方法はすぐに覚えたが、それがどう動いているのかはまったく分からなかった。それでも知りたかった
どこかで、自分のページを作るには「patchy server」が必要だと読んで、Altavista で Apache を検索した。最初の結果が先住民の部族についてではないことに少し驚いたあと、自分が何をしているのかも分からないまま、すべての指示を慎重にたどった
しばらくして Mosaic でテストページが表示され、うれしくなって帰宅した。もう遅くて疲れていたが、コンピューターを起動してダイヤルアップ接続し、自宅からも自分のページが見えるか確認すべきか迷った。多くのことは理解していなかったが、自宅から見えるなら、世界中の誰でも見られるはずだと思った
その考えが頭から離れず、結局試してみたところ、驚いたことに本当にできた。[1] 図書館もない田舎で育った私にとって、それは世界を揺るがすような体験だった
約2週間後、大学から、許可なく大学のリソース上でサービスを運用してはいけないという通知を受け、取り下げなければならなかった。しかしそれ以外は何も起きず、合理的に対応してくれて本当に幸運だった
[1] 当時、私たちのコンピューターにはグローバル IPがあり、ファイアウォールはまだ登場する前だった
\\x.x.x.x\c$と入力すると、かなり高い確率でそのまま接続できた素晴らしい話で、朝食に楽しい味わいを添えてくれた。若い開発者たちは、プロの世界の現代的なツールや手順、そして必ずしも良いことばかりではないものから自由でいられる
私はオープンソースの Roblox 代替のようなプラットフォームを作っているのだが、こういうタイプの子どもたちが引き寄せられてくる。本当に創造的で、バグや潜在的に有害なハックを知らせてくれ、いつも助けようとしてくれる