メインコンテンツにスキップ

bip44-derivation

TARGET_LOCALE: ja


title: "BIP-44 導出パス: ウォレットがアドレスを生成する仕組み" description: "暗号資産ウォレットにおける BIP-44 導出パスの完全ガイド。HD wallet が複数コイン、アカウント、アドレスタイプの鍵をどう整理するかを学びます。" keywords: [BIP-44, 導出パス, HD wallet, BIP-32, 階層的決定性, 暗号資産アドレス, 鍵導出] sidebar_position: 4

BIP-44 導出パス: ウォレットがアドレスを生成する仕組み

暗号資産ウォレットを設定して シードフレーズ を生成すると、その1つのシードから、数十種類の異なるブロックチェーンにまたがる何千ものアドレスを生成する必要があります。各アドレスにはそれぞれ独自の秘密鍵、公開鍵、アドレス形式があります。BIP-44 はこれを可能にするための構造を定義しています。つまり、単一のルートから導出される鍵の階層ツリーと、ウォレット間の相互運用性を確保する標準化されたパス表記です。

導出パスの理解は、別のウォレットで資金を復元する必要がある人、複数コインのポートフォリオを管理する人、シードフレーズ復元後に「残高が見つからない」問題をトラブルシュートする人にとって不可欠です。

鍵導出の階層

BIP-32: 基盤

BIP-44 は BIP-32(Hierarchical Deterministic Wallets)を基にしており、単一のマスター鍵から無制限の鍵ペアツリーを導出する方法を定義します。BIP-32 は2つの基本概念を導入しました。

子鍵導出 — 任意の拡張鍵(秘密鍵または公開鍵と chain code の組み合わせ)から、さまざまなインデックスで子鍵を導出できます。各子鍵はさらに自分の子を導出でき、ツリー構造になります。

