Ledgerでビットコインの受取アドレスが毎回変わるのはなぜ?── 古いアドレスを使っても大丈夫?

私は現在、Ledgerを使ってビットコインを自己保管している。

Ledgerでビットコインを受け取っていると、最初は少し不思議に感じることがある。

それが「前回と受取アドレスが違う」ということである。

例えば、最初にLedger Walletで表示されたアドレスが「bc1q......A」だったとする。

そこへビットコインを送ったあと、もう一度「受け取る」を開くと「bc1q......B」という別のアドレスが表示されることがある。

すると、

「アドレスが変わっているけど大丈夫なのか?」

「前に使ったアドレスはもう使えないのか?」

「前のアドレスへ送ったビットコインはどこへ行ったのか?」

と不安になるかもしれない。

私も最初は「ビットコインのウォレットには一つの固定アドレスがあり、ずっとそこへ送金するものだ」と思っていた。

しかし結論から言えば、Ledgerウォレットでビットコインの受取アドレスが変わるのは正常な動作である。

しかも、以前使った受取アドレスが突然無効になるわけでもない。

今回は、

  • なぜBitcoinの受取アドレスが変わるのか
  • アドレスが違うのに、なぜ同じウォレットなのか
  • 古い受取アドレスはもう使えないのか
  • 古いアドレスを再利用しても大丈夫なのか
  • 少額テスト送金のあとにアドレスが変わったらどうするのか
  • 毎回Ledger本体でアドレスを確認する必要があるのか
  • UTXOとは何なのか

を分かりやすく整理してみたい。

結論:受取アドレスが変わっても同じBitcoinウォレットである

最初に結論を書く。

Ledger WalletでBitcoinの受取アドレスが変わっても、それだけで別のウォレットに変わったわけではない。

Bitcoinでは、一つのウォレットの中で複数の受取アドレスを使うことができる。

例えば、

BitcoinアカウントA

↓

受取アドレス1

受取アドレス2

受取アドレス3

受取アドレス4

……

というように、一つのBitcoinアカウントから複数のアドレスを作ることができる。

Ledger WalletもBitcoinではこの仕組みを使っている。

Ledgerの現在の開発者向け資料でも、Bitcoinでは入金を受けるたびに、プライバシーのため次の受取アドレスが更新される仕組みになっていると説明されている。

だから、アドレスAに届いたBTCとアドレスBに届いたBTCが、Ledger Wallet上では同じBitcoinアカウントの残高としてまとめて表示されることがある。

アドレスが違うからといって、BTCが別の場所へ消えたわけではない。

正確には「画面を開くたび必ず変わる」わけではない

ここはタイトルから少し補足しておきたい。

「Ledgerでは受取アドレスが毎回変わる」と言われることがあるが、受取画面を開くたびに必ず別のアドレスになると考える必要はない。

Ledgerの現在の開発者向け資料では、Bitcoinアカウントの受取アドレスは資金を受け取るごとに更新されると説明されている。

そのため、まだ使っていない受取アドレスであれば、もう一度受取画面を開いても同じアドレスが表示される場合がある。

一方、そのアドレスでBTCを受け取ったあとには、次の新しい受取アドレスが表示される。

つまり、初心者向けには「一度使った受取アドレスの代わりに、次回は新しいアドレスが用意される」と理解すると分かりやすいと思う。

なぜわざわざ受取アドレスを変えるのか?

では、なぜ毎回同じアドレスを使わないのだろうか。

大きな理由は、プライバシーを守りやすくするためである。

Bitcoinの取引履歴は公開されている。

誰でもブロックチェーンエクスプローラーを使えば、特定のBitcoinアドレスについて、

  • どのような入金があったのか
  • どのくらいBTCを受け取ったのか
  • どのような取引で使われたのか

などを確認できる。

もし毎回、bc1q......Aという一つのアドレスだけを使い続ければ、そのアドレスに関連する取引をまとめて追いやすくなる。

一方、

1回目
→ アドレスA

2回目
→ アドレスB

3回目
→ アドレスC

と別々の受取アドレスを使えば、一つの受取アドレスだけを見て自分の複数の入金履歴を単純にまとめて追われにくくなる。

Ledgerも、新しいBitcoinアドレスを入金ごとに使う主な理由としてプライバシー保護を挙げている。

もちろん、新しいアドレスを使えば完全に追跡できなくなるという意味ではない。

Bitcoinのブロックチェーン自体は公開されている。

あくまで、一つの受取アドレスを何度も使い回すより取引同士を単純に結び付けられにくくするという仕組みである。

アドレスが違うのに、なぜ同じウォレットになるのか?

ここが一番分かりにくいかもしれない。

私は最初、「ウォレット=1個のアドレス」というイメージを持っていた。

