メインコンテンツにスキップ

ソフトウェアウォレットとは何ですか?

U
対応者:UKey Wallet

ソフトウェア ウォレットは、乱数を使用して マスター秘密キー を生成します。

その後、決定的かつ不可逆的なアルゴリズムを通じて、そのマスター秘密鍵から無制限の数の子秘密鍵を導出できます。

なぜ決定的かつ不可逆的なアルゴリズムが必要なのでしょうか?
決定的とは、すべての子秘密鍵を常に同じマスター秘密鍵から生成できることを意味し、不可逆的とは、どの子秘密鍵からもマスター秘密鍵を再構成できないことを意味するためです。

これが、階層決定論的 (HD) ウォレットと呼ばれる理由です。秘密キーの導出構造はツリーに似ています。親キーは複数の子キーを導出でき、各子キーは複数の孫キーを導出でき、このプロセスは無期限に継続できます。

HD ウォレットが最初に作成されるとき、またはウォレットがバックアップされるときに、ニーモニック フレーズが生成されます。ニーモニックフレーズとは、一連の英単語です。このシーケンスは シード の生成に使用され、その後、そのシードはウォレット内のすべての秘密鍵の生成に使用されます。つまり、ニーモニックフレーズはウォレットの復元に使用できるため、ウォレットのバックアップとして機能します。シードは、決定論的ウォレットの背後にある元の乱数に対応します。

HD ウォレットの大きな利点の 1 つは、任意の数の 子公開鍵を生成するのに必要なのは マスター公開鍵だけであることです。言い換えれば、新しいパブリック アドレスは、マスター秘密キーか子秘密キーかに関係なく、秘密キーにアクセスする必要なく、マスター公開キーから作成できます。ただし、これらの生成されたアドレスはすべて、最終的にはマスター秘密キーによって制御できます。

もちろん、この設計にはリスクも伴います。ニーモニック フレーズが公開されると、基本的にすべての秘密キーが公開されることと同じになります。それが起こると、ウォレット内のデジタル資産のセキュリティは事実上失われます。

なぜこれほど多くの秘密キーが必要なのでしょうか?

ユーザーが非常に多くの秘密キーを必要とする理由は、ビットコイン トランザクションの 変更メカニズム を通じて理解できます。

ビットコイン トランザクションは、入力出力を含むデータ構造です。また、ソース (入力) から宛先 (出力) に値を転送するために必要なスクリプト情報も含まれています。

ビットコインの入出力を理解するには、UTXO (未使用のトランザクション出力) の概念を知ることが重要です。 UTXO はビットコイン トランザクションの基本単位であり、未使用のトランザクション出力を表します。単一のビットコインは、実際には UTXO の形式で多くのトランザクションと多くのブロックに分散されます。実際には、単純な口座残高を保存する一元的な記録は存在しません。代わりに、それぞれの所有者にロックされた分散型 UTXO のみが存在します。

UTXO は任意の量の価値を表すことができますが、一度作成されると、物理的なコインを半分に分割できないのと同じように分割できません。 UTXO の値がトランザクションに必要な金額よりも大きい場合でも、UTXO 全体を使用する必要があり、超過分はおつりとして返されます。

たとえば、20 ユニット相当の UTXO を持っていて、1 ユニットを支払いたいとします。トランザクションは 20 ユニットの UTXO をすべて消費し、2 つの出力を作成する必要があります。1 つの出力は 1 ユニットを受信者に送信し、もう 1 つの出力は 19 ユニットをおつりとしてウォレットに送り返します。この意味で、ほとんどのビットコイン取引は小銭を生み出します。

これは別の疑問につながります。変更は元のアドレスに送り返されるべきですか、それとも新しく生成されたアドレスに送り返されるべきですか?

サトシ・ナカモトがビットコインを設計したとき、アドレス変更メカニズムが使用されました。これは、各トランザクションからの変更を受け取るために新しいアドレスが作成されることが多いことを意味します。この設計の利点は、ユーザーのプライバシーを保護し、特定のセキュリティ リスクを軽減できることです。

実生活では、これは、異なる銀行で異なる名前と ID で複数の銀行口座を開設することにたとえられます。たとえ誰かが各口座のお金の流れを観察できたとしても、そのすべてをデジタル資産の真の所有者まで追跡することは非常に困難になります。これは、ビットコインに相対的な匿名性を与える理由の一部です。

これが、ウォレットユーザーが非常に多くの秘密鍵を必要とする理由です。公開鍵と秘密鍵は常にペアで存在し、トランザクションごとに新しい変更アドレスが生成される可能性があるため、これらすべてのアドレスに対応する秘密鍵を保存およびバックアップすることは、大きな技術的課題になります。 HD ウォレットは、単一のルートが任意の数の子公開鍵と子秘密鍵を生成できるようにすることでこの問題を解決し、デジタル ウォレットの使いやすさを大幅に向上させます。

こちらの回答で解決しましたか?