it-swarm.com.de

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

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

Ich frage mich also, ob sie meinen geheimen Schlüssel irgendwo aufbewahren müssen, wenn sie mich nach ihm fragen. Ist das nicht im Grunde dasselbe, als ich nach meinen Kreditkartennummern oder meinem Passwort gefragt und das in ihrer eigenen Datenbank gespeichert habe?

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?

132
Lance Pollard

Grundsätzlich wird ausgeführt, was umrissen ist hier .

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 f(2) = 5, f(8) = 1 usw. Jetzt können wir eine andere Funktion machen, nennen es f ', das geht rückwärts, indem Sie 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 auf eine andere abbilden, 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 Übernehmen einer Eingabe und das Anwenden einer Einwegfunktion wird als "Hashing" der Eingabe bezeichnet. Was Amazon auf seinem System speichert, ist ein "Hash" Ihres geheimen Schlüssels. SHA1 ist ein Beispiel für diese Art von "Einweg" -Funktion, die auch gegen Angriffe abgesichert ist.

Die HMAC-Funktion baut auf etablierten Hash-Funktionen auf, um einen bekannten Schlüssel zur Authentifizierung einer Textfolge zu verwenden. Das 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 schlägt die Kopie des geheimen Schlüssels und den soeben gesendeten Text nach und wendet die HMAC-Funktion an.
  • Wenn das Ergebnis übereinstimmt, wissen sie, dass Sie denselben geheimen Schlüssel haben.

Der Unterschied zwischen this und PKI besteht darin, dass diese Methode RESTful ist und eine minimale Anzahl von Austauschen zwischen Ihrem System und den Servern von Amazon zulässt.

Ist das nicht im Grunde dasselbe, als ich nach meinen Kreditkartennummern oder meinem Passwort gefragt und das in ihrer eigenen Datenbank gespeichert habe?

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 können Angreifer den Schlüssel erhalten, wenn sie Root-Zugriff erhalten. 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 befolge die üblichen Vorsichtsmaßnahmen, um zu verhindern, dass mein System gerootet wird. Es gibt ein paar Tricks, um die ordnungsgemäße Funktion mit einem Mehrbenutzersystem zu gewährleisten, z. B. das Vermeiden temporärer Dateien und dergleichen.

90
ben

Public Key Cryptography wird zur Abwehr sehr spezifischer Angriffe verwendet, von denen einige häufig sind. Kurz gesagt, dies ist eine komplexe Mathematik, mit der überprüft werden kann, ob bei einer Person sowohl das öffentliche als auch das private Schlüsselpaar vorhanden sind, wobei nur der öffentliche Schlüssel bekannt ist. Dies unterscheidet sich stark von einer Kreditkarte oder einem statischen Passwort. Wenn Sie sich beispielsweise mit einem OpenSSH-Server authentifizieren, muss der Server der private Schlüssel ist nicht erforderlich .

Idealerweise verfügt der Angreifer, wenn die API-Datenbank von Amazon gefährdet ist, über eine Liste öffentlicher Schlüssel und kann mit diesen 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 unempfindlich gegen Brute-Force-Angriffe. Passwörter sind oft Wörter aus dem Wörterbuch, die relativ schnell zerbrochen werden können. Ein privater Schlüssel ist jedoch eine gewaltige 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, um den Schlüssel zu knacken.

7
rook

AWS hat einen eigenen benutzerdefinierten Authentifizierungsalgorithmus entwickelt. v4 wurde im Jahr 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 wird auch HMAC-SHA256 zum Signieren verwendet.

Signature Generation

Die Verwendung von asymmetrischen Schlüsseln wäre sicherer, da AWS nur einen öffentlichen Schlüssel anstelle des geheimen Schlüssels speichert, der sowohl vom Benutzer als auch von AWS gespeichert wird.

0
JBaczuk