Ankündigung

Einklappen
Keine Ankündigung bisher.

PGP Webchat - Private Key: Wie am sichersten aufbewahren ohne zusätzliche Add Ons?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PGP Webchat - Private Key: Wie am sichersten aufbewahren ohne zusätzliche Add Ons?

    Hallo, nachdem ich mich mit PGP auseinandergesetzt habe, einige Projekte dazu gegoogelt habe und selbst nutze für Mailverschlüsselung, kam ich auf die Idee, das Grundprinzip in einen verschlüsselten Webchat umsetzen zu wollen.

    Bisheriges Konzept:
    User registriert sich mit Password & E-Mail & Usernamen, es wird automatisiert ein Public & Private Key erstellt, der dem User sofort zum Download angeboten wird und dafür nur temporär auf dem Server erstellt wird. (Nicht gespeichert)

    Zum Einsatz kommt OpenPGP.js (OpenPGP JS Konzept).

    Auf dem Server wird automatisch mit seinem Usernamen eine Mailadresse erzeugt, nennen wir die Mail z.B. dreamcatcher@example.com.
    Der Public Key dieser Mailadresse wird automatisch an die Public Keyserver geschickt (hkp://pool.sks-keyservers.net // hkp://pgp.mit.edu).

    Um die Keyerstellung kümmert sich eigens eine Subdomain, z.B. pgp.example.com, diese liegt auf einen komplett abgeschirmten Server.
    Der Private Key wird dann via HTML 5 Web Storage auf dem Client gelagert.
    Die Subdomain wird benötigt, falls die Hauptdomain kompromittiert wird, damit jedweder Schadcode auf example.com keinen Zugriff auf pgp.example.com erlaubt.

    (HTML 5) Local storage is per domain. All pages, from one domain, can store and access the same data.
    Quelle: http://www.w3schools.com/html/html5_webstorage.asp)
    Die gesendeten Chatnachrichten über example.com werden via Javascript (OepnPGP.js) entschlüsselt, indem der private Key im HTML 5 Web Storage (von pgp.example.com) ausgelesen wird.

    Der Haken den ich noch habe, wenn ich z.B. ein Chatfenster geöffnet habe, example.com/chat/user1, dort ein PGP verschlüsselter Chat stattfindet, kann ich nicht auf den Webstorage von pgp.example.com zugreifen, da es eine 'andere Domain' ist, sofern ich es richtig verstehe.

    Meine Frage:
    Wie kann ich es erreichen, dass der private Key im HTML5 Web Storage ausschließlich von pgp.example.com ausgelesen werden kann, damit sofern die Hauptdomain example.com gehackt/kompromitiert werden sollte, durch Quellcodeänderungen auf example.com der private Key im Webstorage von pgp.example.com nicht ausgelesen werden kann

    und gleichzeitig

    der eigentliche Chat, also das empfangen von verschlüsselten Nachrichten und absenden neuer verschlüsselter Nachrichten ausschließlich über example.com geregelt wird?

    EDIT/UPDATE:
    Anders formuliert möchte ich, dass nur der User Zugriff auf den HTML 5 Web Storage von pgp.example.com hat und die Nachrichten wie gesagt via Javascript Library auch nur lokal entschlüsselt werden.
    Der Server unter www.example.com soll keinen Zugriff darauf haben, er soll lediglich die verschlüsselten Chatnachrichten liefern bzw. neue Nachrichten versenden.

    Seht ihr eine Möglichkeit?
    Ich glaube dass es wahrscheinlich nicht geht, denn einerseits ist das Ziel den private Key auszulesen für die Chatnachrichten von example.com/chat/user1 und andererseits soll er es auch nicht auslesen können, damit Quellcodeänderungen/Hacks auf example.com nicht an den private Key kommen.
    Wohl ein Paradox.

    Ideen, wie man den private Key eventuell auf anderen Wegen besser absichern kann, werden mit offenen Armen begrüßt!

    Ich hoffe auf eine anregende Diskussion!

  • #2
    Gehört dir denn mychat.de?
    Nein?
    Dann verwende sie doch bitte auch nicht als Beispieldomain, dafür gibt es nach RFC extra example.com und andere.
    VokeIT GmbH & Co. KG - VokeIT-oss @ github

    Kommentar


    • #3
      Ich glaube fast daran, dass das hier ein Henne-Ei-Problem wird. Ich kenne mich mit den genauen Regeln von HTML5 Web-Storage nicht aus, solange du nur Daten von der eigenen Domain einsehen kannst ist das Risiko um einiges kleiner.

      Dass du das Problem mit dem Einschleusen von Fremdcode in deine Seite nicht beheben kannst ist logisch. Das kann aber keine Software. In verschiedene OS und Software konnte man schon Dateien "einfügen", die danach ausgeführt wurden. Da musst du sicherstellen, dass du nicht gehackt wirst und den Content sauber filtern.

      Mehr fällt mir auf Anhieb nicht ein.
      [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

      Kommentar


      • #4
        //OT:
        abgesehen davon dass du die keys zu keyservern sendest, wie bust du dein webOfTrust auf?
        in dem von dir geschlilderten ablauf fehlt mir die zuordnung zum mensch (offline) völlig, genauso das problem des unterzeichnen der schlüssel, und probleme von subkeys (mich stört in deiner erklärung das "der schlüssel").

        https://www.gnupg.org/gph/en/manual/c481.html#AEN487

        #
        das speichern im html5 storage mag ja anmgenehm sein, ist aber mE. nahe am worst case der scheinbaren sicherheit.

        derweil: ich würde ernsthaft über certificate nachdenken, da du dmich auch ohne grosse sorgen webzugänge zulassen kannst. die hirachische struktur scheint mir auch offen sichtlicher.

        Kommentar

        Lädt...
        X