Hardened 導出と通常導出 — 通常導出では、親公開鍵から子公開鍵を導出できます(watch-only ウォレットに有用)。Hardened 導出には親秘密鍵が必要で、ブランチ間のセキュリティ分離が強くなります。Hardened インデックスは慣例的にアポストロフィで表記します(例: 44')。

BIP-43: Purpose フィールド

BIP-43 は、導出ツリーの第1階層を「purpose」(どの BIP 標準に従うか)として使う慣例を確立しました。BIP-44 は purpose 44'、BIP-49 は 49'(SegWit 互換 P2SH アドレス用)、BIP-84 は 84'(ネイティブ SegWit 用)、BIP-86 は 86'(Taproot 用)を使います。

BIP-44: 完全なパス

BIP-44 は5階層の導出パスを定義します。

m / purpose' / coin_type' / account' / change / address_index

各階層には明確な意味があります。

LevelFieldHardenedDescription
1PurposeYes (44')導出標準を識別
2Coin TypeYes暗号資産を識別
3AccountYes資金を論理アカウントに分離
4ChangeNo (0 or 1)外部受取 (0) または内部お釣り (1)
5Address IndexNo (0, 1, 2...)連番のアドレス番号

Purpose (44')

BIP-44 標準導出では purpose フィールドは常に 44' です。その他の一般的な値:

  • 49' — BIP-49(P2SH ラップ SegWit)
  • 84' — BIP-84(Native SegWit / Bech32)
  • 86' — BIP-86(Taproot / P2TR)

これらは異なるアドレスタイプを定義し、それぞれ対応する BIP で説明されています。

Coin Type

coin type は、導出された鍵がどの暗号資産に属するかを識別します。登録済みの coin type には次があります。

CoinCoin TypePath Prefix
Bitcoin0'm/44'/0'
Bitcoin Testnet1'm/44'/1'
Litecoin2'm/44'/2'
Dogecoin3'm/44'/3'
Ethereum60'm/44'/60'
Ethereum Classic61'm/44'/61'
Cosmos118'm/44'/118'
Solana501'm/44'/501'
Cardano1815'm/44'/1815'
Polkadot354'm/44'/354'

coin type の完全なレジストリは SLIP-44 で管理されており、1,000件以上のエントリがあります。

Account

account 階層では、同一ウォレット内で複数の銀行口座のように独立した論理アカウントを作成できます。デフォルトは account 0' です。

  • m/44'/0'/0' — Bitcoin Account 0
  • m/44'/0'/1' — Bitcoin Account 1
  • m/44'/60'/0' — Ethereum Account 0

account は Hardened 導出を使うため、ある account の拡張公開鍵を知っていても、別 account の鍵は分かりません。これにより account 間のプライバシー分離が得られます。

Change

change 階層は次を区別します。

  • 0 (External chain) — 他者からの受取用として共有するアドレス
  • 1 (Internal chain) — 自分へのお釣り返送にウォレット内部で使うアドレス

Bitcoin の UTXO モデルでは、トランザクション出力を使う際に出力全体を消費する必要があります。1 BTC の出力から 0.5 BTC を送る場合、残り 0.5 BTC は自分のウォレットが管理する change address に送られます。change chain は、運用上およびプライバシー上の理由で、これらを受取アドレスと分離します。

Ethereum などの account ベースのブロックチェーンでは UTXO モデルがないため、同じ意味での change chain は使いません。Ethereum ウォレットは通常、external chain(change = 0)のみを使います。

Address Index

address index は、チェーン内でのアドレス連番です。新しいアドレスを生成するたびにウォレットはこのカウンタを増やします。

  • m/44'/0'/0'/0/0 — 最初の受取アドレス
  • m/44'/0'/0'/0/1 — 2番目の受取アドレス
  • m/44'/0'/0'/0/2 — 3番目の受取アドレス
  • m/44'/0'/0'/1/0 — 最初の change アドレス
  • m/44'/0'/0'/1/1 — 2番目の change アドレス

主要暗号資産の導出パス

Bitcoin

Bitcoin は異なるアドレスタイプに対応して複数の導出パスを使います。

StandardPathAddress TypePrefixExample
BIP-44m/44'/0'/0'Legacy (P2PKH)1...1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
BIP-49m/49'/0'/0'SegWit-compat (P2SH-P2WPKH)3...3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
BIP-84m/84'/0'/0'Native SegWit (P2WPKH)bc1q...bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
BIP-86m/86'/0'/0'Taproot (P2TR)bc1p...bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297

復元時の重要ポイント: 新しいウォレットでシードフレーズを復元しても残高が見えない場合、元のウォレットとは異なる導出パスをスキャンしている可能性があります。Legacy、SegWit、Taproot のアドレスタイプを切り替えるか、導出パスを手動指定してください。

Ethereum

Ethereum は通常、単一の導出パスを使います。

m/44'/60'/0'/0/0   — First account
m/44'/60'/0'/0/1 — Second account (some wallets)

ただし、Ledger Live のように account 階層で複数アカウントを導出するウォレットもあります。

m/44'/60'/0'/0/0   — Account 0
m/44'/60'/1'/0/0 — Account 1
m/44'/60'/2'/0/0 — Account 2

一方、MetaMask のように address index を増やすウォレットもあります。

m/44'/60'/0'/0/0   — Account 1
m/44'/60'/0'/0/1 — Account 2
m/44'/60'/0'/0/2 — Account 3

この不一致は復元時の混乱につながります。どのウォレットソフトでシードフレーズを作成したかを必ず記録してください。

Solana

Solana は Ed25519(secp256k1 とは異なる楕円曲線)を使い、パスは次のとおりです。

m/44'/501'/0'      — Phantom, Solflare
m/44'/501'/0'/0' — Some implementations

Cardano

Cardano は別の鍵導出方式(Ed25519-BIP32 / CIP-1852)を使い、パスは次のとおりです。

m/1852'/1815'/0'/0/0  — First payment address
m/1852'/1815'/0'/2/0 — First staking key

purpose フィールドが 44' ではなく 1852'(Ada Lovelace の生年にちなむ CIP-1852)である点に注意してください。

Hardened 導出と通常導出

セキュリティのためには Hardened 導出と通常導出の違いを理解することが重要です。

Normal(非 Hardened)導出

  • インデックス 0 から 2^31 - 1 を使用
  • 親秘密鍵なしで、親拡張公開鍵から子公開鍵を導出可能
  • 利点: watch-only ウォレットを実現できる(例: サーバーは秘密鍵を保持せず xpub のみで新しい受取アドレスを生成)
  • リスク: 攻撃者が子秘密鍵と親拡張公開鍵の両方を入手すると、親秘密鍵と兄弟秘密鍵を計算できる

Hardened 導出

  • インデックス 2^31 から 2^32 - 1 を使用(0' から 2^31 - 1' と表記)
  • 子鍵導出には親拡張秘密鍵が必要
  • 利点: 子鍵が漏洩しても親や兄弟は漏洩しない
  • リスク: 親拡張公開鍵だけでは子公開鍵を導出できない(この階層では watch-only 不可)

BIP-44 が最初の3階層で Hardened 導出を使う理由

Purpose、coin type、account はすべて Hardened(44'/0'/0')です。理由は以下です。

  1. アドレス秘密鍵(非 Hardened の第5階層)が漏洩しても account 全体を危険にさらさないため
  2. account 同士を分離するため
  3. 異なるコイン同士を分離するため

change と address index は watch-only ウォレットで受取アドレスを生成できるよう、非 Hardened(0/0)です。

Gap Limit

ウォレットは無限にアドレスをスキャンしません。BIP-44 仕様では「gap limit」(連続未使用アドレスを何件までスキャンするか)を導入しており、標準は 20 です。

アドレス 0 から 25 を生成し、0、5、10、25 だけが入金済みだった場合、ウォレットは以下のように動作します。

  1. アドレス 0 をスキャン — 取引あり、継続
  2. アドレス 1–4 をスキャン — 未使用だが gap limit 内
  3. アドレス 5 をスキャン — 取引あり、gap カウンタをリセット
  4. 取引のないアドレスが20件連続するまで継続

問題: gap limit を超えて多数のアドレスを生成していると(決済代行を使う加盟店で一般的)、復元時に資金の一部が見つからないことがあります。復元時にウォレット設定で gap limit を増やす必要がある場合があります。

SafeSeed Tool

SafeSeed Key Derivation Tool を使うと、BIP-44 導出パスを対話的に確認できます。シードフレーズ(実際のものではなくテスト用)を入力し、導出パスの違いでコインごとのアドレスがどう変わるか確認できます。すべての処理はブラウザ内で行われます。

拡張鍵: xpub, ypub, zpub

拡張鍵は、導出パスのメタデータとともに鍵情報をエンコードします。

PrefixStandardAddress TypeNetwork
xpub / xprvBIP-44Legacy (P2PKH)Mainnet
ypub / yprvBIP-49SegWit-compat (P2SH-P2WPKH)Mainnet
zpub / zprvBIP-84Native SegWit (P2WPKH)Mainnet
tpub / tprvBIP-44Legacy (P2PKH)Testnet

このプレフィックスにより、ウォレットソフトはどのアドレスタイプを導出するか判断します。xpub をエクスポートして zpub 前提のウォレットにインポートすると、異なる(誤った)アドレスが表示されます。

拡張公開鍵のプライバシー警告

xpub(または ypub/zpub)を共有すると、受け取った側は次を実行できます。

  • 過去と将来のすべての受取アドレスを導出
  • あなたの全取引履歴と残高を追跡
  • 複数アドレスをひも付け、取引ごとに新規アドレスを使うプライバシー効果を失わせる

拡張公開鍵は、財務プライバシーを完全に任せられる相手以外とは共有しないでください(例: 会計担当者、自分のサーバー上の watch-only ウォレット)。

よくある導出パスの問題

「シードフレーズを復元したのに残高がゼロ」

最も一般的な導出パス問題です。考えられる原因:

  1. アドレスタイプが違う — 元は SegWit(BIP-84, m/84'/0'/0')なのに、新ウォレットが Legacy(BIP-44, m/44'/0'/0')をスキャンしている。アドレスタイプを切り替える。
  2. coin type が違う — 初期実装で全コインに coin type 0 を使っていたウォレットがある。
  3. account が違う — account 1 以上を使っていた可能性がある。
  4. gap limit — 使用済みアドレスがデフォルト gap limit 20 を超えている。
  5. カスタム導出パス — 一部ウォレットは非標準パスを使う。

「同じシードフレーズなのに2つのウォレットでアドレスが違う」

同じシードフレーズから異なるアドレスが生成される場合、導出パスまたはアドレスタイプが異なります。両ウォレットの導出設定を確認してください。

復元チェックリスト

シードフレーズからウォレットを復元する際は次を確認してください。

  1. ウォレットが BIP-39 をサポートしていること
  2. 正しいアドレスタイプ(Legacy、SegWit、Taproot)を選ぶこと
  3. 導出パスが元のウォレットと一致すること
  4. 多数のアドレスを使った場合は gap limit を増やすこと
  5. 複数 account を作成していた場合は account 0 以外も確認すること

応用: カスタム導出パス

高度な用途ではカスタム導出パスが必要な場合があります。

  • マルチシグ構成 — BIP-48 はマルチシグウォレット用導出パスを定義: m/48'/0'/0'/2'(native SegWit multisig 用)
  • Lightning Network — 一部実装ではチャネル鍵にカスタム導出パスを使用
  • プライバシーウォレット — Wasabi などプライバシー重視ウォレットは固有パスを使う場合がある

使う導出パスは必ず記録してください。正確なパスを再構築できなければ、資金を復元できません。

FAQ

暗号資産における導出パスとは何ですか?

導出パスは、階層的決定性(HD)ウォレットでマスターシードから特定の鍵やアドレスを導出する方法を示す構造化表記です。形式は m/purpose'/coin_type'/account'/change/address_index で、各階層が導出ツリー内の特定鍵へ絞り込みます。

なぜ暗号資産ごとに coin type が違うのですか?

coin type を分けることで、同じシードフレーズからブロックチェーンごとに独立した無関係の鍵を生成できます。これによりチェーン間の干渉を防ぎ、あるチェーンの鍵漏洩が他チェーンに影響しないようにします。

Bitcoin と Ethereum で同じシードフレーズを使えますか?

はい。同じ BIP-39 シードフレーズから Bitcoin と Ethereum(および他の多くの暗号資産)の鍵を導出できます。導出パスは異なり、Bitcoin は m/44'/0'/0'、Ethereum は m/44'/60'/0' を使うため、導出される鍵とアドレスは完全に独立しています。

導出パスのアポストロフィ (') は何を意味しますか?

アポストロフィは Hardened 導出を示します。Hardened 導出には親秘密鍵が必要で、セキュリティ分離が強化されます。子鍵が漏洩しても親や兄弟鍵は分かりません。非 Hardened 階層(アポストロフィなし)では、親公開鍵から子公開鍵を導出できます。

シードフレーズ復元後に残高がゼロになるのはなぜですか?

最も一般的な原因は導出パスの不一致です。元のウォレットが別のアドレスタイプ(Legacy / SegWit / Taproot)を使っていた可能性があり、各タイプは異なる導出パスを使います。復元ウォレットでアドレスタイプを切り替えるか、元のウォレットの導出パスを手動指定してください。

gap limit とは何で、なぜ重要ですか?

gap limit は、ウォレットが「これ以上使われたアドレスはない」と判断するまでに連続未使用アドレスを何件スキャンするかを示します。BIP-44 標準は 20 です。多数のアドレスを生成している場合(例: 決済を受ける加盟店)、入金済みアドレスが gap limit の先にあり、復元時に見えないことがあります。ウォレット設定で gap limit を増やしてください。

すべてのウォレットが BIP-44 を使いますか?

多くの現代的ウォレットは BIP-44 またはその後継(BIP-49、BIP-84、BIP-86)をサポートします。ただし独自導出パスを使うウォレットもあります。たとえば Electrum は独自のニーモニックと導出方式を使います。どのウォレットがシードフレーズを作成し、どの導出パスを使うかを必ず記録してください。

関連ガイド