ウォレットは、ユーザーがブロックチェーンアカウントを管理し、資産を安全に保存し、ブロックチェーンの状態を変更するために取引に署名するための必須ツールです。
この投稿では、ウォレットとは何か、ウォレットがどのように作られ、楕円曲線暗号を使用して秘密-公開キーペアを生成し、シードフレーズを導出し、安全なブロックチェーンの相互作用を容易にするかをカバーします。
ウォレットは、ブロックチェーンアカウントを表示および操作することができるアプリケーションです。これらのアカウントを使用して、トークンの送信やスマートコントラクトとのやり取りなどのアクションを実行するためのトランザクションを送信することができます。
ブロックチェーン上の各アカウントは、互いにリンクされた2つの鍵のセットである暗号鍵ペアで構成されています。ブロックチェーンの文脈では、この種類のアカウントは通常、Externally Owned Account(EOA)と呼ばれ、公開鍵と秘密鍵から構成されています。
この鍵ペアには、トラップドア関数と呼ばれる強力な機能があります。つまり、
ウォレットは、ウォレットの秘密鍵を使用してメッセージまたはトランザクションに署名し、ブロックチェーンに送信するために使用されます。
ウォレットは、ウォレットが同意したメッセージやトランザクションを知る手段を提供します。トランザクションの署名から送信者の公開鍵を復元することができるため、ブロックチェーン上での偽造/悪意のあるトランザクションが受け入れられないようにするために、これは重要です。
例えば、ジャロッドは、エイブリルが5 ETHを送ったと主張する取引を送信することができますが、彼女がこの取引に同意しなかった場合でも。しかし、ブロックチェーンは各取引の署名を検証するため、署名から回復したアドレスが取引の「送信者」(すなわち、エイブリル)と一致しないため、取引をすばやく拒否します。
Ethereumなどのブロックチェーンは、トランザクション署名から回復した公開鍵が、ネットワークにトランザクションを送信した人の公開鍵と一致するかどうかをチェックするためにECDSA(楕円曲線デジタル署名アルゴリズム)を使用しています。
ウォレットを作成するには、公開秘密キーのペアを作成する必要があります。ただし、このキーペアの値は、ブロックチェーン上で動作するためにいくつかのルールに従う必要があります。
この3段階のプロセスは、ブロックチェーン上でアカウントが生成される核心フローです。
次に、楕円曲線と秘密鍵を使用して公開鍵が派生する方法について詳しく説明します。しかし、その前に、ウォレットについて持っているかもしれない他のいくつかの質問に答えます。
ただし、私たちがちょうど示したようにランダムな64進数値を生成することは可能ですが、通常、プライベートキーはビットコインから派生した特定の標準を使用して生成されます。これらの標準により、ユーザーはシードフレーズを覚えておくことができます。これは12〜24語のフレーズで、それに関連付けられた新しいアカウントをいくつでも作成することができます。
これにより、ユーザーはすべてのアカウントにアクセスするために単一の単語セットを記憶することができます。各アカウントには個別の公開鍵と秘密鍵のペアがあります。特定の鍵導出関数(KDF)を使用して、単一のシードフレーズから任意の数の新しい秘密鍵を派生させることができます。
まず、ランダムエントロピーによってシードフレーズが生成され、シードフレーズから秘密鍵が派生する方法を説明し、最後に秘密鍵から公開鍵が派生する方法を再訪します。
ウォレットアプリケーションを初めてインストールするとき、通常、シードフレーズを書き留めて安全に保管するように求められます。通常は12語または24語の組み合わせです。可能な英単語の例のリストを見ることができますここ、それは2048単語の長さであることに気付くでしょう(その数字については後で再訪します)。
このニーモニックシードフレーズを保存するというアイデアは、2013年にBIP(Bitcoin Improvement Proposal); BIP-39で導入されました。この提案は、ランダムエントロピーを生成し、それを覚えやすい単語のシリーズに変換する標準化された方法を提供します。
まず、私達はシードフレーズがランダムに生成されていることを確認する必要があります。なぜなら、私達は誰か他の人が私達のウォレットに偶然アクセスして資金にアクセスすることを望んでいないからです。
これを行うには、CSPRNG(暗号化された疑似乱数ジェネレータ)を使用してランダムな数値を生成する必要があります。これはブラウザーで行うことができます。
このランダムな数字はエントロピーと呼ばれます。このエントロピーはシードフレーズを形成する単語のセットを作成するために使用されます。私たちの場合、128ビットは12個の単語にマップされますが、他の長さを使用することも可能です。
では、これらのビットをどのように使用してシードフレーズを作成すればよいのでしょうか。ビットと単語の関係は何ですか?まず、エントロピーのチェックサムが作成され、128ビットに追加されます。これは、整合性を確保するために作成されたエントロピーの4ビットハッシュです。
したがって、現在、エントロピーは128ビット + チェックサムは4ビットで、合計132ビットです。次に、132ビットはバイナリに変換されます。具体的には、11ビットのチャンクに分割されます。
現在、11ビットの長さを持つ12個のバイナリ数のセットがあります。ヒント:12個の数値があり、シードフレーズは12個の単語になります!
リストには2048の単語があり、2048は2^11であるため、11ビットで作成できる異なる可能なバイナリ数は2048個あります。
今、私たちはこれらのバイナリ数を、ワードリストから単語に変換する必要があります。これは、バイナリ数をインデックスとして使用し、ワードリスト内の単語を参照することで行われます。つまり、バイナリ数が10の場合、リスト内の9番目の単語を使用します(インデックスは0から始まるため)、例えば:
11ビットの数値を12個繰り返し、合計12語のシードフレーズを形成してください。
ランダムなエントロピー値を生成し、バイナリのチャンクに分割し、それらのバイナリ値を単語リスト内でのインデックスとして使用することで、ランダムなシードフレーズに辿り着く。
これに対するあなたの即座の反応はおそらく、「たった2048の単語しかないので、誰かが私のシードフレーズを推測できるのでは?」となるかもしれません。実際には、それは可能ですが、非常に… 本当に、ありえないのです。どれくらいありえないかと言うと…
ランダムな128ビットの生成ステップを忘れて、リストから手動で12の単語を選択することを想像してください。各単語を選択するたびに、2048の単語のうちの1つのオプションを選択しています。
だから、他の誰かが同じ言葉のシーケンスを推測するためには、2048分の1の確率で12回連続して正しく私たちと同じ言葉を推測する必要があります。今、あなたはおそらく、「わかった、それほど難しくないように思える…」と考えているでしょう?しかし、これをプレイアウトしてみましょう:
これは2048 x 2048 x 2048… 12回です。または、2048^12。つまり...とんでもなく大きな数です。おおよそ5セクスティリオン、または5クワドリリオンビリオンです。私たちには理解できないほどの数ですが、試してみましょう...
もしも今、信じられないほどパワフルなコンピュータを使って1兆個のシードフレーズを1秒で推測し始めたとしたら、1つのシードフレーズを推測するためにこのマシンには159兆年かかるでしょう。あるいは(あなたが信じるものによって異なりますが)、現在の宇宙の年齢よりもおよそ11,000倍長い時間がかかるでしょう。
24ワードのシードフレーズは12よりも優れていますか?
一部のウォレットは128ビット(12ワード)を選択しますが、最新のウォレットでは、シードフレーズとして24ワードを覚えておくように求められます。これもまた、とんでもなく大きいです。
今、私たちには12語のシードフレーズがありますが、それを使用してアカウントの秘密鍵を作成するにはどうすればよいでしょうか?これを行うために、シードフレーズをウォレットを生成するために使用できるバイナリシードに変換する必要があります。このプロセスには以下の手順が含まれます:
このプロセス(キー導出関数と呼ばれる)は、疑似乱数関数としてHMAC-SHA512と呼ばれる別のアルゴリズムを使用して、64バイトのハッシュ値であるバイナリシードを出力します。
出力された64バイトのハッシュ値は、他のBitcoinの標準から派生したロジックを使用してアカウントを生成するために使用できます。具体的には、BIP-32およびオプションでBIP-32の拡張であるBIP-44から派生したロジックです。
BIP-32は階層的決定論的(HD)ウォレットを導入します。これにより、単一のシードから多くのウォレットを派生させることができ、それらのウォレットからさらにウォレットを派生させることができます。これにより、ウォレットの「ツリー」が作成されます。
BIP-44は、特定の派生パスを実装することにより、単一のバイナリシードからウォレット構造の階層を作成する標準化された方法を提供します。パスの構造は次のとおりです:m / purpose’ / coin_type’ / account’ / change / address_index:
すべてのウォレットがBIP-44を使用するわけではありませんが、バイナリシードからアカウントを派生させる標準化の一般的な方法です。
先ほどお話したように、プライベートキーは64桁の16進数文字列であり、これは32バイトに相当します。そして、私たちはちょうどPBKDF2プロセスを通じて64バイトのバイナリシードを生成しました - では、この64バイトのハッシュ値を使用してプライベートキーを作成するのでしょうか?
まず、ハッシュは2つのハーフに分割されます。それぞれのサイズは32バイトです。
今、プライベートキーの見た目、ランダムに生成される方法、および1つのシードフレーズから複数のキーが派生する方法を理解しました。次に、プライベートキーから公開キーが派生する方法を探ってみましょう。
楕円曲線暗号(ECC)を使用することで、指定された秘密鍵に対応する公開鍵を求めることができます。異なる種類の楕円曲線がありますが、BitcoinとEthereumの両方で使用されるのはsecp256k1というものです。
この楕円曲線の仕様には、曲線上に他の点を作成するための開始点として使用される基点 G が含まれています。この開始点から、特定の方法で、特定の回数(秘密鍵によって決定される)曲線を「移動」します。このプロセスを停止したときにたどり着く曲線上のポイントが公開鍵になります。
曲線上での「移動方法」はスカラー倍算と呼ばれます。楕円曲線を扱う場合、スカラーは曲線上の点をスケーリングするために使用される数値を指します。基準点Gを取り、スカラー数値を適用して、その点を「伸ばす」ことで曲線上の新しい点に到達します。
ベースポイントに適用するスカラー数は、私たちのプライベートキーです。つまり、私たちは始点Gを取り、プライベートキーでスカラー倍してパブリックキーに到達します。
実際には、曲線は素数体ℤp上で定義されているため、散在した点の集まりのように見えますが、楕円曲線と同じ性質を持っています。
このスカラー乗算プロセス(<秘密鍵>回バウンス)の最後に、曲線上の新しい点、つまり公開鍵に到達します。このプロセスは次のようなものだと想像できます。
公開鍵はその名が示すように、誰とでも公開できます。次のような場合に役立ちます:
ウォレットはブロックチェーンに不可欠なコンポーネントであり、楕円曲線暗号を使用して、ユーザーが自分のアカウントからトランザクションを送信し、メッセージに署名できるようにします。
しかし、Abstractのような一部のブロックチェーンは、より多くの機能を提供し、より強力なセキュリティ、リカバリメカニズム、およびその他を可能にする、スマートコントラクトアカウントと呼ばれる新しいタイプのウォレットもサポートしています。
この記事は[から転載されましたhttps://abs.xyz/blog],オリジナルタイトル「ウォレットとは何ですか?」を転送し、すべての著作権はオリジナルの著者[Jarrod Watts]に帰属します。この転載に異議がある場合は、お問い合わせください。Gate Learnチームがそれを迅速に処理します。
責任の免除: この記事に表明されている見解や意見は、著者個人のものであり、投資アドバイスを構成するものではありません。
記事の翻訳は Gate Learn チームによって他の言語に翻訳されます。特に断りがない限り、翻訳された記事の複製、配布、盗用は禁止されています。
ウォレットは、ユーザーがブロックチェーンアカウントを管理し、資産を安全に保存し、ブロックチェーンの状態を変更するために取引に署名するための必須ツールです。
この投稿では、ウォレットとは何か、ウォレットがどのように作られ、楕円曲線暗号を使用して秘密-公開キーペアを生成し、シードフレーズを導出し、安全なブロックチェーンの相互作用を容易にするかをカバーします。
ウォレットは、ブロックチェーンアカウントを表示および操作することができるアプリケーションです。これらのアカウントを使用して、トークンの送信やスマートコントラクトとのやり取りなどのアクションを実行するためのトランザクションを送信することができます。
ブロックチェーン上の各アカウントは、互いにリンクされた2つの鍵のセットである暗号鍵ペアで構成されています。ブロックチェーンの文脈では、この種類のアカウントは通常、Externally Owned Account(EOA)と呼ばれ、公開鍵と秘密鍵から構成されています。
この鍵ペアには、トラップドア関数と呼ばれる強力な機能があります。つまり、
ウォレットは、ウォレットの秘密鍵を使用してメッセージまたはトランザクションに署名し、ブロックチェーンに送信するために使用されます。
ウォレットは、ウォレットが同意したメッセージやトランザクションを知る手段を提供します。トランザクションの署名から送信者の公開鍵を復元することができるため、ブロックチェーン上での偽造/悪意のあるトランザクションが受け入れられないようにするために、これは重要です。
例えば、ジャロッドは、エイブリルが5 ETHを送ったと主張する取引を送信することができますが、彼女がこの取引に同意しなかった場合でも。しかし、ブロックチェーンは各取引の署名を検証するため、署名から回復したアドレスが取引の「送信者」(すなわち、エイブリル)と一致しないため、取引をすばやく拒否します。
Ethereumなどのブロックチェーンは、トランザクション署名から回復した公開鍵が、ネットワークにトランザクションを送信した人の公開鍵と一致するかどうかをチェックするためにECDSA(楕円曲線デジタル署名アルゴリズム)を使用しています。
ウォレットを作成するには、公開秘密キーのペアを作成する必要があります。ただし、このキーペアの値は、ブロックチェーン上で動作するためにいくつかのルールに従う必要があります。
この3段階のプロセスは、ブロックチェーン上でアカウントが生成される核心フローです。
次に、楕円曲線と秘密鍵を使用して公開鍵が派生する方法について詳しく説明します。しかし、その前に、ウォレットについて持っているかもしれない他のいくつかの質問に答えます。
ただし、私たちがちょうど示したようにランダムな64進数値を生成することは可能ですが、通常、プライベートキーはビットコインから派生した特定の標準を使用して生成されます。これらの標準により、ユーザーはシードフレーズを覚えておくことができます。これは12〜24語のフレーズで、それに関連付けられた新しいアカウントをいくつでも作成することができます。
これにより、ユーザーはすべてのアカウントにアクセスするために単一の単語セットを記憶することができます。各アカウントには個別の公開鍵と秘密鍵のペアがあります。特定の鍵導出関数(KDF)を使用して、単一のシードフレーズから任意の数の新しい秘密鍵を派生させることができます。
まず、ランダムエントロピーによってシードフレーズが生成され、シードフレーズから秘密鍵が派生する方法を説明し、最後に秘密鍵から公開鍵が派生する方法を再訪します。
ウォレットアプリケーションを初めてインストールするとき、通常、シードフレーズを書き留めて安全に保管するように求められます。通常は12語または24語の組み合わせです。可能な英単語の例のリストを見ることができますここ、それは2048単語の長さであることに気付くでしょう(その数字については後で再訪します)。
このニーモニックシードフレーズを保存するというアイデアは、2013年にBIP(Bitcoin Improvement Proposal); BIP-39で導入されました。この提案は、ランダムエントロピーを生成し、それを覚えやすい単語のシリーズに変換する標準化された方法を提供します。
まず、私達はシードフレーズがランダムに生成されていることを確認する必要があります。なぜなら、私達は誰か他の人が私達のウォレットに偶然アクセスして資金にアクセスすることを望んでいないからです。
これを行うには、CSPRNG(暗号化された疑似乱数ジェネレータ)を使用してランダムな数値を生成する必要があります。これはブラウザーで行うことができます。
このランダムな数字はエントロピーと呼ばれます。このエントロピーはシードフレーズを形成する単語のセットを作成するために使用されます。私たちの場合、128ビットは12個の単語にマップされますが、他の長さを使用することも可能です。
では、これらのビットをどのように使用してシードフレーズを作成すればよいのでしょうか。ビットと単語の関係は何ですか?まず、エントロピーのチェックサムが作成され、128ビットに追加されます。これは、整合性を確保するために作成されたエントロピーの4ビットハッシュです。
したがって、現在、エントロピーは128ビット + チェックサムは4ビットで、合計132ビットです。次に、132ビットはバイナリに変換されます。具体的には、11ビットのチャンクに分割されます。
現在、11ビットの長さを持つ12個のバイナリ数のセットがあります。ヒント:12個の数値があり、シードフレーズは12個の単語になります!
リストには2048の単語があり、2048は2^11であるため、11ビットで作成できる異なる可能なバイナリ数は2048個あります。
今、私たちはこれらのバイナリ数を、ワードリストから単語に変換する必要があります。これは、バイナリ数をインデックスとして使用し、ワードリスト内の単語を参照することで行われます。つまり、バイナリ数が10の場合、リスト内の9番目の単語を使用します(インデックスは0から始まるため)、例えば:
11ビットの数値を12個繰り返し、合計12語のシードフレーズを形成してください。
ランダムなエントロピー値を生成し、バイナリのチャンクに分割し、それらのバイナリ値を単語リスト内でのインデックスとして使用することで、ランダムなシードフレーズに辿り着く。
これに対するあなたの即座の反応はおそらく、「たった2048の単語しかないので、誰かが私のシードフレーズを推測できるのでは?」となるかもしれません。実際には、それは可能ですが、非常に… 本当に、ありえないのです。どれくらいありえないかと言うと…
ランダムな128ビットの生成ステップを忘れて、リストから手動で12の単語を選択することを想像してください。各単語を選択するたびに、2048の単語のうちの1つのオプションを選択しています。
だから、他の誰かが同じ言葉のシーケンスを推測するためには、2048分の1の確率で12回連続して正しく私たちと同じ言葉を推測する必要があります。今、あなたはおそらく、「わかった、それほど難しくないように思える…」と考えているでしょう?しかし、これをプレイアウトしてみましょう:
これは2048 x 2048 x 2048… 12回です。または、2048^12。つまり...とんでもなく大きな数です。おおよそ5セクスティリオン、または5クワドリリオンビリオンです。私たちには理解できないほどの数ですが、試してみましょう...
もしも今、信じられないほどパワフルなコンピュータを使って1兆個のシードフレーズを1秒で推測し始めたとしたら、1つのシードフレーズを推測するためにこのマシンには159兆年かかるでしょう。あるいは(あなたが信じるものによって異なりますが)、現在の宇宙の年齢よりもおよそ11,000倍長い時間がかかるでしょう。
24ワードのシードフレーズは12よりも優れていますか?
一部のウォレットは128ビット(12ワード)を選択しますが、最新のウォレットでは、シードフレーズとして24ワードを覚えておくように求められます。これもまた、とんでもなく大きいです。
今、私たちには12語のシードフレーズがありますが、それを使用してアカウントの秘密鍵を作成するにはどうすればよいでしょうか?これを行うために、シードフレーズをウォレットを生成するために使用できるバイナリシードに変換する必要があります。このプロセスには以下の手順が含まれます:
このプロセス(キー導出関数と呼ばれる)は、疑似乱数関数としてHMAC-SHA512と呼ばれる別のアルゴリズムを使用して、64バイトのハッシュ値であるバイナリシードを出力します。
出力された64バイトのハッシュ値は、他のBitcoinの標準から派生したロジックを使用してアカウントを生成するために使用できます。具体的には、BIP-32およびオプションでBIP-32の拡張であるBIP-44から派生したロジックです。
BIP-32は階層的決定論的(HD)ウォレットを導入します。これにより、単一のシードから多くのウォレットを派生させることができ、それらのウォレットからさらにウォレットを派生させることができます。これにより、ウォレットの「ツリー」が作成されます。
BIP-44は、特定の派生パスを実装することにより、単一のバイナリシードからウォレット構造の階層を作成する標準化された方法を提供します。パスの構造は次のとおりです:m / purpose’ / coin_type’ / account’ / change / address_index:
すべてのウォレットがBIP-44を使用するわけではありませんが、バイナリシードからアカウントを派生させる標準化の一般的な方法です。
先ほどお話したように、プライベートキーは64桁の16進数文字列であり、これは32バイトに相当します。そして、私たちはちょうどPBKDF2プロセスを通じて64バイトのバイナリシードを生成しました - では、この64バイトのハッシュ値を使用してプライベートキーを作成するのでしょうか?
まず、ハッシュは2つのハーフに分割されます。それぞれのサイズは32バイトです。
今、プライベートキーの見た目、ランダムに生成される方法、および1つのシードフレーズから複数のキーが派生する方法を理解しました。次に、プライベートキーから公開キーが派生する方法を探ってみましょう。
楕円曲線暗号(ECC)を使用することで、指定された秘密鍵に対応する公開鍵を求めることができます。異なる種類の楕円曲線がありますが、BitcoinとEthereumの両方で使用されるのはsecp256k1というものです。
この楕円曲線の仕様には、曲線上に他の点を作成するための開始点として使用される基点 G が含まれています。この開始点から、特定の方法で、特定の回数(秘密鍵によって決定される)曲線を「移動」します。このプロセスを停止したときにたどり着く曲線上のポイントが公開鍵になります。
曲線上での「移動方法」はスカラー倍算と呼ばれます。楕円曲線を扱う場合、スカラーは曲線上の点をスケーリングするために使用される数値を指します。基準点Gを取り、スカラー数値を適用して、その点を「伸ばす」ことで曲線上の新しい点に到達します。
ベースポイントに適用するスカラー数は、私たちのプライベートキーです。つまり、私たちは始点Gを取り、プライベートキーでスカラー倍してパブリックキーに到達します。
実際には、曲線は素数体ℤp上で定義されているため、散在した点の集まりのように見えますが、楕円曲線と同じ性質を持っています。
このスカラー乗算プロセス(<秘密鍵>回バウンス)の最後に、曲線上の新しい点、つまり公開鍵に到達します。このプロセスは次のようなものだと想像できます。
公開鍵はその名が示すように、誰とでも公開できます。次のような場合に役立ちます:
ウォレットはブロックチェーンに不可欠なコンポーネントであり、楕円曲線暗号を使用して、ユーザーが自分のアカウントからトランザクションを送信し、メッセージに署名できるようにします。
しかし、Abstractのような一部のブロックチェーンは、より多くの機能を提供し、より強力なセキュリティ、リカバリメカニズム、およびその他を可能にする、スマートコントラクトアカウントと呼ばれる新しいタイプのウォレットもサポートしています。
この記事は[から転載されましたhttps://abs.xyz/blog],オリジナルタイトル「ウォレットとは何ですか?」を転送し、すべての著作権はオリジナルの著者[Jarrod Watts]に帰属します。この転載に異議がある場合は、お問い合わせください。Gate Learnチームがそれを迅速に処理します。
責任の免除: この記事に表明されている見解や意見は、著者個人のものであり、投資アドバイスを構成するものではありません。
記事の翻訳は Gate Learn チームによって他の言語に翻訳されます。特に断りがない限り、翻訳された記事の複製、配布、盗用は禁止されています。