しかし、Bitcoinではそうではない。

一つのウォレットから、たくさんのBitcoinアドレスを作ることができる。

LedgerはHDウォレットと呼ばれる仕組みを利用しており、元になる秘密情報から複数のアドレスを一定のルールで作ることができる。

イメージとしては、

リカバリーフレーズ24単語につながる元の秘密情報
↓
Bitcoinアカウント
↓
アドレスA
アドレスB
アドレスC
アドレスD
……

という形である。

Ledger公式の技術解説でも、一つのBitcoinアカウントから番号の異なる複数の受取アドレスを順番に生成できる仕組みが説明されている。

ここで注意したい。

アドレスが変わったからといって、リカバリーフレーズまで別のものに変わったわけではない。
一方で、受取アドレスごとにまったく同じ秘密鍵を使い回しているわけでもない。

HDウォレット(Hierarchical Deterministic=階層的決定性)では、一つの元になる秘密情報から多数の「子鍵」を一定のルールで作ることができる。

異なる受取アドレスにはそれぞれに対応する別の鍵が使われるが、それらは同じリカバリーフレーズにつながる一つのウォレットの中で管理されている。

つまり、受取アドレスが変わっても、別のリカバリーフレーズを持つ別ウォレットへ切り替わったわけではない。

同じLedgerのBitcoinアカウントの中で、別の受取アドレスが使われているだけである。

例えば、3つのアドレスへBTCを送っても残高は合計表示される

例えば同じBitcoinアカウントで、

アドレスA
→ 0.1BTC

アドレスB
→ 0.2BTC

アドレスC
→ 0.3BTC

を受け取ったとする。

この場合、0.1BTC+0.2BTC+0.3BTC=0.6BTCなので、Ledger Walletでは同じBitcoinアカウントの残高として合計0.6BTCが表示される。

Ledger自身も、一つのBitcoinアカウントが多数のBitcoinアドレスを管理する仕組みだと説明している。

だから、「前回はアドレスAへ送った」「今回はアドレスBへ送った」からといって、Bitcoinが別々のウォレットへ分裂したわけではない。

Ledger Walletが複数のアドレスに対応するBTCを一つのBitcoinアカウントとしてまとめて管理してくれていると考えると分かりやすい。

古い受取アドレスはもう使えないのか?

では、新しい受取アドレスが表示されたら、以前使ったアドレスは無効になるのだろうか。

答えは、無効にはならない。

Ledger公式も、以前使用したBitcoinの受取アドレスは引き続き利用できると説明している。

例えば、

以前使ったアドレスA
→ 0.1BTCを受取済み

その後、新しいアドレスBが表示されたとする。

この状態で再びアドレスAへBTCが送られても、アドレスAが現在のウォレットに属しているのであれば、そのBTCを受け取ることができる。

つまり、新しいアドレスが作られたからといって、古いアドレスが期限切れになるわけではない。

Bitcoinアドレスに、「発行から30日で失効」のような期限が設定されているわけでもない。

では古いアドレスを何度も使ってもいいのか?

技術的には使える。

しかし、基本的には新しく表示された受取アドレスを使った方がいい。

理由は先ほど説明したプライバシーである。

例えば毎月取引所からBTCをLedgerへ送るとして、

1月 → アドレスA
2月 → アドレスA
3月 → アドレスA
4月 → アドレスA

と同じアドレスを使い続けるより、

1月 → アドレスA
2月 → アドレスB
3月 → アドレスC
4月 → アドレスD

と分けた方が、一つのアドレスだけから複数の入金履歴をまとめて確認されにくくなる。

Ledgerも「以前のアドレスは使えるものの、Bitcoinでは新しいアドレスを使うこと」を推奨している。

したがって、古いアドレス=危険・使用不能ではない。

正確には「古いアドレスも使えるが、プライバシーの観点から新しい受取アドレスを使う方が望ましい」ということになる。

少額テスト送金をしたらアドレスが変わった。次はどうする?

これは、実際にLedgerへBTCを送るときに少し迷いやすいところだと思う。

例えば、取引所からLedgerへ100万円分のBTCを移したいとする。

いきなり100万円分を送るのが不安なので、まず「受取アドレスA→1,000円分」をテスト送金する。

しばらくして、Ledger Walletで正常に着金したことを確認できた。

ところが、そのあと改めてLedger Walletで「受け取る」を開くと、「受取アドレスB」という新しいアドレスが表示されることがある。

ここで、「テスト送金したのはアドレスAなのに、本送金は新しく表示されたアドレスBへ送った方がいいのか?」と迷うかもしれない。

私は、少額テストで正常に着金したことを確認したアドレスAにそのまま本送金する方が理にかなっていると思う。

