wake-up-neo.com

Warum einen API-Schlüssel und ein Geheimnis verwenden?

Ich bin auf viele APIs gestoßen, die dem Benutzer sowohl eine API key als auch eine secret geben. Aber meine Frage ist: Was ist der Unterschied zwischen beiden?

In meinen Augen kann ein Schlüssel ausreichen. Angenommen, ich habe einen Schlüssel und nur ich und der Server wissen es. Mit diesem Schlüssel erstelle ich einen HMAC-Hash und rufe die API auf. Auf dem Server erstellen wir den HMAC-Hash erneut und vergleichen ihn mit dem gesendeten Hash. Ist dies der Fall, wird der Anruf authentifiziert.

Warum also zwei Schlüssel verwenden?

Edit: oder wird dieser API-Schlüssel zum Nachschlagen des API-Geheimnisses verwendet?

75
EsTeGe

Bei der Kryptografie mit geheimen Schlüsseln wird derselbe Schlüssel zum Verschlüsseln und späteren Entschlüsseln einer Nachricht verwendet. Somit können nur diejenigen, die das "Geheimnis" kennen, die Nachricht lesen.

Die RSA-Sicherheit basiert auf 2 übereinstimmenden Schlüsseln. Für jeden Benutzer gibt es einen öffentlichen Schlüssel, den jeder kennen kann (sollte). Es gibt auch einen privaten Schlüssel, den nur der Benutzer kennen sollte. Eine mit dem öffentlichen Schlüssel verschlüsselte Nachricht kann nur mit dem privaten Schlüssel entschlüsselt werden und umgekehrt.

Wenn ich Ihnen eine Nachricht senden möchte, die nur Sie lesen können, erhalte ich (vom Netzwerk) Ihren öffentlichen Schlüssel, verschlüssele die Nachricht mit diesem Schlüssel und Sie sind die einzige Person, die ihn entschlüsseln kann.

Wenn ich Ihnen beweisen möchte, dass ich eine Nachricht gesendet habe, kann ich die Nachricht mit meinem privaten Schlüssel verschlüsseln und Ihnen (im offenen Text oder in einer anderen Nachricht) mitteilen, wie sie verschlüsselt wurde. Dann könnten Sie die Nachricht mit meinem öffentlichen Schlüssel entschlüsseln, und wenn sie lesbar wird, wissen Sie, dass sie von mir stammt.

Diese Form der Verschlüsselung ist ziemlich computerintensiv. Manchmal wird also ein einmaliger "geheimer Schlüssel" mit RSA-Technologie verschlüsselt, der Rest der Nachricht mit dem geheimen Schlüssel verschlüsselt und dann meine Signatur auf die zweite Art und Weise verschlüsselt. Anschließend kehren Sie diesen Vorgang um. Wenn die Nachricht und die Signatur lesbar sind, können Sie und nur Sie sie lesen, und Sie können sicher sein, dass ich die Nachricht gesendet habe.

OR

sie können diesen Link für eine detailliertere Erklärung besuchen.

Wie funktionieren API-Schlüssel und geheime Schlüssel?

38
SALMAN

Sie benötigen zwei separate Schlüssel, von denen einer angibt, wer Sie sind, und der andere beweist, dass Sie der sind, für den Sie sich ausgeben.

Der "Schlüssel" ist Ihre Benutzer-ID und das "Geheimnis" ist Ihr Passwort. Sie verwenden nur die Begriffe "Schlüssel" und "Geheimnis", weil sie es so implementiert haben.

47
Marcus Adams

Einfache Antwort, wenn ich es richtig verstanden habe ...

Wenn Sie Ihren API-Schlüssel für die Verschlüsselung verwenden, woher weiß der Dienst, wer sie kontaktiert? Wie werden sie diese Nachricht entschlüsseln?

Sie verwenden den API-Schlüssel, um anzugeben, wer Sie sind. Dies ist das, was Sie im Klartext senden. Den SECRET-Schlüssel kannst du nicht senden an niemanden senden. Sie verwenden es einfach zur Verschlüsselung. Dann senden Sie die verschlüsselte Nachricht. Sie senden nicht den Schlüssel, der für die Verschlüsselung verwendet wurde, der den Zweck zunichte machen würde.

4
ancajic

Es gibt Antworten, die erklären, was der geheime und (öffentliche) Schlüssel ist. Es ist ein öffentlich-privates Schlüsselpaar, dem sie verwirrende Namen geben. Aber niemand sagt, warum die APIs beides erfordern, und viele APIs geben Ihnen nur ein Geheimnis! Ich habe auch noch nie in einem API-Dokument erfahren, warum es zwei Schlüssel gibt. Das Beste, was ich tun kann, ist zu spekulieren ...

Nehmen Sie am besten nur Ihren öffentlichen Schlüssel in Ihre Anfrage auf und signieren Sie die Anfrage lokal mit Ihrem privaten Schlüssel. das Senden von mehr sollte nicht benötigt werden. Aber einige kommen davon, nur das Geheimnis in der Anfrage zu haben. Okay, jede gute API verwendet eine gewisse Transportsicherheit wie TLS (normalerweise über HTTPS). Sie setzen Ihren privaten Schlüssel jedoch weiterhin auf diese Weise dem Server aus und erhöhen so das Risiko, dass er auf irgendeine Weise falsch gehandhabt wird. Und HTTPS ist theoretisch genauso sicher, aber es gibt immer Implementierungsfehler.

Bei vielen APIs, anscheinend bei den meisten, müssen Sie beide Schlüssel in Anfragen senden, da dies einfacher ist, als die Leute dazu zu bringen, ihre eigenen Signaturen zu erstellen. kann sonst keine reinen cURL-Beispiele haben! In diesem Fall ist es sinnlos, sie getrennt zu haben. Ich denke, die separaten Schlüssel sind nur für den Fall gedacht, dass sie die API später ändern, um sie zu nutzen. Oder einige haben eine Client-Bibliothek, die dies auf sicherere Weise erledigt.

1
sudo