2016-03-25 12 views
6

Ich arbeite an einer Web-App, die darüber nachdenkt, wie man die Identität eines Benutzers völlig anonym hält. Benutzer anonym halten - Option Nur sichere Datenbank - Allgemeine Gedanken?

Jedoch habe ich zum Schluss gekommen, dann ist es nicht zu viel kann ich tun - außer konzentrieren sich auf die Datenbank zu sichern von gehackt.

Ist das der allgemeine Konsens hier auf StackOverflow oder gibt es irgendwelche Methoden, die ich verpasst haben könnte? So

Ich dachte:

  • eine gerade bcrypt Hash und Salz aber dies führt dann zu dem Benutzer aus verschiedenen Gründen zu kontaktieren.
  • Passwort wird zurückgesetzt. Ich könnte Genesung Frage/Antwort speichern, aber dann müssten natürlich die Antworten lesbar sein, damit die Dinge besiegt werden.
  • Ein weiterer Punkt war, dass sie diese Sicherheitsfragen oder einen Benutzernamen, den ich bei der Registrierung generiert hatte, vergessen hatten. Keine Möglichkeit, sie mit einem Konto zu verknüpfen.
  • Auch was kam mir in den Sinn (vorausgesetzt, ich besiegte das oben) einschränkende doppelte Benutzer. Wenn ich mit einem Hash/Salz durchforsten würde, wäre die Verarbeitung ziemlich "schwer"? Ich könnte einfach eine lange Liste von E-Mails behalten, aber dann das Problem wieder mit einem bestehenden Konto verknüpfen?

Interessiert, um Ihre Gedanken zu hören.

Danke.

+0

Habe ich Recht, wenn Sie möchten, dass sich Benutzer mit E-Mail/Passwort anmelden und Ihr System dann alle persönlichen Daten verschlüsseln soll, damit sie nicht identifizierbar sind? –

+0

Sie könnten Sqrl zur Benutzervalidierung verwenden. https://www.grc.com/sqrl/sqrl.htm. Das System verwendet die Verschlüsselung mit öffentlichen Schlüsseln, um eine Benutzersitzung anstelle eines Kennworts zu signieren. Sie identifizieren den Benutzer anhand eines Schlüssels, der von einem geheimen Client abgeleitet wurde. Auf diese Weise müssen Sie nicht davor zurückschrecken, Passwörter zu verlieren. da keine Passwörter verloren gehen. Ich habe es nicht ausprobiert, aber nachdem ich Steve Gibson in seinem Podcast gehört habe, scheint es gut zu sein. –

+0

@AaronFranco ja das ist richtig. – userMod2

Antwort

3

Ich denke, ein Szenario, das Sie beschreiben, könnte möglich sein. Sie können dem Benutzer bei der Anmeldung ein Entschlüsselungstoken geben. Das Token könnte einer Variablen in der App im Frontend zugewiesen werden. Wenn sie die Site oder Seite verlassen, würde das Token verloren gehen und sie müssten sich erneut anmelden.

Mit dem Token kann die App verschlüsselte Daten entschlüsseln, die vom Server kommen. So könnten alle Daten mit dem Token verschlüsselt werden. Wenn Kennwortänderungen erforderlich sind, können Sie beim Generieren eines neuen Kennworts ein neues Token generieren, und Ihr Server muss dann alle seine Daten mit dem neuen Token entschlüsseln und erneut verschlüsseln. Auf diese Weise könnten Sie alle Serverdateien, Code und Datenbanken bei der Verwendung von SSL verschlüsseln, sodass alle Daten anonym bleiben, bis sie den Benutzer zur Anzeige erreichen. Der Benutzer, der sich anmeldet, ist die einzige Möglichkeit, das Token dazu zu bringen, alle Daten zu entschlüsseln, die vom Server kommen. Dies würde die Serverleistung erheblich reduzieren.

