Kryptoingenieure
schreien seit Jahrzehnten nach PGP-Mängeln . Wenn gewöhnliche Entwickler dies hören, sind sie äußerst überrascht. Wie ist PGP nicht gut? Warum wird es dann empfohlen, es zu verwenden? Die Antwort lautet: PGP ist wirklich nicht gut und sollte niemandem empfohlen werden. Er muss verschwinden.
Wie Sie bald sehen werden, hat PGP viele Probleme. Wenn Sie nicht auf Details eingehen, ist der Hauptgrund, dass das Programm in den 90er Jahren vor dem Aufkommen der ernsthaften modernen Kryptographie entwickelt wurde. Kein kompetenter Kryptoingenieur wird heute ein System in dieser Form entwickeln und die meisten seiner Fehler in keinem anderen System tolerieren. Seriöse Kryptografen haben PGP im Grunde genommen aufgegeben und verbringen keine Zeit mehr damit (mit einigen
bemerkenswerten Ausnahmen ). Daher bleiben die bekannten Probleme bei PGP seit mehr als zehn Jahren ungelöst.
Zwei kleine Notizen. Erstens wurde der Artikel für Ingenieure geschrieben und nicht für Anwälte und Aktivisten. Zweitens kann „PGP“ eine Menge bedeuten, vom OpenPGP-Standard bis zur Referenzimplementierung in GnuPG. Für all dies verwenden wir den Begriff „PGP“.
Die Probleme
Absurde Komplexität
Aus Gründen, die derzeit niemand versteht, ist PGP paketbasiert. Die PGP-Nachricht (in der .asc-Datei) ist ein Archiv typisierter Pakete. Es gibt mindestens acht verschiedene Möglichkeiten, die Länge eines Pakets zu codieren, je nachdem, ob Sie Pakete im Format "neu" oder "alt" verwenden. Pakete des „neuen Formats“ wie BER haben eine variable Länge (versuchen Sie, eine PGP-Implementierung zu schreiben, und der ASN.1-Codierungsstandard wird Ihnen süß erscheinen). Pakete können Unterpakete haben. Einige Paketoptionen überschneiden sich. Der letzte Angriff auf den Schlüsselserver ist darauf zurückzuführen, dass die GnuPG-Schlüsselanalyse aufgrund dieses unverantwortlichen Formats
versehentlich in quadratischer Zeit erfolgt .
Und das ist nur eine Kodierung. Das reale System ist viel komplizierter. Es gibt Schlüssel und Stecker. Schlüsselkennungen, Schlüsselserver und Schlüsselsignaturen. Schlüssel dienen nur zur Signatur und nur zur Verschlüsselung. Zahlreiche Schlüsselanhänger. Widerruf des Zertifikats. Drei verschiedene Komprimierungsformate. Dass wir die Unterstützung von Smartcards noch nicht erreicht haben.
Schweizer Taschenmesser Design
Wenn Sie sich im Wald verirren und ... ich weiß zum Beispiel nicht, müssen Sie das Revers an Jeans abschneiden - ja, es ist sehr praktisch, wenn Sie eine Schere an Ihrem Messer haben. Aber für ernsthafte Arbeiten wird niemand regelmäßig eine solche Schere benutzen.
Ein Schweizer Taschenmesser macht eine Menge Dinge, und alles ist schlecht. PGP ist ein sehr mittelmäßiges Tool zum Signieren von Dokumenten, es verschlüsselt relativ schlecht mit Passwörtern und funktioniert sehr schlecht mit öffentlichen Schlüsseln. PGP eignet sich nicht besonders für sichere Dateiübertragungen. Dies ist eine ungeschickte Art, Pakete zu signieren. Es ist nicht sehr gut zum Schutz von Backups. Dies ist eine äußerst gefährliche Methode zum Austausch sicherer Nachrichten.
In der Ära von MC Hammer, als PGP erschien, war „Verschlüsselung“ eine besondere Sache für sich. Es gab ein Tool zum Senden von Dateien, Backups, zum Verschlüsseln und Signieren von Dateien. Moderne Kryptographie funktioniert so nicht, wir brauchen spezielle Werkzeuge. Die Kryptografie für sicheres Messaging unterscheidet sich von der Kryptografie für das Sichern oder Signieren von Paketen.
Abwärtskompatibilitätssumpf
PGP geht der modernen Kryptographie voraus und ist in dieser Zeit sehr veraltet. Wenn Sie Glück haben, verfügt Ihr GnuPG standardmäßig über einen 2048-Bit-RSA-Schlüssel, eine 64-Bit-CAST5-Verschlüsselung in CFB und eine OpenPGP-MDC-Prüfsumme (dazu später). Wenn die Verschlüsselung nicht mit einem öffentlichen Schlüssel, sondern mit einem Kennwort erfolgt, legt das OpenPGP-Protokoll den S2K-Schlüsselgenerierungsalgorithmus für PGP fest. Um es milde auszudrücken, dies sind nicht die Grundelemente, die ein Kryptoingenieur für ein modernes System wählen wird.
Wir haben viel gelernt, seit der
Nerd Steve Urkel die Prime Time auf ABC dekoriert hat. Wir haben gelernt, dass verschlüsselte Texte authentifiziert werden sollten (und der CFB-Modus vermieden werden sollte), dass 64-Bit-Blockchiffren schlecht sind, dass RSA nicht perfekt ist, dass eine Kombination aus Komprimierung und Verschlüsselung gefährlich ist und dass KDFs sowohl zeitlich als auch im Speicher streng generiert werden müssen.
Unabhängig davon, was der OpenPGP-RFC sagt, tun Sie wahrscheinlich nichts aus dieser Liste, wenn Sie PGP verwenden, und es ist unmöglich zu sagen, wann die Empfehlungen umgesetzt werden. Nehmen Sie AEAD-Chiffren: Sequoia PGP in Rust ist standardmäßig auf AES-EAX AEAD-Modus eingestellt. Es ist toll. Aber jetzt kann niemand ihre Nachrichten lesen, da die meisten Versionen von PGP nicht wissen, was der EAX-Modus ist, und dies ist nicht sehr cool. In jedem fehlerhaften Kryptosystem ist das Endergebnis eine RFC-Erweiterung, die elliptische Kurven oder AEAD unterstützt, sodass die Unterstützer in den Foren schreien können, dass sie moderne Kryptografie unterstützen. RFC spielt keine Rolle: nur echte Einstellungen. Wir haben vor 20 Jahren die authentifizierte Verschlüsselung erfunden, und PGP wird bald in den Ruhestand gehen. genug Ausreden.
Entweder haben Sie Abwärtskompatibilität mit dem Programm der 90er Jahre oder Sie haben eine gute Kryptographie;
Sie können nicht beide bekommen .
Böse UX
Es ist schwer, es besser zu formulieren als Ted Unangst:
Vor einigen Jahren wurde eine PGP-Usability-Studie durchgeführt, in der eine Gruppe technischer Experten in einem Raum mit einem Computer untergebracht und gebeten wurde, PGP zu konfigurieren. Zwei Stunden später hatte noch keiner von ihnen geantwortet.
Wenn Sie Ihre eigenen empirischen Daten benötigen, um dies zu bestätigen, können Sie Folgendes experimentieren: Suchen Sie einen Anwalt, der weit von Computern entfernt ist, und helfen Sie ihm, Signal telefonisch zu installieren. Er wird wahrscheinlich ohne Hysterie zurechtkommen. Versuchen Sie dies nun mit PGP.
Langfristige Geheimnisse
PGP fordert Benutzer auf, den Stammschlüssel fast für immer an ihre Identität gebunden zu halten. Das Generieren und Austauschen von Schlüsseln ist bei diesen „Schlüsselsignaturpartnern“ und dem „Vertrauensnetzwerk“, bei dem die Schlüssel von anderen Schlüsseln abhängen, umständlich.
Langzeitschlüssel sind fast immer unangenehm . Wenn Sie den Schlüssel weiterhin verwenden, wird er schließlich öffentlich. Unter dem Gesichtspunkt eines kompetenten Systemdesigns ist es notwendig, Schäden zu minimieren und sicherzustellen, dass der Benutzer keine Sekunde zögert, wenn er über die Generierung eines neuen Schlüssels nachdenkt, wenn zumindest einige Bedenken hinsichtlich der Sicherheit des aktuellen Schlüssels bestehen.
PGP-Fans werden sofort antworten: "Deshalb müssen Sie die Schlüssel auf Yubikey behalten." Nach einer schnellen groben Schätzung verwendet jedoch fast niemand auf der Welt teure Yubikeys, und es ist unwahrscheinlich, dass sich dies in Zukunft ändern wird (wir können U2F kaum bereitstellen, und diese Schlüssel sind verfügbar). Wir können keine schlechten Kryptosysteme akzeptieren, nur um Unix-Nerds das Spielen mit ihren Spielsachen zu erleichtern.
Unterbrochene Authentifizierung
Weitere Informationen zu den archaischen Grundelementen von PGP: Bereits im Jahr 2000 erkannte die OpenPGP-Arbeitsgruppe, dass verschlüsselter Text authentifiziert werden musste und PGP-Signaturen nicht. Daher hat OpenPGP
das MDC-System erfunden: PGP-Nachrichten mit MDC hängen den Klartext SHA-1 an den Klartext selbst an, der dann (wie üblich) im CFB-Modus verschlüsselt wird.
Wenn Sie sich fragen, wie PGP damit umgeht, wenn moderne Systeme relativ komplexe AEAD-Schemata verwenden (weil sie SHA-1 nicht einfach an Klartext anhängen können), ist dies eine gute Frage. Wie würden Sie diesen Cartoon beschreiben? PGP MDC kann von Nachrichten gelöscht werden - es ist so codiert, dass es recht einfach ist, die letzten 22 Bytes des Chiffretextes abzuschneiden. Um die Abwärtskompatibilität mit unsicheren alten Nachrichten zu gewährleisten, hat PGP einen neuen Pakettyp eingeführt, der die Notwendigkeit einer MDC-Überprüfung signalisiert. Wenn Sie den falschen Typ verwenden, wird MDC nicht aktiviert. Selbst wenn Sie dies tun, kommt das neue SEIP-Paketformat dem unsicheren SE-Format ziemlich nahe, was den Empfänger möglicherweise dazu verleiten könnte, die Verschlüsselung zu verringern.
Trevor Perrin hat SEIP auf nur 16 Bit Sicherheit reduziert .
Selbst wenn alles richtig läuft, erzeugt die PGP-Referenzimplementierung auf Anfrage
nicht authentifizierten Klartext,
auch wenn der MDC nicht übereinstimmt .
Inkonsistente Identitäten
PGP ist eine Anwendung, eine Reihe von Integrationen mit anderen Anwendungen sowie ein Dateiformat, ein soziales Netzwerk und eine Subkultur.
PGP schlägt das Konzept der kryptografischen Identität vor. Sie erstellen einen Schlüssel, speichern ihn in einem Schlüsselbund, drucken seinen Fingerabdruck auf eine Visitenkarte und veröffentlichen ihn auf dem Schlüsselserver. Sie unterschreiben die Schlüssel eines anderen. Sie können sich wiederum auf Ihre Signaturen verlassen oder nicht, um andere Schlüssel zu überprüfen. Einige Leute versuchen, sich persönlich mit anderen PGP-Benutzern zu treffen, um Schlüssel auszutauschen und sich sicherer in diesem „Vertrauensnetzwerk“ zu registrieren. Andere organisieren wichtige Unterzeichnungspartys. Wenn Sie sich all diese Aktivitäten vorstellen, wird deutlich, wie schwierig es für engagierte PGP-Fans ist, auf neue Technologien umzusteigen.
Aber dieses ganze System funktioniert in der Praxis nicht. Weder ein Vertrauensnetzwerk mit Schlüsselsignaturen noch Schlüsselserver oder Parteien. Normale Leute werden alles vertrauen, was wie ein PGP-Schlüssel aussieht, egal woher er kommt - wie können sie nicht vertrauen, selbst wenn es für einen Experten schwierig ist, zu formulieren, wie der Schlüssel zu bewerten ist? Experten vertrauen keinen Schlüsseln, die sie nicht persönlich erhalten haben. Alle anderen verlassen sich auf zentralisierte Schlüsselverteilungsdienste. PGP-Schlüsselverteilungsmechanismen sind ein Zirkus.
Metadatenlecks
Vergessen Sie für eine Sekunde das E-Mail-Debakel (wir werden später darauf zurückkommen). PGP selbst kann Metadaten verlieren. Bei normaler Verwendung werden Nachrichten direkt mit Schlüsselkennungen verknüpft, die der Benutzerkennung im gesamten PGP-Vertrauensnetzwerk zugeordnet sind. Darüber hinaus verwendet ein relativ großer Teil der PGP-Benutzer Schlüsselserver, die selbst an das Netzwerk ausgegeben werden und von denen PGP-Benutzer Nachrichten miteinander austauschen.
Keine direkte Geheimhaltung
Ein typisches Beispiel: Kryptografie für sicheres Messaging erfordert Vorwärtsgeheimnis. Direkte Geheimhaltung bedeutet, dass ein Angreifer, der Ihren Schlüssel erhält, frühere Nachrichten immer noch nicht lesen kann. In der modernen Kryptographie nehmen wir an, dass der Gegner alles in unendlichen Speicher schreibt. Zu den Gegnern der PGP gehören die Regierungen der Welt. Natürlich tun einige von ihnen dies. Gegen ernsthafte Gegner ist das Hacken von Kryptografie ohne direkte Geheimhaltung nur eine Frage der Zeit.
Um in der Praxis eine direkte Geheimhaltung zu gewährleisten, bewahren Sie normalerweise zwei geheime Schlüssel auf: einen kurzfristigen Sitzungsschlüssel und einen langfristig vertrauenswürdigen Schlüssel. Der Sitzungsschlüssel ist kurzlebig (normalerweise ein DH-Austauschprodukt), und der vertrauenswürdige Schlüssel signiert ihn, sodass die Person in der Mitte ihren eigenen Schlüssel nicht verwenden kann. Theoretisch kann mit PGP-Tools eine direkte Geheimhaltung erreicht werden. Natürlich macht das fast niemand.
Axtschlüssel
Der öffentliche OpenBSD-Schlüssel ist eine Base64-Zeichenfolge, die kurz genug ist, um in die Mitte eines Satzes in einer E-Mail zu passen. Ein privater Schlüssel, der kein Austauschformat ist, ist nur eine Zeichenfolge oder so. Und der öffentliche PGP-Schlüssel ist ein gigantisches Base64-Dokument. Wenn Sie sie häufig verwendet haben, sind Sie wahrscheinlich bereits daran gewöhnt, sie in einen Anhang zu stecken, anstatt sie in Nachrichten einzufügen, um sie nicht zu beschädigen. Der Signify-Schlüssel wird vom erweiterten Ed25519-Algorithmus und PGP vom schwächeren RSA generiert.
Sie könnten denken, dass es keine Rolle spielt, aber es ist wichtig; Größenordnungen mehr Menschen verwenden SSH und verwalten SSH-Schlüssel als PGP. SSH-Schlüssel sind trivial zu handhaben; PGP - nein.
Versöhnung
PGP unterstützt ElGamal-, RSA-, NIST-p-Kurven, Brainpool, Curve25519, SHA-1, SHA-2, RIPEMD160, IDEA, 3DES, CAST5, AES. Dies ist keine vollständige Liste der von PGP unterstützten Funktionen.
Wenn wir in den letzten 20 Jahren drei wichtige Dinge über Kryptographie gelernt haben, mindestens zwei davon, dann sind Versöhnung und Kompatibilität böse. In der Regel treten die Mängel von Kryptosystemen eher in Implementierungen als in Grundelementen auf, und eine expansive Kryptokompatibilität erhöht die Anzahl der Implementierungen. Moderne Protokolle wie TLS 1.3 versuchen, die Abwärtskompatibilität mit Archaismen wie RSA zu beseitigen, anstatt sie hinzuzufügen. Neuere Systeme unterstützen
nur einen Satz von Grundelementen und eine einfache Versionsnummer. Wenn eines dieser Grundelemente fehlschlägt, werden Sie diese Version entfernen und das gesamte alte Protokoll sofort löschen.
Wenn wir kein Glück haben und die Menschen nach 20 Jahren immer noch PGP verwenden, bleibt dies der einzige Grund, warum der CAST5-Standard zumindest irgendwo angewendet wird. Wir können das nicht klarer sagen, und wir müssen es viele Male wiederholen: Entweder Sie haben Abwärtskompatibilität mit dem Programm der 90er Jahre oder Sie haben eine gute Kryptographie; Sie können nicht beide bekommen.
Papierkorbcode
Die De-facto-Standardimplementierung von PGP ist GnuPG. Dieses Programm ist nicht sehr ordentlich geschrieben. Es gibt eine umfangreiche Codebasis in C-Sprache mit doppelten Funktionen (in der Beschreibung eines kürzlich erfolgten Denial-of-Service-Angriffs auf SKS-Parsing wird angegeben, dass mehrere Schlüsselparser vorhanden sind) mit einer langen CVE-Erfolgsbilanz, die von Speicherbeschädigung bis zu kryptografischem Angriff reicht über Kanäle von Drittanbietern. Manchmal war es möglich, die Authentifizierung aus Nachrichten zu entfernen, aber GnuPG bemerkte dies nicht. Sie könnten ihm die Schlüssel ohne den richtigen Fingerabdruck geben. Im Jahr 2018 wurde die Efail-Sicherheitsanfälligkeit durch die Tatsache verursacht, dass GnuPG auf Anfrage nicht authentifizierten Klartext bereitstellte. GnuPG ist nicht gut.
GnuPG ist sowohl die Referenzimplementierung für PGP als auch die Grundlage für die meisten anderen PGP-Kryptografie-Integrationstools. Er geht nirgendwo hin. Sich auf PGP zu verlassen bedeutet, sich auf GPG zu verlassen.
Die Antworten
Um eine Person davon zu überzeugen, PGP aufzugeben, ist es wichtig, ihr zu erklären, dass PGP nichts zu ersetzen hat,
und das ist normal . Ein alternatives Werkzeug hängt von der Aufgabe ab.
Gespräche
Signal verwenden. Oder Wire oder WhatsApp oder ein anderer sicherer Messenger, der auf dem Signalprotokoll basiert.
Moderne sichere Messenger wurden speziell für Messaging entwickelt. Sie verwenden vertrauliche Authentifizierungs-Handshakes, Nachrichtenstornierungen,
kryptografische Ratschen , die für jeden Nachrichtenaustausch einen Schlüssel ausgeben, und natürlich moderne Verschlüsselungsprimitive. Messenger sind einfach zu bedienen, ohne viel Aufhebens um Schlüssel und Unterschlüssel. Wenn Sie Signal verwenden, erhalten Sie noch mehr: Sie erhalten ein System, das so paranoid ist, private Metadaten von Servern zu speichern, dass es sogar Giphy-Suchanfragen tunnelt, um Angriffe auf Verkehrsanalysen zu vermeiden, und bis vor kurzem nicht einmal Benutzerprofile unterstützt.
E-Mail-Verschlüsselung
Tu das nicht.
E-Mail ist nicht sicher . Selbst bei PGP handelt es sich standardmäßig um Klartext. Das heißt, selbst wenn Sie alles richtig machen, zitiert ein völlig vernünftiger Empfänger des Briefes, der absolut vernünftige Dinge tut, notwendigerweise den Klartext Ihrer verschlüsselten Nachricht an eine andere Person in CC (wir kennen den E-Mail-Benutzer nicht) PGP-Mail, die nicht darauf gestoßen ist). Die PGP-E-Mail enthält keine direkte Geheimhaltung. E-Mail-Metadaten, einschließlich des Betreffs (der buchstäblich den Inhalt der Nachricht darstellt), werden immer im Klartext übertragen.
Wenn Sie einen anderen Grund benötigen, lesen Sie den
Artikel zur
Efail-Sicherheitsanfälligkeit . Die GnuPG-Community, die
keine Informationen über Efail veröffentlicht hat , kritisiert diesen Artikel heftig, wurde jedoch von Usenix Security (einem der besten akademischen Zentren für Software-Sicherheit) und Black Hat USA (der führenden Software-Sicherheitskonferenz) akzeptiert. Dies ist einer der besten kryptografischen Angriffe der letzten fünf Jahre - und eine ziemlich zerstörerische Bombe gegen das PGP-Ökosystem. Wie Sie dem Artikel entnehmen können, ist S / MIME nicht besser.
Es wird niemals behoben. Um wirklich sichere E-Mails zu erstellen, müssen Sie ein anderes Protokoll per E-Mail tunneln (Sie sind weiterhin anfällig für Angriffe mit Verkehrsanalysen). Das ist nur der Punkt, warum so tun?
Das Verschlüsseln von E-Mails ist ein Klickproblem. Das Ermutigen von Benutzern, E-Mails zu verschlüsseln, wenn etwas sie bedroht, ist außergewöhnliche Nachlässigkeit. Jeder, der Sie über die Sicherheit der E-Mail-Kommunikation mit PGP-Verschlüsselung informiert, stellt seine seltsamen Einstellungen über Ihre Sicherheit.
Dateien senden
Verwende das
magische Wurmloch . Wurmloch-Clients verwenden die einmalige Schlüsselauthentifizierung mit Kennwortauthentifizierung (PAKE), um Dateien zu verschlüsseln. Es ist einfach (zumindest für Nerds), sicher und macht Spaß: Jeder, dem wir das „Maulwurfsloch“ gezeigt haben, hat sofort begonnen, alle Dateien hintereinander zu durchlaufen, so wie wir es tun.
Jemand startet sofort das Installationsprogramm für Windows auf Rust oder Go. Dies ist ein zu cooles Programm, um es nicht zu verwenden.
Wenn Sie mit Anwälten und nicht mit Ingenieuren sprechen, leistet Signal hervorragende Arbeit bei der Dateiübertragung. Veröffentlichen Sie für die Fehlerberichterstattung die Signalnummer und nicht den PGP-Schlüssel.
Backup-Verschlüsselung
Verwenden Sie Tarsnap.
Colin wird erklären, wie Tarsnap für den Schutz von Backups optimiert ist . Oder nehmen Sie ein anderes Backup-Verschlüsselungstool.
Es wird nicht so gut wie Tarsnap sein, aber es wird immer noch besser als PGP.Benötigen Sie Offline-Backups? Verwenden Sie die Disk-Image-Verschlüsselung. Es ist in moderne Versionen von Windows, Linux und MacOS integriert. Die vollständige Festplattenverschlüsselung ist nicht sehr gut, erledigt diese Aufgabe jedoch hervorragend und ist einfacher und sicherer als PGP.Paketsignatur
Ihre Sie Signify / Minisign. Ted Unangst wird dir alles erledigt . Mit diesem Tool werden in OpenBSD signiert. Es ist sehr einfach und moderne moderne Signaturen an. Frank Denis Minisign (unter der libsodium-entwickel) unterscheidet das gleiche Design unter Windows und MacOS. Es besteht darin, Go, Rust, Python, Javascript und .NET zu ändern. Es ist sogar mit Signify kompatibel.Anwendungsdatenverschlüsselung
Wie Sie eine libsodium : Dies ist eine universelle Bibliothek mit einer Schnittstelle, in der es ist ist, Fehler zu machen und Sie unterscheiden keine Binärdatei, um zu arbeiten.Dateiverschlüsselung
Das ist wirklich ein Problem. Wenn Sie über / not / backup, / not / archive für die langfristige Offline-Speicherung, / not / Dateiverschlüsselung für die Übertragung und / not / Verschlüsselung von virtuellen Laufwerken verfügen, die Sie nach Bedarf mounten / unmounten, gibt es kein gutes Tool dafür Dateien verschlüsseln. Für andere Zwecke entwickelt Filippo Walsorda ein Alterswerkzeug , das vielversprechend, aber noch nicht fertig ist.Hoffentlich ist dies ein ziemlich enger Anwendungsfall. Wir arbeiten im Bereich der Software-Sicherheit und verarbeiten vertrauliche Daten, einschließlich Fehlerberichte (ein weiterer sehr häufiger Fall, wenn sie "Wir brauchen PGP!" Rufen), verwenden PGP jedoch fast nie.