Frage zu Verschlüsselung/Authentifizierung



  • Hi,
    über ein Programm sollen Daten geräteunabhängig verschlüsselt werden. Jeder Nutzer generiert einen Private/Public Key. Wenn der Nutzer auf jedem seiner Geräte Daten verschlüsseln/entschlüsseln möchte, braucht er denselben Private/Public Key. Das Problem ist, dass aus Sicherheitsgründen der private Key nicht auf den Server gespeichert werden sollte, zumindest nicht in Klartext.
    Was wäre die beste Methode, das entsprechend umzusetzen, so dass der Nutzer auf alle seiner Geräte Daten ver-/entschlüsseln kann? Gibt es bekannte Konzepte?

    L. G.,
    IBV



  • Das einzig bewährte Konzept ist, den Benutzer seinen private Key von Hand in jedes Gerät einzugeben.

    Alles andere ist unsicher.


  • Mod

    Deswegen heißt er ja auch private und nicht public.

    edit: Um sicher zu gehen, ob ich das richtig verstanden habe: Es soll eine Art verschlüsselter Onlinespeicher sein, oder?



  • Ok, aber dann würde kein (Mainstream-)Nutzer die Software nutzen.
    Es gibt ein relativ sicheres Konzept das mein Kommilitone ausgearbeitet hat, das allerdings den Nachteil hat, dass der User sein Passwort nicht zurücksetzen kann:

    Key1 = SHA2(Password)
    Key2 = SHA2(Key1)

    Key2 wird als Passwort bei der Registrierung verwendet, Key1 zum verschlüsseln des Private-Keys. Durch die Pre-Image Resistance können wir ja dann nur durch Kenntnis von Key2 nicht auf Key1 schließen, der Private-Key ist also sicher. Ist etwas unschön, aber der einzige benutzbare Weg der mit eingefallen ist.

    Hat wie gesagt den Nachteil, dass man das Passwort nicht mehr ändern kann. Daher bräuchten wir eine andere Methode.

    Möglicherweise wäre verschlüsselte eine End-To-End-Synchronisierung eine Möglichkeit. Was denkt ihr?!

    L. G.,
    IBV



  • SeppJ schrieb:

    edit: Um sicher zu gehen, ob ich das richtig verstanden habe: Es soll eine Art verschlüsselter Onlinespeicher sein, oder?

    Nein, sowas wie WhatsApp, nur verschlüsselt.



  • Eigentlich müsste die Passwortänderung funktionieren, wenn dann beim Ändern des Passworts auch gleich der Private Key neu verschlüsselt wird.



  • Wo ist da genau der Unterschied, direkt das Passwort zum Verschlüsseln zu nehmen (ausser dass letzteres weniger umständlich und sicherer ist)?



  • Wobei man sich die Frage stellt warum ihr public/private keys nicht gleich von dem Passwort derived, denn das muss ja jetzt eh ausreichend sicher sein um den private key zu schützen.



  • cooky451 schrieb:

    Wobei man sich die Frage stellt warum ihr public/private keys nicht gleich von dem Passwort derived, denn das muss ja jetzt eh ausreichend sicher sein um den private key zu schützen.

    Ich versteh nicht was du meinst. Private/Public Key vom Passwort herleiten? Wie geht das? Du meinst als Seed oder so, so dass immer dieselben Keys rauskommen? Geht das?

    L. G.,
    IBV



  • Warum sollte man den private Key nicht verschlüsselt auf einem Server speichern? Solange das Passwort unabhängig vom Authentifizierungspassword ist und dem Server nicht bekannt ist, sehe ich da kein Problem.

    Allerdings würde ich davon abraten für Passwörter SHA2 (und MD5, SHA1, SHA3 sowie andere Hashfunktionen) zu verwenden und stattdessen eine KDF wie PBKDF, bcrypt oder scrypt benutzen.



  • IBV schrieb:

    Ich versteh nicht was du meinst. Private/Public Key vom Passwort herleiten? Wie geht das? Du meinst als Seed oder so, so dass immer dieselben Keys rauskommen? Geht das?

    Jo, klar geht das. Wenn man zufällige Keys erzeugt muss man den PRNG ja auch mit irgendwas seeden - nimmt man halt das Passwort dafür. Eventuell das Passwort + Benutzername, oder halt irgendetwas was unique ist, damit nicht 20% eurer Leute mit den gleichen Keys rum rennen weil sie "password" als Passwort benutzen. (Das ist halt das Problem an der Sache - ein schlechtes Passwort killt dann auch gleich die ganze Encryption. Aber das ist auch so wenn ihr einen symmetrischen key aus dem PW herleitet und damit den private key verschlüsselt.)


Anmelden zum Antworten