2010-01-03 11 views
7

Meine App muss eine SSL-URL von einer Drittpartei lesen. Wie speichere ich am besten die Berechtigungsnachweise von Drittanbietern in meiner eigenen Datenbank, um die Anmeldeinformationen der Drittanbieter vor einer Kompromittierung zu schützen? Betrachten Sie sowohl absolute Sicherheit als auch Praktikabilität. One-Way-Hashing der Anmeldeinformationen ist nicht sinnvoll, da ich die Anmeldeinformationen für den SSL-Aufruf in Klartext wiederherstellen muss. Ich verwende Python in der Google App-Engine und meine App authentifiziert sich mit Google-Anmeldeinformationen.Ich * muss * Drittanbieter-Anmeldeinformationen in meiner Datenbank speichern. bester Weg?

  • verschlüsseln Anmeldeinformationen mit z. AES und den Verschlüsselungsschlüssel speichern woanders (nur das Problem bewegt) oder derive it from the credentials and keep the algorithm secret (bewegt sich nur das Problem)
  • verschlüsseln Anmeldeinformationen eines synchronous stream cipher, leiten die (nicht) Entropie von den Anmeldeinformationen und keep the algorithm secret (nur verschiebt das Problem)
  • in einer separaten Web-Anwendung zum Speichern von Drittanbieter-Anmeldeinformationen, eine SSL-URL zum Erhalt der Drittanbieter-Anmeldeinformationen, diese URL wird mit Google-Anmeldeinformationen (wie meine app) zugreifen und authsub oder etwas, um die Autorisierung auf den anderen übertragen können Web-App. das klingt sicherer, weil es schwieriger ist, eine trivial einfache Webapp zu hacken, und wenn meine komplexe Hauptanwendung kompromittiert wird, werden die Berechtigungsnachweise von Drittanbietern nicht angezeigt.

Was denken Sie über alle Ansätze?

+0

es ist unklar, was Sie fragen? Eine SSL-URL dient zum Verschlüsseln der über sie gesendeten Anmeldeinformationen. –

+1

Ich habe Angst, die externen Anmeldeinformationen in meiner Datenbank zu speichern –

+0

Ich kann nicht sehen, wie der dritte Ansatz das Problem auch nicht bewegt. Es verschiebt es einfach in eine andere App anstelle der gleichen App. –

Antwort

2

Es ist eine schwierige Aufgabe, und kein Ansatz wird Ihnen die Mühe ersparen, sicherzustellen, dass es keine schwache Verbindung gibt. Zunächst einmal würde ich nicht wissen, ob Hosting auf Google der beste Weg ist, da Sie die Kontrolle verlieren werden (ich weiß wirklich nicht, ob App Engine mit der erforderlichen Sicherheitsstufe entwickelt wurde, das sollten Sie herausfinden.) out) und wahrscheinlich kann Penetration Tests nicht tun (was Sie sollten.)

Mit einer separaten kleinen Anwendung ist wahrscheinlich eine gute Idee, aber das erspart Ihnen nicht auf die eine oder andere Weise die Anmeldeinformationen in diesem zu verschlüsseln kleinere App Es kauft dir einfach Einfachheit, was wiederum die Analyse erleichtert.

Ich persönlich würde versuchen, die App so zu gestalten, dass der Schlüssel zufällig nach jeder Verwendung ändert, mit einer Art von one time pad Ansatz. Sie geben die App nicht detailliert genug an, um festzustellen, ob dies möglich ist.

2

Wenn Sie Referenzen reversibel speichern müssen, gibt es einfach keine Lösung. Benutze AES und bewahre den geheimen Schlüssel unter gut bezahlter bewaffneter Wache auf. Wenn Sie Fenster verwenden, würde ich die Cred * Win32 API (advapi32.dll) überprüfen, es würde Ihnen zumindest ermöglichen, die Schlüsselverwaltung zu Windows syskey zu stochern, wo TPM und/oder Bootup-Passphrase Schutz vor Low-Level-Kompromittierung (gestohlen Festplattenlaufwerke)

Offensichtlich, wenn Ihre Anwendung oder der Sicherheitskontext, in dem es ausgeführt wird, kompromittiert ist, wäre keines der oben genannten Dinge sehr hilfreich.

3

Wie werden die Anmeldeinformationen verwendet? Wenn ihre Verwendung nur vom ursprünglichen Besitzer ausgelöst wird (z. B. wenn Sie eine Bankkartennummer speichern und sie ihren zweiten Kauf tätigen), können sie zu diesem Zeitpunkt ein Passwort angeben, das als Ihr Verschlüsselungsschlüssel verwendet wird. Sie müssen diesen Schlüssel dann nicht lokal speichern, und der Datenbankinhalt allein ist für einen Angreifer nutzlos.

+0

Credits werden aufgerufen, wenn meine App eine E-Mail (wirklich eine SMS) von empfängt eine registrierte Adresse, und dann antwortet meine App auf diese Adresse. also bin ich mir ziemlich sicher, dass sie gespeichert werden müssen. –

Verwandte Themen