暗号化は、データのセキュリティを確保するために数学的関数を適用する科学です。
人気の映画やテレビ番組の多くは、十分に強力なハッカーがいる限り、どんなシステムでも侵入できることを人々にほのめかしています。この種の「ハリウッド ハッキング」は現実世界のシナリオではありません。ハッカーは、ロックされていないサーバー ルーム、推測しやすいパスワード、保護されていないネットワーク ポート、内部に設置された「バックドア」など、システム内の露出した脆弱性を見つけなければなりません。不正アクセス。
システムに脆弱性がないことを保証することは決してできないのは事実ですが、結局のところ、システムは不完全な人間によって構築されますが、「どんなシステムも破られる可能性がある」という考えは間違っています。 1990 年代初頭以来、私たちは暗号を使用するハッカーから完全に免疫を受けてきました。ただし、このテクノロジーを適用すると、ハッカーが悪用する余地が残る場合があります。
数学をハッキングして 2+2=5 にすることができないのと同じように、暗号自体をハッキングして偽造デジタル署名 (定義は間もなく与えます) を生成することはできません。ただし、暗号と数学は両方ともハッキングできますが、間違って使用されます。暗号化を使用するシステムが壊れた場合、それは設計者が暗号化を誤って適用したことが原因であると考えられます。それは、暗号化が機能しないためでも、誰かが暗号化を「破った」ためでもありません。銀行があなたの口座を不正に処理したり、母親が見慣れない添付ファイルをダウンロードしてコンピュータに感染したりするのは、数学的な間違いではありません。ウイルスは電子メールのバグとは異なります。ビットコインは非常に単純な暗号化アプリケーションであるため、これは重要な機能です。
未確認動物学はまだテストされていない新しいテクノロジーではありません。ビットコインで使用される暗号化技術はすべて、インターネットの黎明期から使用されており、毎日使用される多くの一般的なインターネット プロトコルの重要な部分です。 NASA が航空宇宙科学が信頼できて必要であると考えているのと同じように、コンピューター科学者は暗号化が信頼できて必要であると考えています。
公開鍵と秘密鍵のペア: 暗号化の基礎
公開鍵と秘密鍵のペアは、ブロックチェーンで使用される暗号化の基礎です。公開鍵と秘密鍵のペアには、秘密鍵と公開鍵の 2 つの部分が含まれます。これら 2 つのキーは実際には、パスワードとユーザー名の代わりに使用される、特定の数学的関係を持つ大きな整数にすぎません。
あなたの名前やユーザー名と同じように、公開鍵を持っています。ほとんどの場合、公開鍵を任意の要求者と共有でき、公開鍵の所有者はそれを使用してあなたを参照したり連絡したりできます。これはあなたの評判 (またはビットコインでの取引履歴) に関連付けられているため、さまざまな目的で複数の公開鍵 (したがって複数の公開鍵と秘密鍵のペア) を持つことができます。公開キーはアカウントの参照や表示に使用できますが、それ自体ではアカウントに対して何も行うことはできません。
秘密キーはパスワードのようなものである必要があります。誰とも共有すべきではありません。BTC (ビットコイン) の送信など、特定のアクションを検証するために使用されます。
しかし、秘密キーとパスワードの間には重要な違いがあります。パスワードを使用するには、検証できるようにパスワードを個人またはサーバーに送信する必要があります。パスワードは送信後、責任を持って処理されることを信頼する必要があります。対照的に、秘密キーは、誰にも送信せずに自分の身元を証明するために使用できます。これまでに直接保存または使用された唯一の場所は、ローカル デバイス上です。
秘密情報を誰にも送信せずに自分自身を認証できれば、そのセキュリティを完全に制御できることが保証されるため、これは重要です。他のシステムでのセキュリティ侵害の影響を受けにくくなります。これはビットコインを揺るぎないものにする重要な部分です。ビットコイン自体には、攻撃者に漏洩する可能性のあるパスワードや秘密鍵は保存されていませんが、ユーザーはトランザクションを検証できます。
しかし、秘密キーを誰にも送信したことがない場合、トランザクションを検証するために秘密キーをどのように使用するのでしょうか?その答えは、秘密鍵と公開鍵の間の数学的関係、つまりデジタル署名に関係しています。
デジタル署名
デジタル署名の生成と検証にはさまざまな手法があり、その動作の基礎となる数学については、この記事の範囲をはるかに超えています。暗号化に詳しくない人にとって、ここで説明するプロセスは最初は信じられないように聞こえるかもしれません。 4年前に初めてビットコインの勉強を始めたときに、このように感じたことをはっきりと覚えています。
ここで、これらの技術が多くの一般的なインターネット プロトコルで使用されており、情報科学の確立された部分であることをもう一度簡単に説明します。
公開鍵を非公開で交換したアリスとボブという 2 人の人がいると想像してください。アリスはボブにメッセージを送信したいと考えていますが、ボブは非常に疑い深い人物で、数学的かつ決定論的に証明できない限り、メッセージが本当にアリスから来たものであるとは信じていません。証明を容易にするために、彼らはデジタル署名を使用することに同意しました。
署名を生成するために、アリスは自分のコンピュータで署名生成アルゴリズムを使用します。このアルゴリズムは、秘密キーと完全なメッセージを入力として受け取り、デジタル署名を生成します。次に、彼女はこのメッセージと署名の組み合わせをボブに送信しますが、重要なことに、彼女は自分の秘密鍵を送信しません。
ボブはメッセージと署名を受信すると、補完的な署名検証アルゴリズムを呼び出すことができます。このアルゴリズムは、メッセージと署名を入力として受け取り、アリスが署名の生成に使用した公開鍵と秘密鍵のペアから公開鍵を決定します。ボブは、自分のアルゴリズムがアリスの公開鍵を出力することを確認すると、アリスの公開鍵と秘密鍵のペアの秘密鍵を知らず、計算できない場合でも、署名が実際にアリスの公開鍵と秘密鍵のペアを使用して生成されたことを数学的に証明したことになります。 。
より簡潔に言うと、このデジタル署名のプロセスにより、ボブはメッセージが第三者によって作成または変更されたものではなく、アリスの秘密鍵を使用して生成されたものでなければならないことを、彼女の秘密を知る必要がなく(または知ることができず)検証することができます。鍵。彼に必要なのは、メッセージと署名の組み合わせと彼女の公開鍵だけです。
直感的には信じられない、どこかで誤解があるように感じるかもしれません。アリスの秘密鍵と公開鍵が密接に関連しており、アリスが自分の秘密鍵を使用してボブが受け取る署名を生成する場合、なぜボブはボブの公開鍵だけを導出できて、秘密鍵を導出できないのでしょうか?この質問に対する答えを理解するには、ほとんどの人よりも数学に対する深い理解が必要ですが、それは本書の範囲をはるかに超えています。
にもかかわらず、このテクノロジーは毎日信頼されており、暗号化コミュニティ内では盤石であると考えられています。アドレスが https で始まる Web サイトにアクセスすると、「s」は Web サイトがデジタル署名を使用して認証されたことを示します。コンピューターは、上の例のボブのような署名検証アルゴリズムを使用して、Web サイトが実際に正しい公開鍵と秘密鍵のペアから作成されたものであることを検証します。デジタル署名により、ユーザーと Web サイト間のその後のやり取りが暗号化され、認証されることが保証されます。検証が失敗した場合、ブラウザは警告を発し、そのサイトを危険なものとしてマークします。
十分な大きさの整数
この前に、秘密鍵と公開鍵はユーザー名やパスワードと同じように機能すると簡単に説明しましたが、実際には、それらは特別な数学的関係を持つ大きな整数にすぎません。このことを踏まえて、私は次のような質問をよく受けます:
「コンピューターを使用して大量の数値を推測または計算し、それらを秘密鍵として使用しようとすることはできますか? 最終的にターゲットの公開鍵の秘密鍵を見つけることができますか?」実際、ビットコインの場合、これにより、攻撃者は公開鍵と秘密鍵のペアが保持するビットコインの一部を盗むことが可能になります。
それは良い質問ですが、そんなことは起こりません。前に述べたように、数百万ドル相当の BTC を保持するビットコイン アドレスがいくつかありますが、それらを盗むのに必要なのは正しい秘密鍵だけであるにもかかわらず、何年も移動されていません。これは正しい大きな整数です。これらのアドレスの秘密鍵を推測できれば、そこから誰にでも送金できます。パスワードとは異なり、秘密キーはマシン上でローカルに検証でき、試行の回数や頻度を制限するサーバーはありません。
では、なぜ誰もまだお金を盗んでいないのでしょうか?その答えは、秘密鍵として使用される数字のほとんどばかばかしいサイズにあります。十分大きいです。
簡単な思考実験から始めます。秘密キーが十分に大きく、世界中のすべてのコンピューターが連携してそれを推測するには 24 時間かかると想像してください。秘密キーに 1 桁だけ追加すると、コンピューターは 10 倍の計算量を必要とするため、1 日ではなく 10 日かかることになります。 6 桁を加算すると、その時間は 27,000 年になります。
いずれの場合でも、秘密鍵を生成するための乱数を作成するために必要な計算能力はわずかです。秘密キーを使用して署名を生成し、公開キーを使用してこれらの署名を検証することも、計算的に簡単です。ただし、秘密キーを推測するために必要な作業量は、数値が追加されるたびに指数関数的に増加します。秘密鍵をブルートフォースに対して「免疫」付けるには、十分な数を追加するだけで十分です。十分な大きさにするだけです。
どれくらいの大きさがあれば十分ですか?ビットコインで使用される秘密キーは 256 ビットの整数で、これは 76 ビットの長さの数値に相当します。この数字の大きさは信じられないほどです。以下の説明のほとんどは、Bruce Schneier の著書「Applied Cryptography」に由来しており、十分に大きな整数について直感的に説明されています。
まず第一に、熱力学第 2 法則の特定の結論は、単一のバイナリ ビットの情報の存在を変更する (1 を 0 に変更する、またはその逆に変更する) のに必要な最小エネルギーであることを理解する必要があります。これは、使用されるハードウェアに関係なく、あらゆる計算プロセスの実行には最小限のエネルギーが必要であることを意味します。
次に、太陽のエネルギー出力全体を利用して、公開鍵と秘密鍵のペア (BTC を制御できる) を見つけるために秘密鍵を計算または推測する特別に設計されたコンピューターに電力を供給できると想像してください。
少しの数学と熱力学を使用すると、1 年間の太陽のエネルギー出力を計算する能力を備えた非常に効率的なコンピューターが 2178 個の値を計算できることがわかります。この値を考えられる秘密鍵の数 (2256) で割ると、太陽の年間エネルギー出力に匹敵する計算能力を持つこの仮想コンピューターは、考えられる秘密鍵の総数の 0.0000000000000000000003% しか推測または計算できないことがわかります。
また、これは単なるカウントであり、各秘密鍵を実際にチェックして正しい公開鍵に対応することを確認するというより複雑なタスクは含まれていません。したがって、このコンピュータは、1 年に 0.0000000000000000000003% の確率で、気付かないうちに正しい秘密キーを見逃してしまう可能性があります。
これらの数値はデバイスのテクノロジーとは関係なく、1930 年代以降に確立された熱力学の法則に基づいた可能な最大値です。これらの数字は、コンピューターが物質以外のものから作られ、空間以外のものを占有しない限り、256 ビット キー (ビットコインで使用されるキー) に対するブルート フォース攻撃は実行不可能であることを意味します。
これは十分に大きな整数の累乗です。ハッカーがどれほど強力であっても、1 年を計算するのに 3 × 1023 個の太陽のパワーを使用できないか、または 3 × 1023 年を計算するのに 1 個の太陽のパワーを使用できない限り、そのコンピューターはすべての秘密キーのカウントを完了することさえできません。テストするか、その他の方法で使用してください。