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.
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.
quelle
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.
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.
quelle