Wie funktionieren API-Schlüssel und geheime Schlüssel? Wäre es sicher, wenn ich meine API und geheimen Schlüssel an eine andere Anwendung übergeben müsste?

136

Ich fange gerade an darüber nachzudenken, wie API-Schlüssel und geheime Schlüssel funktionieren. Vor 2 Tagen habe ich mich für Amazon S3 angemeldet und das S3Fox Plugin installiert . Sie fragten mich sowohl nach meinem Zugangsschlüssel als auch nach meinem geheimen Zugangsschlüssel. Für beide muss ich mich anmelden, um darauf zugreifen zu können.

Ich frage mich also, ob sie mich nach meinem geheimen Schlüssel fragen, sie müssen ihn irgendwo aufbewahren, oder? Ist das nicht im Grunde das Gleiche wie mich nach meinen Kreditkartennummern oder meinem Passwort zu fragen und dieses in ihrer eigenen Datenbank zu speichern?

Wie sollen geheime Schlüssel und API-Schlüssel funktionieren? Wie geheim müssen sie sein? Speichern diese Anwendungen, die die geheimen Schlüssel verwenden, sie irgendwie?

Lance Pollard
quelle

Antworten:

90

Grundsätzlich wird näher darauf eingegangen, was hier beschrieben wird .

So funktioniert es: Nehmen wir an, wir haben eine Funktion, die eine Zahl von null bis neun annimmt, drei addiert und, wenn das Ergebnis größer als zehn ist, zehn subtrahiert. Also ist f (2) = 5, f (8) = 1 usw. Jetzt können wir eine andere Funktion erstellen, sie f 'nennen, die rückwärts geht, indem wir sieben statt drei addieren. f '(5) = 2, f' (1) = 8 usw.

Das ist ein Beispiel für eine Zwei-Wege-Funktion und ihre Umkehrung. Theoretisch können alle mathematischen Funktionen, die eine Sache einer anderen zuordnen, umgekehrt werden. In der Praxis können Sie jedoch eine Funktion erstellen, die ihre Eingabe so gut verschlüsselt, dass es unglaublich schwierig ist, sie umzukehren.

Das Eingeben einer Eingabe und das Anwenden einer Einwegfunktion wird als "Hashing" der Eingabe bezeichnet, und was Amazon auf seinem System speichert, ist ein "Hash" Ihres geheimen Schlüssels. SHA1 ist ein Beispiel für diese Art von "Einweg" -Funktion, es ist auch gegen Angriffe gehärtet.

Die HMAC-Funktion baut auf etablierten Hash-Funktionen auf, um einen bekannten Schlüssel zur Authentifizierung einer Textzeichenfolge zu verwenden. Es funktioniert so:

  • Sie nehmen den Text Ihrer Anfrage und Ihren geheimen Schlüssel und wenden die HMAC-Funktion an.
  • Sie fügen diesen Authentifizierungsheader Ihrer Anfrage hinzu und senden ihn an Amazon.
  • Amazon sucht nach der Kopie des geheimen Schlüssels und dem gerade gesendeten Text und wendet die HMAC-Funktion an.
  • Wenn das Ergebnis übereinstimmt, wissen sie, dass Sie denselben geheimen Schlüssel haben.

Der Unterschied zwischen dieser und der PKI besteht darin, dass diese Methode REST-fähig ist und eine minimale Anzahl von Austauschen zwischen Ihrem System und den Servern von Amazon ermöglicht.

Ist das nicht im Grunde das Gleiche wie mich nach meinen Kreditkartennummern oder meinem Passwort zu fragen und dieses in ihrer eigenen Datenbank zu speichern?

Ja, obwohl der Schaden, den jemand mit S3 anrichten kann, auf die Entleerung Ihres Kontos beschränkt zu sein scheint.

Wie geheim müssen sie sein? Speichern diese Anwendungen, die die geheimen Schlüssel verwenden, sie irgendwie?

Irgendwann müssen Sie den geheimen Schlüssel laden, und bei den meisten Unix-basierten Systemen kann ein Angreifer den Schlüssel erhalten, wenn er Root-Zugriff erhält. Wenn Sie den Schlüssel verschlüsseln, benötigen Sie Code, um ihn zu entschlüsseln, und irgendwann muss der Entschlüsselungscode Klartext sein, damit er ausgeführt werden kann. Dies ist das gleiche Problem, das DRM hat, außer dass Sie den Computer besitzen.

In vielen Fällen füge ich nur geheime Schlüssel in eine Datei mit eingeschränkten Berechtigungen ein und treffe die üblichen Vorsichtsmaßnahmen, um zu verhindern, dass mein System gerootet wird. Es gibt einige Tricks, damit es mit einem Mehrbenutzersystem ordnungsgemäß funktioniert, z. B. das Vermeiden temporärer Dateien und dergleichen.