Bitcoinでは、一度使用した受取アドレスが無効になるわけではない。

アドレスAが現在の自分のウォレットから作られた受取アドレスであれば、新しいアドレスBが表示されたあとでも、アドレスAへ再びBTCを送ることができる。

少額テストをする目的の一つは、「この受取アドレスへ送れば、本当に自分のLedgerで管理しているウォレットへBTCが届くのか」を実際の送金で確認することである。

そのため、

受取アドレスAへ少額テスト
↓
正常に着金したことを確認
↓
同じ受取アドレスAへ本送金

という流れにすれば、少額テストで確認した結果をそのまま本送金に生かすことができる。

反対に、

受取アドレスAへ少額テスト
↓
正常着金を確認
↓
新しい受取アドレスBへ本送金

とすると、受取アドレスAへ少額テスト送金した意味がなくなる。

もちろん、Ledgerデバイスの画面でアドレスBが自分の受取アドレスであることを正しく確認できていれば、アドレスBへ送ること自体に問題があるわけではない。

Ledgerも、少額テストで確認したアドレスを再利用できると説明している。

そのため、少額テストとその直後の本送金は同じ確認済みアドレスを使い、別の日の入金や次回の独立した入金ではLedger Walletが新しく表示する受取アドレスを使って同様に実行するというやり方が分かりやすいと思う。

受取アドレスにいくらBTCが入っているかを基準に、新しいアドレスへ切り替える必要はない。

新しい受取アドレスを使う主な目的は、残高の大きさではなくアドレスの再利用を避けてプライバシーを守りやすくすることである。

毎回Ledgerデバイスで受取アドレスを確認した方がいい

Ledger Walletで「受け取る」を選ぶと「スマートフォンやパソコンの画面」と「Ledgerデバイスの画面」に受取アドレスが表示される。

この2つが同じであることを毎回確認すべきだ。

これは重要である。

なぜなら、パソコンやスマートフォンがマルウェアなどの影響を受けた場合、画面上の受取アドレスを書き換える攻撃が考えられるからだ。

Ledgerは現在の受取手順でも、「アプリに表示されたアドレス」と「Ledgerデバイス本体に表示されたアドレス」が一致することを確認してから共有するよう案内している。

つまり、

パソコン・スマホ
→ bc1q......A

Ledger本体
→ bc1q......A

と一致していることを確認する。

もし例えば、

パソコン・スマホ
→ bc1q......A

Ledger本体
→ bc1q......B

となっていれば、そのまま送金するべきではない。

信頼すべきはLedgerデバイスの画面である。

UTXO(未使用の取引出力)とは?

Bitcoinの受取アドレスが複数になる仕組みを調べると、UTXOという言葉がよく出てくる。

正式には、Unspent Transaction Output(未使用の取引出力)という。

「過去の取引で自分が受け取ったBTCのうち、まだ次の取引で使われていないBTCのかたまり」のことだ。

Bitcoinでは銀行口座のように「残高0.6BTC」という一つの数字そのものがブロックチェーン上で書き換えられていくわけではない。

過去の取引で作られ、まだ使われていない取引出力がUTXOとして残っている。

ウォレットは、そのウォレットの鍵で使うことのできるUTXOを確認し、それらを合計して私たちに「残高」として表示している。

Bitcoinの開発者向け資料でも、ウォレットに表示される残高は実際には一つまたは複数のUTXOに存在するsatoshiの合計であると説明されている。

例えば、

アドレスAで0.1BTCを受け取った

アドレスBで0.2BTCを受け取った

アドレスCで0.3BTCを受け取った

とする。

この場合、ウォレット残高は0.6BTCという認識になる。

しかし実際は、銀行口座のように単純に「残高0.6BTC」という一つの数字だけが記録されているわけではない。

イメージとしては、

0.1 BTCのUTXO

0.2 BTCのUTXO

0.3 BTCのUTXO

という3つの「まだ使っていないBTCのかたまり」があり、合計すると0.1 + 0.2 + 0.3 = 0.6 BTCなのでLedger Walletはそれらをまとめて、0.6BTCと分かりやすく表示してくれている。

UTXOにはもう一つ重要な特徴がある。

例えば0.1BTCのUTXOから0.03BTCだけを送る場合、元の0.1BTCのUTXOがそのまま0.07BTCへ小さくなるわけではない。

元のUTXOは取引の入力として使われ、0.03BTCを相手へ送り、残った分から送金手数料を差し引いたBTCが新しいUTXOとして自分へ戻される。

つまり、UTXOは一度使うと元のUTXOが使用済みになり、必要に応じて新しいUTXOが作られるという仕組みである。

初心者がLedgerデバイスを使うだけなら、最初からUTXOの細かい仕組みをすべて理解する必要はないと思う。

