学ぶ
ビットコインのアドレスはどう作られる?秘密鍵・公開鍵・アドレスの仕組みを図解
結論
ビットコインのアドレスは、「秘密鍵 → 公開鍵 → アドレス」という一方向の変換チェーンで作られます。まず乱数から秘密鍵(256ビットの数)を生成し、それに楕円曲線(secp256k1)の計算を施して公開鍵を導き、さらにその公開鍵をハッシュ関数(SHA-256とRIPEMD-160)で圧縮・変換してアドレスが完成します。この「ビットコイン アドレス 秘密鍵 公開鍵 仕組み」の核心は、各矢印が一方向で、逆向きの計算が事実上不可能な点にあります。だからこそ公開鍵やアドレスを世界に晒しても、そこから秘密鍵を割り出して残高を盗むことはできません。
この記事のポイント
- アドレス生成は 秘密鍵→公開鍵→アドレス の3ステップで、方向は常に一方通行
- 楕円曲線の掛け算とハッシュ関数はどちらも逆算が事実上不可能(総当たりも非現実的)
- 公開鍵やアドレスを知られても残高は盗まれない。守るべきは秘密鍵とシードフレーズだけ
- HDウォレットなら1つのシードから無数のアドレスを決まった手順で導出でき、バックアップは1つで済む
全体像:3ステップの一方向チェーン
まず地図を頭に入れましょう。ビットコインの鍵とアドレスは、次の順番で生まれます。
`` 乱数 → 秘密鍵 →(楕円曲線)→ 公開鍵 →(ハッシュ)→ アドレス ←── 逆算は不可能 ── ←── 逆算は不可能 ── ``
大事なのは、左から右へは一瞬で計算できるのに、右から左へは事実上たどれないという非対称性です。この性質を「一方向性(トラップドア)」と呼び、ビットコインの安全性の土台になっています。ネットワーク全体の送金の流れはビットコインの仕組みで解説していますが、その最小単位である鍵の生成を、ここでは1ステップずつ見ていきます。
ステップ1:秘密鍵はただの「巨大な乱数」
秘密鍵の正体は、0からおよそ2の256乗までの範囲にある1つの整数です。桁で言えば約78桁、10進数で「10の77乗」に迫る途方もない大きさで、これは観測可能な宇宙にある原子の数に匹敵すると言われます。
ポイントは、秘密鍵に特別な作り方はなく、十分に予測不能な乱数でありさえすればよいということ。だからこそ「同じ秘密鍵を誰かが偶然引き当てる」確率は無視できるほど小さく、総当たり(ブルートフォース)で他人の鍵を探すのも非現実的です。逆に言えば、乱数の質が低い(予測できる)とその瞬間に安全性が崩れるため、鍵の生成はウォレットや専用機器に任せ、自分で適当な数字を選ばないのが鉄則です。
ステップ2:楕円曲線で公開鍵を作る(secp256k1)
秘密鍵ができたら、そこから公開鍵を導きます。ここで使うのがビットコインの採用する楕円曲線 secp256k1 です。
仕組みを一言でいうと、曲線上に決められた基準点G(ベースポイント)を、秘密鍵の回数だけ「足し合わせる」というもの。この楕円曲線上の掛け算(スカラー倍算)の結果が、曲線上の新しい1点となり、それが公開鍵になります。
| 項目 | 内容 |
|---|---|
| 使う曲線 | secp256k1 |
| 計算 | 公開鍵 = 秘密鍵 × G(基準点) |
| 順方向 | 一瞬で計算できる |
| 逆方向 | 公開鍵からGを割って秘密鍵を求める=離散対数問題で事実上不可能 |
| 公開鍵の形式 | 圧縮形式33バイト(02/03始まり)/非圧縮65バイト(04始まり) |
ここが1つ目の「一方通行」です。掛け算の答え(公開鍵)を見ても、何回足したか(秘密鍵)を逆算する現実的な方法が存在しない——これを「楕円曲線離散対数問題」と呼び、現在のコンピュータでは解けないと考えられています。
ステップ3:公開鍵をハッシュしてアドレスにする
公開鍵はそのまま使わず、ハッシュ関数で短く変換してアドレスにします。標準的な手順は次の通りです。
- 公開鍵を SHA-256 でハッシュ化する
- その結果をさらに RIPEMD-160 でハッシュ化する(この2段を合わせて「HASH160」と呼ぶ)
- ネットワーク識別子やチェックサムを付け、Base58(従来型)や Bech32(
bc1で始まるSegWit型)で読める文字列に整える
ここが2つ目の「一方通行」です。ハッシュ関数は入力から出力は一瞬、出力から入力は復元不可能という性質を持つため、アドレスから公開鍵を逆算することもできません。つまりアドレスは「公開鍵をさらに一枚、金庫の扉で覆った状態」と言えます。なお、1/3/bc1など見た目の違うアドレス形式がありますが、これは主にステップ3のエンコード方式の違いです。詳しくはビットコインのアドレスの種類を参照してください。
なぜ「公開鍵を晒す=残高を盗まれる」ではないのか
初心者が最も誤解しやすい点がここです。アドレスや公開鍵は受け取りのために公開して当然の情報であり、それを知られても資金は安全です。理由は明快で、
- アドレス → 公開鍵 → 秘密鍵、という逆方向の計算がどちらも不可能だから
- 送金にはあくまで秘密鍵による署名が必要で、署名は秘密鍵を明かさずに「正しい持ち主である証明」だけを示すから
したがって、あなたがブロックチェーン上で守るべきは秘密鍵とその大元であるシードフレーズただ一つです。アドレスは名刺のように配ってよく、秘密鍵は絶対に見せてはいけません。
注意
この記事は仕組みを理解するための教育目的であり、投資助言ではありません。暗号技術が堅牢でも、秘密鍵やシードフレーズを盗まれれば資金は即座に失われます。フィッシング、偽ウォレット、シードのスクリーンショット保存などは技術の強度と無関係に致命傷になります。鍵は自分だけがオフラインで管理してください。
HDウォレット:1つのシードから無数のアドレス
「アドレスを増やすたびに秘密鍵を別々に保管するのは大変では?」——この問題を解いたのがHDウォレット(階層的決定性ウォレット、BIP32)です。
仕組みはこうです。まず12〜24語のシードフレーズ(BIP39)を1つ用意し、それを親として、決まった計算手順で子・孫の鍵を無限に導出します。導出の道筋は「派生パス(例:m/84'/0'/0'/0/0)」で表され、同じシードと同じパスからは常に同じ鍵が再現されます。
| 従来(非HD) | HDウォレット |
|---|---|
| アドレスごとに独立した秘密鍵 | 1つのシードから全鍵を導出 |
| 鍵の数だけバックアップが必要 | バックアップはシード1つでよい |
| 復元が煩雑 | 別ウォレットでもシードを入れれば全アドレス復元 |
この「決定性(deterministic)」のおかげで、バックアップはシードフレーズ1つで足り、ウォレットが壊れても同じ順番で全アドレスが復元されます。だからこそシードの保管が最重要で、書き留め方はシードフレーズのバックアップ方法を、さらに追加の合言葉で保護する方法はパスフレーズとはを参照してください。
よくある質問
Q. 秘密鍵と公開鍵、どちらを守ればいいですか? A. 守るのは秘密鍵(とその大元のシードフレーズ)だけです。公開鍵やアドレスは受け取りのために公開して問題ありません。逆算で秘密鍵にたどり着けないため、公開しても資金は安全です。
Q. 同じアドレスを他人が偶然作ってしまうことはありますか? A. 理論上ゼロではありませんが、秘密鍵の候補が2の256乗(約78桁)という天文学的な数のため、偶然の衝突は事実上起こりません。総当たりで他人の鍵を探すのも非現実的です。
Q. なぜ公開鍵からアドレスへ、わざわざハッシュをかけるのですか? A. アドレスを短く扱いやすくするためと、公開鍵の上にもう一枚の一方向変換を重ねて安全余裕を持たせるためです。将来、楕円曲線に想定外の弱点が見つかった場合でも、ハッシュの層が追加の防御になります。
Q. アドレスを毎回変えるのはなぜですか? A. プライバシー保護のためです。HDウォレットは受け取りのたびに新しいアドレスを自動生成できますが、すべて同じシードから導出されているため、バックアップはシード1つのままで管理できます。
参考・出典
Sources
FAQ
- 秘密鍵と公開鍵、どちらを守ればいいですか?
- 守るのは秘密鍵(とその大元のシードフレーズ)だけです。公開鍵やアドレスは受け取りのために公開して問題ありません。秘密鍵は逆算で求められないため、公開鍵やアドレスを知られても資金は安全です。
- 同じアドレスを他人が偶然作ってしまうことはありますか?
- 理論上ゼロではありませんが、秘密鍵の候補が2の256乗(約78桁)という天文学的な数のため、偶然の衝突は事実上起こりません。総当たりで他人の鍵を探すのも非現実的です。
- なぜ公開鍵からアドレスへ、わざわざハッシュをかけるのですか?
- アドレスを短く扱いやすくするためと、公開鍵の上にもう一枚の一方向変換を重ねて安全余裕を持たせるためです。将来、楕円曲線に弱点が見つかった場合でもハッシュの層が追加の防御になります。
- アドレスを毎回変えるのはなぜですか?
- プライバシー保護のためです。HDウォレットは受け取りのたびに新しいアドレスを自動生成できますが、すべて同じシードから導出されているため、バックアップはシード1つのままで管理できます。
本記事は情報提供のみを目的とし、投資・金融・取引の助言ではありません。価格は参考値で古い場合があります。投資判断はご自身の責任で。