ben
quelle
14
"Eine Eingabe zu nehmen und eine Einwegfunktion anzuwenden, wird als" Hashing "der Eingabe bezeichnet, und was Amazon auf seinem System speichert, ist ein" Hash "Ihres geheimen Schlüssels." - Wenn Amazon einen HASH Ihres geheimen Schlüssels speichert, wie ist es? Kann Amazon den an sie gesendeten Text HASHEN?
Franklin
21
Zuerst sagen Sie "Was Amazon auf seinem System speichert, ist ein" Hash "Ihres geheimen Schlüssels" und später "Amazon sucht nach der Kopie des geheimen Schlüssels". Diese scheinen sich zu widersprechen. Ich glaube, die erste Aussage ist falsch.
Sean
3
Diese URL enthält weitere Informationen zur Implementierung von Amazon S3 Auth - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait
10
"Theoretisch können alle mathematischen Funktionen, die eine Sache auf eine andere abbilden, umgekehrt werden" - Das ist nicht wahr, Hash-Funktionen sind das Beispiel. es ist sehr leicht zu zeigen. Nehmen wir an, wir haben eine Funktion, die Wörter in Zahlen umwandelt, basierend auf der Summe der Werte (a = 1, b = 2, c = 3 usw.). ZB wäre "SO" 18 + 14 = 32. Also haben wir SO in 32 geändert, aber wenn ich diese Funktion jemandem offenbare und ihm die Nummer 32 gebe, kann er auf keinen Fall wissen, ob unser Grundwort "SO" oder "SO" war "ZF" (26 + 6) oder eine von Dutzenden anderen Möglichkeiten
Leo
1
Laut dem Dokument, das @asyncwait verlinkt hat, speichert amazon definitiv Ihren geheimen Schlüssel, nicht nur einen Hash davon. Tatsächlich sieht es so aus, als ob nur Hashing in der HMAC-Funktion stattfindet
Cowlinator
7

Die Kryptografie mit öffentlichen Schlüsseln wird verwendet, um sich gegen sehr spezifische Angriffe zu verteidigen, von denen einige häufig sind. Kurz gesagt, dies ist eine komplexe Mathematik, mit der überprüft werden kann, ob eine Person sowohl das öffentliche als auch das private Schlüsselpaar hat, während nur der öffentliche Schlüssel bekannt ist. Dies unterscheidet sich stark von einer Kreditkarte oder einem statischen Passwort. Wenn Sie sich beispielsweise bei einem OpenSSH-Server authentifizieren, benötigt der Server keinen privaten Schlüssel .

Wenn die API-Datenbank von Amazon kompromittiert werden soll, verfügt der Angreifer im Idealfall über eine Liste öffentlicher Schlüssel und kann anhand dieser Informationen nicht auf die API des Benutzers zugreifen. Ideale Systeme werden jedoch nicht immer in die Praxis umgesetzt, und ich weiß nicht genau, ob Amazon vor diesem Angriffsvektor schützt, aber sie sollten es sein.

Bei öffentlichen Schlüsseln ist die Authentifizierung statistisch immun gegen Brute Force. Passwörter sind oft Wörter aus dem Wörterbuch, deren Relativitätstheorie schnell gebrochen werden kann. Ein privater Schlüssel ist jedoch eine riesige Zahl, die nicht leicht zu erraten ist. Wenn der Angreifer den öffentlichen Schlüssel hätte, könnten sie viele Vermutungen "offline" auf einem Supercomputer durchführen, aber selbst dann würde es viel Zeit und Geld kosten, den Schlüssel zu brechen.

Turm
quelle
2
Der private Schlüssel, der nicht benötigt wird , ist jetzt defekt.
Setzamora
@ Joset aktualisiert den Link, der auf eine Kopie in der Internet Wayback-Maschine von 2008 zeigt
Oligofren
1

AWS hat einen eigenen benutzerdefinierten Authentifizierungsalgorithmus entwickelt. v4 wurde 2014 veröffentlicht. Details finden Sie hier: Authentifizierungsanforderungen (AWS Signature Version 4) . Ein wichtiger Punkt ist, dass die Anforderung nicht mit dem Geheimnis selbst signiert wird, sondern mit einem Signaturschlüssel, der unter Verwendung des Geheimnisses generiert wird. Es verwendet auch HMAC-SHA256 zum Signieren.

Signaturerstellung

Die Verwendung asymmetrischer Schlüssel wäre sicherer, da AWS nur einen öffentlichen Schlüssel anstelle des Geheimnisses speichert, das sowohl vom Benutzer als auch von AWS gespeichert wird.

JBaczuk
quelle