秘密鍵の保管には4つの層があります。それぞれのセキュリティ強度と適用シナリオは何ですか?
最も基本的なものから最も安全なものまで、Agentの秘密鍵の保管には4つの層があります:
層1:平文環境変数(最も危険——本番環境では禁止)
秘密鍵を.envファイルまたはOS環境変数に直接保存します。一般的なミス:.envファイルが誤ってGitHubにコミットされる、またはprintenvログが鍵をロギングシステムに漏洩させる。開発・テスト環境には許容されますが、本番環境では絶対に使用しないでください。
層2:暗号化されたSecretサービス(ベースライン——本番環境の最低要件) Railway Secrets・AWS Secrets Manager・HashiCorp Vault——これらのサービスは鍵を暗号化して保管し、アプリケーションは実行時に復号します。Railway のSecretsはこの層に十分で、開発者に優しいです。主なリスク:サービス自体のアクセス管理——Railwayアカウントが乗っ取られると、攻撃者はすべてのSecretsを読み取ることができます。
層3:HSM / KMS(ハードウェアセキュリティモジュール) AWS KMS・Google Cloud KMS・Azure Key Vault——秘密鍵は平文でHSMを離れることはなく、署名操作はHSM内部で完了します。アプリケーションは「署名するデータ」を送信し「署名された結果」を受け取るだけで、鍵自体は見ることができません。
層4:MPC(マルチパーティ計算)ウォレット 秘密鍵はどこにも完全な形で存在しません——複数のシャードに分割され、署名を完成するには閾値数のシャードが協力する必要があります(例:2-of-3)。
Agentの秘密鍵には、人間が保持する鍵にはない特有の課題がありますか?
Agentの秘密鍵管理は、通常のウォレットセキュリティアドバイスではカバーできないいくつかの根本的な違いがあります:
課題1:秘密鍵は24時間コードからアクセス可能 手動ウォレットの場合、秘密鍵はハードウェアウォレットや記憶にあり、「コンピューターで操作しているとき」のみ使用されます——1日に数分の露出ウィンドウかもしれません。Agentの秘密鍵はサーバーで24時間利用可能です——攻撃者はあなたが「オンライン」の瞬間を待つ必要がなく、サーバーを侵害するか悪意ある命令を注入すれば、いつでも署名をトリガーできます。
課題2:Prompt InjectionによってAgentが秘密鍵を「積極的に」悪用する可能性がある 手動での鍵保持では、攻撃者はデバイスを物理的に盗むか、あなた自身に操作させる必要があります。Agentの場合、Prompt InjectionによってLLMに「この転送を実行することが正しい戦略だ」と信じさせ、AgentはProactivelyに秘密鍵を呼び出して悪意ある転送を完了させます——鍵は「盗まれていない」のに「悪意ある操作のために使用が承認された」状態になります。
課題3:継続的な稼働は「冷却期間」がないことを意味する 手動操作では、コンピューターが攻撃されると通常すぐに気づきます。Agentのサービスは表面上正常に動作しながら、バックグラウンドで静かに操作される可能性があります。
課題4:DevOpsプロセスが新たな攻撃面を生み出す 秘密鍵はCI/CDパイプライン・デプロイスクリプト・ロギングシステムに注入する必要があります——各接触点は潜在的な漏洩ポイントです。
秘密鍵のローテーション(Key Rotation)とは何ですか?オンチェーンAgentはどのくらいの頻度で秘密鍵をローテーションすべきですか?
秘密鍵のローテーションとは、古い秘密鍵を定期的に新しい鍵に置き換え、Agentの操作ウォレットの資産を古いアドレスから新しいアドレスに移行することを指します。ローテーションの目的:古い鍵がある時点で静かに漏洩していても(まだ攻撃者に悪用されていなくても)、ローテーション後は古い鍵が無効になり、漏洩の影響はローテーション期間内に抑えられます。
ローテーション頻度の推奨:
ローテーションプロセス:
DevOpsのどのシナリオで秘密鍵が最も誤って漏洩しますか?漏洩防止チェックリストはどのように作りますか?
Agentの開発とデプロイのワークフローでは、秘密鍵の漏洩は以下のシナリオで最も多く発生します:
高リスクシナリオ1:バージョン管理システム(Git)
.envファイルが誤ってコミットされる(一般的——特に初心者開発者)git log履歴の秘密鍵——そのコミットを削除してもgit履歴に残り、git filter-branchまたはBFG Repo Cleanerで消去が必要.gitignoreに.envを追加;コミット前にgit-secretsまたはtrufflehogで鍵をスキャン高リスクシナリオ2:CI/CDログ
echo $PRIVATE_KEYでCIログに秘密鍵が誤って出力されるechoしない;ロギングシステムでキーマスキングを設定する高リスクシナリオ3:エラートラッキングと監視システム
高リスクシナリオ4:Dockerイメージ
RUNステップでARG PRIVATE_KEYを使用すると、鍵がDockerイメージレイヤーに焼き込まれ、削除後もdocker historyで表示される漏洩防止チェックリスト(デプロイ前に確認):
.envが.gitignoreにあり、コミットされていないechoまたはprintがない比較:よく設計されたAgentとそうでないAgentの秘密鍵管理——30日間の実際の違い
設計が悪いAgent(.envファイルに秘密鍵):
.envをコードと一緒にGitHubにコミット(.gitignoreに追加するのを忘れる)よく設計されたAgent(Railway Secrets + 定期ローテーション + 少額操作ウォレット):
.envファイルをコミットしても、.envファイルにはプレースホルダーのみ(PRIVATE_KEY=your_key_here);実際の鍵はRailway Secretsにある両Agentは技術能力と戦略がまったく同じで、唯一の違いは秘密鍵管理の設計です。結果:$3,500の損失 vs 最悪$500の損失。
秘密鍵管理が安全であるほど、運用の複雑さとコストが高くなります:平文.env(コストゼロ、極めて高いリスク)→ Secrets Manager(低コスト、リスクを大幅に削減)→ KMS(中コスト、鍵が平文で存在しない)→ MPC(高コスト、最高のセキュリティ強度)。実践的推奨:資金量を主な判断基準として——$5,000未満はSecrets Managerで十分;$5,000-$50,000はKMSを追加;$50,000以上はMPCを検討。どの層でも、少額操作ウォレットと定期的な鍵ローテーションはすべての層で実施すべき基本措置です——ほぼゼロコストで最悪の損失上限を大幅に低下させます。