14 KiB
暗号鍵
XRP Ledgerでは、トランザクションによる一連の具体的なアクションの実行が承認されていることを、デジタル署名によって証明します。署名されたトランザクションのみがネットワークに配信され、検証済みレジャーに取り込まれます。
すべてのデジタル署名は、トランザクションの送信側アカウントに関連付けられている暗号鍵ペアに基づいています。キーペアはXRP Ledgerでサポートされている暗号化署名アルゴリズムを使用して生成できます。キーペアの生成に使用されたアルゴリズムの種類にかかわらず、キーペアはマスターキーペア、レギュラーキーペア、または署名者リストのメンバーとして使用できます。
警告: 秘密鍵のセキュリティを適切に維持することが重要です。デジタル署名は、あなたがトランザクション送信する権限を有していることをXRP Ledgerに対して検証できる唯一の手段であり、レジャーに提出されたトランザクションの取り消しや無効化を行う権限を有する管理者は存在しません。あなたのXRP Ledgerアカウントの秘密鍵があなた以外の何者かに知られた場合、その人物はあなたと同様にデジタル署名を作成し、トランザクションを承認することができます。
キーの生成
wallet_proposeメソッドを使用してキーペアを生成します。以下は、wallet_proposeの応答例です。
{
"result": {
"account_id": "rDGnaDqJczDAjrKHKdhGRJh2G7zJfZhj5q",
"key_type": "secp256k1",
"master_key": "COON WARN AWE LUCK TILE WIRE ELI SNUG TO COVE SHAM NAT",
"master_seed": "sstV9YX8k7yTRzxkRFAHmX7EVqMfX",
"master_seed_hex": "559EDD35041D3C11F9BBCED912F4DE6A",
"public_key": "aBQXEw1vZD3guCX3rHL8qy8ooDomdFuxZcWrbRZKZjdDkUoUjGVS",
"public_key_hex": "0351BDFB30E7924993C625687AE6127034C4A5EBA78A01E9C58B0C46E04E3A4948"
},
"status": "success",
"type": "response"
}
この応答には、キーペア(さまざまなフォーマットの秘密鍵と公開鍵)とaccount_idが含まれています。
秘密鍵
master_key、master_seed、およびmaster_seed_hexは、トランザクションの署名に使用できる異なるフォーマットの秘密鍵です。キーの先頭にmaster_が付いていますが、これらのキーは必ずしもアカウントのマスターキーというわけではありません。ここでは、master_というプレフィックスは、そのキーの秘密鍵としての役割を示します。master_seedはマスターシードで、そこからこのアカウントに関するその他のあらゆる情報が引き出されます。
公開鍵
public_keyとpublic_key_hexは異なるフォーマットの公開鍵で、public_key_hexはトランザクションに署名された秘密鍵に対応する公開鍵です。public_keyとpublic_key_hexはいずれもmaster_seedから生成されます。
account_id
account_idは公開鍵から生成され、アカウントがXRP Ledgerに作成される 可能性 を示します。account_idが存在していても、account_idが最初の XRPでの支払いを受領するまでは、実際のアカウントはXRP Ledgerに存在しません。さらにaccount_idは、資金を供給するトランザクションを受領して、アカウントが作成されるまでは、トランザクションを送信することができません。
ただし、(資金供給されたアカウントのない)account_idは、既存の別のアカウントのトランザクションを承認する際にレギュラーキーまたは署名者リストのメンバーとして使用できます。
資金供給されたアカウントを作成してレジャーに保管するには、account_idが、必要準備金を満たすのに十分なXRPを供給するPaymentトランザクションを受領する必要があります。
wallet_propose応答についての詳細は、wallet_proposeを参照してください。
生成されたキーペアは、マスターキーペア、レギュラーキーペア、または署名者リストメンバーのいずれかとして使用できます。
キータイプ
key_typeフィールドは、このキーペアの生成に使用された暗号化署名アルゴリズムを示します。[wallet_proposeメソッド][]を使用したキーペアの生成を要求するときに、key_typeを指定できます。
マスターキーペア
マスターキーペアは秘密鍵と公開鍵からなります。マスターキーペアの秘密鍵は、レギュラーキーペアが署名できるすべてのトランザクションに署名できる他、以下の操作の実行に使用できる唯一の鍵でもあります。
-
凍結機能を永久に放棄する。
-
トランザクションコストが0のKey Resetトランザクションを送信する。
アカウントのマスターキーペアは、マスターキーペアによるトランザクションへの署名が承認されているアカウントのaccount_idと同じwallet_propose応答にて生成されます。マスターキーペアは同じ応答内で生成されるため、public_key_hexから生成されるaccount_idアカウントに固有に関連付けられています。
これは、同様にwallet_propose メソッドを使用して生成されても、レギュラーキーペアとしてアカウントに明示的に割り当てられる必要があるレギュラーキーペアとは対照的です。レギュラーキーペアは明示的に割り当てられるので、トランザクションの署名が承認されているアカウントのaccount_idには固有に関連付けられません。詳細は、レギュラーキーペア を参照してください。
注意: マスターキーペアは変更できませんが、無効にできます。つまり、マスター秘密鍵が漏えいした場合、マスター秘密鍵を変更するのではなく、無効にする必要があります。
漏えいが発生した場合、マスターキーペアの変更は不可で、無効化するしかありませんので、マスターキーペアをオフラインで保管し、代わりにアカウントのトランザクションの署名用にレギュラーキーペアを設定することを強くお勧めします。
マスターキーペアをオフラインで保管する際には、不正使用者がアクセスできる場所にマスター秘密鍵を保管しないようにします。たとえば、インターネットに一切接続されない物理的に隔離されたマシンに保管したり、紙に記入して安全な場所に保管します。一般的には、インターネットと相互にやり取りをするコンピュータプログラムがアクセスできる範囲内には保管しません。マスターキーペアは、緊急時(漏えいの恐れがある場合や実際に漏えいが発生した場合にレギュラーキーペアを変更するなど)に限り、最も信頼できるデバイスでのみ使用することが理想的です。
レギュラーキーペア
XRP Ledgerでは、アカウントのマスターキーペアをオフラインで保管し、その後のトランザクションには レギュラーキーペア と呼ばれるセカンダリキーペアで署名することができます。レギュラーキーペアの秘密鍵が漏えいした場合は、秘密鍵を削除または交換できます。その際に、アカウントの秘密鍵以外の設定を変更したり、他のアカウントとの関係を再設定する必要はありません。レギュラーキーペアを積極的にローテーションすることも可能です。(アカウントのアドレスに固有に関連付けられているアカウントのマスターキーペアでは、このような操作は実行できません。)
レギュラーキーペアとして使用するキーペアは、wallet_proposeメソッドを使用して生成します。ただし、サポートするアカウントのaccount_idと同時に生成され、それに固有に関連付けられているマスターキーペアとは異なり、レギュラーキーペアと、このキーペアがトランザクションの署名に使用されるアカウントとの関係を明示的に作成する必要があります。レギュラーキーペアをアカウントに割り当てるには、SetRegularKeyメソッドを使用します。
レギュラーキーペアの割り当てに関するチュートリアルについては、レギュラーキーペアの割り当てを参照してください。
レギュラーキーペアを割り当てたアカウントには、次の2つのキーペアが関連付けられることになります。
- アカウントの
account_idに固有に関連付けられ、オフラインで保管されるマスターキーペア。 - アカウントに明示的に割り当てられ、アカウントのトランザクションの署名に使用されるレギュラーキーペア。
レギュラーキーペアをアカウントに割り当てて、マスターキーペアで署名されるトランザクションを除く、すべてのトランザクションの署名にそのレギュラーキーペアを使用できます。
レギュラーキーペアはいつでも削除または変更できます。つまり、レギュラーキーペアの秘密鍵が漏えいした(ただしマスターキーペアの秘密鍵の漏えいは発生していない)場合、レギュラーキーペアを削除または変更するだけでアカウントの制御を取り戻すことができます。
レギュラーキーペアの変更または削除のチュートリアルについては、レギュラーキーペアの割り当てを参照してください。
署名アルゴリズム
暗号鍵ペアは常に特定の署名アルゴリズムに結び付けられています。署名アルゴリズムは、秘密鍵と公開鍵の間の数学的関係を定義します。暗号化署名アルゴリズムには、現在の暗号技術では、秘密鍵を使用して対応する公開鍵を「簡単に」計算できるが、公開鍵から対応する秘密鍵を計算することは実質的に不可能であるという特性があります。
XRP Ledgerでは次の暗号化署名アルゴリズムがサポートされています。
| キータイプ | アルゴリズム | 説明 |
|---|---|---|
secp256k1 |
楕円曲線secp256k1を使用するECDSA | これはBitcoinで使用されているスキームです。XRP Ledgerではデフォルトでこのキータイプが使用されます。 |
ed25519 |
楕円曲線Ed25519を使用するEdDSA | パフォーマンスに優れ、その他の便利な特性を備えた新しいアルゴリズムです。Ed25519公開鍵はsecp256k1鍵よりも1バイト短いため、rippledではEd25519公開鍵の先頭に0xEDバイトが追加されます。これにより、両方の公開鍵タイプは33バイトになります。 |
[wallet_proposeメソッド][]を使用してキーペアを生成するときには、キーの生成に使用する暗号化署名アルゴリズムを選択するためkey_typeを指定できます。デフォルト以外のキータイプを生成した場合は、トランザクションに署名する際にkey_typeも指定する必要があります。
XRP Ledgerでは、サポートされているさまざまなタイプのキーペアは、マスターキーペア、レギュラーキーペア、署名者リストメンバーとして互換的に使用できます。アドレス生成プロセスは、secp256k1キーペアとEd25519キーペアでは同一です。
注記: 現時点では、Ed25519キーでPayment Channelクレームに署名することはできません。これはバグです。
将来のアルゴリズム
今後は、暗号技術の発展に伴い、XRP Ledgerに新しい暗号化署名アルゴリズムを追加する予定です。たとえば、Shorのアルゴリズム(または類似のアルゴリズム)を使用する量子コンピューターの実用化が間近となり、楕円曲線暗号が解読される可能性が生じた場合には、Rippleは容易に解読できない暗号化署名アルゴリズムを追加できます。2018年前半の時点では、「耐量子」署名アルゴリズムはまだ実用化できる段階ではなく、量子コンピューターはさらに実現段階から遠いため、現時点では特定のアルゴリズムを追加する予定はありません。
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/tx-type-links.md' %} {% include '_snippets/rippled_versions.md' %}