· bip39 bitconin

BIP39をGo言語で実装してみました

アカウント復元周りで仮想通貨で使ってるパスフレーズ使えば簡単に解決できるんじゃと思ってBIP39を実装してみました。

https://github.com/dongri/go-mnemonic

既にGoの実装はいくつかあるけど、サポートしてる言語が足りなかったり、ちゃんと動かなかったり、、ライブラリとしては使えなかったりしたので、Go言語で書いてみました。

機種変などでアカウントにログインできない問題は、サポート側、ユーザー側どっちも結構面倒な問題です。そこでアカウント復元してくれるパスフレーズを見てみようと思いました。

BIPとはBitcoin Improvement Proposalsの略で「ビットコインの改善提案」のことです。インターネットのRFC(Request For Comments)と同じようなものです。https://github.com/bitcoin/bips/ こちらを見ると一覧が載ってます。今回は39番の「Mnemonic code for generating deterministic keys」を使います。

BIP39はメモしにくい16進数のハッシュから英単語、日本語単語にして伝えやすくメモしやすくしたものです。ハッシュそのものをメモすると途中で間違いやすいですが、パスフレーズにすると比較的に簡単です。通常は12から24個の単語になります。単語は今のところ英語以外日本語、中国語など8種類サポートしてます。

https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki こちらに詳細な仕様が書いてあります。

以下のような感じです。

Words

English: abandon add duck until hurry armed pledge area fan tired cheap employ
French: abaisser accroche descente tousser gardien amiral notifier ambre enchère stipuler caillou donateur
Japanese: あいこくしん あてな けちらす もどる すすむ いちぶ とかい いちおう このみ まわる おんせん けんしゅう
ChineseSimplified: 的 到 师 帐 践 当 颜 两 尽 叹 切 食
Korean: 가격 간판 미용실 학년 손질 경쟁 이별 경비 보험 통계 냇물 발바닥
Spanish: ábaco acto dieta treinta humo ameno osadía amargo exigir taza caja ecuador

これらどれを入力しても下のseedになります。

Seed

fb27e3774b6243919a9551bd4da72b29a348772148aa2281ec6e35872310240b9f6798d8b7fe1c835aff3be7955888b15769bb20920a807f2b67adb0d2be25e6

Bitcoinでのseedの概念は一つのseedで複数のBitcoinアドレス作れることができる目的ですが、今回はこれで機種変した場合アカウントを復元できるか見てみたいと思います。システム側で一つのアカウントに対して一つのseed=パスフレーズを発行して、ユーザーがパスワード忘れた場合、機種変でキャリアメール受信できない場合、パスフレーズでアカウントを復元させることは理論上可能です。

しかし、こんなパスフレーズまでメモする人が機種変でメール移行しないか?という問題です。ここまでちゃんとする人はうっかりパスワード忘れたり、メールアドレス移行しなかったりするわけないので、こんな機能提供してもあんまり意味ないのではないかと思ったりもします。