認証キーのローテーション
Aptos Moveアカウントには、公開アドレス、認証キー、公開鍵、秘密鍵があります。公開アドレスは永久であり、常にアカウントの初期認証キーと一致します。
Aptosアカウントモデルは独自の機能を促進し、アカウントの秘密鍵をローテーションします。カウントのアドレスは 初期 認証キーであるため、アカウントに署名する機能は、公開アドレスを変更せずに別の秘密鍵へ転送できます。
このガイドでは、様々なAptos SDKを少し使用してアカウントの認証キーをローテーションする方法の例を示します。
SDKのインストールリンクは以下の例でカ バーしています。
以下の例の一部では秘密鍵を使用しています。秘密鍵は誰とも共有しないでください。
アカウントの認証キーをローテーションする方法
- CLI
- Typescript
- Python
以下を実行して、2つのテストプロファイルを初期化します。秘密鍵の入力を求められた場合は、どちらの場合も入力を空白のままにしておきます。
aptos init --profile test_profile_1 --network devnet --assume-yes
aptos init --profile test_profile_2 --network devnet --assume-yes
aptos account rotate-key --profile test_profile_1 --new-private-key <TEST_PROFILE_2_PRIVATE_KEY>
構成がGlobal
と<local_directory>/.aptos/config.yaml
に設定されていて、それがWorkspace
へ設定されている場合、Aptos CLIプロファイルの公開鍵、秘密鍵、認証キーは、~/.aptos/config.yaml
へ保存されます。
構成設定を確認するには、aptos config show-global-config
を実行します。
ガス単価100オクタで[52000 - 78000]オクタの範囲でトランザクションを送信しますか?[はい/いいえ] >
はい
...
新しいキーのプロファイルを作成しますか?[はい/いいえ] >
はい
...
プロファイルの名前を入力します
test_profile_1_rotated
プロファイル test_profile_1_rotated が保存されました.
これで、他のアカウントと同じ様にプロファイルを使用出来ます。
config.yaml
ファイルでは、 test_profile_1_rotated
は元の公開アドレスを保持しますが、test_profile_2
と一致する新しい公開鍵と秘密鍵を持ちます。
認証キーはconfig.yaml
ファイルには表示されませんが、以下のコマンドで変更を確認できます。
# View the authentication key of `test_profile_1_rotated`
aptos move view --function-id 0x1::account::get_authentication_key --args address:test_profile_1_rotated
# View the authentication key of `test_profile_2`, it should equal the above.
aptos move view --function-id 0x1::account::get_authentication_key --args address:test_profile_2
{
"Result": [
"0x458fba533b84717c91897cab05047c1dd7ac2ea73e75c77281781f5b7fec180c"
]
}
{
"Result": [
"0x458fba533b84717c91897cab05047c1dd7ac2ea73e75c77281781f5b7fec180c"
]
}
This program creates two accounts on devnet, Alice and Bob, funds them, then rotates the Alice's authentication key to that of Bob's.
View the full example for this code here.
The function to rotate is very simple:
const response = await provider.aptosClient.rotateAuthKeyEd25519(
alice,
bob.signingKey.secretKey,
);
Commands to run the example script:
cd ~/aptos-core/ecosystem/typescript/sdk/examples/typescript-esm
pnpm install && pnpm rotate_key
Account Address Auth Key Private Key Public Key
------------------------------------------------------------------------------------------------
Alice 0x213d...031013 '0x213d...031013' '0x00a4...b2887b' '0x859e...08d2a9'
Bob 0x1c06...ac3bb3 0x1c06...ac3bb3 0xf2be...9486aa 0xbbc1...abb808
...rotating...
Alice 0x213d...031013 '0x1c06...ac3bb3' '0xf2be...9486aa' '0xbbc1...abb808'
Bob 0x1c06...ac3bb3 0x1c06...ac3bb3 0xf2be...9486aa 0xbbc1...abb808
This program creates two accounts on devnet, Alice and Bob, funds them, then rotates the Alice's authentication key to that of Bob's.
View the full example for this code here.
Here's the relevant code that rotates Alice's keys to Bob's:
# Create the payload for rotating Alice's private key to Bob's private key
payload = await rotate_auth_key_ed_25519_payload(
rest_client, alice, bob.private_key
)
# Have Alice sign the transaction with the payload
signed_transaction = await rest_client.create_bcs_signed_transaction(alice, payload)
# Submit the transaction and wait for confirmation
tx_hash = await rest_client.submit_bcs_transaction(signed_transaction)
await rest_client.wait_for_transaction(tx_hash)
Commands to run the example script:
cd aptos-core/ecosystem/python/sdk
poetry install && poetry run python -m examples.rotate-key
Account Address Auth Key Private Key Public Key
------------------------------------------------------------------------------------------------
Alice 0x213d...031013 '0x213d...031013' '0x00a4...b2887b' '0x859e...08d2a9'
Bob 0x1c06...ac3bb3 0x1c06...ac3bb3 0xf2be...9486aa 0xbbc1...abb808
...rotating...
Alice 0x213d...031013 '0x1c06...ac3bb3' '0xf2be...9486aa' '0xbbc1...abb808'
Bob 0x1c06...ac3bb3 0x1c06...ac3bb3 0xf2be...9486aa 0xbbc1...abb808