UUIDの安全性を証明するために1,000ドルを贈呈しました

AGIに仕事を奪われたい
この記事は約15分で読めます。

8,768 文字

I gave away ,000 to prove UUIDs are secure
I made a post asking if urls with UUIDs are considered secure. I got some very interesting responses, including someone ...

これはいつものTheo動画ではありません。正直なところ、いつものTheo動画というものはないのですが、これは物語と、完全な混沌への旅になります。暗号化、ランダム性、一意性に関する根本的な誤解と、私が提示したチャレンジ、そして途中で面白いミームやコミュニティの反応が盛りだくさんの内容です。
すべては非常に興味深い場所から始まりました。私はパブリックURLについての投稿をしました。その理由は、私たちが構築する多くの製品は、データが従来の認証壁の背後に置かれるのではなく、推測不可能な超ユニークなパブリックURLの背後に置かれれば、かなり簡単になるからです。私はパブリックとプライベートの観点で、人々がこれについてどう感じるかを知りたかったのです。超ユニークなUUIDと他のデータを含むURLを本当にプライベートと考えるか、それともURLをコピーペーストすればアクセスできるという理由で単にパブリックと考えるのか。これは興味深い質問だと思い、人々から本当に興味深いフィードバックをいただきました。
非常に興味深い情報源からのフィードバックもありました。以前のGoogle Photosはこのように機能していて、画像を開くとパブリックURLが読み込まれましたが、それらはUUIDでランダムに生成されていたため、誰かがあなたのURLを見つける可能性はゼロでした。私たちのいくつかの製品について、望んでいた方法ではできないと確信するのに十分なフィードバックを得ました。それは全く問題ありません。今日はパブリックURLの問題について話すわけではありませんが、できればそうしたいと思います。
今日話すのは、ある非常に興味深い返信についてです。「はい、それはパブリックです。なぜなら、すべてのバリエーションを簡単に総当たり攻撃できるからです。問題は、データが総当たり攻撃のコストに見合うかどうかです」。
私はCharlieがUUIDが何かを理解しているとは思えません。彼に説明しようと何時間も費やし、彼の誤った仮定を証明するためのチャレンジを考え、そしてこれについて多くの公開コミュニケーションをした結果、everyuuid.comが更新され、そこで私のUUIDをスクロールして見つけると、チャレンジとして提供した1,000ドルを獲得できるようになりました。これは面白い話になりますが、誰かがこれらの費用を支払わなければなりません。私はこれを無料でやったので、短いスポンサーカットをします。すぐに戻ってきます。
[スポンサーセグメント:Prisma Postgresについて]
さて、一体何が起こったのでしょうか?このスレッドを順番に見ていきましょう。ここでCharlieは、UUIDのすべてのバリエーションを総当たり攻撃できると自信を持って言っています。これは大胆なだけでなく、客観的に間違っています。UUIDv4を知らない方のために説明すると、その数はどれくらいでしょうか?5.3×10の36乗です。これは2の128乗で、数字は「アンデシリオン」くらいでしょうか。
同じUUIDを2つ生成する可能性は、壁に全速力で走り込んで、あなたの体の原子と壁の原子が完全に一致して衝突せずに通り抜けるようなものと同じくらいです。実際、壁を通り抜ける方が成功する可能性が高いと思います。UUIDが何の略か知らない方のために言うと、文字通り「universally unique identifier(普遍的に一意な識別子)」です。UUIDの目的は、真にランダムな環境で2つを生成する可能性が事実上ゼロになるほど十分にユニークな識別子を持つことです。
明確にしておきますが、不可能だとは言っていません。ランダム生成ソリューションが十分にランダムでなければ、同じUUIDを2回生成することは絶対にあり得ます。ありがたいことに、今日一般的に使用される実装の大部分は、適切に真にランダムです。これが「すべてのUUID」を持つウェブサイトをより印象的にしています。なぜなら、5.3×10の36乗のすべてがあり、コマンドFで任意のUUIDを検索して見つけることができるからです。Nolanがこのサイトを動作させるためのハックは信じられないほど素晴らしいものでした。
しかし、スレッドに戻りましょう。私が言ったように、「我々は同じUUIDについて話しているのでしょうか?『簡単にすべてのバリエーションを総当たり攻撃できる』というのはどういう意味ですか?5.3×10の36乗のものをどうやって総当たり攻撃するのですか?それは実行可能ではありません」。
彼はその後、実際には2の32乗のバリエーションだと主張し、1台のサーバーから1秒間に10万リクエストを行えば、12時間で総当たり攻撃できると言いました。2の32乗は2の128乗よりもはるかに小さい数字です。これは作られた数字です。私はこれを言われたとき非常に混乱して、「その数字はどこから出てきたの?」と尋ねました。
私はE3チャットに尋ねました。「UUIDは完全にランダムではない。1つのUUID番号を生成し、キー内の各項目に対して上下に変化させる。2の32乗の確率で、12時間以内に正しいものを見つけるだろう」と彼は言います。
これに対して私は非常に冷静に、彼が文字通り自分が何について話しているのか全く分かっていないと説明しました。彼はその後、非常に面白い記事を出してきました。特定のJava実装では、高値と低値がランダムであるC関数がありますが、そのランダムは十分にランダムではなく、高値が保持されるため、理論的には2の32乗の可能性で他のUUIDを推測できるというものでした。ただし、これらの特定の悪い実装をすべて使用していると仮定した場合です。
注目すべきは、この記事はほぼ10年前のもので、公開から数週間以内にChromeが更新され、この理論的な攻撃が起こらないようにしたことです。さらに良いことに、crypto.getRandomValuesやcrypto.getRandomUUID関数を使用していれば、この問題は最初から発生しなかったでしょう。この問題が発生する唯一の方法は、Chromeでmath.randomを誤用して、誰も使用していない特定の実装を使用してIDを手動で生成した場合のみです。
15の理論的な仮定があり、それらはすべて10年前に時代遅れになっているとしても、私のコードがすべて1台のサーバーで実行され、生成がすべてその1台のサーバーで行われ、UUID実装が10年前の誰も実際には使用しなかった安全でない実装を使用し、UUIDが唯一の識別子で、このチェックに使用される追加情報がなく、同じパスを通して生成された別のUUIDがあると仮定すると、その理論的な道筋があり、そのコンピュータが生成した別のIDを生成できる可能性があります。
これはUUIDv4でさえないことも忘れていました。実際のものではありません。これは喜劇的なほど実際のものではありません。
彼は「個人的には、Lambdaでコードを実行し、プロキシを使用します。1秒間に数百万のリクエストを行うことができ、総当たり攻撃は合成データとAIシミュレーションを専門とする市販の製品を通じて実行可能です」と言いました。いいえ、あなたは私を特にトロールすることか、インターネット上で愚かなことを言うことのどちらかを専門としています。どちらであるかはまだ分かりませんが、私の直感では、彼は何か愚かなことを言い、ある時点で自分が非常に間違っていることに気づいたが、それを認める代わりにますます愚かになっていったのだと思います。
誰かが「なぜそんなに攻撃的なのか」と尋ねてきました。それは彼が本当に愚かで防御不可能なことを言ったからです。そのため、私はここでビデオを作ることが重要だと思いました。私は具体的に言いました。「彼は全く異なるものについての記事を出して裏付けようとした。彼は自信を持ってそれが同じものだと言っている」。
彼は「多分私は他の誰も発見していない新しいことを発見したのかもしれないが、相応の賞金で挑戦を与えてくれれば、私はそれをやる」と言いました。
そこで私は不可能なチャレンジを提示しました。「UUIDを推測するのがそんなに簡単なら、これを試してみてください。私はNode上のコンピュータでcrypto.randomUUID関数を2回実行しました。最初のIDはこれで、2番目はこれです。これがあなたのチャレンジです」。
私は次のコマンドでテキストファイルを暗号化しました。そして、少し間違えたことを認めます。AES-256を使用したため、約2,000回に1回はナンセンスな値でも正常に復号できてしまいます。総当たり攻撃の目的で何かを暗号化したことがなかったので、正確な符号化でない限り常に失敗する別の暗号化方法を使用すべきでした。私のミスです。
「これをクラックできれば、1,000ドルを差し上げます」と言い、「適切に復号するよりも総当たり攻撃する方が簡単でしょう」とさえ言いました。そしてファイルリンクを掲載したので、そのファイルをダウンロードできます。
彼は非常に知的に返答しました。「賞金が十分ではない。プロキシ検出がないと仮定すると、サーバーコストだけで2,000ドルになります。時間とリスクに値するためには、賞金が10万ドル以上のターゲットである必要があります」。
チャットの誰かがプロキシ検出がここでどう役立つのか説明できますか?プロキシ検出と、ローカルでファイルを復号することは何の関係があるのでしょうか?これを私に説明できる人はいますか?
そうです、何の関係もありません。なぜならあなたはファイルをコンピュータやサーバーにダウンロードし、生成したコードを使用して復号しようとするからです。毎回ファイルを再ダウンロードする必要があるとしても、私はこのチャレンジを特に、あなたが間違っていることを証明する際にサーバーコストを負担する必要がないように設計しました。
しかし、これまでに確認したように、我々の友人Charlieは読むことができないようです。これが私が今まで経験した中で最も厳しい比率の1つを得た理由です。「賞金が十分ではない」云々。「読解力に問題があることを確認していただきありがとうございます」。13対1,000の比率です。それを誇りに思っています。
再び彼は「データが総当たり攻撃の価値があるかどうか」「より小さなデータのサブセットを提供しているなら」などと言い、「総当たり攻撃の方法に加えて、大きなデータサブセットと小さなデータサブセットを区別せず、パターンとランダム化を使用して攻撃する場所を選択します」と続けました。
私はプロキシの件について再び指摘しました。「Cloudflareを使用しますか?あなた自身のサーバーですか?AWSのサーバーレスでプロキシ検出が組み込まれていますか?ここにはたくさんのバリエーションがあります。あなたはチャレンジを読んでいません。ネットワークリクエストはありません。ステップ1:ファイルをダウンロード、ステップ2:ファイルをローカルで復号」。
これが面白いと思ったので、シグナルブーストの投稿をしました。誰かが「自分は24時間以内に任意のUUIDをクラックできると確信している」と返信しました。実際には彼はさらに進んで「12時間」と言いました。「私は次のチャレンジを提示しましたが、彼らはサーバーコストだけで2,000ドルになるという理由で降りました。このチャレンジはローカルで動作します」。
ここでちょっとしたことを書きました。数人の方が混乱していたからです。ありがたいことに、我々の友人Charlie以外で混乱していた人々は、これがどのように機能するかを知っていると主張していませんでした。
また、Charlieが今私をフォローしていることにお気づきかもしれません。彼は始めた時にはフォローしていませんでした。これが私がこれほど多く話す意欲があった大きな理由の一つです。彼は物事を理解しようとしていたのではなく、理解していないことについて嘘を主張しようとしていたからです。
これが私の境界線です。あなたが誤解から無邪気に質問するなら、私はできる限り喜んで助けます。しかし、あなたが理解していないことについて一貫して公に嘘をついているなら、私はあなたにそれを酷く感じさせるでしょう。だから我々は今日ここにいるのです。
私のお気に入りの投稿は「ヒントを出しましょう。答えはこのページにあります」というもので、EveryUUIDサイトへのリンクがついていました。彼はここで再び参加しました。「私は影響を受けないことについて議論するのに疲れていたので返答するつもりはなかったが、もしあなたが主張するなら、ローカルでのみ復号できるようにすることで、私は1つのサーバーに制限されることになる」。一体どうして?ファイルを持つことが、エンドポイントにアクセスするよりもどうして制限になるのでしょうか?
最高の部分は「ごめんよTheo、個人的なことではない」と、考えられる中で最も愚かなことを言った後に言ったことです。ありがたいことにチャットはこれを理解しています。「これは文字通りあなたが無制限にスケーリングできることを意味します」。
私はトロールがどのように見えるか知っていますが、これを通じて私のトロール感覚は全く働いていませんでした。彼がこれらの点を主張してきた方法と、彼が公に実際の仕事とセキュリティを得ようとしてきた方法は、私が今まで見た中で最も愚かなことです。私は正気を失いそうに感じましたが、そのように感じたのは私だけではありませんでした。
それが私たちの友人Nolanが「百万のチェックボックス」ビデオから覚えているかもしれない理由です。まだ見ていない方は、それは必見です。私のお気に入りのビデオの一つです。なぜなら彼のビデオについてのものだったからです。Nolanは私が今まで見た中で最も創造的な開発者の一人で、ウェブ上で真に斬新で面白いものを作っています。彼はEveryUUIDサイトを作りました。これは本当に信じられないほどの革新的なハックで、一つのページですべてのUUIDを見ることができるようにしました。
彼はこれに興奮し、サイトに機能を追加することにしました。「Theoのキユキユアイディーを見つけよう」というものです。URLの末尾に「/theo」を追加すると、スクロールしても残る小さなボックスが追加され、スクロールするとスクロールするUUIDごとにペイロードを復号しようとします。
これが特に面白いのは、彼自身がブラウザでAES-256を実装しなければならなかったからです。Nolanは神で、これで本当にクールなことをしました。まだフォローしていない方は、彼をフォローしてください。彼は伝説です。YouTubeのリンクも説明に残しておきます。あなたは彼をフォローすべきです。彼は将来良いコンテンツを作ると思います。この分野で私のお気に入りの人の一人です。
問題は、前述したように、ランダムなUUIDでこのファイルを復号できることです。ただ、結果はナンセンスになります。これがCharlieで、さらに面白いのは、彼がウェブサイトを通じてそれを手に入れ、超自信を持って自分がそれをクラックしたと主張したことです。これが彼のIDで復号した結果です。彼は出力が何であるかをチェックしておらず、単に復号できるかどうかをチェックしていただけです。
しかし、私のチャレンジは「それを復号する」ではなく、「中のテキストを教えてください」でもなく、「このUUIDをクラックしてください」でした。そして、まだ誰も正しいUUIDを得ていません。私はこれを注意深く見守ってきました。今日はまだチェックしていないので、もう一度確認します。
まず第一に、いいえ、私は最初の2文字が「th」であり、それは有効な英語の文であるというヒントを与えました。これはEveryUUIDサイトにフィルターを追加できるようにするためでした。スクロールしている多くの人がここでスクリーンショットに見られるように、キャレットrなどで復号に成功したからです。これは明らかに正しいものではありません。
私はここでヒントを出し、Nolanはサイトを更新し、人々は大部分諦めました。私はこの開発の世界にいない友人たちにも挑戦してもらいました。Bonesyという友人はChat GPTを使ってこれを試みました。彼女は開発者ではなくゲーマーですが、Chat GPTを使ってこれを解明しようとしました。AIは前の入力から最も可能性の高いものに基づいて出力を生成するので、いくつかの非常に面白いことを妄想しました。
「ケーキは嘘であり、あなたは何も解決していない」というのが、暗号化されたバイナリの中のテキストだろうと推測したものです。さらに面白いのは、彼女はまだバイナリを与えていなかったのに、AIはそれを推測していたことです。ある時点で、彼女は私がこれを本当にクレイジーなチャレンジにし、異なる潜在的な復号を隠していると思っていました。なぜならAIがそれほど妄想したからです。
いいえ、Bonesy、愛してるよ。私は何も特別なことはしていません。テキストを皆さんにお見せしましょう。今まで隠していたテキストです。このチャレンジは48時間無効でした。ここがそのテキストです:「このファイルに入れる0%の可能性があります」。
それがテキストでした。すぐにUUIDを見つけてみましょう。見つかりました。ここにUUIDがあります。何か本当に面白いことを見てみたいと思います。ほら!正しいUUIDを貼り付けると、Nolanが入れた魔法のおかげでコマンドFでそれを見つけることができます。ページを更新して、そこに行くと、「このファイルに入れる0%の可能性があります」と復号されます。
かなりクールですね。Nolanはこれを完璧にやり遂げました。この中で実際に賢く出てきた唯一の人物です。私はこれが今まで見た中で最も面白いことだと思いました。理論的にすべてのUUIDをスクロールして生成できるウェブサイトを作るなんて。完了するには17兆年かかるでしょう。これは誰かが出した数字で、意味があるように思えました。かなりクレイジーでしょう?
はい、しつこいようですが、彼のサーバーレスの使い方はとても面白かったです。「サーバーレスを聞いたことがありますか?私は同時に10,000台のサーバーを使用でき、UUID自体をレジスタとして使用できます。ローカルで復号するよう強制することで、今では私のローカルと調整するサーバーが必要になり、物事をはるかに複雑にし、アーキテクチャをはるかに複雑にします」。
いいえ、そうではありません。何をするにしても、すでに試したUUIDを追跡する必要があります。URLに対する総当たり攻撃であれ、ファイルの復号の総当たり攻撃であれ、私のサーバーがファイルを手渡した場合にあなたをレート制限できないという事実を除けば、文字通り違いはありません。
私は文字通りこのチャレンジの完璧なバージョンを作成しました。もし彼の主張が真実であれば、彼は簡単にそれを証明して簡単にお金を稼ぐことができましたが、代わりに彼はインターネット上で考えられる中で最も愚かなことを言いました。何らかの理由で、URLの総当たり攻撃の方が復号の総当たり攻撃よりも調整しやすいと思い込んでいることに、私は非常に面白く思っています。
チャットからの良い指摘です。「重複にヒットする確率が非常に低いので、技術的に追跡する必要はありません」。そうですね、我々はトロールされた可能性がありますね。もしトロールされたのなら、これは伝説的なコミックの「冗談だよ、俺はただ装っていただけ」というようなものです。しかし、彼はそうではなかったと思います。
チャットがここで指摘しているように、「脆弱なエゴの持ち主は間違いなく本物だった」「Charlieは暗号化とIDに関するコンピュータファイルのビデオをいくつか見ていたんだろう、兄弟はおそらく単に愚かだった」。
私は以前、このような形で誰かを追いかけるビデオを作ったことはありませんが、気にしません。このスレッドとチャレンジの絶対的な混沌に私の時間と正気の多くを失ったので、それに対して何かを取り戻さなければなりません。私の一部は恐らく悪いと感じるべきですが、全くそうは思いません。
私が言うべきことはすべて言いました。彼はバイブシンキングをしていたのかもしれません。今、真顔で私たちに言ってください、それは価値がなかったと。
いいえ、できません。それは価値がありました。これは私にとってとても楽しかったです。これは今、約2日間私が話していることのすべてです。この全体が本当に奇妙な旅だったので、皆さんと共有したいと思いました。これは楽しいものでした。
この動画は普段の動画とは全く違いますが、皆さんが私が行った旅を楽しんでくれることを願っています。どう思ったか教えてください。このようなランダムなことへのカオスな深掘りを楽しんでいますか、それとも私が実際の伝統的なトピックにとどまることを好みますか?教えてください。
次回まで、UUIDを安全に保ってください。誰がそれを盗むか分かりません。

コメント

タイトルとURLをコピーしました