openpgp und Sicherheit des private-keys

sanbiber

Well-Known Member
Hallo,

ich habe mal eine Frage bezueglich der Sicherheit des private-keys zum Verschluesseln.

In vertrauenswuerdigen Umgebungen (z.B. zu Hause im LAN auf von mir kontrollierten Maschinen) setze ich PGP gelegentlich ein um Daten zu verschluesseln (z.B. Mails). Nun frage ich mich, wie sicher es ist auch in unbekannten Umgebungen (Arbeit, Internetcafe, auf Remote-Maschinen, bei Bekannten, ...) PGP einzusetzen. Gibt es da ein best-practice? Ich braeuchte ja in jedem Fall meinen private key auf der Maschine, auf der ich verschluesseln will. Das wird es mir schon ein bisschen mulmig. Aber ein potentieller Dieb meines private keys koennte ihn noch nicht zum entschluesseln oder signieren benutzen. Da ich aber in einer unbekannten Umgebung arbeite, koennte dort ja alles gemacht werden, um an den pass-phrase zu kommen (Auslesen des Arbeitsspeichers, Keylogger, ...). Also was tun?

sanbiber
 

Kamikaze

Warrior of Sunlight
Du solltest auf nicht vertrauenswürdigen Endgeräten einen anderen Private Key verwenden.
 

h^2

hat ne Keule +1
Der private key sollte nur von vertrauenswürdigen Geräten entschlüsselt werden. Alles andere ist Quatsch.
Ich betrachte zB mein Androidtelefon schon als nicht-vertrauenswürdig, deswegen kommt der key da nicht drauf, obwohl das eigentlich schön wäre.
 

h^2

hat ne Keule +1
Du solltest auf nicht vertrauenswürdigen Endgeräten einen anderen Private Key verwenden.
Das habe ich auch oft als Idee gehört, bringt mE aber nichts. Denn,
1) suggeriert ein valider PGP-key deinen Kommunikationspartner, dass die Kommunikation sicher ist (was in diesem Fall ja offensichtlich nicht von dir angenommen wird);
2) werden viele dazu übergehen, alle nachrichten an dich mit beiden Schlüsseln zu verschlüsseln, was dann genauso unsicher ist, als wenn man einen Schlüssel nimmt und den auf dem nicht-vertrauenswürdigen Gerät hat.

Zumindest mein Eindruck.
 

Kamikaze

Warrior of Sunlight
Du kannst den 2. Schlüssel mit weniger Trust signieren (tentative). Dann haben die Leute die Dir schreiben die Wahl ob Sie sich für hohe Verfügbarkeit oder hohe Sicherheit entscheiden.
 

m4rkus

Well-Known Member
Die zwei Faktoren wurden ja bereits angesprochen.
Wenn du deinen Key auf einer Smartcard hast, verlässt dieser die Smartcard nie und wird lediglich zur Signatur / Entschlüsselung verwendet.
Die Einsatzmöglichkeiten von Smartcard-Readern sind allerdings in Internet-Cafes ebenfalls begrenzt (keine Treiber installieren, zwielichtige Typen, die dir die Smartcard klauen und die mitgeloggte PIN verwendet ... :))

Eine andere Möglichkeit wäre, wenn du einen zweiten Key (wie Kamikaze vorgeschlagen hast) auf einem von dir verwalteten Server platzierst und dort roundcube mit passendem Plugin installierst (PGP). Wenn du den Zugang zum Webserver noch mittels google-Authenticator oder anderer OTP-Lösung absicherst, hättest du einen recht guten Schutz.

Gruß
Markus
 

nakal

Anfänger
Hmm... verstehe ich was falsch?

Zum Verschlüsseln brauchst Du keinen privaten Schlüssel. Der private Schlüssel sollte stets mit einer Geheimparole geschützt werden. Eine Geheimparole sollte nie irgendwo eingetippt werden, wo Spionage vermutet wird (insbesondere gehört typischerweise das Handy dazu, sofern es auf einem geschlossenen System basiert... und das sind fast alle).
 

m4rkus

Well-Known Member
Du hast es schon richtig verstanden.
Der private Schlüssel wird für zwei Dinge benötigt: Entschlüsseln und Signieren.

Gruß
Markus
 

Daemotron

Well-Known Member
Eine andere Möglichkeit wäre, wenn du einen zweiten Key (wie Kamikaze vorgeschlagen hast) auf einem von dir verwalteten Server platzierst und dort roundcube mit passendem Plugin installierst (PGP).
Habe ich verpasst, dass es für Roundcube mittlerweile ein PGP-Plugin gibt, das serverseitig (nicht mit OpenPGP.js) arbeitet? Bei Niklas' Lösung (https://github.com/qnrq/rc_openpgpjs) liegt der Schlüssel ja auf dem Client, was wiederum einen vertrauenswürdige Client-Umgebung voraussetzen würde...
 

m4rkus

