web-dev-qa-db-ja.com

APIキーと秘密キーはどのように機能しますか? APIと秘密鍵を別のアプリケーションに渡す必要がある場合、安全ですか?

APIキーと秘密キーがどのように機能するかについて考え始めています。ちょうど2日前にAmazon S3にサインアップし、 S3Foxプラグイン をインストールしました。アクセスキーとシークレットアクセスキーの両方を求められました。どちらの場合も、アクセスするにはログインが必要です。

だから私は、彼らが私の秘密鍵を私に尋ねているなら、彼らはそれをどこかに保存しているに違いないのだろうか?それは基本的に私のクレジットカード番号またはパスワードを尋ねて、それを自分のデータベースに保存することと同じことではないでしょうか?

秘密キーとAPIキーはどのように機能するはずですか?彼らはどのくらい秘密にする必要がありますか?秘密鍵を使用するアプリケーションは、何らかの方法でそれを保存していますか?

132
Lance Pollard

基本的に、概要を説明します こちら

仕組みは次のとおりです。0から9までの数値を取り、3を加算し、結果が10を超える場合は10を減算する関数があるとします。 f(2) = 5、f(8) = 1などです。これで、代わりに7を追加することにより、f 'と呼ばれる別の関数を作成できます。 3つのうち。 f '(5)= 2、f'(1)= 8など.

これは、双方向関数とその逆の例です。理論的には、あるものを別のものにマッピングする数学関数はすべて逆にすることができます。ただし、実際には、入力を非常にうまくスクランブルする関数を作成して、元に戻すことは非常に困難です。

入力を取得して一方向関数を適用することは、入力の「ハッシュ」と呼ばれ、Amazonがシステムに保存するものは、秘密鍵の「ハッシュ」です。 SHA1は、この種の「一方向」機能の例であり、攻撃に対しても強化されています。

HMAC function は、確立されたハッシュ関数に基づいて、既知のキーを使用してテキスト文字列を認証します。それはこのように動作します:

  • リクエストのテキストと秘密鍵を取り、HMAC関数を適用します。
  • その認証ヘッダーをリクエストに追加して、Amazonに送信します。
  • Amazonは、秘密鍵のコピーと送信したテキストを検索し、HMAC関数を適用します。
  • 結果が一致する場合、彼らはあなたが同じ秘密鍵を持っていることを知っています。

これとPKIの違いは、このメソッドが RESTful であり、システムとAmazonのサーバー間で最小限の交換しかできないことです。

それは基本的に私のクレジットカード番号またはパスワードを尋ねて、それを自分のデータベースに保存することと同じことではないでしょうか?

はい、S3で誰かに与えられる損害はアカウントの流出に限定されているようです。

彼らはどのくらい秘密にする必要がありますか?秘密鍵を使用するアプリケーションは、何らかの方法でそれを保存していますか?

ある時点で、秘密鍵をロードする必要があります。ほとんどのUnixベースのシステムでは、攻撃者がルートアクセスを取得できる場合、鍵を取得できます。キーを暗号化する場合、キーを復号化するコードが必要です。また、ある時点で、復号化コードは実行できるようにプレーンテキストである必要があります。これは、コンピューターを所有していることを除いて、DRMが抱えている問題と同じです。

多くの場合、私は秘密鍵を制限された許可を持つファイルに入れ、システムがルート化されるのを防ぐために通常の予防措置を講じます。一時ファイルなどを回避するなど、マルチユーザーシステムで適切に動作させるためのいくつかのトリックがあります。

90
ben

公開キー暗号化 は、非常に特殊な攻撃を防御するために使用されます。その一部は一般的です。要するに、これは複雑な数学であり、個人が公開鍵と秘密鍵のペアの両方を持っていることを、公開鍵のみを知っていることを確認できるようにします。これは、クレジットカードや静的パスワードとは大きく異なります。例として、OpenSSHサーバーで認証している場合、サーバー 秘密鍵は必要ありません

理想的には、攻撃を受けるAmazonのAPIデータベースが公開キーのリストを持ち、この情報を使用してユーザーのAPIにアクセスできない場合です。しかし、理想的なシステムは常に実践されているわけではなく、Amazonがこの攻撃ベクトルから保護しているかどうかは確かではありませんが、そうすべきです。

公開鍵では、認証は総当たり攻撃に対して統計的に影響を受けません。多くの場合、パスワードは辞書の単語であり、相対性理論をすばやく破ることができます。ただし、秘密鍵は推測するのが容易ではない膨大な数です。攻撃者が公開鍵を持っている場合、スーパーコンピューターで「オフライン」で多くの推測を実行できますが、それでも鍵を解読するには多くの時間とお金がかかります。

7
rook

AWSは独自のカスタム認証アルゴリズムを設計しました。 v4は2014年にリリースされました。詳細は次のとおりです。 リクエストの認証(AWS署名バージョン4) 。重要な点は、リクエストはシークレット自体ではなく、シークレットを使用して生成される署名キーで署名されることです。また、署名にHMAC-SHA256を使用します。

Signature Generation

AWSはユーザーとAWSの両方によって保存される秘密の代わりに公開キーのみを保存するため、非対称キーを使用する方が安全です。

0
JBaczuk