2012-04-08 6 views
0

Ich habe eine Webservice-Authentifizierung implementiert, die fast genauso funktioniert wie amazon s3.webservice sessionless-authentication wie amazon s3 stärker mit rsa?

Die Authentifizierung ist session-less. Es funktioniert wie folgt::

  • senden HMAC_SHA1 von SecretKey + Inhalt Datum-header + some-Teile-of-the-Körper (hmac_sha1(secretKey+dateHeader+substr(body,0,100)) Pseudo-Code) ein Date HTTP Header in jeder Anfrage senden
  • Das Backend kennt auch den secretKey (20 char zufälliger Schlüssel).
  • Das Backend überprüft die Anfrage, indem es dasselbe HMAC_SHA1 tut und wenn der Wert gleich ist, ist die Anfrage "bewiesen" und wird ausgeführt.

So. Ich glaube, das war amazon.

Aber was ist mit der Idee, nicht eine symmetrische (HMAC_SHA1) anstatt eine asymmetrische Verschlüsselung (RSA) der "Teile der Anfrage" zu tun?

Ich möchte vermeiden, den secretKey auf meinem Backend zu haben. Besser nur den öffentlichen Schlüssel auf der Backend-Seite platzieren.

  • Denken Sie, dass dies eine gute Idee ist?
  • Würde es das System "stärker" machen?
  • Was ist eine gute maximale Größe für die Verschlüsselung mit RSA? 1000 Bytes?

Dank

Antwort

1

tut dies mit RSA finden Sie die öffentlichen Schlüssel auf der Client-Seite und die privaten Schlüssel auf der Server-Seite (auch bekannt als Backend). Sie werden immer irgendwo mit einem geheimen Schlüssel am Ende ...

Wenn Sie sich über die Sicherheit besorgt sind:

  • Liste alle potenziellen Risiko scenrios (technische und andere)
  • Prüfung, wie wahrscheinlich jedes Szenario ist
  • überprüfen, wie viel ist „Kosten“, wenn das spezifische Szenario Realität
  • Prüfung Ihrer aktuellen Sicherheitsinfrastruktur
wird

DANN gehen Sie voran und kümmern sich um die problematischsten Punkte (d. H. höchste "Kosten" und/oder "höchste" Wahrscheinlichkeit).

+0

Danke. Aber warum brauche ich den privaten Schlüssel auf der Serverseite? Der Server erstellt nur einen verschlüsselten Inhalt des Headers und eines Teils des Body und vergleicht ihn dann mit dem verschlüsselten Inhalt der vom Client gesendeten Anfrage. Damit. Auf der Serverseite ist nur Verschlüsselung erforderlich. Nicht? –

+0

@ JonasSchnelli der Client verschlüsselt mit einem öffentlichen Schlüssel, Entschlüsselungen benötigt dann den privaten Schlüssel ... Wenn Sie nie etwas entschlüsseln, dann brauchen Sie nicht den privaten Schlüssel ... ABER dann sind Sie nicht besser dran als Sie jetzt - Sie habe noch ein gemeinsames Geheimnis (Client und Server kennen den öffentlichen Schlüssel) ... – Yahia

+0

@JonasSchnelli ein anderer Punkt: Sicherheit/Stärke von symmetrischen/asymetrischen Schlüsseln unterscheidet sich - zum Beispiel: ein 3072 Bit RSA ist AES128 nach [NIST] (http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf) Seite 63. – Yahia