Sequoia Stagg in Alder Creek, Kalifornien
2018 begannen drei ehemalige GnuPG-Entwickler mit der Arbeit am Sequoia- Projekt , einer Implementierung von OpenPGP in Rust. Wie Sie wissen, ist OpenPGP ein offener Datenverschlüsselungsstandard, der häufig für sichere E-Mails verwendet wird. und GnuPG ist die Referenzimplementierung dieses Standards.
Die Entwickler selbst gaben die Motivation für die Erstellung einer neuen OpenPGP-Bibliothek an:
- GnuPG ist schwer zu modifizieren. Der Code und die API haben sich über 21 Jahre angesammelt. Es gibt keine Unit-Tests. Die Komponenten sind eng miteinander verbunden. Die Architektur lässt zu wünschen übrig und einfaches Refactoring hilft nicht weiter.
- Viele Entwickler sind mit den GnuPG-APIs unzufrieden. Das GnuPG-Befehlszeilentool und die entsprechenden Programmierbibliotheken verfügen über unterschiedliche Funktionen, wobei einige Befehle nur über die Befehlszeile verfügbar sind.
- Rust ist eine speichersichere Sprache, die automatisch eine ganze Klasse von Fehlern beseitigt.
- GnuPG kann unter iOS aufgrund von GPL-Einschränkungen nicht verwendet werden.
Die GPLv2-lizenzierte Sequoia-Bibliothek nähert sich jetzt Version 1.0 , obwohl noch einige Probleme zu lösen sind .
GnuPG-Kritik
Die neue Bibliothek sollte frei von den Mängeln von GnuPG sein. Obwohl beachtet werden sollte, dass es neben der "Referenz" -Implementierung von OpenPGP noch andere gibt, einschließlich OpenKeychain , OpenPGP.js und RNP .
GnuPG wird seit Jahren kritisiert . Es wurde für seine absurde Komplexität, ein universelles Schweizer Messerdesign, kritisiert: GnuPG macht alles andere als schlecht, einschließlich digitaler Signaturen, Passwortschutz, Verschlüsselung mit öffentlichen Schlüsseln, sicherer Dateiübertragung, Paketsignierung, Sicherungsschutz, Chat-Nachrichten usw. .d. Es wird angenommen, dass in der Neuzeit spezielle Tools benötigt werden: eine separate Bibliothek für sicheres Messaging, eine separate Bibliothek zum Signieren von Paketen, eine separate Bibliothek zum Verschlüsseln von Dateien (wie ein Dienstprogramm)Wut geschrieben in Rust) und so weiter. Und nicht alle dieser Dienstprogramme müssen vollständig PGP-kompatibel sein.
Das Streben von OpenPGP nach Abwärtskompatibilität mit Chiffren der 90er Jahre wurde kritisiert, was bedeutet, dass die Standardeinstellungen nicht den modernen Best Practices für starke Kryptografie entsprechen und Sicherheit immer über Verhandlungsprotokolle möglich ist. Das Problem ist, dass es unmöglich ist, gleichzeitig die Abwärtskompatibilität aufrechtzuerhalten und die moderne zuverlässige Kryptographie einzuhalten.
Wir haben bereits den Müllcode erwähnt: „Die De-facto-Standard-PGP-Implementierung ist GnuPG. Dieses Programm ist nicht sehr ordentlich geschrieben. Es gibt eine umfangreiche C-Codebasis - eine Sprache mit doppelten Funktionen (z. B. ein kürzlich durchgeführter Denial-of-Service-Angriff auf SKS-Parsing mit mehreren Schlüsselparsern) mit einer langen CVE-Erfolgsbilanz, die von Speicherbeschädigung bis hin zu kryptografischen Angriffen reicht über Seitenkanäle. Manchmal war es möglich, die Authentifizierung aus Nachrichten zu entfernen, ohne dass GnuPG dies bemerkte. Sie hätten ihm die Schlüssel ohne den richtigen Fingerabdruck geben können. Im Jahr 2018 wurde die Efail-Sicherheitsanfälligkeit dadurch verursacht, dass GnuPG auf Anfrage nicht authentifizierten Klartext bereitstellt “, schreibt Latacora.
Ein weiteres Problem ist die (Un-) Benutzerfreundlichkeit.
Vor einigen Jahren wurde eine PGP-Usability-Studie durchgeführt, in der eine Gruppe von Technikern in einem Raum mit einem Computer untergebracht und gebeten wurde, PGP zu konfigurieren. Zwei Stunden später kam noch keiner von ihnen heraus. - Ted Unangst , OpenBSD- und LibreSSL-Entwickler
Andere Beschwerden sind die Unsicherheit der Langzeitspeicherung desselben Schlüssels, das völlig schwache MDC- Chiffretext-Authentifizierungssystem , mangelnde Geheimhaltung und ungeschickte Riesenschlüssel.
Sequoia-Projekt
Sequoia ist ein modernes OpenPGP-Toolkit, das viele dieser Probleme löst, schreibt LWN. Sequoia wurde bereits von mehreren anderen Projekten übernommen, darunter keys.openpgp.org , OpenPGP CA , koverto , Pijul und KIPA .
Das Projekt wird von den Stiftungen p≡p (pep) und Wau Holland finanziert , wobei alle Entwicklungen Open Source sind .
Die neue Bibliothek konzentriert sich auf Sicherheit und Korrektheit und verwendet gleichzeitig die zuverlässigste moderne Kryptographie. Die Entwickler versprechen leistungsstarke Tools, darunter ein Befehlszeilenprogramm und Unterbefehle im Git-Stil.
$ echo hi | sq encrypt --recipient neal
-----BEGIN PGP MESSAGE-----
wcBMA8K4GQVsZSWYAQgAllrQ+9490eoFdB/jLrVvGl+IVtGJWPFDg9uhcl0D8k05
AWz8ZU2sd6GzoCH1nRpwASJWHxloNbPgvxhNRRVReg3GgfFwMkcoNJ2Xb4zocvx+
niH7ZlP9Py6kseuqtjhQZEyvtIfWc58TK9DRdPp5suzS3Y9Zbew9vC2N2u+8YsKL
BbbminTZqLYbt/00ZT/ZuDbtHhoDUxlnCK2Y2R6NZvuvwS1ujI0EOfdOagZO0z5k
hs8U9Xgk1/BWpQtKn3ygMDO0401nBBbwNgialcu/8yFS+wXoifRaj60Cbxhjv2/G
aTcl9loYpN93BL0a7EbKmcwDl14HwosKdkMj4Px25dI0AZjLxI7TBX18e+hBu5vr
q83G7aEwllpiDU3z+rFXBjsWDOwP2UBf05D/Bl05eSYx4x7UnQ==
=qAvC
-----END PGP MESSAGE-----
Eine übersichtliche Schnittstelle für die Parser- und Paketinspektion sowie Hex-Dumps wurden implementiert, die jetzt in der Online-Demo angezeigt werden können .
$ sq packet dump --hex message.pgp
New CTB, 13 bytes: One-Pass Signature Packet
Version: 3
Type: Binary
Pk algo: EdDSA Edwards-curve Digital Signature Algorithm
Hash algo: SHA512
Issuer: 83F8 2E4F E9A5 E098
Last: true
00000000 c4 0d frame
00000002 03 version
00000003 00 sigtype
00000004 0a hash_algo
00000005 16 pk_algo
00000006 83 f8 2e 4f e9 a5 e0 98 issuer
0000000e 01 last
Im Gegensatz zu GnuPG, wo das Befehlszeilentool gpg leistungsfähiger als die Bibliothek ist, ist Sequoia in erster Linie eine Bibliothek. Alle Funktionen sind über offene APIs verfügbar. Das Projekt sieht vor, zwei "Ebenen" von APIs bereitzustellen: eine Implementierung der OpenPGP-Spezifikationen auf niedriger Ebene und eine API auf hoher Ebene mit angemessenen Standardeinstellungen, um Benutzern die Ausführung allgemeiner Aufgaben wie das Signieren von Paketen und das Überprüfen von Signaturen zu erleichtern:
$ sqv --trace --keyring tails-signing.key \
tails-amd64-3.11.iso.sig tails-amd64-3.11.iso
Will check signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Found key A8B0 F4E4 5B1B 50E2.
Checking signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Signature by A8B0 F4E4 5B1B 50E2 is good.
A490 D0F4 D311 A415 3E2B B7CA DBB8 02B2 58AC D84F
1 of 1 signatures are valid (threshold is: 1).
$ echo "Just check the exit status: $?"
Just check the exit status: 0
Trotz der einfachen Implementierung der OpenPGP-Spezifikationen haben die Entwickler einige veraltete und gefährliche Standards wie MD5-Hashes beseitigt.
Bereits vor Beginn der Initiative trafen sich die Gründer des Projekts mit prominenten Mitgliedern der OpenPGP-Community und Endbenutzern, um Pläne für das Projekt zu besprechen und sicherzustellen, dass ihr Ansatz tatsächlich gerechtfertigt ist. Die aktive Entwicklung ist im Gange. Gemessen an den Einträgen im Repository und im Tracker gibt es ungefähr 30 Teilnehmer, und seit der Ankündigung der Vorbereitung der Version 1.0 im April 2020 wurden drei Veröffentlichungen vorgenommen. Die letzte Version 0.19.0 wurde im August 2020 veröffentlicht - die bemerkenswerteste Verbesserung ist die Integration der Windows-Kryptografie-API: Next Generation als Backend(CNG) anstelle von Brennnessel, die in Nicht-POSIX-Umgebungen Probleme hat.
Für zusätzliche Sicherheit plant Sequoia die Prozesstrennung zwischen öffentlichen und privaten Schlüsseldiensten (wie bei gpg-agent). Hier wird für die Interprozesskommunikation das Cap'n Proto- Serialisierungsprotokoll eingeführt - dies ähnelt Protokollpuffern, nur schneller.
In der Präsentation weisen die Entwickler darauf hin, dass die Trennung von Prozessen beispielsweise in iOS-Umgebungen nicht immer möglich ist. Wenn es nicht verfügbar ist, plant Sequoia, eine gemeinsam genutzte SQLite-Datenbank für die Kommunikation zwischen Diensten im Prozess als eine Art Colocation zu verwenden.
Sequoia verfolgt einen konzeptionell anderen Ansatz für öffentliche Schlüsselanhänger: Sie sind so konzipiert, dass sie "eher einem Adressbuch als einem PGP-Schlüsselbund ähneln". Schlüssel werden durch Benutzerkennungen ( Kosename ) gespeichert , mit der Möglichkeit, beliebig strukturierte Daten zu binden, die bei der Implementierung von Vertrauensmodellen nützlich sind. Die Entwickler sagen, dass dieser Ansatz eher der tatsächlichen Darstellung von Schlüsseln durch Benutzer entspricht: Sie werden eher mit Namen als mit einer Reihe abstrakter Bezeichner verknüpft. Dies ist ein Bereich, in dem sich Sequoia von anderen OpenPGP-Implementierungen unterscheidet.
Zusätzlich wird allen Schlüsseln ein "Bereich" zugewiesen, der den beabsichtigten Zweck des Schlüssels angibt. Derzeit werden zwei Bereiche unterstützt: "Kontakte" und "Software-Update-Schlüssel".
Der Schlüsselbund wird automatisch von Remoteservern (ähnlich wie bei Parcimonie ) aktualisiert , um Änderungen, neue Unterschlüssel und Schlüsselwiderrufe rechtzeitig zu verfolgen. Aus der Dokumentation geht hervor , dass dies zusätzlich zu den gängigen TLS-Verschlüsselungsmethoden auch mit anonymisierten Diensten wie Tor möglich ist.
Die Implementierung des privaten Schlüsselbunds von Sequoia unterstützt die Geheimhaltung der Weiterleitungdurch die OpenPGP-Spezifikationen, die in vielen anderen Bibliotheken nicht implementiert sind. Diese Spezifikationen ermöglichen die Unterscheidung zwischen Daten "in Ruhe" (verschlüsselter Speicher) und Daten "in Bewegung" (verschlüsselte Übertragung). Unter Sicherheitsgesichtspunkten ist es sinnvoll, die Schlüssel für Daten "unterwegs" regelmäßig zu ändern, die Daten jedoch weiterhin "in Ruhe" zu entschlüsseln. In einer Präsentation eines der Entwickler, Justus Winter, werden die Funktionen zur Geheimhaltung von Sequoia mit anderen OpenPGP-Implementierungen verglichen.
Rostvorteile
Sequoia nutzt alle Vorteile von Rust für die Speichersicherheit .
Was Gedächtnissicherheit ist, wird im Volksmund in einem Artikel von Michael Hicks erklärt. In einfachen Worten bedeutet dies, dass ein Programm in keinem Zustand auf ungültigen Speicher zugreifen kann. Dies sind die folgenden Fehler:
- Pufferüberlauf;
- Dereferenzieren eines Nullzeigers;
- Speichern des Zeigers nach dem Freigeben des Speichers (Use-After-Free);
- Verwendung von nicht initialisiertem Speicher;
- ein Versuch eines Programms, dieselbe Zelle zweimal freizugeben (doppelt frei).
Verstöße gegen die Speichersicherheit führen zu Sicherheitslücken wie Datenverlust und Remotecodeausführung. Während sich einige Sprachen im Namen der Speichersicherheit mit Leistungseinbußen abgefunden haben, sorgt das Eigentumskonzept von Rust für Sicherheit und minimiert den Overhead.
Basierend auf der aktuellen Entwicklung von Sequoia werden erhebliche Anstrengungen unternommen, um Komponententests zu schreiben, um Regressionen zu verhindern und die Codequalität zu verbessern.
Sequoia zielt auf „moderne Plattformen“ wie Linux, Windows, MacOS, Android und iOS ab und nutzt die vorhandenen kryptografischen Tools optimal aus. Ziel des Projekts ist die enge Integration mit kryptografischen Diensten einer bestimmten Plattform. Auf iOS-Geräten ist beispielsweise die Verwendung des Secure Enclave- Coprozessors geplantwenn verfügbar. Sequoia bietet auch eine externe Funktionsschnittstelle (FFI) zur Integration eines Projekts in Programme, die in anderen Sprachen geschrieben sind. Derzeit werden Bindungen (Bindungen) mit Python und C angeboten. Es ist jedoch zu beachten, dass Programme mit diesen Bindungen nicht über die integrierte Speichersicherheit von Rust verfügen. Daher wurden spezielle Regeln für den korrekten Umgang mit der Speichernutzung veröffentlicht .
Sequoia-Komponenten
Pläne für die Zukunft
Die Veröffentlichung von Version 1.0 kann bald erfolgen, obwohl zunächst nur die Low-Level-API veröffentlicht wird, dh die Sequoia-OpenPGP-Kiste und ihre Abhängigkeiten. Dies bedeutet, dass Sequoia noch nicht für alle Benutzer ein Ersatz für Tools wie GnuPG ist: Die erste Hauptversion wird sich auf eine Entwicklerbibliothek konzentrieren. Die Sequoia-Entwickler müssen ein Befehlszeilentool ausführen
sq, das in Version 1.0 nicht enthalten ist. Darüber hinaus befindet sich der Schlüsselspeicherdienst noch in der Entwicklung. Zusammen mit dem Befehlszeilentool ist dies eine der Hauptprioritäten des Projekts nach der Veröffentlichung von Version 1.0.
Insgesamt ist es schön, ein Projekt zu sehen, das versucht, OpenPGP benutzerfreundlicher und zugänglicher zu machen. Es ist ersichtlich, dass die Entwickler in drei Jahren erhebliche Fortschritte erzielt haben. In der Dokumentation können Sie diese Bibliothek in Anwendungen verwenden. Sequoia hat jedoch noch einen langen Weg vor sich, bevor es zu einem zuverlässigen kryptografischen Werkzeug wird. Am wichtigsten ist, dass der Code überprüft werden muss. Auf der Projektseite heißt es, dass es noch nicht geprüft wurde, aber "sobald wir die Sequoia-Hauptkiste veröffentlichen, wird sie von Dritten geprüft." Es wurde noch kein Veröffentlichungsdatum für Version 1.0 bekannt gegeben, aber es sieht so aus, als ob es bald kommen wird.
Werbung
VDS für Programmierer mit der neuesten Hardware, Angriffsschutz und einer großen Auswahl an Betriebssystemen. Die maximale Konfiguration beträgt 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe.
