ビットコインのアドレスはシステムコードのように見えます。アプリが吐き出し、間違えることを恐れてコピーする無意味な文字列です。しかし、それはその逆です。アドレスは短く、公開され、確認可能なレシピの終わりであり、その各ステップには一文で説明できる理由があります。
出発点は前のレッスンで学んだ公開鍵です。それはSHA-256に完全に投入され、その結果が次にRIPEMD-160というハッシュ関数に入ります。RIPEMD-160は1996年にベルギーのルーヴェンにあるCOSIC研究所のHans Dobbertinと2人の同僚によって公開されました。これにより160ビット、つまり20バイトが返されます。この二重の結果には名前があります:hash160です。
異なるファミリーの2つの関数を連続して使用することで、同時に2つの問題を解決します。アドレスを短縮します。なぜなら、20バイトは公開鍵よりもはるかに少ないスペースを占めるからです。そして、公開鍵を隠します。支払いを要求するときに公開するのは公開鍵ではなく、その要約です。鍵はそのコインを使う日にのみ現れます。

hash160の前にバイトが追加されます。バージョンバイトです。通常のアドレスにはゼロ、3で始まるものには5です。このバイトが、すべての同じタイプのアドレスが常に同じ文字で始まる理由です。これは装飾ではなく、ウォレットにどのレシピを適用すべきかを示すプレフィックスです。
次にチェックサムが来ます。バージョンとhash160を取り、SHA-256を2回適用し、その結果の最初の4バイトを末尾に追加します。合計で25バイトになります:バージョン1バイト、ハッシュ20バイト、確認用4バイトです。
最後のステップは書き込みです。25バイトの数値を基数58に変換します。これは、Satoshiが62文字のセットから4つの文字を取り除いて作成したアルファベットです。ゼロ、大文字のO、大文字のi、小文字のLです。理由は、画面から読み取ったり手でコピーしたりするときに混同される文字だからです。
そしてここでチェックサムが機能します。アドレスの文字を1つ変えると、末尾の4バイトが計算結果と一致しなくなり、ウォレットはトランザクションを作成する前に拒否します。間違ったアドレスが通過する確率は約40億分の1です。

bc1で始まるアドレスは、2017年にベルギーの開発者Pieter Wuilleが提案したbech32という別の書き方に従います。すべて小文字で書かれており、QRコードに収まりやすくなっています。また、チェックサムはより強力なファミリーに属しており、エラーを検出するだけでなく、エラーがどの位置にあるかを指摘することができます。現代のウォレットは、アドレスが間違っていることを伝えるだけでなく、文字を下線で示します。

この保護が何をしないかについて正確であることが重要です。チェックサムはアドレスの整合性を確認しますが、それを書いた人の意図を確認するものではありません。他人のアドレスは完全に有効なアドレスであり、そこに送られたお金はすべての計算が合って届きます。マルウェアは、クリップボードにアドレスが表示されるのを待ち、貼り付けた瞬間に別のアドレスに置き換えることがあります。これに対してチェックサムは何もできません。初心者向けのトレイルが推奨するように、最初と最後の文字を目で確認するしかありません。
このレシピに何がないかに注目してください。登録もサーバーも、誰かが許可を与える必要があるステップもありません。3つのハッシュ関数、1つのバージョンバイト、1つの基数変換だけです。公開鍵を持っている人なら誰でも、あなたのウォレットが到達したのと同じアドレスに、同じ方法で到達できます。誰にも何も尋ねることなく。
アドレスはお金がどこに行くかを示します。残りの半分は、送信者が送信する権利を持っていることを証明することです。それは誰にも鍵を見せずに行われます。次のレッスンでは、デジタル署名について学びます。