web-dev-qa-db-ja.com

APIキーとシークレットを使用する理由

ユーザーにAPI keysecretの両方を提供する多くのAPIに出会いました。しかし、私の質問は、両方の違いは何ですか?

私の目には、1つのキーで十分です。キーがあり、自分とサーバーだけがそれを知っているとします。このキーを使用してHMACハッシュを作成し、API呼び出しを実行します。サーバー上で、HMACハッシュを再度作成し、送信されたハッシュと比較します。同じ場合、コールは認証されます。

では、なぜ2つのキーを使用するのでしょうか?

編集:またはそのAPIキーはAPIシークレットの検索に使用されますか?

75
EsTeGe

秘密鍵暗号方式は、同じ鍵を使用してメッセージをエンコードし、後でデコードすることに依存しています。したがって、「秘密」を知っている人だけがメッセージを読むことができます。

RSAセキュリティは、2つの一致するキーに基づいています。各ユーザーには公開鍵があり、誰もがそれを知ることができます(すべきです)。また、ユーザーだけが知っておくべき秘密鍵もあります。公開鍵で暗号化されたメッセージは、秘密鍵でのみ解読でき、その逆も可能です。

したがって、あなただけが読むことができるメッセージをあなたに送りたい場合、私はあなたの公開鍵を(ネットワークから)取得し、その鍵でメッセージを暗号化し、あなたはそれを解読できる唯一の人です。

または、メッセージを送信したことを証明したい場合は、秘密鍵でメッセージを暗号化し、(オープンテキストまたは別のメッセージで)暗号化された方法を伝えます。その後、公開鍵を使用してメッセージを復号化できます。それが判読可能になったら、それは私からのものであることがわかります。

この形式の暗号化はかなりコンピューターに負荷がかかるため、RSAテクノロジーを使用して1回限りの「秘密鍵」を暗号化してから、残りのメッセージを秘密鍵で暗号化してから、2番目の方法で署名を暗号化することがあります。次に、このプロセスを逆にして、メッセージと署名が読み取り可能な場合、自分だけがそれを読むことができ、メッセージを送信したことを確認します。

OR

詳細な説明については、このリンクをご覧ください。

APIキーと秘密キーはどのように機能しますか?

38
SALMAN

2つの個別のキーが必要です。1つは自分が誰であるかを伝え、もう1つは自分が自分が自分だと言う人であることを証明します

「キー」はユーザーIDで、「秘密」はパスワードです。彼らは「キー」と「秘密」という用語を使用しているだけです。

47
Marcus Adams

簡単な答え、正しく理解できたら...

暗号化にAPIキーを使用する場合、サービスはそれらに連絡しているユーザーをどのように知るのでしょうか?彼らはそのメッセージをどのように解読しますか?

APIキーを使用して自分が誰であるかを示します。これがプレーンテキストで送信されます。 SECRETキー送信しない誰にでも。単に暗号化に使用します。次に、暗号化されたメッセージを送信します。暗号化に使用されたキーを送信しないと、目的が損なわれます。

4
ancajic

秘密および(公開)キーが何であるかを説明する回答があります。わかりにくい名前を付けた公開鍵と秘密鍵のペアです。しかし、APIが両方を必要とする理由は誰も言わず、多くのAPIはあなたに1つの秘密しか与えませんまた、2つのキーがある理由を説明するAPIのドキュメントを見たこともないので、推測できるのは...

リクエストには公開鍵のみを入れて、秘密鍵でローカルにリクエストに署名するのが最善です。これ以上送信する必要はありません。しかし、一部の人はリクエストに秘密を入れるだけで逃げます。良いAPIは、TLS(通常はHTTPS)のようなトランスポートセキュリティを使用します。しかし、あなたはまだそのように秘密鍵をサーバーに公開しているので、彼らが何らかの方法でそれを誤って扱うリスクが高まります(GitHubとTwitterの最近発見されたパスワードロギングバグを参照)。そして、HTTPSは理論的には同じくらい安全ですが、実装の欠陥は常にそこにあります。

しかし、多くの(実際にはほとんどのように思えます)APIは、両方のキーをリクエストで送信します。これは、人々に独自の署名をさせるよりも簡単だからです。それ以外の場合、純粋なcURLの例を使用することはできません!その場合、それらを別々にするのは無意味です。別々のキーは、後でAPIを変更してそれらを利用する場合のためのものです。または、より安全な方法で実行できるクライアントライブラリを持っているものもあります。

1
sudo