ビットコインが私たちに与えてくれるのは、厳格な約束です:プログラムは指定された通りに正確に実行されます。
アンドレアス・M・アントノプロス
公開鍵/秘密鍵暗号方式
暗号技術 とは、情報を正しい人だけが読める秘密に変換する技術です。
- 暗号化 とは、情報を正しい鍵を持つ人だけが読めるように、符号化された形に変換するプロセスです。
- 復号化 とは、その符号化された情報を再び読める形に戻すプロセスです。
従来の暗号技術では、プライベートに通信したい2人は、まず同じ秘密鍵を共有しておく必要があります。これは共通のパスワードのようなものです。一方がこの鍵を使ってメッセージを暗号化し、もう一方が同じ鍵を使って復号し、内容を読みます。
この仕組みの問題点は、2人がすでに秘密鍵を共有していなければならないことです。もし他の誰かがその鍵にアクセスできれば、傍受されたメッセージを読むことができます。
ビットコインは、この問題を公開鍵暗号方式という異なるアプローチで解決しています。ユーザーは事前に秘密鍵を共有する必要がありません。
公開鍵/秘密鍵暗号方式は、秘密の共有という問題を解決します。パスワードを共有する代わりに、それぞれが2つの鍵、すなわち公開鍵と秘密鍵を持ちます。
- 公開鍵 は誰とでも共有できます。
- 秘密鍵 は常に秘密にしておかなければなりません。
たとえば、タカシがアキラに何かを送りたい場合、アキラの公開鍵を使います。アキラだけが自分の秘密鍵でそれを解除できます。たとえ誰かがメッセージを傍受しても、秘密鍵がなければ読むことも利用することもできません。
ビットコインでは、この仕組みがデジタル署名の作成に使われています。デジタル署名は、秘密鍵の所有者が取引を承認したことを証明します。これは、書類に自分の名前をサインするのと似ています。これによって、第三者を信頼しなくてもビットコインの取引が安全かつ検証可能になります。
ビットコインの取引は、ビットコインの所有権をあるアドレスから別のアドレスへ移すことです。
暗号化は、本物のビットコイン保有者だけが自分のビットコインを他人に送る権限を持つことを保証するために使われます。これにより、財産が悪意のある第三者から守られます。
さらに保護を強化するため、各ビットコイン取引には自動的にユニークなデジタル署名が付与されます。このユニークなデジタル署名は改ざん防止技術によって支えられており、ネットワークが本物のビットコイン所有者が送金したことを検証するのに役立ちます。
各ユーザーは2つの鍵、すなわち秘密鍵(これは秘密にされ)、そして公開鍵(これは他人と共有できます)。秘密鍵は、本人確認や所有権の証明として機能し、「このアドレスは自分のものであり、自分が管理している」ということを確認します。
ビットコイン取引の仕組み
- 取引の作成:ユーザーは、受取人のアドレスや送金するビットコインの金額などの詳細を指定して、ビットコイン取引を開始します。
- デジタル署名の生成:送信者はユニークなデジタル署名を自分の秘密鍵で生成します。この署名は、取引の真正性を証明するユニークなコードです。
- 取引のブロードキャスト:署名済みの取引はビットコインネットワークにブロードキャストされ、送信者から受信者へのビットコインの所有権移転の意思を示します。
- ネットワーク上での検証:ビットコインネットワーク上のノードは取引を受信し、受信者の公開鍵署名の真正性を検証するために、送信者の公開鍵を使ってデジタル署名を検証します。
- ビットコインネットワークでの承認:検証が成功すると、取引は台帳に追加されます。台帳はすべての取引の安全で透明な記録として機能します。一度承認されると、ビットコインの所有権は正式に送信者から受信者へ移転されます。
このデジタル署名は、送信者の秘密鍵で作成され、取引がビットコインの所有者によって承認されたことを証明します。ビットコインネットワークはこの証明を検証し、取引を記録することができます。
ハッシュ化の説明
これから出てくる技術用語や数学的な概念に怖気づかないでください。数学が苦手な方もいると思いますが、少し努力すれば、どんなに複雑なアイデアでも理解できることに自分で驚くかもしれません。
関数は、情報を受け取って新しいものに変換する機械のようなものです。関数に与える情報が入力です。関数が作り出す新しい情報が出力です。関数はコンピュータがタスクをこなしたり問題を解決したりするのに役立ちます。
関数とは?
関数とは、入力を受け取り出力を生み出す一連の手順です。レシピのようなものと考えてください。特定の材料で手順を踏めば、いつも予測できる結果が得られます。
ビットコインでは、関数が取引の処理や検証に使われます。誰かがビットコインを送るとき、暗号関数が取引の有効性を確認し、送信者が十分な残高を持っているかをチェックし、ビットコイン台帳の残高を更新します。検証されてブロックに追加されると、その取引はブロックチェーン上の恒久的な記録の一部となります。
一方向関数とは?
一方向関数とは、一方向には簡単に計算できるが、逆方向に戻すのは非常に難しい特別な関数です。例えば、材料をミキサーでスムージーにするのは簡単ですが、スムージーから元の材料に戻すことはできません。
ビットコインのセキュリティは一方向関数に依存しています。これらは公開鍵と秘密鍵の暗号技術に使われており、人々が公開鍵を共有しつつ秘密鍵を秘密に保つことを可能にします。公開鍵が見えていても、そこから秘密鍵を導き出すことは不可能です。これがビットコイン取引の安全性を支えています。
ハッシュ関数とは?
ハッシュ関数は、秘密のコードマシンのようなものです。メッセージを受け取り、それをコードに変換します。
ビットコイン取引におけるハッシュ化の仕組み
ビットコインでは、すべての取引がブロックチェーンに追加される前にハッシュ化されます。ハッシュは取引のユニークなデジタル指紋です。もし誰かが取引のほんの一部でも変更しようとすると、ハッシュは完全に変わります。これにより、ネットワークは改ざんを簡単に検出できます。
ビットコインのセキュリティにおけるハッシュ化の役割
ハッシュ化は、取引を簡単に検証でき、こっそり改ざんすることが不可能になることで、ビットコインネットワークを守ります。各取引には固有のハッシュがあるため、ネットワークは何かが変更された場合すぐに検出できます。
ハッシュ関数はデータを受け取り、ハッシュと呼ばれる固定長の数字と文字列に変換します。同じ入力からは必ず同じハッシュが生成されますが、入力がほんの少しでも変わると、まったく異なる結果になります。この特性により、コンピュータはデータが変更されていないことを確認できます。
ハッシュ化は、デジタルデータの指紋を作るようなものです。デジタルメッセージを受け取り、固定長のコードに変換するプロセスであり、それがユニークな識別子となります。指紋が人を識別できるように、ハッシュはデジタルメッセージを識別できます。
出力、つまりハッシュは、元の情報がどれだけ長くても常に同じ長さです。ビットコインでは、SHA-256やRIPEMD160など、いくつかの特定のハッシュ関数が使われています。
いくつか例を挙げます:
- 文字列のSHA256ハッシュこんにちは、世界
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
- 文字列のSHA256ハッシュ hello world.
7ddb227315f423250fc67f3be69c544628dffe41752af91c50ae0a9c49faeb87- 入力を少し変えるだけで、最初のものと比べて出力が全く異なることに注目してください
- ダウンロード可能なisoファイルのSHA256ハッシュ Ubuntu 18.10
7b9f670c749f797a0f7481d619ce8807edac052c97e1a0df3b130c95efae4765- この入力は非常に大きなファイルですが、出力は依然として同じ固定長です
ハッシュ化は、音楽の本質を捉える楽譜のようなものと考えることもできます。楽譜が曲を一意に表現するように、ハッシュ値もデータを一意に表現します。
音楽の楽譜と実際の演奏を比較することで、演奏が正確かどうかを音楽家は判断できます。同様に、受信したデータのハッシュ値と元のハッシュ値を比較することで、データが送信中に改ざんされていないかを確認できます。
音楽の演奏でわずかなズレがあれば違って聞こえるように、元のデータをほんの少しでも変更すると、ハッシュ値も全く異なるものになります。これにより、ハッシュ化はBitcoinの取引の整合性と真正性を保証する強力なツールとなっています。
ハッシュ化による 公開鍵 の変換は、情報を固定長で判読不能な形式に変換することでセキュリティを高めるために使われます。BitcoinはSHA-256とRIPEMD160アルゴリズムを使って公開アドレスを生成します。生成された出力は 公開鍵 の一意な識別子となり、台帳に記録された取引の整合性とセキュリティを確保するのに役立ちます。このように情報を暗号化することで、許可されていない人がデータへアクセスしたり改ざんしたりすることがより困難になります。
ハッシュ関数の特性
- 決定論的:同じ材料なら、いつも同じスムージーができます。同じように、同じデータは必ず同じハッシュを生成します。
- プレイメージ耐性:スムージーだけを見ても、どんな果物が使われたかは分かりません。同様に、ハッシュだけでは元のデータを特定できません。
- アバランチ効果:材料をほんの少し変えるだけで、全く違うスムージーになります。ハッシュ化でも、データをほんの少し変えるだけで全く異なるハッシュが生成されます。
- コリジョン耐性:全く同じスムージーを作るために、異なる材料の組み合わせを見つけるのは非常に困難です。同じように、異なるデータから同じハッシュを生成することは極めて稀です。
- 検証が速い:スムージーを作るのは早く、結果がスムージーかどうかも簡単に確認できます。ハッシュ関数は計算が速く、誰でも簡単に検証できます。
アクティビティ:SHA 256 ハッシュを生成しよう
ハッシュ化がどのように機能するか気になりますか?QRコードをスキャンして、好きな単語や文章、入力からすぐにSHA256ハッシュを生成してみましょう。ハッシュ関数はデジタル指紋のようなもので、一方向性があり、一度ハッシュ化されたものは元に戻せません。ぜひ試してみてください!