こんばんは。最近はTorのバニティアドレスの生成がマイブームです。CPUをぶん回していると稀に見つかり、2009年のビットコインマイニングもこんな感じだったのかな~という気分を味わえる上に、見つけたバニティアドレスは実際にTorでサービスを公開することにも使えます。
というわけで、今日はビットコインのバニティアドレスの生成と、バニティアドレスを他者からトラストレスに購入する方法について書くことにしました。
バニティアドレスとは
バニティアドレスとは、要するにランダムではなく意図的に選ばれたアドレスのことです。基本的には人間が見て取れる特徴があります。
Torにおけるバニティアドレスとは、Torで使うURL(公開鍵) の最初の数文字を任意の文字列にしたものです。例えばFacebookがTorに公開しているサイトのアドレスは「facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion」と、最初の8文字がFacebookになるものが選ばれています。
ビットコインにも、有名なバニティアドレスがありますね。一番知名度が高いのはBitMEXの入出金用のアドレスがすべて「3BMEX~」という形式だったことでしょうか。つい最近から生成されるものはbech32アドレス (Native Segwitアドレス)に形式が変更され、特徴的なアドレスは「bc1qmex~」になったようです。
バニティアドレスの生成には、大量のアドレスを次々と生成し、その中から要件に合致するものが見つかるまで続けることになります。したがって、要件を厳しくするほど(指定した文字数が増えるほど) 急速に生成が難しくなります。例えば冒頭で述べたように私はデスクトップパソコンでTorのバニティアドレスを生成していますが、任意の8文字までなら半日~2日程度かければば生成できます。しかし9文字となると全然見つからず、単純計算で1ヶ月、10文字なら3年かかるかもしれません。
すなわち、バニティアドレスはProof of Workなのです。クラウドなどを活用して処理能力をかき集める方法もありますが、バニティアドレスがほしいだけなら、手っ取り早く買いたいという気持ちはとてもわかります。
ちなみにバニティアドレスは特定の文字列が来るものとは限りません。例えば数字を含まないビットコインアドレス、最初の何文字が小文字など、何らかの特徴を持たせるために作るものなので、以下のようなバニティアドレスも存在します。1QBDLYTDFHHZAABYSKGKPWKLSXZWCCJQBX (すべて大文字&数字なし)
バニティ・ビットコインアドレス購入の問題点
さて、ここまで読んでバニティアドレスが欲しくなった方もいるでしょう。後述するデメリットも大きいですが、十分に長いバニティアドレスの生成は大変です。誰かから購入できたらどれほど良いでしょう!
しかし、決定的な欠点として、ビットコインアドレスは元を辿れば秘密鍵から生成される点があります。つまり、安直にバニティアドレスを生成してもらうと秘密鍵自体の譲渡が発生し、売り主が秘密鍵のコピーを保管していないとは言い切れません。秘密鍵を握られている可能性があるなら、せっかくのバニティアドレスも使う気にはなりません。
そこで、ビットコインに用いられる暗号を活用したSplit Vanity Address Generationという方法があります。
SPLIT VANITY ADDRESS GENERATION
ビットコインに使用される楕円曲線暗号の特徴として、秘密鍵・公開鍵ペア(a, A)、(b, B)に対して、(a+b, A+B)も有効な秘密鍵・公開鍵ペアになることが挙げられます。