中級 レッスン6 読了4分

キーのフォーマット:WIF、16進数、圧縮および非圧縮

同じ鍵が4つの異なる方法で現れ、それらを混同すると、何も失われていないのに財布が空に見える。

サポートフォーラムで最も繰り返されるメッセージの一つはいつも同じように始まります。新しいウォレットにキーをインポートしたら残高がゼロになった。ほとんどの場合、何も失われていません。同じ番号の包装が変わっただけで、ウォレットが間違ったドアを見ていたのです。

あなたはすでに知っているように、秘密鍵は256ビットの数字です。最も単純な形で書くと、16進数で表されます。0から9とaからfの64文字で、2文字ごとに1バイトに相当します。それは数字そのものであり、バージョンもチェックもなく、文字を間違えてもエラーメッセージは出ません。

そこで、Wallet Import Format(WIF)が存在します。これは秘密鍵に適用されたアドレスの同じレシピです。前に1バイトのバージョンを追加し、SHA-256を2回使用して4バイトのチェックサムを計算し、すべてをbase 58に変換します。結果は、数字の5で始まり51文字のチェーンか、KまたはLで始まり52文字のチェーンになります。この2つのケースの違いが、このレッスンの残りのテーマです。

3つの包装で同じ金属です。変わったのは紙だけです。

一瞬、曲線に戻りましょう。公開鍵は点であり、点にはxとyの2つの座標があります。両方を完全に書くと65バイトになります。1バイトのマークと各座標に32バイトです。これは非圧縮形式で、Bitcoinが誕生したときに唯一存在していた形式です。

しかし、曲線の方程式はその半分を節約することを可能にします。xが与えられると、方程式y² = x³ + 7はyの二乗を返し、二乗を知っていれば、詳細を除いて値を知ることができます。2つの根があり、一方は偶数で他方は奇数です。したがって、x全体とどちらが正しいかを示す1ビットだけを保存すればよいのです。圧縮された公開鍵は33バイトで、02または03で始まります。これはまさにそのビットです。非圧縮形式は04で始まります。

高さを知っていれば、2つの可能性が残ります。1ビットだけでどちらかを示します。

ここに全ての罠があります。2つの形式は同じ点を記述していますが、異なるバイト列です。そして、レッスン3が示したように、アドレスはバイト列のハッシュです。異なるハッシュ、異なるアドレス。同じ秘密鍵は、全く似ていない2つのアドレスを制御します。そして、1つにあるお金は他には表示されません。

WIFは、ウォレットがどちらを組み立てるべきかを知らせます。秘密鍵が圧縮形式で使用される場合、チェックサムを計算する前に1バイトの01を追加します。この追加バイトが結果を51文字から52文字に押し上げ、最初の5をKまたはLに変えます。WIFの最初の文字は装飾ではなく、残りを読む方法の指示です。

この変更は2012年に起こり、Bitcoin Coreがデフォルトで圧縮鍵を生成するようになりました。節約は現実的です。各トランザクション入力で32バイト少なくなり、何十億ものトランザクションで繰り返されます。それ以前の鍵は依然として有効であり、真剣なウォレットはインポート時に1つを選択するのではなく、両方のパスをスキャンします。

同じ鍵が2つのドアを開けます。探していたものはもう一方のドアの後ろにありました。

時々現れる2つの包装もあります。BIP-38標準で暗号化された鍵は6Pで始まり、パスワードを入力して初めて本当の鍵になります。これは、2011年から2013年にかけてMike Caldwellの物理的なコイン、Casasciusがホログラムの下に印刷していたものです。また、Sで始まる30文字のミニフォーマットは、これらのコインの限られたスペースに収まるものでした。

これらはすべて鍵を変えるものではありません。16進数、WIF、圧縮、暗号化:それは同じ数字を記述し、保存し、運ぶ方法であり、タイプミスに対する保護が多かれ少なかれあります。包装と内容を混同することが、残高が失われたように見える原因です。そして、最初の文字を確認することで、10秒で驚きを解決することがよくあります。

しかし、本物のウォレットは鍵を保存しません。シードを保存し、そこから数千の鍵が順番に生成され、12の単語からすべて復元可能です。このトリックがどのように機能し、なぜバックアップの方法を変えたのかが、次のモジュールのテーマです。