Diese Technik wird von Atmel in ihren Mikrochips verwendet, um eine 100% ige Verschlüsselung von Gerät zu Cloud zu erreichen. Was für einen Chip Sinn macht, weil ein Benutzer nicht visuell mit ihm interagieren muss. Im Fall einer Webanwendung muss es eine Möglichkeit geben, die Daten zur Anzeige zu entschlüsseln. Was die Möglichkeiten einschränkt.

Hier sind ein paar Links, die dies tun, nützlich sein könnten: https://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services https://www.fourmilab.ch/javascrypt/javascrypt.html

Hier ist ein Link zu dem Atmel Chip, der die oben genannten Sicherheitsmethode verwendet. http://www.atmel.com/products/security-ics/cryptoauthentication/

+0

Interessant - kann sehen, wie das funktionieren würde, aber der Benutzer müsste sich nun an ein Token erinnern - anstatt an seine E-Mail/Handy. Ich nehme an, dass dieses Token zu einem einfachen gemacht werden könnte? – userMod2

+0

Der Benutzer sieht das Token nie. Sie verwenden nur E-Mail & Passwort, um das Token von Ihrem Server zu holen. Das Token ist das einzige vom Server gesendete Objekt, das nicht verschlüsselt wird. –

+0

Ah ok - aber auf der Serverseite/DB gibt es noch einen Link vom Token zum Benutzerrecht? – userMod2

2

Nun, der einzige Weg, um völlig anonym zu sein, ist, niemals online zu gehen. Nichts, und ich meine nichts, ist vollständig gesichert. Jeder Hash, Verschlüsselung, DB usw. kann geknackt werden. Wenn ein böswilliger "Hacker" die Information wirklich will, wird er einen Weg finden, ihn zu bekommen, egal wie sehr Sie es versuchen.

Jetzt gesagt, was Sie beschreiben, ist möglich, zum Beispiel Tor, Proxies, VPN, etc, wenn Sie vollständig jedes Bit Informationen, die vom Benutzer genommen wird, zu verschlüsseln, dann sind Sie in etwas. Dies kann jedoch ein Problem werden, wenn etwas schief geht, zum Beispiel Triple-Hash und Multi-Salz alle Hashes und stoßen auf ein Problem, wo Sie die Benutzerinformationen entschlüsseln müssen (aus Gründen der Argumentation fordert das FBI) Single Salted Hash mit einer MD5-Verschlüsselung kann zwischen 2 und 5 Stunden dauern, um zu entschlüsseln. Sie haben alle Informationen einschließlich IP, Nutzername, Passwort, E-Mail, Name usw. verschlüsselt. Jetzt betrachten Sie möglicherweise mehr als einen Tag, um einen einzelnen Benutzer zu entschlüsseln.

Sie könnten jedoch etwas tun, um einen verschlüsselten Tunnel in Ihrem Browser zu erstellen, auf den der Benutzer zugreifen muss, um den Browser auszuführen (ähnlich wie ein VPN), und von dort aus Proxies in der URL des Browsers um die Anomität zu fördern. Auf diese Weise befindet sich der Benutzer in einem verschlüsselten Tunnel mit einer anderen IP und verwendet eine andere IP als die, die durch den Tunnel gegeben wird. Du könntest sogar so weit gehen, wie immer mal wieder IPs springen und Proxies wechseln.

Jetzt zur Sicherung der Datenbank, würde ich multisalting Hashes vorschlagen, sie mit einer Passphrase sichern und die Passphrase von dem Computer löschen, auf dem sich die Datenbank befindet. Dies kann sich auch als problematisch erweisen, wenn Sie auf die Hashes für die Entschlüsselung zugreifen müssen.

Ich sage gehen, das Schlimmste, was passieren wird, ist eine leichte Spur des Benutzers. Aber denken Sie daran, wenn Sie dies erfolgreich schaffen, werden Leute mit böswilliger Absicht versuchen, es auszunutzen, nur um zu sehen, ob sie es können.