まずは、「Bitcoinでは同じウォレットの中に複数の受取アドレスやUTXOがあり、それらをLedger Walletがまとめて計算して残高表示している」と理解できれば十分である。

Bitcoinを送ったときにも知らないアドレスが出てくることがある

さらにBitcoinでは、自分からBTCを送ったときにも「お釣り用のアドレス」が使われることがある。

例えば自分が持っているUTXOが0.1BTCで、そのうち0.03BTCを誰かへ送るとする。

単純化すると、

0.1BTC
↓
0.03BTCを相手へ
↓
残りから送金手数料を差し引いた分を自分へ戻す

という処理になる。

この自分へ戻す部分に、新しい「お釣り用アドレス」が使われることがある。

Ledger公式ではこれをchange address(お釣り用アドレス)として説明している。

そのためブロックチェーンエクスプローラーを見て、「知らないアドレスへBTCが送られている!」と驚く場合がある。

しかし、それが自分のウォレットが生成したお釣り用アドレスである可能性もある。

これは少し高度な話なので、通常Ledger Walletを使うだけならアプリ側が処理してくれる。

Ethereumなどではアドレスが変わらない場合もある

もう一つ初心者が混乱しやすいのが、「Bitcoinではアドレスが変わるのに、Ethereumでは同じアドレスなのはなぜ?」という点である。

これはBitcoinとEthereumなどでウォレットや残高管理の仕組みが異なるからだ。

BitcoinのHDウォレットでは、一つの元になる情報から多数の受取アドレスを生成できる。

そしてBitcoinでは、プライバシーを守りやすくするため、同じ受取アドレスを何度も使い回すのではなく新しい受取アドレスを使うことが一般的に推奨されている。

一方、EthereumなどではBitcoinとは異なる「アカウントモデル」が使われており、一つのアカウントで基本的に同じアドレスを使い続ける。

したがって、「BitcoinがUTXO方式だから自動的にアドレスが変わる」というより、BitcoinのHDウォレットで複数のアドレスを作れる仕組みと、アドレス再利用を避けるプライバシー上の考え方が組み合わさっていると理解する方が正確である。

つまり、「アドレスが毎回変わらない暗号資産もある」ということである。

Bitcoinの受取アドレスが変わること自体がおかしいわけではない。

注意:昔のアドレスなら何でも使えるという意味ではない

ここは注意したい。

この記事で「古いBitcoin受取アドレスも使える」と説明した。

しかし、過去に自分が使ったBitcoinアドレスなら何でも永遠に現在のLedgerで使えるという意味ではない。

例えば、古いLedgerデバイスでリカバリーフレーズAのウォレットのアドレスAを使っていたとする。

その後、Ledgerデバイスをリセットして、新しいリカバリーフレーズBから完全に別のウォレットを作った。

この場合、以前のアドレスAは新しいリカバリーフレーズBから作られたウォレットのアドレスではない。

同様に、

  • 別のリカバリーフレーズ
  • 別のBIP39パスフレーズ
  • 別のウォレット


から作られたアドレスも同じではない。

したがって、「今使っているウォレットに属する以前の受取アドレスなら引き続き利用できる」と理解するのが正確である。

まとめ

LedgerでBitcoinを受け取っていると、以前とは違う受取アドレスが表示されることがある。

しかし、これは異常ではない。

Bitcoinでは一つのウォレットで複数の受取アドレスを使うことができ、Ledger Walletもプライバシーを守りやすくするために新しい受取アドレスを利用する仕組みになっている。

例えば、

アドレスA
→ 0.1BTC

アドレスB
→ 0.2BTC

アドレスC
→ 0.3BTC

と受け取っても、同じBitcoinアカウントに属していればLedger Walletでは合計0.6BTCとして管理できる。

そして、以前使った受取アドレスも、それが現在のウォレットに属するアドレスであれば引き続き利用できる。

ただし、同じアドレスを使い続けると取引履歴を結び付けられやすくなるため、基本的には新しい受取アドレスを使った方がプライバシー上は望ましい。

重要なのは、今回表示された受取アドレスが本当に自分のLedgerデバイスから作られたアドレスなのかを確認することだ。

そのためにも、BTCを受け取るときはLedger Walletに表示された文字列だけを信用するのではなく、Ledgerデバイスの画面にも同じ受取アドレスが表示されていることを確認してから送金する。

受取アドレスが変わるのは、Bitcoinウォレットがおかしくなったからではない。

同じBitcoinウォレットの中で、新しい受取口を使っているだけである。

※当サイトは暗号資産の購入を勧めるものではない。暗号資産の購入・送金・保管は、必ず自分で確認して自己責任で行ってほしい。

error: Content is protected !!