メールアドレスとパスワードだけでウォレットを作れるか
「推しの暗号資産を広めたい」など思ったときに、まず障壁になるのが「秘密鍵の管理が難しい」です。
パスワードの管理も覚束ないのが世間一般なのに、漏洩したら全額奪取されるような秘密鍵の管理ができると思うほうがおかしいのであります。
そこで、Tipmona のようなチップボットが誕生したり、Monappy のようなカストディ型のポータルサイトができたりしました。モナコインが他の国産コインに比べて成功した要因には、秘密鍵の管理からユーザを開放したこともあるでしょう。
この流れ、現在は、モナパちゃんなどに受け継がれています。
敷居が低く便利なのですが、しかし、
Not your secret key. Not your coin.
であります。あまり考えたくないですが、サービス提供者が飛んでしまえばコインの取り出しは困難になります。
Ⓜ️
ではどう解決しましょうか。
妥協の産物なので、完璧から見れば至らない解法になりますが。
とりあえず、メールアドレスとパスワードだけはユーザが記憶できると仮定します。実際のところ仮定できるかどうか怪しいですが。最近の Web ブラウザはパスワードマネージャを内蔵しているので、技術で殴って解決可能とします。
そして、次の計算を行います。
SHA256(SHA256(メールアドレス + パスワード))
結果として、メールアドレスやパスワードを逆算できない 256 ビットの整数を得ます。
これを BIP-32 HD wallet のシードとします。BIP-32 については、安土さんのブログが詳しいです。
Ⓜ️
この手法、メールアドレスとパスワードだけでは、シードのエントロピーが圧倒的に足りません。暗号学的安全性を追求する立場から見れば噴飯ものでしょう。
しかし、これは妥協の産物なので。少なくとも重複するアドレスが生成される可能性は事実上無いはず。
ウォレットのログインに OpenID connect など使っている場合には、それらから得られる情報も使って、もう少し平易に、もう少しだけマシなエントロピーを持つシードを作れるかもしれません。いずれにせよ妥協ですが。