Well-Known Member
Sorry, hatte mal irgendwas gelesen und schnell gegoogled und bin davon ausgegangen, dass es ein Plugin gibt. Scheinbar war das etwas vorschnell :(

Gruß
Markus
 

m4rkus

Well-Known Member
Wenn du es so siehst natürlich.
Fraglich ist halt, ob du ohne Signatur verschlüsselte Nachrichten losschicken möchtest.
Ein potentieller Angreifer kann dann beliebigen Schadcode verschlüsseln und in deinem Namen versenden.
Für eine reine Verschlüsselung (einer Nachricht) wird nur der öffentliche Schlüssel (des Empfängers) benötigt.

Gruß
Markus
 

nakal

Anfänger
Ja das stimmt.

Aber da muss man erstmal überlegen. Befürchtest Du, dass jemand Dir Backups unterschiebt? Ist dieses Szenario realitätsnah? Wenn ja, dann musst Du Dir einen separaten geheimen Schlüssel generieren, der nur zum Signieren gedacht ist und ihn, auf dem Rechner wo Backups gemacht werden, entsprechend absichern. Ich würde aber nicht meinen persönlichen geheimen Schlüssel irgendwo hin transferieren. Das mit dem Signieren mit Zweitschlüssel/Unterschlüssel klappt schon mal, wenn Du selbst Admin bist.

Wenn jemand anders Admin ist, auf der Kiste wo Du signierst, dann hast Du leider schlechte Karten. Signieren kann grundsätzlich nur in einer sicheren Umgebung geschehen. Du kannst dem Admin das Hacken des Systems mit einigen Strategien erschweren, aber so richtig wasserdicht ist von der Theorie her gar nichts.
 

k_e_x

Well-Known Member
Die zwei Faktoren wurden ja bereits angesprochen.
Wenn du deinen Key auf einer Smartcard hast, verlässt dieser die Smartcard nie und wird lediglich zur Signatur / Entschlüsselung verwendet.
Die Einsatzmöglichkeiten von Smartcard-Readern sind allerdings in Internet-Cafes ebenfalls begrenzt (keine Treiber installieren, zwielichtige Typen, die dir die Smartcard klauen und die mitgeloggte PIN verwendet ... :))

Eine andere Möglichkeit wäre, wenn du einen zweiten Key (wie Kamikaze vorgeschlagen hast) auf einem von dir verwalteten Server platzierst und dort roundcube mit passendem Plugin installierst (PGP). Wenn du den Zugang zum Webserver noch mittels google-Authenticator oder anderer OTP-Lösung absicherst, hättest du einen recht guten Schutz.

Dazu möchte ich noch kurz zwei Sachen loswerden:
1) Smartcard ist eine gute Sache -- aber nur -- wenn sie auch mit einem PinPad-Smartcard reader genutzt wird und die eigentliche Anwendung SPE (Secure Pin Entry) unterstützt, denn nur dann ist sichergestellt, dass die PIN nicht per KeyLogger am PC mitgelesen werden kann (sofern der eigentliche Smartcard Reader nicht hardwareseitig modifiziert wurde). Die Sache hat dennoch ein Detailproblem: Zum Signieren muss ein Hash berechnet werden, das kann entweder auf dem PC (schnell) oder in der Smartcard (langsamer). Sofern auf dem PC gehasht wird, wird nur dieser an die Smartcard geschickt und signiert -- wobei man den Hash üblicherweise nicht auf dem Display angezeigt bekommt und man so theoretisch eine fremde-gehashte-Nachricht signiert. Und selbst wenn man die Nachricht komplett an die Smartcard geschickt wird, wird das üblicherweise nur Blockweise (APDU-chaining) gemacht, so dass man auch hier nicht ganz sicher sein kann, was man eigentlich gehasht hat. Auf die Sicherheit des Schlüssels hat das natürlich keinen Einfluss.

2) OTP: gute Idee und sollte viel weiter verbreitet sein! Inwiefern es jedoch sinnvoll ist einen private key auf einen Server zu legen der 24/7 erreichbar ist ... auch hier müsste man dann so konsequent sein und den Schlüssel in ein HSM ablegen.
 

m4rkus

Well-Known Member
@k_e_x: Punkte stimmen natürlich - war eine Quick and Dirty Lösung. Wenn die PIN geloggt wird, hat der Angreifer jedoch nicht die Smartcard, also 1 Faktor bleibt "sicher" (sofern der Internetcafe-Besitzer nicht noch nebenbei Schlägertrupps engagiert :))

OTP hab ich persönlich auch für selbst eingerichtet, damit meine Frau von unterwegs auf unser NAS zugreifen kann. Ohne OTP (Token + PIN) kommt sie nicht auf das NAS.

Schlüssel auf Server ist IMMER nur eine Notlösung. Die qualitative Integration von HSM-Boxen ist immer so eine Sache.
Eher OT aber dennoch ein alltägliches Problem: Webserver SSL-Zertifikate. In der Regel liegen die OHNE Passphrase auf den Servern / Loadbalancern, damit ein Service-Restart "mal eben" geht und bei einem Reboot (Clusterschwenk o.ä.) keine manuelle Interaktion notwendig ist.

Gruß
Markus
 
Oben