Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Galdralag-firmware — Ein Versuch eines kryptografischen Frameworks für Baochip-1x. | Kitploit
Tools/GitHubGitHub/supermagnum/galdralag-firmware
Embedded-System-SicherheitVerschlüsselungs-/EntschlüsselungstoolsKryptographieHardware-SicherheitIdentitäts- & Zugriffsmanagement (IAM)AuthentifizierungFirmware-Analyse
GitHubsupermagnum/galdralag-firmware

Galdralag-firmware

Ein Versuch eines kryptografischen Frameworks für Baochip-1x.

Repository anzeigen
3vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Galdr — Galdralag Firmware

Open Invention Network

Open Invention Network-Mitglied

Dieses Projekt ist beim Open Invention Network (OIN) registriert. OIN ist ein defensives Patent-Pool: Mitglieder lizenzieren Linux-bezogene Patente gegenseitig, sodass Teilnehmer Open-Source-Software mit reduziertem Patentrisiko ausliefern und nutzen können.

Status: Warte auf Hardware für Tests. https://www.crowdsupply.com/baochip/dabao/updates/our-campaign-has-launched

Inhaltsverzeichnis

  • Open Invention Network
  • Was dies ist
    • Galdra Kontaktmetadaten
    • Was diese Firmware ist (und nicht ist)
    • Signierte Firmware (Ed25519, boot0)
  • Ist das KI-Müll?
  • Testergebnisse
  • Warum Rust?
    • Speichersicherheit
    • Systemnahe Robustheit (mit Grenzen)
    • Schlüsselmaterialschutz (Projektmuster)
    • Prüfbar durch Design
    • Was Rust nicht verhindert
    • Einrichten einer virtuellen Maschine zur Evaluierung
    • Risikobewertung und Bereitstellung
  • Galdralag für Dummies
    • Was ist GnuPG?
  • GnuPG / OpenPGP-Schlüssel und Galdra-Schlüssel
    • Metadatenvergleich (GnuPG vs. Galdra)
  • Übersprungene und ignorierte Tests
  • Über den Namen
  • Dokumentation
  • Code-Map (Funktions- und Modulindex)
  • Crate-Abhängigkeiten (upstream vs. Projekt)
  • Debug-Anleitung
  • docs/AUDIT_LOG.md
  • docs/BIOMETRIC_API.md
  • docs/HARDWARE_BRINGUP_TEST_PLAN.md
  • docs/KEY_LIFECYCLE.md
  • docs/RRAM_LAYOUT.md
  • docs/THREE_FACTOR_AUTH.md
  • docs/THREAT_MODEL.md
  • Glossar (einfache Sprache)
  • OpenPGP- und GnuPG-Kompatibilität
  • Token-Sitzung und Schlüsselexport
  • Web of Trust und Key-Signing-Partys
    • Abrufen Ihres Galdralag-Fingerprints
    • Was ist das Web of Trust?
    • Wie es funktioniert
    • Key-Signing-Partys
    • Typischer Ablauf auf einer Key-Signing-Party
    • Fingerprints statt vollständiger Schlüssel auf der Veranstaltung
    • Keyserver
    • Verwendung von Keyservern
    • Gängige Keyserver
    • Best Practices und Fallstricke
    • Fulla (WoT-Registry-Server)
  • Standards vs. firmwarespezifische Funktionen
  • Shamir Secret Sharing und Festplattenverschlüsselung
  • Deutsche eID und Governikus als Vertrauensanker für öffentliche Schlüssel
  • Standardisierungsprozess: Shamir und ephemerer Schlüsselaustausch
    • CESS (verwandter offener Standard)
  • Sequoia PGP (falls dieses Repository nicht reagiert)
  • Plattformunterstützung (nur Linux)
  • Build, Installation und Deinstallation
    • Firmware kompilieren
    • Flashing
    • Host-Tools kompilieren und installieren (galdra, galdrad, galdra-gtk)
    • galdrad und das Desktop-GUI (galdra-gtk) ausführen](#ausführen-von-galdrad-und-dem-desktop-gui-galdra-gtk)
    • Host-Tools deinstallieren
  • Schlüsselfähigkeiten
    • Was diesen Token ungewöhnlich macht
    • Kryptografische Fähigkeiten
      • Asymmetrisch / Schlüsselvereinbarung
      • Symmetrisch / AEAD
      • Schlüsselableitung / MAC / Digest
      • Schlüsselverwaltung
    • Sicherheitseigenschaften
    • PIN-Richtlinie
  • Post-Quanten-Status
    • Implementiert – nicht auditiertes Crate (Feature-gated)
    • Ausstehendes unabhängiges Audit – noch nicht implementiert
    • Wird nicht implementiert
  • Zeroisation – Hardware-Hinweis
  • Workspace-Layout
  • Kryptografische Abhängigkeitsrichtlinie
  • Schnellstart
  • Bekannte Einschränkungen / offene Arbeiten
    • CCID-Initial-PIN: Erstinbetriebnahme (USB CDC)
  • Lizenz

Was dies ist

Firmware für Baochip-1x (Dabao-Evaluierungsboard)-Geräte, die auf dem Xous-Mikrokernel läuft, erstellt für riscv32imac-unknown-none-elf.

Sie befindet sich hier: https://www.baochip.com/

Das Gerät ist ein Hardware-Sicherheitstoken in derselben Kategorie wie Nitrokey-Geräte, mit OpenPGP-Smartcard-ähnlichem Verhalten und einem verschlüsselten Tresor. Der gesamte Hardware-Stack – RTL, Schaltpläne, Bootloader, Betriebssystem – ist Open Source und prüfbar.

Hardware-Spezifikation, Boot-Modell, Anforderungstabellen und ComboHash/PKE-Nutzung sind in Supermagnum/Baochip-1x-firmware dokumentiert. Das Dabao-Evaluierungsboard (KiCad, Schaltpläne, Schalter, Pinbelegung) ist unter baochip/dabao zu finden. Um für das Flashen in den Bootloader-Modus zu gelangen, drücken Sie SW2, um ihn umzuschalten (siehe Schaltplan dieses Repos). Architekturnotizen für dieses Repository: docs/ARCHITECTURE.md.

Galdra Kontaktmetadaten

Das Galdra-Hosttool führt ein lokales SQLite-Verzeichnis von Empfängern (Kontakten). Jede gespeicherte Identität enthält öffentliches Schlüsselmaterial plus optionale Sidecar-Bezeichnungen (siehe Tabelle unten). Diese Tags leben in der Host-Datenbank und, für Galdra-Schlüssel, im Kontaktspeicher auf dem Chip (crates/contact-store). Sie sind nicht magisch an OpenPGP-Benutzer-IDs gebunden, es sei denn, Sie gleichen sie selbst ab, und sie sind nicht kryptografisch bestätigt, es sei denn, Sie überprüfen sie out of band. Ein optionales galdra keyserver push kann überlappende Felder zusammen mit dem exportierten öffentlichen Schlüssel als JSON an ein Projekt-Registry senden. Die Feldherkunft auf dem Token verwendet SelfAttested, HostVerified, RegistrySync und OobVerified (siehe Metadatenvergleich (GnuPG vs. Galdra) und das Kontaktspeicher-Layout in docs/RRAM_LAYOUT.md).

Host-seitige Details und CLI-Verhalten: docs/GALDRA-TOOL.md. Draht-Layout und Slot-Anzahlen: crates/contact-store/src/layout.rs und docs/RRAM_LAYOUT.md.

Was diese Firmware ist (und nicht ist)

Diese Firmware ist ein Hardware-Sicherheitstoken für Baochip-1x: eine OpenPGP-Kartenanwendung über USB CCID, mit einem Tresor auf dem Gerät, einer PIN-Richtlinie und repository-spezifischen Funktionen (Chiffre-Profile – Sie können bis zu vier verschiedene symmetrische Chiffren in einer Kaskade stapeln, jede mit ihrem eigenen abgeleiteten Schlüssel; siehe Schlüsselfähigkeiten), Shamir-bezogenen Abläufen, authentifiziertem ephemerem ECDH (wo implementiert) und Galdra-Host-Tools). Das primäre Interoperabilitätsziel ist die GnuPG-artige OpenPGP-Kartennutzung, nicht jedes Token-Protokoll auf dem Markt.

Diese Firmware ist nicht:

  • FIDO2 / CTAP2 / WebAuthn – andere Standards; kein CTAP-Benutzer-Präsenz-Tastenmodell und kein geplanter CTAP-Stack. Verwenden Sie einen FIDO-Sicherheitsschlüssel, wenn Sie WebAuthn benötigen. (Siehe auch OpenPGP- und GnuPG-Kompatibilität und die Standards-Tabelle unter Standards vs. firmwarespezifische Funktionen.)
  • TOTP / HOTP (OATH-Einmalpasswörter) – diese Protokolle erwarten eine Echtzeituhr (TOTP) oder einen OATH-orientierten Zähler-Workflow und Benutzeroberfläche; dieses Gerät ist nicht als dedizierter OTP-Token konzipiert.
  • USB-HID-Tastatur-"Passwort-Eingabehilfe" – es gibt keine USB-Tastatur-Persona, um Tastenanschläge in den Host zu injizieren. Die geplante Credential-Speicherung (siehe docs/future-todo.md) wird als Abruf durch authentifizierte Host-Tooling beschrieben, nicht als HID-Eingabe.
  • Eine allgemeine Multi-Applet-Java-Card-Plattform – der Umfang beschränkt sich auf diese Galdr-Firmware und ihre dokumentierten Oberflächen, nicht auf beliebige Drittanbieter-Smartcard-Applets.

Crate-Ebene-Ausschlüsse, die denselben Einschränkungen entsprechen, sind unter Crates Explizit Ausgeschlossen in docs/future-todo.md aufgeführt.

CESS: Diese Firmware erfüllt CESS für die im Tree implementierten normativen Konstruktionen (einschließlich Mode A äußeres AEAD, HKDF-BLAKE3 für K_outer und byteweise GF(2^8) Shamir-Aufteilung). Die vollständige Konformitätserklärung, Abweichungsliste und Zertifizierungsstufe (z.B. CESS-CORE für die vollständige feste Schicht) sind in docs/CESS_CONFORMANCE.md und CESS (verwandter offener Standard) unten dokumentiert.

Die OpenPGP / CCID-Anwendungslogik befindet sich in crates/usb-personality. Auf Xous ist der USB-Dienst, der CCID bereitstellt, usb-bao1x (in Ihrem xous-core-Checkout), erstellt mit dem Feature ccid-openpgp, unter Verwendung von crates/baochip-openpgp für das OpenPGP-RRAM-Fenster und die Bereitstellung. Layout: docs/RRAM_LAYOUT.md. Vorproduktionslücken (Operator-PIN-Benutzeroberfläche, Plattform-Map-Freigabe): Bekannte Einschränkungen / offene Arbeiten.

Das übergeordnete Ziel bleibt eine vollständige, getestete Open-Source-Hardware-Sicherheitstoken-Firmware: OpenPGP-Karten-ähnliches Verhalten für GnuPG über CCID (siehe OpenPGP- und GnuPG-Kompatibilität), plus zusätzliche Funktionen auf dem Gerät, die derzeit nicht durch den OpenPGP-Kartenstandard definiert sind – ephemeres ECDH mit Vorwärtssicherheit, Shamir K-of-N, chiffre-agnostische Profile, microSD-Decoy-Volume – wie in Standards vs. firmwarespezifische Funktionen zusammengefasst. Alles auf offenem RTL mit einem reproduzierbaren Bootloader.

Signierte Firmware (Ed25519, boot0)

Auslieferbare Firmware für Baochip-1x wird mit Ed25519 signiert. Sie signieren das Firmware-Image mit einem Ed25519-privaten Schlüssel; GnuPG kann dies mit gpg --sign unter Verwendung eines Ed25519-Signatur-Unterschlüssels durchführen (der übliche OpenPGP-Arbeitsablauf mit separater Signatur, angepasst an das, was Ihr Build ausgibt). Der unveränderliche boot0-ROM im SoC überprüft diese Signatur gegen die entsprechenden öffentlichen Schlüssel, die in das Gerät eingebrannt sind (und das breitere Schlüsselmanifest für die Boot-Kette) bevor die nächste Stufe – boot1 – ausgeführt werden darf. boot1 lädt dann signierte Anwendungsimages (z.B. UF2-Blobs, die über USB-Massenspeicher im Bootloader-Modus geliefert werden). Standardteile enthalten vier On-Chip-Ed25519-öffentliche Schlüssel (Rollen wie Code-Bereitstellung, Beta und Entwickler); boot0 / boot1 erzwingen eine gegenseitige Misstrauens-Richtlinie zwischen Baochip- und Drittanbieter-Signaturschlüsseln. Vollständiger Boot-Ablauf, UF2-Lieferung, Konsole, boot1-Updates und Sicherheitsmodell: Erste Schritte mit Baochip-Zielen in xous-core.

Übersprungene und ignorierte Tests

Nicht jeder Test läuft in jedem Befehl; das ist beabsichtigt.

  • xtask nicht im Standard-Workspace-Test: Das übliche Rezept ist cargo test --workspace --exclude xtask, weil xtask ein Build-Orchestrierungs-Crate ist. Führen Sie cargo test -p xtask aus, wenn Sie dessen Tests möchten.
  • Tests mit #[ignore] markiert: Diese werden übersprungen, es sei denn, Sie übergeben --ignored (und alle benötigten Crate-Filter). Gründe sind: Abdeckung, die bereits in fokussierten Unit-Tests abgedeckt ist (z.B. Zeroisierung nach Drop), langsame Fälle (z.B. RSA-Schlüsselgenerierung) und hardware- oder tokenabhängige Abläufe in Host-Tools wie galdra, die ein verbundenes Gerät oder Fixtures benötigen.
  • test-all --no-fuzz: Überspringt den cargo-fuzz-Schritt, um CI oder schnelle Läufe kurz zu halten und keine Nightly-Toolchain für diesen Schritt zu benötigen; führen Sie cargo run -p xtask -- test-all ohne --no-fuzz aus, oder rufen Sie Fuzz-Ziele separat auf (siehe ).

Die Integrität von Crates kann auch überprüft werden, wenn der PR geschlossen ist: https://github.com/rust-lang/cargo/issues/16850

Status: Bereit für Tests durch Menschen, auf echter Hardware – es existiert keine produktionsreife Version. Es ist in Rust geschrieben unter Verwendung validierter und auditierter Krypto-Crates. Kryptografische Primitive werden ausschließlich aus auditierten Workspace-Abhängigkeiten bezogen. Post-Quanten-Algorithmen sind feature-gated und als PENDING INDEPENDENT AUDIT gekennzeichnet. Siehe Post-Quanten-Status.

Hinweis: Teile dieses Projekts wurden mit KI-Unterstützung entwickelt (Claude, Anthropic). Das Design, die kryptografischen Entscheidungen und die Sicherheitsentscheidungen wurden nicht von einem professionellen Kryptografen überprüft. Behandeln Sie dies als experimentelles Projekt und wenden Sie Ihr eigenes kritisches Urteilsvermögen an. Eine unabhängige Expertenprüfung wird vor jedem Produktionseinsatz dringend empfohlen.

Es ist bereit für Tests durch Menschen. Sie entscheiden, ob Sie irgendeine dieser Software erstellen oder ausführen; es könnte Fehler geben, die Unit-Tests, Fuzzing und andere Prüfungen nicht gefunden haben. Die Verwendung einer optionalen virtuellen Maschine für Experimente reduziert das Risiko für Ihr Hostsystem, beseitigt es jedoch nicht. Detaillierte Ergebnisse befinden sich in Testergebnissen (docs/TEST_RESULTS.md#run-metadata). Einfache Definitionen (A–Z) technischer Begriffe: Glossar.

Ist das KI-Müll?

Der primäre Entwickler hat eine neurologische Erkrankung im Zusammenhang mit Dyskalkulie. Dyskalkulie beeinträchtigt das Zahlenverständnis und verwandte symbolische Verarbeitungsfähigkeiten in einer Weise, die für ihn traditionelle Programmierung – manuelle Code-Bearbeitung als alleinigen Workflow – nicht praktikabel macht ohne unterstützende Werkzeuge (z.B. konversationelle KI-Editoren). Diese Einschränkung ist von Korrektheit zu unterscheiden: Prüfer sollten dennoch Tests, Fuzzing und unabhängige Audits gewichten, wie an anderer Stelle auf dieser Seite dokumentiert.

Ein Kryptograf oder ernsthafter Implementierer, der Galdralag überprüft, wird typischerweise crates/vault/tests/ und crates/cipher-profile/tests/ öffnen, bevor er Prosa liest. Die Testsuite ist der Arbeitsnachweis: Sie kodiert Domänenwissen, das nicht allein durch narratives Erzählen ersetzt werden kann.

Das ist kein Grund, diesen Punkt vor allen anderen zu verbergen. Personen, die das Projekt für die Beschaffung evaluieren, entscheiden, ob sie beitragen, oder Code ohne tiefgehende Ausbildung in kryptografischer Testmethodik ausliefern, verdienen dennoch einen Hinweis auf die konkreten Beweise.

Was Sie sich ansehen sollten: Konformitätsmaterial umfasst RFC 8439 ausgearbeitete Beispiele für ChaCha20-Poly1305 unter crates/vault/tests/rfc_vectors/, eingelegte Wycheproof-JSON für ChaCha20-Poly1305 und Brainpool-ECDH/ECDSA-Grenzfälle unter crates/vault/tests/data/wycheproof/, BSI TR-03111-Vektoren für BrainpoolP256r1 und P384r1 unter crates/vault/tests/bsi_vectors/, offizielle BLAKE3-Referenzvektoren (alle 35 Eingabelängen, alle drei Modi) unter crates/vault/tests/blake3_vectors.json, Twofish-Spezifikationsvektoren (1203 Fälle inklusive Monte Carlo) unter crates/vault/tests/twofish_vectors.json und die projekteigene CESS-Kaskaden-KAT-Fixtur mit unabhängig verifizierten Zwischenergebnissen unter crates/cipher-profile/tests/fixtures/cascade_cess_kat.json. Zusammen sind dies die Grundwahrheiten, die der Ausführende und Prüfer mit cargo test --workspace und python3 scripts/verify_cascade_kats.py testen können.RFC 8439 wird von der Internet Engineering Task Force (IETF) veröffentlicht, der Organisation, die einen Großteil der Internet-Zusammenarbeit standardisiert. RFCs (Request for Comments) sind die übliche Form für Protokollspezifikationen und viele kryptografische Spezifikationen. RFC 8439 definiert die authentifizierte Verschlüsselung ChaCha20-Poly1305 (aufbauend auf den Entwürfen von Daniel Bernstein) und enthält konkrete, durchgerechnete Beispiele mit spezifischen Eingaben und erwarteten Ausgaben, damit unabhängige Implementierungen überprüfen können, ob sie Byte für Byte mit dem Standard übereinstimmen. Der weit verbreitete Klartext, der mit beginnt, erscheint in den Beispielen im Anhang des RFC: Wenn Ihr Code die AEAD-Ausgabe exakt reproduziert, haben Sie eine starke Bestätigung, dass Sie die Konstruktion korrekt implementiert haben. Es ist das kryptografische Äquivalent zu einem offiziellen Lösungsschlüssel. ChaCha20-Poly1305 ist die innere Schicht jedes mehrschichtigen Kaskadenprofils in dieser Firmware, daher sitzt diese Prüfung an der Basis des gesamten Chiffre-Stacks.

Wycheproof ist ein Testkorpus, der vom Google-Sicherheitsteam veröffentlicht wurde (2017). Der Name bezieht sich auf den Mount Wycheproof in Australien – oft als der kleinste Berg der Welt bezeichnet –, weil sich das Projekt auf die Beseitigung kleiner, aber tödlicher Hürden konzentriert: Integer-Überläufe, Grenzfälle, fehlerhafte Eingaben und manipulierte Authentifizierungs-Tags; Fehler, die in realen, eingesetzten Kryptosystemen immer wieder auftreten. Es ergänzt RFC-artige Vektoren: RFC 8439-artige Beispiele zeigen Korrektheit gegenüber dem veröffentlichten AEAD; Wycheproof testet die Robustheit dort, wo Implementierungen in der Vergangenheit versagen. In diesem Repository deckt das Wycheproof-JSON ChaCha20-Poly1305, AES-GCM, HMAC, HKDF, X25519, Ed25519, RSA und Brainpool-ECDH/ECDSA-Varianten ab.

BSI TR-03111 ist die technische Richtlinie für Elliptische-Kurven-Kryptografie, herausgegeben vom deutschen Bundesamt für Sicherheit in der Informationstechnik (BSI). Version 2.10 ist die aktuelle Revision. Die in dieser Firmware verwendeten Brainpool-Kurven – P256r1 und P384r1 – sind in BSI-Standards spezifiziert, was TR-03111 zur natürlichen Referenz für deren Testvektoren macht. Jede Kurve wird durch ECDH und ECDSA abgedeckt; ECDSA-Signaturen wurden zusätzlich mit einer unabhängigen Python-Implementierung unter Verwendung der Bibliothek cryptography gegengeprüft.

BLAKE3-Referenzvektoren sind der offizielle Testkorpus, der zusammen mit der BLAKE3-Spezifikation von ihren Autoren veröffentlicht wurde. Sie decken 35 Eingabelängen von 0 bis 102400 Bytes ab, die speziell ausgewählt wurden, um alle internen Block- und Baum-Hashing-Grenzbedingungen zu testen, die bei Kurzeingabetests unsichtbar bleiben. Alle drei BLAKE3-Modi – Standard-Hash, keyed Hash und derive-key – werden abgedeckt. BLAKE3 wird in dieser Firmware durchgängig für die HKDF-Schlüsselableitung und die Integritätsprüfungen zwischen den Schichten in den Kaskaden-Chiffre-Profilen verwendet; die Abdeckung von Grenzfällen ist wichtig, weil die Baumkonstruktion von BLAKE3 erst oberhalb von 1024 Bytes aktiviert wird.

Die Testsuite dient auch der Manipulationserkennung für die Lieferkette. Alle kryptografischen Primitiven in dieser Firmware stammen aus auditierten RustCrypto-Crates – keine Kryptografie wird im Verzeichnisbaum implementiert. Da die obigen Konformitätsvektoren bei jedem cargo test --workspace gegen diese Crates ausgeführt werden, führt jede manipulierte oder ausgetauschte Abhängigkeit zu einem Fehlschlag des Bekannte-Antwort-Tests, bevor der kompromittierte Code ein ausgeliefertes System erreicht. python3 scripts/verify_cascade_kats.py fügt einen zweiten unabhängigen Pfad hinzu: Eine Python-Implementierung prüft dieselben Zwischenwerte in der Kaskaden-KAT-Fixture, sodass selbst eine kompromittierte Rust-Toolchain, die falsche Ausgaben produziert, durch die Gegenprüfung erkannt wird. Dies ist eine deutlich stärkere Lieferketten-Integritätsgeschichte als die Bindung an eine C-Bibliothek, bei der eine gleichwertige Überprüfung jeder internen Operation deutlich mehr Aufwand und spezialisierte Werkzeuge erfordert.

Es liegt nun am Leser, zu beurteilen, ob diese Behauptungen falsch sind oder nicht.

Galdralag für Dummies

Sie stecken es in einen USB-Anschluss. Aus Host-Sicht kann die Firmware entweder den Kryptomodus oder den Tarnmodus präsentieren. Im Kryptomodus sieht Ihr Computer eine Chipkarte: Sie verwenden GnuPG oder einen kompatiblen OpenPGP-Stack (Was ist GnuPG?) genauso wie jedes andere Hardware-Sicherheitstoken – das Token führt die sensiblen kryptografischen Operationen durch, sodass Ihre privaten Schlüssel nie ungeschützt auf Ihrem Computer existieren. Im Tarnmodus kann es sich als gewöhnlicher Wechseldatenträger mit harmlos aussehenden Dateien melden, sodass ein schneller Blick seine wahre Rolle nicht preisgibt; siehe Speicher-Tarnung unten.

Was ist GnuPG?

GnuPG steht für GNU Privacy Guard. Es ist die Implementierung des GNU-Projekts von OpenPGP, dem offenen Standard für Schlüsselverwaltung und kryptografisch geschützte Nachrichten (derselbe konzeptionelle Familienzweig wie PGP, aber spezifiziert in Dokumenten wie RFC 4880 und Community-Updates). Normalerweise führen Sie es als Befehl gpg unter Linux, BSD, macOS oder Windows aus; viele grafische E-Mail- und Schlüsselverwaltungswerkzeuge verwenden es im Hintergrund.

Menschen verwenden GnuPG, um:

  • Dateien oder Backups zu verschlüsseln und zu entschlüsseln, sodass nur ausgewählte Empfänger sie lesen können.
  • Daten zu signieren, sodass andere Authentizität und Integrität prüfen können – üblich für Softwareveröffentlichungen, Distribution-Mirrors und persönliche Dokumente.
  • E-Mails Ende-zu-Ende zu schützen, wenn es mit einem geeigneten E-Mail-Client kombiniert wird (GnuPG übernimmt die Kryptografie; das Nachrichtenformat auf der Leitung ist OpenPGP).
  • Authentifizierung, insbesondere SSH-Anmeldungen, wenn gpg-agent Authentifizierungsschlüssel von einer Chipkarte oder einem lokalen Schlüsselspeicher bereitstellt.
  • Ein verschlüsseltes Festplattenlaufwerk zu sperren und zu entsperren. Linux kann eine gesamte Festplatte so verschlüsseln, dass sie ohne den richtigen Schlüssel unlesbar ist. GnuPG kann diesen Schlüssel auf Ihrem Token halten, sodass die Festplatte nur geöffnet wird, wenn das Token eingesteckt ist.

GnuPG und verschlüsselte Laufwerke (LUKS). Linux hat eine integrierte Methode, ein gesamtes Laufwerk oder eine Partition zu verschlüsseln, genannt LUKS. Sobald ein Laufwerk verschlüsselt ist, sieht es für jeden ohne Schlüssel wie bedeutungsloses Rauschen aus, sodass ein verlorener oder gestohlener Laptop nicht Ihre Dateien herausgibt.

Normalerweise entsperren Sie ein solches Laufwerk durch Eingabe eines Passworts. GnuPG ermöglicht es Ihnen, stattdessen Ihr Token zu verwenden. Die Idee ist einfach: Der Entsperrschlüssel des Laufwerks ist selbst mit dem Schlüssel Ihres Tokens gesperrt. Wenn Sie das Laufwerk öffnen möchten, entschlüsselt das Token diesen Entsperrschlüssel für Sie, allerdings nur, solange das Token eingesteckt ist und Sie Ihre PIN eingegeben haben. Ziehen Sie das Token heraus, und das Laufwerk kann überhaupt nicht geöffnet werden, selbst auf demselben Computer.

Kurz gesagt, macht dies das Token zu einem physischen Schlüssel für Ihr verschlüsseltes Laufwerk. Die Einrichtung (und das Hinzufügen einer Backup-Methode für den Fall, dass das Token jemals verloren geht) erfolgt mit den eigenen Festplattenwerkzeugen von Linux; das Token hält lediglich den Schlüssel. Wenn Sie lieber die Fähigkeit, ein Laufwerk zu entsperren, auf mehrere Personen verteilen möchten, sodass keine Person allein dazu in der Lage ist, siehe Shamir Secret Sharing und Festplattenverschlüsselung.

Standardmäßig speichert GnuPG Schlüssel unter ~/.gnupg. Mit einer OpenPGP-Chipkarte befinden sich sensible private Schlüssel auf der Karte; scdaemon (Teil der GnuPG-Suite) kommuniziert über CCID/USB mit der Karte, während gpg weiterhin OpenPGP-Pakete auf dem Host zusammenstellt.

Wofür Sie es verwenden können. Im Kryptomodus ist das Token für die gleiche Arbeit wie andere OpenPGP-Chipkarten gedacht: Signieren und Entschlüsseln von E-Mails und Dateien, Authentifizieren (z. B. SSH, wenn Sie gpg-agent wie gewohnt verwenden) und die Aufbewahrung langfristiger privater Schlüssel außerhalb des von Ihnen benutzten Rechners. Organisationen können dies mit Shamir-Anteilen auf dem Token kombinieren, sodass keine einzelne Person das gesamte Geheimnis besitzt (weiter unten beschrieben). GnuPG ist das primäre Interoperabilitätsziel auf dem Host: Diese Firmware implementiert die OpenPGP-Kartenanwendung über CCID, die scdaemon ansteuert (gpg --card-status, gpg --card-edit sowie normales Ver-/Entschlüsseln und Signieren mit Schlüsseln auf der Karte). Andere Software, die dieselben Chipkartenprotokolle spricht, könnte ebenfalls funktionieren; Befehle, Slots, Algorithmen und aktuelle Integrationsgrenzen finden Sie unter OpenPGP- und GnuPG-Kompatibilität. Wenn NFC auf der Hardware bereitgestellt wird (geplante Integration – noch nicht in der Firmware), kann dieselbe Geräteklasse den physischen Zutritt unterstützen: Das Tippen an einen NFC-Leser an einer Tür, einem Tor oder einem Schließfeld kann an einer Richtlinie teilnehmen, die das Schloss erst nach kryptografischen Prüfungen freigibt (oft kombiniert mit PIN, Biometrie oder Shamir-artigem Quorum, je nach Einsatzumgebung). Der PN532-orientierte Entwurf für Leser und Schließfelder befindet sich in docs/NFC_PN532_INTEGRATION.md.

Das ist die Kurzversion. Hier ist, was es von anderen Tokens unterscheidet, die Sie vielleicht kennengelernt haben.

Speicher-Tarnung. Das Gerät kann als gewöhnlicher Wechseldatenträger fungieren, sodass seine wahre Rolle bei einem schnellen Blick nicht offensichtlich ist. Wenn Sie es an einen typischen Computer anschließen, kann es wie ein normales USB-Laufwerk oder ein SD-basiertes Volume erscheinen; Sie können das sichtbare Dateisystem mit plausiblen Alltagsdateien (z. B. Urlaubsfotos) füllen, sodass ein flüchtiger Blick den Eindruck verstärkt, dass es sich nur um Speicher handelt. Dies erschwert eine oberflächliche Inspektion am Schreibtisch oder an einem Kontrollpunkt. Herauszufinden, dass es sich tatsächlich um ein Sicherheitstoken handelt, erfordert normalerweise, das Gehäuse zu öffnen, nicht nur, es einzustecken.

Ihre Schlüssel bleiben auf dem Gerät. Wenn Sie eine E-Mail signieren oder eine Datei entschlüsseln, verlässt der private Schlüssel niemals das Token. Der Computer sendet die Daten hinein, das Token erledigt die Arbeit, das Ergebnis kommt heraus. Ein Angreifer, der Ihren Computer kompromittiert, erhält nichts Nützliches.

Vergangene Sitzungen bleiben sicher, selbst wenn das Token gestohlen wird. Die meisten Hardware-Tokens verwenden einen langfristigen privaten Schlüssel direkt für die Schlüsseleinigung. Dieses hier generiert für jede Sitzung ein neues temporäres Schlüsselpaar, signiert es mit dem langfristigen Schlüssel, um seine Echtheit zu beweisen, und verwendet dann das temporäre Paar für den eigentlichen Austausch. Wenn jemand das Token Jahre später stiehlt und irgendwie den langfristigen Schlüssel extrahiert, kann er dennoch nichts aus vergangenen Sitzungen entschlüsseln. Diese Eigenschaft nennt sich Vorwärtssicherheit, und sie ist bei Hardware-Tokens ungewöhnlich.

Sie können den Schlüssel auf mehrere Personen aufteilen. Das Token kann den langfristigen Schlüssel in N Anteile aufteilen, sodass beliebige K dieser Anteile benötigt werden, um ihn zu rekonstruieren – aber kein einzelner Anteilsinhaber allein etwas tun kann. Dies wird Shamir Secret Sharing genannt. Es ist nützlich für Organisationsschlüssel, bei denen keine einzelne Person alleinigen Zugriff haben sollte, oder als Backup-Strategie, bei der Anteile an verschiedenen Orten aufbewahrt werden. Auch dies ist bei Hardware-Tokens ungewöhnlich.

Die Verschlüsselung ist mehrschichtig. Anstatt Ihre Daten mit einer einzelnen Chiffre zu verschlüsseln, kann das Token sie nacheinander durch mehrere unabhängige Chiffren laufen lassen – zum Beispiel ChaCha20, dann Serpent, dann Twofish – jede mit einem separat abgeleiteten Schlüssel. Ein zukünftiger Durchbruch, der eine Chiffre bricht, bricht nicht die anderen. Die spezifische Kombination wird als Chiffre-Profil bezeichnet, und Sie können aus mehreren integrierten Profilen wählen, je nachdem, wie viel Vorsicht Ihre Situation erfordert.

Meine persönliche Empfehlung ist BrainpoolP256r1 + ChaCha20-Poly1305 + BLAKE3. Dies ist das integrierte standard-Profil. Es verwendet die BSI-Brainpool-P-256-Kurve für die flüchtige Schlüsseleinigung, ChaCha20-Poly1305 für die symmetrische Verschlüsselung und BLAKE3 für die Schlüsselableitung und die Integritätsprüfungen zwischen den Schichten. Es ist schnell, gut getestet, akkuschonend (ChaCha20-Poly1305 wurde entwickelt, um auf Hardware ohne AES-Beschleunigung effizient zu sein, was CPU-Zeit und Host-Stromverbrauch reduziert; P-256 ist die kleinste der drei Brainpool-Kurven in dieser Firmware) und hängt von keiner NIST-entwickelten Primitive ab. Wenn Sie eine höhere Sicherheitsmarge gegen einen zukünftigen kryptanalytischen Bruch einer einzelnen Chiffre benötigen, fügt das conservative-Profil eine Serpent-256-Schicht hinzu.

Die Algorithmusauswahl ist bewusst getroffen. Die verwendeten Chiffren – ChaCha20-Poly1305, Serpent, Twofish, Camellia – wurden alle unabhängig von staatlichen Normungsgremien entwickelt. AES und die NIST-Suite werden bewusst ausgeschlossen. Dies ist eine bewusste Entscheidung für Benutzer und Organisationen, die kryptografische Unabhängigkeit vom Standardsetzungsprozess eines einzelnen Landes wünschen. Camellia wurde unabhängig vom EU-Projekt NESSIE und dem japanischen Programm CRYPTREC evaluiert und ist in RFC 3713 und ISO/IEC 18033-3 spezifiziert.

Eine falsche PIN sperrt Sie richtig aus. Das Token zählt fehlgeschlagene PIN-Versuche, bevor es prüft, ob die PIN korrekt ist, nicht danach. Dies bedeutet, dass ein Absturz oder Stromausfall während eines Versuchs nicht ausgenutzt werden kann, um den Zähler zurückzusetzen. Nach zu vielen Fehlversuchen löscht das Token sensibles Material.

Was es noch nicht kann. Es gibt noch keine Hardware – dies ist Firmware in aktiver Entwicklung. End-to-End-Tests mit echter USB-Hardware und GnuPG sind ein zukünftiger Meilenstein. NFC-Transport und türartige Zutrittsleser werden in der Dokumentation als Integrationsziele beschrieben, nicht als ausgeliefertes Verhalten. Der in der Dokumentation beschriebene biometrische dritte Faktor ist noch nicht implementiert. Einige Timing-Seitenkanal-Tests, die echte Hardware erfordern, können erst abgeschlossen werden, wenn ein Gerät existiert.


GnuPG / OpenPGP-Schlüssel und Galdra-Schlüssel

Galdralag kann gleichzeitig mit zwei verschiedenen Arten asymmetrischer Schlüssel arbeiten. Sie beantworten unterschiedliche Fragen auf dem Gerät und auf dem Host und sind nicht austauschbar, selbst wenn sie derselben Person gehören. Die Abschnitte OpenPGP- und GnuPG-Kompatibilität, Web of Trust und Key-Signing-Partys, Galdra-Kontaktmetadaten und Metadatenvergleich (GnuPG vs. Galdra) beschreiben jeden Stack detaillierter; hier ist der Unterschied in alltäglichen Begriffen.

Ein OpenPGP-Schlüssel im Sinne von GnuPG ist ein strukturiertes Paket, keine bloße öffentliche Zahl. Er bündelt den primären Schlüssel, Unterschlüssel zum Signieren und Verschlüsseln sowie eine oder mehrere Benutzer-IDs – normalerweise einen Anzeigenamen und eine E-Mail-Adresse wie Alice Example <[email protected]>. Andere Personen können diese Benutzer-IDs signieren, um zu bestätigen, dass sie die Identitätsbehauptung für echt halten; dieser soziale Graph ist die Basis des Web of Trust, das später in diesem README unter Web of Trust und Key-Signing-Partys beschrieben wird. Wenn Galdralag als OpenPGP-Chipkarte fungiert, hält es das private Schlüsselmaterial auf dem Chip und führt dort die Signier- und Entschlüsselungsoperationen durch. Der öffentliche Schlüssel, die Benutzer-IDs und die Signaturen anderer befinden sich auf dem Host und werden von GnuPG auf die übliche Weise verwaltet. Das Token ändert das OpenPGP-Nachrichtenformat auf der Leitung nicht; GnuPG behandelt es wie jede andere OpenPGP-Karte.

Ein Galdra-Schlüssel ist ein reines asymmetrisches Schlüsselpaar – Ed25519, X25519 oder eine der Brainpool- oder NIST-Kurven, die die Firmware unterstützt. Die Schlüsselbytes selbst tragen keine Identitätsansprüche: keine Benutzer-ID-Pakete, keine eingebackene E-Mail, keine Web-of-Trust-Signaturen, die an die Schlüsselstruktur angehängt sind. Die Identität für einen Galdra-Schlüssel stammt aus dem Kontaktdatensatz, der neben ihm in der Host-SQLite-Datenbank und im Kontaktspeicher auf dem Chip gespeichert ist, verknüpft mit dem Schlüssel durch seinen Fingerabdruck.

Metadatenvergleich (GnuPG vs. Galdra)

Die folgende Tabelle vergleicht Identitäts- und Kontaktmetadaten Feld für Feld. Die Spalten OpenPGP / GnuPG beschreiben, was Sie von einem normalen Zertifikat und einer Benutzer-ID erhalten (plus optionale hostseitige Kontaktzeilen in Galdra, wenn Sie einen öffentlichen OpenPGP-Schlüssel im selben Verzeichnis speichern). Die Spalten Galdra-Schlüssel beschreiben strukturierte Sidecar-Felder für betriebliche Kontakte (vollständige Host- und Chip-Details in Galdra-Kontaktmetadaten). Ein Bindestrich bedeutet, dass dieser Stack kein standardmäßiges, separates Feld für diesen Eintrag hat.

OpenPGP packt Name und E-Mail in einen Benutzer-ID-String; es bietet keine separaten, maschinenlesbaren Felder für Rufzeichen, DMR oder Postanschrift. Galdra hält diese als benannte Spalten, sodass Funk- und Einsatzteams danach suchen und sie anzeigen können, ohne Zertifikatstext parsen zu müssen.

Tokens, die von Firmware aktualisiert wurden, die BrainpoolP512r1 anbot, können weiterhin P-512-Attribute auf GET DATA zurückgeben; GnuPG-Operationen auf diesen Slots schlagen dann mit generischen Kartenfehlern fehl. Führen Sie galdra device status aus (oder siehe docs/OPENPGP_CARD.md), um veraltete Slots zu identifizieren; Hintergrund zur Entfernung in CHANGELOG.md. | PW1 / PW3 | Nie gespeichert | Verifizierer auf Chip (mind. 5 Zeichen, 3 Versuche Standard) | | Karteninhaber-DOs (Login, Sprache, URL, …) | Von GnuPG zwischengespeichert | Optional (254 Bytes max. pro DO) |

Kartenanwendung 3.4.1, CCID und GnuPG-Workflows: docs/OPENPGP_CARD.md und OpenPGP- und GnuPG-Kompatibilität.

Die Trennung existiert, weil die Identitätsinformationen, die in den von Galdralag anvisierten Communities wichtig sind – Rufzeichen, DMR-ID, Funknetz-Zugehörigkeit – keinen natürlichen Platz in einer OpenPGP-Benutzer-ID haben. Eine Benutzer-ID ist für Name und E-Mail gedacht. Das Schreiben von etwas wie LA5XYZ <[email protected]> DMR:2345678 in einen Benutzer-ID-String ist informell, unstrukturiert und in keiner standardisierten Weise maschinenlesbar. Galdra-Schlüssel halten das kryptografische Material sauber und legen die betriebliche Identität in einem Datensatzformat ab, das das Host-Werkzeug und der On-Chip-Speicher nativ verstehen.

In der Praxis kann ein einzelnes Gerät beide Arten von Schlüsseln ohne Konflikt halten. Die OpenPGP-Kartenanwendung bedient GnuPG über die standardmäßigen SIG-, DEC- und AUT-Slots. Der Kontaktspeicher hält Galdra-Schlüssel für betriebliche Arbeit – zum Beispiel Verschlüsseln für einen Funkkontakt nach Rufzeichen, Überprüfen einer Nachricht gegen eine DMR-Teilnehmer-ID oder Nachschlagen eines Kollegen anhand der Ausweisnummer. Die beiden Pfade stören einander nicht.Wenn jemand ein OpenPGP-Zertifikat besitzt, das von GnuPG auf dem Host verwaltet wird, und einen Galdra-Schlüssel im Kontaktspeicher des Chips, dann sind das zwei separate Schlüssel mit zwei separaten Fingerabdrücken. Der Galdra-Fingerabdruck – mit dem Präfix G: und abgeleitet mit BLAKE3 aus den rohen öffentlichen Schlüsselbytes – ist nicht der gleiche Wert wie der OpenPGP v4-Fingerabdruck des GnuPG-Zertifikats dieser Person. Das Host-Tool und das Gerät behandeln sie als unabhängige Identitäten. Gehen Sie nicht davon aus, dass der eine Fingerabdruck den anderen impliziert, ohne beide zu überprüfen.

Keine Schlüsselart bürgt automatisch für die sie umgebenden Bezeichnungen. Eine OpenPGP-Benutzerkennung (User ID) ist eine Selbsterklärung, bis jemand anderes sie signiert. Ein Rufnamen- oder DMR-Feld in einem Galdra-Kontakteintrag ist nur so vertrauenswürdig wie seine Quelle – ein Abruf von einem Schlüsselserver, eine manuelle Eingabe oder eine außerbandige Überprüfung, die Sie selbst durchgeführt haben. Die Herkunftsetiketten (SelfAttested, HostVerified, RegistrySync, OobVerified) dokumentieren wie ein Feld angekommen ist; sie ersetzen nicht die tatsächliche Überprüfung der Identität, die Ihnen wichtig ist.


Warum Rust?

Diese Firmware ist in Rust geschrieben, einer Systemprogrammiersprache, die für ebenso schnelle und hardwarenahe Programme wie C oder C++ ausgelegt ist, aber mit einem grundlegend anderen Ansatz in Bezug auf Sicherheit.

Speichersicherheit

Ein großer Teil der sicherheitsrelevanten Fehler in industriellen Codebasen geht auf Speicherunsicherheit zurück (Pufferüberläufe, Use-After-Free, Nullzeiger-Dereferenzierungen und Ähnliches). Das MSRC von Microsoft hat wiederholt berichtet, dass etwa 70% der in ihren eigenen Produkten adressierten CVEs in diese Kategorie fallen; das Chrome-Team hat ähnliche Anteile für Chrome veröffentlicht. Diese Zahlen beschreiben die Produkte dieser Anbieter, kein universelles Gesetz für alle Firmware, aber sie veranschaulichen, warum speichersichere Sprachen wichtig sind.

In sicherem Rust (der Standard) schließt der Borrow-Checker Datenrennen und die üblichen Speicherfehler mit undefiniertem Verhalten zur Kompilierzeit aus, ohne auf eine Garbage Collection angewiesen zu sein. Unsicherem Rust und FFI zu C können dennoch Speicherfehler einführen; sie müssen klein gehalten und überprüft werden.

Systemnahe Robustheit (mit Grenzen)

Rusts Grenzprüfung bei Slices und seine Eigentumsregeln reduzieren mehrere Fehlerklassen, die in eingebettetem C/C++-Code üblich sind:

  • Puffer- und Stacküberläufe, die den Kontrollfluss beschädigen, werden im sicheren Code oder durch indizierte Prüfung zur Laufzeit anstelle von stillem UB abgefangen.
  • Datenrennen in nebenläufigem sicherem Rust werden vom Compiler zurückgewiesen (Deadlocks werden nicht eliminiert – siehe unten).
  • unsafe-Blöcke müssen explizit sein; MMIO und rohe Zeiger für Register leben dort, sodass Prüfer die Audit-Oberfläche durchsuchen können (unsafe macht nicht unmöglich, MMIO falsch zu machen, nur leichter lokalisierbar).

Rust stoppt nicht von selbst logische Fehler wie eine Endlosschleife, die Flash verschleißt, oder die Wahl falscher Registerwerte. Diese bleiben Aufgaben der Entwicklung und Überprüfung.

Schutz von Schlüsselmaterial (Projektmuster)

Diese Codebasis verwendet gängige Rust-Muster für Geheimnisse; sie sind nicht automatisch für jeden Typ:

  • Typen wie zeroize::Zeroize / ZeroizeOnDrop löschen Puffer beim Drop; Aufrufer müssen sie aktiv nutzen.
  • Geheimvergleiche verwenden subtle::ConstantTimeEq (und Ähnliches), wenn Timing von Bedeutung ist – gewöhnliches == ist nicht automatisch konstantzeit.
  • Kein Copy bei Geheimnis-Wrappern reduziert versehentliche Duplizierung; Bereichstrennung verwendet unterschiedliche Typen und HKDF-Bezeichnungen (Kryptografische Abhängigkeitsrichtlinie).
  • Panic-Verhalten und Drop-Reihenfolge folgen den Rust-Regeln; verwenden Sie catch_unwind oder abort-Strategien, wo Ihre Plattform stärkere Garantien erfordert.

Von Grund auf prüfbar

unsafe muss im Quelltext ausgeschrieben werden, was die manuelle Überprüfung eingrenzt. Abhängigkeiten: Die kryptografische Richtlinie dieses Projekts bevorzugt geprüfte Rust-Crates (RustCrypto und andere); siehe die Tabelle in Kryptografische Abhängigkeitsrichtlinie – nicht jede Abhängigkeit stammt von einem einzigen Dachprojekt.

Was Rust nicht verhindert

Rust beseitigt nicht Deadlocks (z. B. falsch geordnete Mutex-Sperren), logische Fehler, fehlerhafte Protokolle, Flash-Verschleiß durch schlechte Schleifen, physische Angriffe (Glitching, Leistungsanalyse) oder Risiken aus einem korrekten Build des falschen Images. Es gewährleistet auch nicht die konstante Ausführungszeit auf jeder Hardware ohne sorgfältige Programmierung. Diese Bereiche beruhen auf Entwurf, Überprüfung, Tests und den Krypto- und Lieferkettenpraktiken des Projekts, die an anderer Stelle in dieser README beschrieben werden.

Verifikation (Tests und Fuzzing): Über die Sprache hinaus verwendet dieses Repository Unit-Tests, Integrationstests, dudect-Timing-Harness und libFuzzer (cargo-fuzz)-Ziele. Zusammenfassungen und Matrizen finden Sie unter Testergebnisse; die aufgezeichneten Laufmetadaten beginnen unter docs/TEST_RESULTS.md#run-metadata. Bestandene Tests beweisen nicht die Produktionsreife oder das Fehlen von Schwachstellen – sie verringern das Risiko. Sie entscheiden, ob die Ausführung von Builds oder Tests für Ihre Umgebung akzeptabel ist; eine virtuelle Maschine ist optional, begrenzt aber den Schadradius auf Ihrem Rechner.

Einrichten einer virtuellen Maschine zur Evaluierung

Jede gängige VM-Plattform ist geeignet – VirtualBox (frei, Open Source), QEMU (frei, Open Source, Kommandozeile) oder VMware. Als Gast wird Linux empfohlen, da die Build-Umgebung dort am besten unterstützt wird.

Schnellstart mit QEMU und Ubuntu:```bash

Install QEMU

sudo apt install qemu-system-x86 # Debian/Ubuntu host

or

brew install qemu # macOS host

Download an Ubuntu Server ISO and boot it

qemu-system-x86_64 -m 2G -cdrom ubuntu-24.04-live-server-amd64.iso

root@kitploit:~
Innerhalb der VM gelten die Standard-Build-Anweisungen. Die VM kann vor jedem Experiment **gesnapshotet** und bei Problemen sauber **zurückgesetzt** werden.

### Risikobewertung und Bereitstellung

**Letztendlich ist die Entscheidung, ob diese Firmware in Ihrer Umgebung sicher eingesetzt werden kann, nur von Ihnen zu treffen**, basierend auf Ihrer eigenen Risikobewertung, der Sensitivität dessen, was Sie schützen, und ob Sie vor der Bereitstellung auf ein unabhängiges Audit durch Dritte warten möchten. Dieses Projekt zielt darauf ab, Ihnen alle notwendigen Informationen zu geben, um diese Entscheidung selbst zu treffen.

Eine strukturierte Liste von Assets, Bedrohungen **T1–T14**, expliziten Nicht-Zielen und Verifikationslücken aus Q2 finden Sie in **[docs/THREAT_MODEL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/THREAT_MODEL.md)**.

---

## Zum Namen

**Galdr** ist die altnordische Praxis gesprochener oder gesungener Magie: Beschwörungen, die verwendet werden, um zu binden, zu schützen oder zu enthüllen. In den Sagen bezeichnet es den Akt des Zauberwirkens selbst, nicht nur die Worte. Manchmal auch verwendet, um magische Runeninschriften zu aktivieren, wie auf dem [Kragehul-I-Lanzenschaft](https://en.wikipedia.org/wiki/Kragehul_I), dem [Lindholm-Amulett](https://en.wikipedia.org/wiki/Lindholm_amulet), dem [Vadstena-Brakteaten](https://en.wikipedia.org/wiki/Vadstena_bracteate) und anderen Funden des älteren Futhark.

**Galdralag** ist die metrische Form, die für Galdr verwendet wird: strukturierte, präzise, regelgebundene Verse, bei denen das Muster Teil der Kraft des Zaubers ist. Das Suffix *lag* ist verwandt mit „Gesetz“ oder „Muster“.

**Runen** waren buchstäblich geheimes, kodiertes Wissen – die schamanische Verwendung war nur denen bekannt, die es verstanden.

---

## Dokumentation

**Glossar:** [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GLOSSARY.md) — Begriffe in **einfacher Sprache** erklärt (alphabetisch sortiert). Hier beginnen, wenn das README oder andere Dokumente jargonlastig erscheinen.

**Fehlerbehebung:** [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/DEBUG_INSTRUCTIONS.md) — Backtraces, Eingrenzen von `cargo test`, `xtask`-Abkürzungen, Firmware-Dreifachprüfungen, Fuzzing und was vor der Meldung eines Problems zu sammeln ist.

**KI-Assistenten (Claude, Cursor):** [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/CLAUDE.md) — Projektanweisungen für Code-Agenten. Cursor-spezifische Regeln: [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/.cursor/rules/).

**Alle Dateien durchsuchen:** [github.com/Supermagnum/Galdralag-firmware — `docs/`](https://github.com/Supermagnum/Galdralag-firmware/tree/main/docs)

**Hardware (USB-Dongle und Verwandtes):** Zwei KiCad-Bäume: [Hardware/kicad-files-usb/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-files-usb/) — `dabao_v3c` (USB-A-Token **ohne** micro-SD); und [Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/) — `dabao_v3c_sdcard` (gleiches Grundlayout **mit** micro-SD-Halter), Gerber-Dateien, BOM, Produktionsausgaben und [Pinout-Dokumentation](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/docs/pinout/README.md). Das PCB-Layout des USB-A-Dongles (Minimal-Token vs. Pico-Format-Eval) wird in [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) beschrieben.

| Dokument | Beschreibung |
|----------|-------------|
| [Hardware/kicad-files-usb/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-files-usb/) | **USB-Dongle** KiCad-Projekt `dabao_v3c` (ohne micro-SD); Gerber-Dateien, BOM, Produktionsausgaben; ergänzt [USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) |
| [Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/) | **USB-Dongle** KiCad-Projekt `dabao_v3c_sdcard` (micro-SD-Halter); Gerber-Dateien, BOM, Pinout unter [docs/pinout](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/docs/pinout/README.md); ergänzt [USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) |
| [docs/CODE_MAP.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CODE_MAP.md) | **Funktions- und Modulverzeichnis** des Workspace (pro Datei `pub fn` / Typen mit Zeilenankern) |
| [docs/CRATE_DEPENDENCIES.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CRATE_DEPENDENCIES.md) | **Upstream- vs. Projekt-Rust-Crates** und deren Abhängigkeiten |
| [docs/API_REFERENCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/API_REFERENCE.md) | Code-Map + **Anhang** zu IETF/I-D/GnuPG/Sequoia: Shamir-GF(256)-Konstruktion, GALDRA SHARE-Armour, ephemeres ECDH-Wire-Format, HKDF-Labels, Preimages; `galdrad`-Routen; rustdoc-Hinweise |
| [docs/ARCHITECTURE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/ARCHITECTURE.md) | Hochrangige Firmware-Architektur und Hauptsubsysteme |
| [docs/AUDIT_LOG.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/AUDIT_LOG.md) | Profil-Audit-Einträge (`cipher-profile`), OpenPGP `OpenPgpAudit`-Hook; **kein** Append-Only-RRAM-Log bisher implementiert |
| [docs/BIOMETRIC_API.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/BIOMETRIC_API.md) | Biometrisches Vorgate: Architektur, Wire-Format, Tresor-Layout; Integration teilweise implementiert |
| [docs/BIOMETRIC_DEVICE_GUIDE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/BIOMETRIC_DEVICE_GUIDE.md) | Wie man Unterstützung für ein neues biometrisches Hardware-Backend hinzufügt |
| [docs/BIOMETRIC_TESTING.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/BIOMETRIC_TESTING.md) | Testmethodik: ISO/IEC 30107-3 PAD-Metriken, Datensätze, Ausführungshinweise |
| [docs/FINGERVEIN_DEVICE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/FINGERVEIN_DEVICE.md) | ESP32-CAM offenes Fingervenen-Gerät: Hardware, Protokoll-Skizze, Lebenderkennung |
| [docs/SWEET_PLATFORM_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/SWEET_PLATFORM_INTEGRATION.md) | Sweet Platform-Handscanner: Hardware, Integration, Lebenderkennung, Datensatz |
| [docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRA-TOOL.md) | Host-Tools (`galdra`, `galdrad`, `galdra-gtk`): Workflows, Provisionierung, PIN-Richtlinie, Betriebsverhalten |
| [Supermagnum/Fulla](https://github.com/Supermagnum/Fulla) | **Fulla**: WoT-orientiertes OpenPGP-Public-Key-Register (Server-Repository und Implementierung). **Es läuft noch keine öffentliche Registerinstanz**; eine ist geplant. **`galdra keyserver push`** / **`galdra keyserver fetch`** und die optionale **`[keyserver]`**-Konfiguration zielen auf dieses Ökosystem ab – siehe auch [Web of Trust und Key-Signing-Partys](#web-of-trust-and-key-signing-parties). Ergänzende Design-Notizen befinden sich in [docs/server.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/server.md). |
| [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GLOSSARY.md) | **Einfachsprachiges Glossar** (A–Z) für nicht-technische Leser; technische Details bleiben in den verlinkten Dokumenten |
| [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/CLAUDE.md) | Anweisungen für **Claude** / KI-Code-Agenten; verweist auf [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/.cursor/rules/) für **Cursor** |
| [docs/GALDRALAG_DEV_REFERENCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRALAG_DEV_REFERENCE.md) | Toolchain, `xtask`-Befehle, Fuzzing- und Krypto-Test-Einstiegspunkte |
| [docs/dev-ref.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/dev-ref.md) | Workspace-Layout, Crates, HAL-Traits, USB/PSRAM-Verhalten, Sicherheitsinvarianten |
| [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/DEBUG_INSTRUCTIONS.md) | Fehlerbehebung: `RUST_BACKTRACE`, ausführliche Builds, eingegrenzte Tests, `xtask`-Rezepte, Embedded-Target-Prüfungen, Fuzzing-Hinweise, OpenPGP-Host-Prüfungen |
| [docs/KEY_LIFECYCLE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/KEY_LIFECYCLE.md) | Schlüsselerzeugung, -import, -export-Richtlinie, -rotation, Nullstellung, Shamir (wie in `vault` / OpenPGP abgebildet) |
| [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/OPENPGP_CARD.md) | OpenPGP-Card-Anwendung, GnuPG/CCID-Host-Einrichtung, Schlüsselslots, Algorithmen, udev |
| [docs/CIPHER_PROFILES.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CIPHER_PROFILES.md) | Cipher-Profil-System und -Konfiguration |
| [docs/CIPHER_PROFILE_SECURITY.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CIPHER_PROFILE_SECURITY.md) | Sicherheitsaspekte: Klartext-Profilkennungen, Verkehrsanalyse, BrainpoolP384r1-Außenwrapper-Begründung, verschlüsselte Kennungen, Wildcard-Eigenschaft |
| [docs/CESS_CONFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CESS_CONFORMANCE.md) | [CESS](https://github.com/Supermagnum/CESS/tree/main)-Konformität: Mode-A-Wire-Layout, `suite_id` aus [ALGORITHM-REGISTRY.md – Nachschlagetabelle](https://github.com/Supermagnum/CESS/blob/main/ALGORITHM-REGISTRY.md#cipher-suite-identifier-lookup-table), Abweichungsregister (beibehaltene AES/SHA-2 vs. CESS-CORE), Fahrplan |
| [crates/cess](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/crates/cess) | CESS Mode A: HKDF-BLAKE3 (`derive_k_outer`, `hkdf_blake3`), ChaCha-äußeres Versiegeln/Öffnen, `suite_id \|\| inner_blob`-Layout; siehe [CESS_CONFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CESS_CONFORMANCE.md) |
| [docs/EPHEMERAL_SESSION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/EPHEMERAL_SESSION.md) | Authentifiziertes ephemeres ECDH-Sitzungsprotokoll |
| [Supermagnum/CESS](https://github.com/Supermagnum/CESS) | **CESS** (*Cryptologically Enchanted Shamir's Secret*) – offene Spezifikation (normativer Text und Testvektoren) für Threshold-Secret-Sharing mit authentifizierter Verschlüsselung, passwortgeschütztem Share-Wrapping und optionalem post-quantum-Hybridschlüsselaustausch; getrennt von dieser Firmware, aber im gleichen Designbereich wie Shamir und Cipher-Profile hier |
| [docs/PQ_SIGNATURES.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/PQ_SIGNATURES.md) | Post-Quantum-zustandsbehaftete Signaturen (XMSS, LMS/HSS), Feature-Gating |
| [docs/Psram.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/Psram.md) | Optionales microSD-Täuschungsvolume und zugehöriges Verhalten |
| [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/RRAM_LAYOUT.md) | **4.194.304 Byte** On-Chip-RRAM: Vault-Offsets aus dem Quelltext, HAL-Mapping, Abnutzungs-/Nullstellungs-Notizen |
| [docs/TEST_RESULTS.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/TEST_RESULTS.md#run-metadata) | Öffnet bei **Run metadata**; Pipeline-Zusammenfassung, Vektoren, dudect, cargo-fuzz ([Abschnitt 6](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/TEST_RESULTS.md#6-cargo-fuzz-libfuzzer)), Schlüssellebenszyklus |
| [docs/THREE_FACTOR_AUTH.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/THREE_FACTOR_AUTH.md) | Token + PIN + optionale Biometrie: was dieses Repository implementiert vs. Platzhalter; Bedrohungsskizze |
| [docs/THREAT_MODEL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/THREAT_MODEL.md) | Bedrohungsmodell: Assets, Bedrohungen T1–T14, was verteidigt wird und was nicht, unverifizierte Elemente in Erwartung von Q2-Hardware, Audit-Status |
| [docs/PERFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/PERFORMANCE.md) | Leistungsnotizen |
| [docs/HARDWARE_BRINGUP_TEST_PLAN.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_BRINGUP_TEST_PLAN.md) | Q2-Ersthardware-Inbetriebnahme: CCID-Enumeration, `gpg --card-status`, USB CDC `galdralag-provision` für Erststart-PINs, dann `gpg --card-edit` / Krypto-Smoke-Tests |
| [docs/HARDWARE_VERIFICATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_VERIFICATION.md) | Hardware-Nullstellung: Simulation vs. Silizium-Verifikation |
| [docs/HARDWARE_TEST.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_TEST.md) | Hardwareorientierte Testnotizen |
| [docs/NFC_PN532_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/NFC_PN532_INTEGRATION.md) | PN532 / NFC: libnfc, Rust-Optionen, passiv für Tür vs. USB-Panel, Quorum mit Shamir und PIN |
| [docs/SDMMC_STORAGE_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/SDMMC_STORAGE_INTEGRATION.md) | `embedded-sdmmc` + SPI microSD als optionaler Massenspeicher; BOM-Alternative zu PSRAM |
| [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) | Wie man ein USB-A-Dongle-PCB aus der Dabao-Referenz herstellt: Pico-Format-Eval ist für Firmware-Inbetriebnahme; dies entfernt den GPIO-Header für ein Minimal-Token; KiCad, FreeCAD, 5 V / 500 mA vs. USB-C PD, QSPI-PSRAM-Routing |

Die gleichen Pfade sind auf GitHub unter [`tree/main/docs`](https://github.com/Supermagnum/Galdralag-firmware/tree/main/docs) und [`tree/main/Hardware`](https://github.com/Supermagnum/Galdralag-firmware/tree/main/Hardware) verfügbar.

---

## OpenPGP- und GnuPG-Kompatibilität

Die Firmware implementiert die **OpenPGP-Card-Anwendung** (dokumentiert als Version **3.4.1** in [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/OPENPGP_CARD.md)). Dies ist dieselbe Geräteklasse, die GnuPG für **OpenPGP-Smartcards** über **CCID/USB** ansteuert: Der Host benötigt einen normalen Smartcard-Stack (`pcscd`, `ccid`-Treiber, GnuPGs `scdaemon`). **Kein benutzerdefinierter kryptografischer Host-Treiber** ist über das hinaus erforderlich, was Sie für jede OpenPGP-Card verwenden würden.

**Was dies auf dem Host ermöglicht (sobald das Gerät als CCID-Leser sichtbar ist):**

| Bereich | Anmerkungen |
|------|--------|
| **GnuPG-Workflows** | `gpg --card-status`, `gpg --card-edit`, Ver- und Entschlüsselung sowie Signatur mit Schlüsseln auf der Karte |
| **SSH** | `gpg-agent` mit `enable-ssh-support` und der üblichen `SSH_AUTH_SOCK`-Einrichtung |
| **Mail und Dateien** | Clients, die GnuPG verwenden (z. B. Thunderbird, Evolution, Kleopatra) und standardmäßige `gpg`-Dateiverschlüsselung |
| **Andere Werkzeuge** | Alles, was die OpenPGP-Card + CCID auf die gleiche Weise wie GnuPG anspricht |

**Schlüsselslots (typische Vorgaben):** **SIG** (Signatur), **DEC** (Entschlüsselung / ECDH), **AUT** (Authentifizierung, z. B. SSH). Algorithmen sind pro Slot wählbar (Brainpool-Kurven, NIST P-256/P-384, Ed25519 / X25519, RSA). Die vollständige Tabelle und das `key-attr`-Verhalten sind in [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/OPENPGP_CARD.md) beschrieben.

**Nicht von OpenPGP-Card / GnuPG abgedeckt:** **WebAuthn / FIDO2** ist ein anderes Protokoll und liegt außerhalb des Anwendungsbereichs dieser Card-Anwendung (siehe gleiches Dokument).

**OpenPGP-Card vs. OpenPGP-Nachrichten:** Die **Card**-Spezifikation definiert, wie das Token PINs, Schlüsselslots und Kartenoperationen über CCID bereitstellt. **GnuPG** nutzt dies über `scdaemon`. Das **OpenPGP-Nachrichtenformat** für Dateien und E-Mails (RFC 4880 und Nachfolger) ist eine **Host-Seite**: Die Karte liefert Schlüssel; GnuPG wendet das Nachrichtenformat auf dem PC an. Weder die Card-Spezifikation noch RFC 4880 definieren **Shamir-Splitting**, **ephemere ECDH-Sitzungen** oder **Cipher-Profile** – diese sind [firmwarespezifisch](#standards-vs-firmware-specific-features).

**Integrationsstatus:** Die OpenPGP- und CCID-Logik lebt in **`usb-personality`**, **`baochip-openpgp`** und dem **Xous**-Dienst **`usb-bao1x`** (siehe **xous-core**). Der optionale **`galdralag-service`** (`services/galdralag`) läuft als separater Xous-Prozess, verbindet sich mit **`usb-bao1x`** für **CCID**-IPC und überbrückt **PDDB**-Provisionierungsdaten in **RRAM**; Build und **`baosec`**-Registrierung: [services/galdralag/README.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/services/galdralag/README.md) und **`cargo run -p xtask -- build-and-register`**. Speicherlayout: [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/RRAM_LAYOUT.md). **End-to-End-GnuPG auf echter Hardware** erfordert noch ein vollständiges Xous-Image (mit **`ccid-openpgp`**), einen funktionierenden Host-CCID-Stack (`pcscd`, Treiber) und Punkte unter [Bekannte Einschränkungen / offene Arbeiten](#known-limitations--open-work), die für Ihr Auslieferungsziel adressiert sind.

## Token-Sitzung und Schlüsselexport

**Physisches Trennen (Abziehen):** Der Host verliert das USB-Gerät; jeder laufende Vorgang schlägt fehl, bis der Token wieder angeschlossen und neu enumeriert wird. Auf dem Gerät wird die OpenPGP-**Card-Sitzung** gelöscht: Der **PIN-Verifikationszustand** überlebt das Ausschalten oder Entfernen nicht, sodass **Signieren, Entschlüsseln und andere geschützte Operationen nach erneuter Verbindung eine erneute PIN-Eingabe erfordern**, wie bei anderen OpenPGP-Smartcards. **Privates Schlüsselmaterial bleibt im versiegelten Tresorspeicher auf dem Token**; das Abziehen löscht es nicht, es sei denn, ein separater **Nullstellungs-** oder Löschpfad wird ausgeführt.

**Was das Gerät verlassen darf:** Konstruktionsbedingt ist nur **öffentliches Schlüsselmaterial** berechtigt, die USB-Verbindung zu überqueren (z. B. OpenPGP-**öffentliche** Schlüsselpakete und zugehörige Daten, die die Card-Spezifikation dem Host bereitstellt). **Private** Schlüssel, rohe geheime Skalare und versiegelte Schlüsselblobs **verlassen** das Gerät in normalen Firmware-Pfaden **nicht**; private Schlüsseloperationen laufen **auf dem Token**. Der Host erhält **kryptografische Ergebnisse** (Signaturen, entschlüsselten Klartext für Card-unterstützte Entschlüsselungsworkflows), wenn die Standardbefehle dies erfordern, jedoch keine portable Kopie des privaten Schlüssels.

**Importieren von Schlüsseln auf das Gerät:** Es ist auch möglich, **öffentliche Schlüssel** in den Token zu importieren (z. B. Vertrauensanker, Peers-Zertifikate oder OpenPGP-öffentliche Pakete für die On-Device-Verifikation). Der Firmware-**Tresor** bietet **Public-Key-Slots** für nicht geheimes Material (`crates/vault/src/public_key_vault.rs`). Host-Tooling zum Laden dieser Slots wird in [docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRA-TOOL.md) beschrieben, sobald die Integration reift.

---

## Web of Trust und Key-Signing-Partys

OpenPGP und **GnuPG** verwenden ein dezentrales Vertrauensmodell – das **Web of Trust** – um zu helfen zu verifizieren, wem welche Schlüssel gehören und ob einem bestimmten **öffentlichen Schlüssel** vertraut werden soll. Dieses Modell ist vollständig **Host-seitig**. Wo Chip-gestützte Beglaubigungen wie [German eID and Governikus](#german-eid-and-governikus-as-a-trust-anchor-for-public-keys) nicht verfügbar oder ungeeignet sind, ist es die übliche dezentrale Alternative (**Key-Signing-Partys**, Signaturen auf Zertifikaten); wo sie **verfügbar** sind, können beide Ansätze als komplementäre Pfade koexistieren.

**Galdralag-Fingerabdruck (`G:`):** Für persönliche Verifikations-Workflows kann **Galdra** einen **gerätegebundenen** Fingerabdruck anzeigen, der vom **SIG**-Public-Key des Tokens abgeleitet ist (**BLAKE3-160**, `G:`-Präfix). Es ist **kein** OpenPGP-v4-Zertifikatsfingerabdruck. Es ist **nur** verfügbar, wenn das aktive **Cipher-Profil** **`ephemeral_ecdh: false`** hat; eingebaute Profile standardmäßig **`ephemeral_ecdh: true`**, daher fügen Sie für Workflows, die diese Kennung neben **WoT**-ähnlicher Host-Signatur benötigen, typischerweise ein Benutzerprofil mit **`galdra profile add ... --no-ephemeral-ecdh`** hinzu. Definition in einfacher Sprache und Formatspezifikation: [Galdralag-Fingerabdruck](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GLOSSARY.md#g). Lebenszyklus, Rotationsrichtlinie und das ephemere ECDH-Gate: [KEY_LIFECYCLE.md — Galdralag-Fingerabdruck](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/KEY_LIFECYCLE.md#galdralag-fingerprint-host).

### Abrufen Ihres Galdralag-Fingerabdrucks

Der Host gibt einen String aus, der **immer mit `G:` beginnt** (BLAKE3-160 über die SIG-öffentlichen Schlüsselbytes, **40 hexadezimale Kleinbuchstaben** nach dem Präfix in kanonischer Form).

1. Installieren Sie **[Galdra](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRA-TOOL.md)** auf dem Host und stellen Sie sicher, dass **PC/SC** funktioniert (**`pcscd`**, **`libpcsclite`**), damit das Tool CCID mit dem Token sprechen kann (siehe [Compile and install host tools](#compile-and-install-host-tools-galdra-galdrad-galdra-gtk)).
2. Verbinden Sie den Token (entsperren Sie ihn, wenn Ihr Workflow dies erfordert).
3. Wählen Sie ein **Cipher-Profil** mit **`ephemeral_ecdh: false`**. Bestätigen Sie mit **`galdra profile show <name>`** (`ephemeral_ecdh: off`). Der Standardprofilname **`standard`** hat normalerweise **`ephemeral_ecdh: on`**; erstellen Sie bei Bedarf eines mit **`galdra profile add <name> ... --no-ephemeral-ecdh`**.
4. Führen Sie aus:```bash
galdra identity fingerprint
# If you use a non-default profile:
galdra identity fingerprint --profile <name>

Maschinenlesbare Ausgabe: galdra --emit json identity fingerprint (optional --profile <name>).

Was ist das Web of Trust?

OpenPGP-konforme Implementierungen enthalten ein Zertifikatsprüfungsschema, das bei der Überprüfung der Schlüsseleigentümerschaft hilft; sein Betrieb wird als Web of Trust bezeichnet. OpenPGP-Zertifikate (ein oder mehrere öffentliche Schlüssel plus Besitzer-/Benutzer-ID-Material) können von anderen Benutzern digital signiert werden, die dadurch die Verbindung zwischen diesem öffentlichen Schlüssel und der im Zertifikat genannten Person oder Entität bestätigen.

Wie es funktioniert

  1. Schlüsselverteilung. Sie veröffentlichen oder senden Ihren öffentlichen Schlüssel (z.B. einen, der mit gpg --full-generate-key auf dem Host erstellt wurde, oder auf einem OpenPGP-fähigen Token).
  2. Identitätsüberprüfung. Andere überprüfen, ob der öffentliche Schlüssel wirklich Ihnen gehört – in der Regel persönlich oder über Kanäle, denen sie bereits vertrauen.
  3. Schlüsselsignierung. Wenn sie zufrieden sind, signieren sie Ihr Zertifikat mit ihrem eigenen privaten Schlüssel.
  4. Vertrauensweitergabe. Jede Signatur fügt dem Netzwerk Beweise hinzu; Personen, die dem Signierenden vertrauen, können Ihrem Schlüssel entsprechend ihren GnuPG-Vertrauenseinstellungen teilweises Vertrauen entgegenbringen.

Key-Signing-Partys

Eine Key-Signing-Party ist ein persönliches Treffen, bei dem die Teilnehmer Schlüsselfingerabdrücke austauschen und die Identität des jeweils anderen überprüfen, bevor sie später Zertifikate signieren.

Typische Merkmale:

  • Die Teilnehmer treffen sich persönlich und überprüfen die Identität mit einem Ausweisdokument, organisatorischen Berechtigungen oder anderen vereinbarten Nachweisen.
  • Nach der Überprüfung signieren die Teilnehmer die öffentlichen Schlüssel der jeweils anderen (normalerweise nach der Veranstaltung – siehe Arbeitsablauf unten).

Das ergibt einen sozialen Graphen: Wenn Alice Bob vertraut und Bob Charlies Schlüssel signiert hat, kann Alice sich entscheiden, Charlies Schlüssel zu vertrauen, abhängig von Vertrauenstiefe und -richtlinie.

Warum solche Veranstaltungen wichtig sind:

  • Persönliche Überprüfung kann stärker sein als eine rein entfernte Bestätigung, um einen Schlüssel mit einem Menschen zu verbinden.
  • Vertrauensnetzwerk. Beweise verbreiten sich über paarweise Treffen hinaus für diejenigen, die Besitzervertrauen und Signaturketten verwenden.
  • Gemeinschaftsnorm. Wird in Amateurfunkkreisen, Open-Source-Projekten und Kryptografie-Konferenzen verwendet.
  • Operative Hygiene. Reduziert die Übernahme falscher oder ausgetauschter Schlüssel, wenn die Verfahren eingehalten werden.

Typischer Arbeitsablauf bei einer Key-Signing-Party

Partys vermeiden normalerweise Computer während des Identitätsaustauschs, sodass Angreifer weniger Chancen haben, ausgetauschte Schlüssel oder Malware auf gemeinsamen Rechnern einzuschleusen.

Vor der Veranstaltung. Berechnen und notieren Sie Ihren Fingerabdruck (einen aus dem Hash abgeleiteten Digest des öffentlichen Schlüssels – kurz genug, um zuverlässig zu vergleichen). Verlassen Sie sich nicht darauf, zu diesem Zeitpunkt vollständige Schlüssel auf Papier auszutauschen, es sei denn, Ihre Organisatoren geben etwas anderes vor.```bash

Key fingerprint for YOUR_KEY_ID (example)

gpg --fingerprint YOUR_KEY_ID

root@kitploit:~
Bringen Sie den Fingerabdruck auf Papier oder einem anderen dauerhaften Medium an (Beispielform: `ABCD 1234 EFGH 5678 90AB CDEF 1234 5678 90AB CDEF`).

**Während der Veranstaltung (nur Fingerabdrücke).** Tauschen Sie **Fingerabdrücke** aus, überprüfen Sie die IDs und notieren Sie, welche Fingerabdrücke zu welcher verifizierten Person gehören. Bestätigen Sie, dass die behauptete Identität jedes Teilnehmers mit den geprüften Dokumenten übereinstimmt.

**Nach der Veranstaltung.** Rufen Sie die vollständigen **öffentlichen Schlüssel** von **Keyservern** oder durch direkte Verteilung ab; bestätigen Sie, dass die heruntergeladenen Schlüssel mit den auf Papier notierten **Fingerabdrücken** übereinstimmen; **signieren** Sie die von Ihnen verifizierten Schlüssel; laden Sie die Signaturen optional **hoch**, damit andere sie nutzen können.

### Fingerabdrücke anstelle vollständiger Schlüssel bei der Veranstaltung

- **Operative Sicherheit.** Verhindert, dass Substitutionsangriffe mit verifizierten Fingerabdrücken verknüpft werden, anstatt während der Veranstaltung willkürlichen Maschinen zu vertrauen.
- **Einfachheit.** Fingerabdrücke passen auf Papier und lassen sich schnell vorlesen oder vergleichen.
- **Verifizierung.** Nach dem Herunterladen wird durch Neuberechnung des Fingerabdrucks die Integrität durchgehend geprüft.

### Keyserver

**Keyserver** sind vernetzte Repositorien, die **öffentliche** OpenPGP-Schlüssel (sowie Aktualisierungen wie Signaturen und Widerrufszertifikate) speichern und replizieren. Sie machen Schlüssel über **User ID**, **Key ID** oder **Fingerabdruck** auffindbar und ermöglichen eine breitflächige Verteilung für das Vertrauensnetz.

So verhalten sie sich im Prinzip:

- **Verteilte Replikation.** Das Hochladen auf einen Server, der an einem Sync-Mesh teilnimmt, verbreitet sich oft auf Peers (klassische **SKS**-ähnliche Pools funktionierten auf diese Weise).
- **Synchronisation.** Neue Schlüssel, Signaturen und Widerrufszertifikate verbreiten sich gemäß den Richtlinien und der Konnektivität jedes Servers.
- **Öffentlicher Lesezugriff.** Nur **öffentliches** Material ist zur Veröffentlichung bestimmt; **private Schlüssel** dürfen niemals hochgeladen werden.

**Datenschutz.** Veröffentlichte Schlüssel legen **User IDs** offen (häufig einschließlich E-Mail-Adressen). Behandeln Sie Uploads als **öffentlich und langlebig** auf vielen Servern; laden Sie **Widerrufszertifikate** hoch, wenn ein Schlüssel zurückgezogen werden muss. Die Richtlinie variiert je nach Betreiber ([keys.openpgp.org](https://keys.openpgp.org/) unterscheidet sich von Legacy-Pools).

**Peer-Topologie.** Graphen der Serverbeziehungen erscheinen unter [spider.pgpkeys.eu/graphs/](https://spider.pgpkeys.eu/graphs/); SKS-orientierte Peer-Listen unter [spider.pgpkeys.eu/sks-peers](https://spider.pgpkeys.eu/sks-peers).

### Keyserver verwenden```bash
# Upload your signed key (after local signing)
gpg --send-keys YOUR_KEY_ID

# Search by mail or name (behaviour depends on keyserver configured in gpg.conf)
gpg --search-keys [email protected]

# Refresh imported keys from configured keyservers
gpg --refresh-keys

Häufige Keyserver

ServerAnmerkungen
keys.openpgp.orgWeit verbreitet; zustimmungsorientierte Verifizierung für E-Mail-verknüpfte Benutzer-IDs
pgp.mit.eduVon MIT gehosteter Server, historisch mit SKS-Ära-Meshes verbunden
pool.sks-keyservers.netLegacy-Pool-Hostname, verbunden mit dem ehemaligen SKS-Ökosystem; Erreichbarkeit variiert heute

Best Practices und Warnhinweise

  • Veröffentlichen Sie Ihren öffentlichen Schlüssel (oder Signaturen auf den Schlüsseln anderer), wenn Ihre Richtlinie eine breitere Auffindbarkeit erlaubt.
  • Führen Sie regelmäßig gpg --refresh-keys aus, damit Widerrufe und neue Signaturen lokal propagiert werden.
  • Schlüsselsignierung bestätigt Identitätsverknüpfung, nicht Chiffrierstärke – signieren Sie nur nach angemessener Verifizierung.
  • Eine Signatur bedeutet: Sie bezeugen, dass dieser öffentliche Schlüssel zum Zeitpunkt der Signierung zu dieser verifizierten Identität gehörte; andere wählen weiterhin selbst ihre Vertrauenspfade.
  • Bevor Sie einen Galdralag-Fingerprint veröffentlichen, bestätigen Sie mit galdra profile show <name>, dass das aktive Profil ephemeral_ecdh: false hat.

Für das autoritative Verhalten von gpg, Vertrauensmodelle und Verteilungsoptionen siehe das GnuPG-Handbuch und die Upstream-Dokumentation.

Das Fulla-Projekt (Supermagnum/Fulla auf GitHub) beherbergt die WoT-konforme Registrierungsserver-Arbeit: Implementierung und sich entwickelnde Spezifikation zum Speichern öffentlicher Schlüssel von Mitwirkenden sowie optionaler Amateurfunk-Label, Post-Hinweise, organisation (JSON-Schreibweise), role, note, badge_number, phone_number und verwandte Spalten, die mit Galdra-Kontaktmetadaten abgestimmt sind. galdra keyserver push sendet POST /api/v1/keys JSON (einschließlich armored_public_key, email und dieser optionalen Felder, wenn Sie CLI-Flags übergeben); galdra keyserver fetch und die [keyserver]-Konfigurationsstanza sind in / entsprechend dieser Richtung implementiert. ; ein öffentlich betriebener Dienst wird in Zukunft erwartet. Zusätzlicher historischer Entwurfstext befindet sich in .


Standards vs. firmwarespezifische Funktionen

Verschiedene Teile dieses Projekts entsprechen unterschiedlichen Standards. GnuPG-Interoperabilität ist auf das beschränkt, was die OpenPGP-Kartenanwendung und CCID definieren. Andere Funktionen sind in der Firmware (und manchmal in Galdra-Host-Tools) implementiert, aber nicht etwas, das Sie über standardmäßige gpg-Karten-Workflows aufrufen können.

Für das tägliche Karten-Verhalten verlassen Sie sich auf docs/OPENPGP_CARD.md. Für tresor-exklusive oder token-spezifische Funktionen verwenden Sie die Firmware dieses Repositorys und die Galdra-Tool-Dokumentation.


Shamir-Geheimnisteilung und Festplattenverschlüsselung

Die OpenPGP-Karte und GnuPG-Stacks definieren kein Shamir's Secret Sharing (SSS) für Schlüssel oder zum Entsperren von Datenträgern. SSS ist dennoch neben der normalen Verschlüsselung nützlich: Es ersetzt fast nie die symmetrische Chiffre auf der Festplatte — es schützt das kleine Geheimnis (Master-Schlüssel oder Passphrase), das diese Verschlüsselung entsperrt.

Muster (immer die gleiche Idee):

Häufige Ansätze in der Praxis

1. LUKS (Linux) und externes SSS

LUKS verschlüsselt das Volume mit einem Master-Schlüssel. Sie können diesen Schlüssel (oder ein Key-Slot-Geheimnis, je nach Verfahren) extrahieren, mit einem SSS-Werkzeug aufteilen und die Anteile getrennt speichern. Zum Entsperren kombinieren Sie K Anteile, rekonstruieren das Schlüsselmaterial und übergeben es an cryptsetup (siehe Dokumentation Ihrer Distribution; falscher Umgang mit Schlüsseln kann den Zugriff blockieren).

Beispielhafte Verwendung der ssss-Dienstprogramme ("Shamir's Secret Sharing Scheme") (Namen und Paketierung variieren je nach Betriebssystem):```bash

Example: 3-of-5 split of a file containing key material (illustrative only)

ssss-split -t 3 -n 5 < luks_master.key

Later: combine shares, then unlock (adapt device path and cryptsetup flow)

ssss-combine -t 3 | cryptsetup luksOpen /dev/sdX vault

root@kitploit:~
**2. HashiCorp Vault**

[Vault](https://www.hashicorp.com/products/vault) verwendet Shamir zum **Entsiegeln**: der Speicherverschlüsselungsschlüssel wird bei der Initialisierung aufgeteilt (z. B. 3-von-5 Operatoren haben jeweils einen Anteil). Nach einem Neustart müssen **K** Anteile eingegeben werden, um zu entsiegeln. Das gleiche **K-von-N auf einem Masterschlüssel**-Muster wie bei LUKS, angewendet auf eine Secrets-Engine statt auf ein Blockgerät.

**3. Galdralag firmware (`vsss-rs`)**

Dieses Repository verwendet [`vsss-rs`](https://crates.io/crates/vsss-rs) (RustCrypto-Ökosystem) für Shamir auf dem Gerät. Die gleiche **Schichtung** gilt, wenn Sie sie mit Bulk-Verschlüsselung kombinieren:

- Generieren Sie einen zufälligen 256-Bit (oder angemessenen) Masterschlüssel.
- Verschlüsseln Sie das Laufwerk oder den Bulk-Speicher mit **AES-GCM** oder **ChaCha20-Poly1305** unter Verwendung dieses Schlüssels (dies entspricht den geprüften symmetrischen crates des Arbeitsbereichs).
- Verwenden Sie `vsss-rs`, um den Masterschlüssel in **N** Anteile mit Schwellwert **K** aufzuteilen.
- Speichern Sie die Anteile in Vault-Slots, anderen Geräten oder bei Schlüsselinhabern.
- Sammeln Sie beim Booten oder Wiederherstellen **K** Anteile, rekonstruieren Sie, und verwenden Sie dann **HKDF** (oder Ihre Richtlinie) für domänengetrennte Unterschlüssel, falls erforderlich.

**4. VeraCrypt**

VeraCrypt implementiert SSS nicht intern. Das gleiche **externe** Muster gilt: Teilen Sie das **Passwort oder das Keyfile-Material** mit einem SSS-Werkzeug; versuchen Sie nicht, den Chiffretext des Volumes mit Shamir aufzuteilen.

### Hybridmuster (große Datenmengen)

SSS ist für **kleine Geheimnisse** (Schlüsselgröße). Sie wenden Shamir **nicht** auf Multi-Gigabyte-Chiffretext an. Die übliche Schichtung:```text
[Drive data]
    encrypted by
[Symmetric master key, e.g. 32-byte AES-256]
    split by SSS into
[Share 1] [Share 2] ... [Share N]
    (each share may be wrapped with a recipient's PGP key, HSM, or offline media)

Das deckt sich mit dem, was dieses Projekt bereits beinhaltet: aes-gcm / chacha20poly1305 für ruhende Daten, vsss-rs zur Aufteilung des Masterschlüssels, hkdf zur Ableitung nach der Rekonstruktion.

Wichtige praktische Entscheidungen

EntscheidungTypische Optionen

Der operative Schlüsselumgang mit LUKS und vollständiger Festplattenverschlüsselung ist sicherheitskritisch; befolgen Sie die Anleitungen und Bedrohungsmodelle des Herstellers und der Distribution für Ihre Umgebung.

Shamir plus Brainpool: Beispiel und institutionelle Eignung

Ein konkretes Muster ist ein Laufwerk oder Volume, das mit Brainpool-Kurven verschlüsselt ist, wenn Ihr Stack diese benötigt (z. B. ECDH/ECDSA um einen Masterschlüssel), kombiniert mit Shamir's Secret Sharing auf dem Schlüsselmaterial, das diese Verschlüsselung entsperrt (das gleiche Small-Secret-Layering wie oben: SSS schützt den Schlüssel, nicht Multi-Gigabyte-Chiffretext). Wenn und sobald die Firmware und die Hostsoftware, die diesen Workflow implementieren, unabhängig auditiert wurden, kann eine solche Kombination für Organisationen wertvoll sein, die sowohl Quorum-Richtlinien als auch nationale Kryptoprofile gleichzeitig erfüllen müssen.

Warum Brainpool-Kurven (z. B. BrainpoolP256r1, BrainpoolP384r1) in diesem Zusammenhang oft diskutiert werden:

  • Das BSI (Bundesamt für Sicherheit in der Informationstechnik) schreibt Brainpool in vielen Einsatzprofilen vor; Anforderungen tauchen in EU-Regierungs- und NATO-Beschaffungs- und Richtlinienumgebungen auf.
  • Parameter sind in RFC 5639 vollständig spezifiziert und verifizierbar, was Bedenken hinsichtlich "Nothing-up-my-sleeve" im Vergleich zu älteren Debatten um einige NIST-Kurvengenerierungsmethoden reduziert.
  • IETF-Präzedenzfall: RFC 5639 ist bereits auf dem Standards Track für diese Kurven.

Szenarien, in denen die Kombination von SSS mit Brainpool-Kryptografie institutionelle Bedürfnisse adressiert (illustrativ; keine rechtliche oder Compliance-Beratung):

eID und Governikus als Vertrauensanker für öffentliche Schlüssel

Falls eine Governikus-artige OpenPGP-Signierung oder eine vergleichbare chipbasierte nationale eID-Beglaubigung für Ihre Gerichtsbarkeit oder Ihren Workflow nicht verfügbar oder praktikabel ist, beschreibt Web of Trust und Key Signing Parties einen alternativen hostseitigen Ansatz basierend auf persönlicher Verifizierung und Drittsignaturen auf Zertifikaten.

Governikus OpenPGP-Key-Authentifizierung ist ein Online-Dienst, der im Auftrag des BSI (Bundesamt für Sicherheit in der Informationstechnik) betrieben wird. Nachdem der Einsender sich mit einer deutschen eID-fähigen ID-Karte, einer EU eID-Karte für EU-Bürger oder einem elektronischen Aufenthaltstitel authentifiziert hat, prüft der Dienst, ob der authentifizierte rechtliche Name mit der OpenPGP-User ID auf dem hochgeladenen öffentlichen Schlüssel übereinstimmt. Falls ja, signiert Governikus diesen öffentlichen Schlüssel mit dem Dienstsignierschlüssel, sodass Dritte die Beglaubigung überprüfen können.

Ein praktischer Workflow mit dieser Firmware: Generieren Sie einen Brainpool-asymmetrischen Schlüssel auf dem Token (OpenPGP-Kartengenerierung wie üblich), exportieren Sie den öffentlichen Schlüssel oder das Zertifikat auf den Host, führen Sie den Governikus-Übermittlungsablauf inklusive eID-Authentifizierung (typischerweise AusweisApp und NFC-Kartenlesen) durch und verwenden Sie den signierten öffentlichen Schlüssel, der vom Dienst zurückgegeben wird (z. B. aus E-Mail-Verteilung). Der private Schlüssel bleibt auf Galdralag.

Keiner der beiden Wege ersetzt den anderen. Die eID und der Governikus-Schritt binden den öffentlichen Schlüssel an eine gegenüber dem Chip verifizierte Identität zum Zeitpunkt der Übermittlung; sie liefern keine Perfect Forward Secrecy, kein Shamir K-of-N für langfristiges Schlüsselmaterial oder Chiffreprofile für Massendaten – dies sind firmwarespezifische Funktionen, die an anderer Stelle in dieser README beschrieben werden. Der eID-Chip und der umgebende Ausstellungsprozess implementieren ebenfalls nicht von sich aus das ephemere ECDH- und Kaskadenverhalten des Tokens. Umgekehrt passt ein auf dem Gerät generierter Brainpool-OpenPGP-Schlüssel zwar zum bereits für Brainpool-Institutionelle Nutzung diskutierten BSI/EU-Einsatzkontext, aber ohne einen externen Beglaubigungsschritt müssen Korrespondenten auf andere Mittel zurückgreifen, um einen Fingerabdruck mit einer natürlichen Person zu verknüpfen.

EbeneRolle
Öffentlicher OpenPGP-Schlüssel (z. B. Brainpool auf Galdralag)Kryptografische Struktur und On-Token-Private-Key-Kontrolle; Kurvenwahl folgt BSI TR-03111-klassen Erwartungen (siehe die und die TR-03111-Diskussion in )

Einschränkung: Die Verifizierung ist namenbasiert. Wenn zwei Personen den gleichen rechtlichen Namen in den vom Dienst verglichenen Feldern haben, unterscheidet die Beglaubigung sie nicht; sie bestätigt die Identitätsverknüpfung mit diesem Namen zum Zeitpunkt der Beglaubigung, nicht die globale Eindeutigkeit. Übliche OpenPGP-Bedenken (E-Mail-Bindung, Schlüsselrollover, Widerruf) bleiben bestehen.

Policy-Konformität: Dasselbe BSI, das Brainpool-bezogene technische Leitlinien definiert (BSI TR-03111; Konformitätsvektoren unter crates/vault/tests/bsi_vectors/), steht auch hinter dem Governikus-eID-Signierprozess, was in deutschen und EU-Umgebungen oft relevant ist, in denen Brainpool bereits erforderlich oder bevorzugt ist – siehe Shamir plus Brainpool: Beispiel und institutionelle Eignung.

Weiterer Rahmen (Forschungsnotiz, keine abgeschlossene Erhebung): Das gleiche Muster – Bindung eines öffentlichen OpenPGP-Schlüssels an eine chipverifizierte Identität – ist prinzipiell überall dort anwendbar, wo nationale eID existiert; welche Anbieter einen Governikus-ähnlichen Signierschritt anbieten und unter welchen Regeln, ist eine separate Frage, die es wert ist, bei Ausweitungen untersucht zu werden. Andere EU-Mitgliedstaaten betreiben kartenbasierte eID-Ökosysteme unter eIDAS, die vergleichbare oder stärkere Vertrauensanker als der deutsche Weg allein unterstützen könnten; diese README katalogisiert sie nicht.

Estland und Belgien haben beide NIST P-384 auf dem Chip übernommen, nicht Brainpool, während Deutschlands öffentliches BSI-Profil auf Brainpool zentriert ist (siehe oben). Galdralag unterstützt bereits Brainpool, NIST P-256/P-384 und RSA für OpenPGP-fähige Nutzung (Asymmetrisch / Schlüsselvereinbarung), sodass das gleiche Vertrauensankermuster nicht allein von der Übereinstimmung mit Deutschlands Kurvenpräferenz abhängt.

Außerhalb des EU/EWR ist das kartenbasierte Vertrauensankermuster schwieriger anzuwenden: die USA haben eine Chipkarte (PIV), aber sie ist auf Bundespersonal beschränkt und befindet sich in X.509/FPKI, nicht in OpenPGP integriert; Kanada hat keine nationale On-Chip-Signierkarte im oben verwendeten Sinne. Das schränkt das Muster hauptsächlich auf Rechtsräume mit universell ausgestellten staatlichen Chip-Ausweisen ein – der EU eIDAS-Raum ist derzeit das Gebiet, in dem das Modell am stärksten ist.


Standards-Prozess: Shamir und ephemerer Schlüsselaustausch

Wenn und sobald die Hardware einen verbraucherreifen Zustand erreicht, müssten Personen, die möchten, dass Shamir's Secret Sharing und authentifizierter ephemerer Schlüsselaustausch Teil des interoperablen OpenPGP / GnuPG-Verhaltens werden (anstatt nur firmwarespezifischer Funktionen), Standardisierungs- und Implementierungsänderungen anderweitig vorantreiben. Dieses Repository spricht nicht für die IETF oder GnuPG; die folgenden Orte sind die, an denen solche Änderungen normalerweise verfolgt werden.

CESS (verwandter offener Standard)

CESS — Cryptologically Enchanted Shamir's Secret — ist ein offener kryptografischer Standard für Threshold Secret Sharing zusammen mit chiffreunabhängiger authentifizierter Verschlüsselung, passwortbasierter Aktienverpackung und optionalem Post-Quantum-Hybrid-Schlüsselaustausch. Das CESS-Repository enthält die normative Spezifikation, Algorithmen-Registry, Testvektoren und den Konformitätstester.

Diese Firmware ist konform zu CESS für die hier implementierten Konstruktionen: Die interoperablen Aktien- und Umschlagregeln der Spezifikation stehen neben den gleichen Shamir-, Brainpool- und Chiffreprofil-Themen, die an anderer Stelle in dieser README beschrieben werden. Der normative Text ist getrennt von diesem Repository; Konformitätsposition (was der Spezifikation entspricht, was abweicht, während Algorithmen wie AES und SHA-256 in Profilen beibehalten werden, und Fahrplan zu stärkerer Interoperabilität): docs/CESS_CONFORMANCE.md.

Sequoia PGP (falls dieses Repository nicht reagiert)

Falls die Maintainer dieses GitHub-Repositorys nicht auf Issues, Pull Requests oder E-Mails antworten, können Sie neue Chiffren, OpenPGP-Verhalten und standardsbezogene Arbeit dennoch im weiteren Ökosystem vorantreiben. Sequoia PGP ist ein unabhängiger, in Rust geschriebener OpenPGP-Stack (Speichersicherheit, bibliothekszentriertes Design, aktive IETF/Ökosystem-Teilnahme), in dem viel öffentliche Entwicklung stattfindet. Es ist nicht dieses Projekt; es wird hier als praktischer alternativer Weg dokumentiert, falls der Upstream hier schweigt.

Die Contributing-Seite beschreibt die Lizenzierung (LGPL 2.0 oder neuer für die meisten Projekte), die Developer Certificate of Origin und dass größere kommerzielle Funktionen möglicherweise vorherige Vereinbarung und langfristige Wartungsvereinbarungen erfordern – lesen Sie diese Seite, bevor Sie erheblichen Aufwand investieren.

Es lohnt sich auch, https://autocrypt2.org/#/ im Auge zu behalten.


Plattformunterstützung (nur Linux)

Diese Codebasis und die zugehörigen Apps werden nicht für macOS oder Windows kompiliert. Die Host-Tools (galdra, galdrad, galdra-gtk) und die unterstützenden Werkzeuge zielen auf Linux. Dies ist eine bewusste Entscheidung basierend auf dem Bedrohungsmodell des Projekts und den in diesem Dokument dargelegten Überprüfbarkeitsanforderungen.

Warum nicht Windows

  • Microsoft hat eine enge Beziehung zur NSA und anderen Geheimdiensten (teilweise offengelegt durch die Snowden-Enthüllungen).
  • Die Variable _NSAKEY, die 1999 in Windows NT entdeckt wurde, verursachte erhebliche Kontroversen. Microsoft gab an, es sei ein Ersatzschlüssel; dies wurde nie vollständig bewiesen oder widerlegt.
  • Windows-Telemetrie sendet eine erhebliche Datenmenge an Microsoft, mit begrenzter Benutzerkontrolle.
  • Geschlossener Quellcode bedeutet, dass Sie nicht überprüfen können, was das Betriebssystem tatsächlich tut.

Vermutet, aber unbewiesen:

  • Gezielte versteckte Zugangspunkte für Regierungsbehörden.
  • Datenerfassung, die über das in den Datenschutzbestimmungen Offengelegte hinausgeht.

Warum Linux

  • Open Source. Der Code ist öffentlich überprüfbar; Schwachstellen werden von einer globalen Gemeinschaft erkannt und behoben.
  • Extreme Konfigurierbarkeit. Ein Linux-System kann weit über das hinaus gehärtet werden, was macOS erlaubt (SELinux, AppArmor, benutzerdefinierte Kernel und dergleichen).
  • Minimale Angriffsfläche. Serverdistributionen können insbesondere auf das Nötigste reduziert werden.
  • Kein Vendor Lock-in. Keine obligatorische Telemetrie oder versteckte Dienste, die fest eingebaut sind.
  • Dominant auf Servern. In den feindlichsten Umgebungen des Internets kampferprobt.

Ubuntu und Derivate

  • Alle Pakete in den Repositorys main, restricted, universe und multiverse sind mit dem GPG-Schlüssel von Canonical signiert.
  • Snap-Pakete durchlaufen den Canonical-Store mit zusätzlicher Sandboxing- und Signaturprüfung.
  • Sicherheitsupdates stammen von security.ubuntu.com, das ebenfalls signiert ist.
  • Ubuntu unterstützt Secure Boot, sodass sogar der Bootloader auf moderner Hardware überprüft wird.

Linux-Warnhinweis

Paketmanager sind im Allgemeinen sicher, aber Drittanbieter-.deb/.rpm/AppImage-Installationen können unsicher sein. Bevorzugen Sie signierte Pakete aus vertrauenswürdigen Repositorys und überprüfen Sie Signaturen, bevor Sie etwas installieren, das außerhalb dieser bezogen wurde.


Bauen, Installieren und Deinstallieren

Verwenden Sie eine stabile Rust-Werkzeugkette, wie in rust-toolchain.toml festgelegt. Die Firmware verwendet das Ziel riscv32imac-unknown-none-elf; Host-Tools verwenden das Host-Tripel.

Firmware kompilieren

  1. Installieren Sie das eingebettete Ziel: ```bash rustup target add riscv32imac-unknown-none-elf
    root@kitploit:~
  2. Typüberprüfung von Firmware-Crates (schlägt fehl, wenn test-hal in Produktionsbuilds gelangen würde): ```bash cargo run -p xtask -- check-fw
    root@kitploit:~
  3. Firmware-Crates im Release-Modus erstellen: ```bash cargo run -p xtask -- build-fw
    root@kitploit:~

Object code and archives land under target/riscv32imac-unknown-none-elf/release/. A full bootable Xous system image for a specific board is produced by the wider Baochip / Xous integration flow when you follow that product's build; xtask here runs cargo build for the firmware library crates listed in xtask (not a single ready-to-flash file by itself).

  1. Xous CCID daemon (galdralag-service) — needs the riscv32imac-unknown-xous-elf Xous toolchain (not the bare riscv32imac-unknown-none-elf firmware triple above). From repo root: cargo run -p xtask -- build-and-register release. That rebuilds the ELF, verifies it on disk, prints the baosec cratespec, and optionally runs cargo xtask baosec when given --xous-core /path/to/xous-core. Details: services/galdralag/README.md.

Flashing

This repository does not ship a one-command flasher yet. Programming the Baochip-1x (JTAG, ROM/USB boot, or vendor tools) follows the board and silicon documentation. Start from Supermagnum/Baochip-1x-firmware; eval board hardware is in baochip/dabao — on the Dabao board, SW2 toggles bootloader mode (see that schematic).

Committing UF2 without the physical boot button: After copying loader.uf2, xous.uf2, and apps.uf2 to the BAOCHIP volume, you can either press the physical boot button or type boot in the boot1 USB serial console (1 000 000 baud, e.g. screen /dev/ttyACM0 1000000). That avoids relying on the boot button for this step only. The console disconnects when you type boot; that is expected (the system reboots into the next stage). On Linux, dmesg --follow helps confirm USB re-enumeration. This is distinct from PROG (hold while connecting USB to enter the BAOCHIP mass-storage bootloader). See baochip/dabao#2 (closed).

Xous / Baochip flow: Images are Ed25519-signed and verified by boot0 before execution; see Signed firmware (Ed25519, boot0). For dabao, UF2 layout, holding PROG while plugging USB to enter mass-storage mode, and boot1 update steps, see Getting Started with Baochip Targets.

Compile and install host tools (galdra, galdrad, galdra-gtk)

Host crates live at the workspace root: galdra/, galdrad/, galdra-gtk/.

Ubuntu / Debian (install before cargo build / cargo install):```bash sudo apt update sudo apt install build-essential pkg-config libpcsclite-dev pcscd libssl-dev

required only for galdra-gtk:

sudo apt install libgtk-4-dev

root@kitploit:~
`libpcsclite-dev` erfüllt den **Standard**-Link-Pfad für **`galdra`**/**PC/SC**; **`pcscd`** ist der Daemon, der Smartcard-Lesegeräte zur Laufzeit bedient. **`libssl-dev`** wird benötigt, damit **openssl-sys** linken kann (**sequoia-net**-Schlüsselserver-Abfragen und **ldap3**-TLS verwenden heute **native-tls**). Lassen Sie **`libgtk-4-dev`** weg, wenn Sie nie **`galdra-gtk`** bauen.

**GTK 4 (nur `galdra-gtk`):** `pkg-config` muss **gtk4** auflösen (Workspace-Crate **`gtk`** 0.9.x, Paket **`gtk4`**). Verwenden Sie auf Fedora **`gtk4-devel`**; auf Arch **`gtk4`**.

Erstellen Sie Release-Binärdateien aus dem Repository-Stammverzeichnis:```bash
cargo build --release -p galdra -p galdrad -p galdra-gtk

Ausführbare Dateien: target/release/galdra, target/release/galdrad, target/release/galdra-gtk.

Installieren in ~/.cargo/bin (passen Sie --path an, wenn Sie sich nicht im Repository-Root befinden):```bash cargo install --locked --path galdra cargo install --locked --path galdrad cargo install --locked --path galdra-gtk

root@kitploit:~
Sie können stattdessen diese drei Binärdateien in ein beliebiges Verzeichnis in Ihrem `PATH` kopieren.

### Ausführen von `galdrad` und der Desktop-GUI (`galdra-gtk`)

**`galdra-gtk`** ist die GTK4-Desktop-Binärdatei (Cargo-Paket **`galdra-gtk`**; es gibt kein **`galdra-gui`**). Es ist ein Frontend zur **`galdrad`** REST-API — führen Sie zuerst **`galdrad`** aus.

**Daemon** — **`galdrad`** hört standardmäßig auf **`127.0.0.1:8742`** (`--listen` überschreibt); siehe [`galdrad/src/main.rs`](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/galdrad/src/main.rs).```bash
galdrad

Schnelltest: curl -s http://127.0.0.1:8742/health (interaktive API-Dokumentation: http://127.0.0.1:8742/swagger-ui/.)

Desktop-GUI — galdra-gtk verwendet standardmäßig http://127.0.0.1:8742 (--base-url oder GALDRAD_URL); siehe galdra-gtk/src/main.rs.```bash galdra-gtk galdra-gtk --base-url http://127.0.0.1:8742 GALDRAD_URL=http://127.0.0.1:8742 galdra-gtk

root@kitploit:~
Ab einem frischen **`cargo build --release`**, ohne Installation: **`./target/release/galdrad`** danach **`./target/release/galdra-gtk`** aus dem Repository-Stammverzeichnis.

**Host vs Token:** **`galdra-gtk`** spiegelt wider, was **`galdrad`** über HTTP bereitstellt; Token **unlock**, **provision** und andere CCID-Abläufe bleiben in der **`galdra`**-CLI (siehe **`galdra device`** in **[docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRA-TOOL.md)** und Ebene **2c**).

**Kontaktverzeichnis (`galdra contact`, `galdrad` `/contacts`):** das Erstellen eines Kontakts **erfordert eine E-Mail** (CLI: `--email`; HTTP: JSON-Feld `email`). Optionale Felder umfassen **Anzeigename** (`--name` / `name`), **Organisation** (**`--org`** / `org`), **Rolle**, **Abzeichen** (**`--badge`** / `badge`), **Notiz**, **Rufzeichen**, **Fluxer**, **Discord** und **IRC**-IDs, **Telefonnummer** (`--phone-number` / `phone_number`), plus **Posthinweise** (`street`, `country`, `postal_code`, `region`), Amateurfunk **`dmr_id`** und **`radio_affiliation`**. Diese Werte werden nur in lokalen SQLite-Metadaten gespeichert (sie werden **nicht** gegenüber externen Diensten **verifiziert**). **Das Nachschlagen** eines Kontakts (z.B. `galdra contact show`, `PATCH`/`DELETE`-Pfade, `galdrad` **`GET /contacts/{id}`**, Gruppenmitglieds-IDs oder **`POST /decrypt`** `recipient`) akzeptiert die Zeilen **UUID**, **Rufzeichen**, **E-Mail**, einen vollständigen **40-stelligen hexadezimalen OpenPGP v4-Fingerabdruck** (Leerzeichen werden ignoriert), diese sozialen IDs oder eine **DMR-Teilnehmer-ID** in **1..16777215** wenn als Dezimal-Token angegeben. **`galdra keyserver push`** kann viele der gleichen Bezeichnungen in ein Fulla-artiges Register spiegeln (**`organisation`**, **`role`**, **`note`**, **`badge_number`**, **`phone_number`**, Funk/Sozial/Post-Felder und Namen — siehe **`galdra keyserver push --help`**). Befehle und Feldbegrenzungen sind in **[docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRA-TOOL.md)** unter **Kontakte** und **Identitätsmodell** zusammengefasst.

### Uninstall host tools

Falls Sie `cargo install --path` wie oben verwendet haben:```bash
cargo uninstall galdra
cargo uninstall galdrad
cargo uninstall galdra-gtk

Wenn Sie Binärdateien manuell kopiert haben, entfernen Sie die von Ihnen hinzugefügten Dateien. Die Firmware wird nicht auf dem Host „installiert"; das Löschen oder Neuflashen des Geräts wird in Ihrer Hardwaredokumentation behandelt.


Hauptfunktionen

Was diesen Token besonders macht

Die folgenden Punkte sind Galdralag-Firmware-Funktionen, keine Anforderungen der OpenPGP-Kartenanwendung oder von GnuPG.

  • Dreifaktor-sicherheitsbereites Modell — Besitz des USB-Tokens und Kenntnis der PIN werden in der Firmware heute erzwungen; ein optionaler biometrischer dritter Faktor ist nicht in diesem Repository implementiert (Platzhalter: docs/BIOMETRIC_API.md). Siehe docs/THREE_FACTOR_AUTH.md für Umfang und Grenzen.

  • Authentifiziertes flüchtiges ECDH auf dem Gerät — echte kryptografische Vorwärtssicherheit. Jede Sitzung erzeugt ein neues flüchtiges Schlüsselpaar auf dem Hardware-TRNG des Tokens. Der langfristige Schlüssel signiert das flüchtige Angebot, nimmt aber nie an der Schlüsselvereinbarung teil. Vergangene Sitzungen können nicht entschlüsselt werden, selbst wenn der langfristige Schlüssel vollständig kompromittiert ist. Nach Kenntnis der Projektautoren bietet kein kommerzielles Hardware-Sicherheitstoken dies als erstklassige Funktion.

  • Shamir K-von-N Geheimnisverteilung auf dem Gerät — der langfristige Schlüssel kann in N Anteile aufgeteilt werden, die K zur Wiederherstellung benötigen, wobei kein einzelner Inhaber den Schlüssel alleine wiederherstellen kann. Nach Kenntnis der Projektautoren bietet auch kein kommerzielles Token dies als erstklassige Funktion.

  • Chiffre-agnostisches Profilsystem — symmetrische Chiffren, ECDHE-Kurven und Shamir-Konfiguration werden zu benannten, prüfbaren Profilen kombiniert. Für Massendaten unter einem Profil wird der Klartext von innen nach außen verschlüsselt: Sie können bis zu vier verschiedene symmetrische AEADs übereinander stapeln — so können Sie drei unabhängige Chiffren in einem Profil verwenden (z.B. ChaCha20-Poly1305, dann Serpent-256, dann Twofish-256), oder eine vierte separate Schicht, wo die Richtlinie es erlaubt — mit keiner wiederholten Chiffre im selben Profil und unabhängigem HKDF-abgeleitetem Schlüssel- und Nonce-Material pro Schicht. Eingebaute Namen wie standard, conservative und conservative-shamir werden mit Schichten ausgeliefert; tiefere Stapel sind für fortgeschrittene oder benutzerdefinierte Profile. Vollständige Regeln und Drahtlayout: . Jede Profilauswahl wird im Prüfpfad protokolliert.

Kryptografische Fähigkeiten

Alle Primitive stammen aus unabhängig geprüften Workspace-Abhängigkeiten. Nichts ist im Quellbaum implementiert.

Asymmetrisch / Schlüsselvereinbarung

Symmetrisch / AEAD

Schlüsselableitung / MAC / Digest

Schlüsselverwaltung

Sicherheitseigenschaften

PIN-Richtlinie

  • Mindestlänge: 5 alphanumerische Zeichen — wird an der Parser-Grenze erzwungen, bevor pin-policy aufgerufen wird. Kurze Eingaben erhöhen den Zähler nicht.
  • Standard-Schwellwert für Versuche: 3 (konfigurierbar 3–10 bei der Bereitstellung). Entspricht dem Industriestandard für Hardware-Token (Nitrokey, YubiKey, ISO 7816).
  • Bei Erreichen des Schwellwerts: vollständige Hardware-Nullung ausgelöst.
  • Challenge/Response-Passphrase (USB-Pfad für informierten Host): mindestens 5 Zeichen, wird nur als HMAC-SHA256(HostChallengeKey, nonce || passphrase) übertragen.

Einstellen oder Anpassen des Versuchs-Schwellwerts: Das Zählerlimit wird geschrieben, wenn der Token erstmals bereitgestellt wird; es ist keine Laufzeit-gpg-Einstellung. Verwenden Sie das galdra-Host-Tool, nachdem Sie es erstellt haben:```bash galdra device provision --pin-attempts 5

root@kitploit:~
| Flag | Range | Default | Meaning |
|------|--------|---------|---------|
| `--pin-attempts` | 3–10 | **3** | Fehlgeschlagene PIN-Versuche erlaubt vor Sperrung / Nullstellung |
| `--min-pin-length` | 5–32 | **5** | Mindestlänge der Benutzer-PIN (alphanumerisch), in der Richtlinie gespeichert |

Lassen Sie beide Flags weg, um die Standardwerte zu verwenden (3 Versuche, mindestens 5 Zeichen). Beispiel mit beiden: `galdra device provision --pin-attempts 7 --min-pin-length 8`.

Die Richtlinie wird **auf dem Token gespeichert** (Vault-Richtlinie). Das Host-Tool kann den Schwellenwert **nach** der Bereitstellung nicht erhöhen oder senken, ohne den eigenen authentifizierten Verwaltungsablauf des Geräts zu durchlaufen; betrachten Sie die Bereitstellung als den Zeitpunkt, um für Ihr Bedrohungsmodell **3–10** zu wählen. Die Begründung (Standardwerte vs. höhere Grenzen) ist in [docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRA-TOOL.md) im Abschnitt zur PIN-Richtlinie dargelegt.

---

## Post-Quanten-Status

### Implementiert – nicht geprüfte Crate (Feature-gated)

XMSS (RFC 8391, NIST SP 800-208) und LMS/HSS (RFC 8554, NIST SP 800-208)
sind hinter `--features pq-signatures` implementiert. Die zugrunde liegenden Rust-Crates
wurden nicht unabhängig geprüft. Siehe
[docs/PQ_SIGNATURES.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/PQ_SIGNATURES.md) und
[docs/STATEFUL_SIG_STATE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/STATEFUL_SIG_STATE.md).

### Ausstehend unabhängige Prüfung – noch nicht implementiert

Diese Algorithmen sind NIST-standardisiert. Die Implementierung ist durch das Fehlen einer
unabhängig geprüften `no_std` Rust-Crate blockiert.

| Algorithmus | Standard | Wartet auf |
|-----------|----------|---------|
| ML-KEM | FIPS 203 | Geprüfte `no_std` Rust-Crate |
| ML-DSA | FIPS 204 | Geprüfte `no_std` Rust-Crate |
| SLH-DSA | FIPS 205 | Geprüfte `no_std` Rust-Crate |
| FN-DSA (FALCON) | FIPS 206 Entwurf | Standard-Finalisierung + geprüfte Crate |
| HQC | Entwurf ~2027 | Standard-Finalisierung + geprüfte Crate |

**Hinweis zu libcrux:** Ein wissenschaftlicher Artikel aus dem Jahr 2026 identifizierte spezifikationsbezogene Fehler in den formal verifizierten ML-KEM- und ML-DSA-Implementierungen von libcrux, einschließlich als unhaltbar erwiesener Beweise. Überprüfen Sie das libcrux-Änderungsprotokoll, bevor Sie es bewerten.

### Wird nicht implementiert

**BIKE** wurde im März 2025 zugunsten von HQC aus der NIST-Standardisierung ausgeschlossen. **NTRU**-Verschlüsselung wurde im Juli 2022 ausgeschlossen. Keines hat einen Weg zu einem NIST-Standard.

---

## Nullstellung – Hardware-Vorbehalt

Die Nullstellungsimplementierung ist **softwaremäßig korrekt, aber hardwaremäßig unverifiziert**. Sie wurde nur mit `test-hal`-Simulation getestet. Eine physikalische Verifikation auf Baochip-1x-Silizium (JTAG-Speicherinspektion, Ausfallsicherheit, Seitenkanalbestätigung) wurde noch nicht durchgeführt. Siehe [docs/HARDWARE_VERIFICATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_VERIFICATION.md). Die beabsichtigte **Regionenreihenfolge** und **Layoutanker** für Vault-Subsysteme sind in [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/RRAM_LAYOUT.md) zusammengefasst; die **physikalische** Löschreihenfolge bleibt Plattform- und **boot0**-Integrationsarbeit.

---

## Testergebnisse

Maßgebliche Beschreibung: **[`docs/TEST_RESULTS.md#run-metadata`](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/TEST_RESULTS.md#run-metadata)** (Commit, Umfang und wie Abschnitte organisiert sind). Diese Seite enthält die **Pipeline-Zusammenfassungstabelle**, Unit-Test-Summen, Vektorenabdeckung (Wycheproof, RFC, BSI TR-03111 ECDH + ECDSA, NIST CAVP, BLAKE3 Hash/Keyed-Hash/Derive-Key), **dudect**-Zeittabelle, Schlüssellebenszyklusprüfungen und **[Abschnitt 6 — cargo-fuzz](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/TEST_RESULTS.md#6-cargo-fuzz-libfuzzer)** (Matrizen, **`chacha_roundtrip`**, aufgezeichneter **`openpgp_dispatch`**-Lauf). **Sie** entscheiden, ob diese Ergebnisse ausreichen, um den Bau oder die Ausführung dieses Projekts zu versuchen; eine **virtuelle Maschine** bleibt optional, reduziert aber das Host-Risiko.```
cargo run -p xtask -- test-all

Arbeitsbereichsaufbau

Firmware-orientierte Crates unter crates/ und Host-Binärdateien im Repository-Stammverzeichnis (siehe root Cargo.toml [workspace] für die autoritative Mitgliederliste):

Nicht in dieser Workspace-Tabelle als separate Crates: baochip-openpgp und services/galdralag werden über --manifest-path gebaut (siehe root Cargo.toml exclude und services/galdralag/README.md). Optionaler Massen-/Tarn-Block-Speicher (psram-store in Design-Dokumenten) ist noch kein Workspace-Mitglied; siehe docs/Psram.md, docs/dev-ref.md und docs/SDMMC_STORAGE_INTEGRATION.md.


Richtlinie für kryptografische Abhängigkeiten

Primitive werden nicht im Repository implementiert. Alle kryptografischen Arbeiten verwenden geprüfte Workspace-Abhängigkeiten des RustCrypto-Projekts (außer vsss-rs und der dalek-Familie, die unabhängig geprüft wurden):``` aes-gcm chacha20poly1305 ed25519-dalek x25519-dalek hkdf pbkdf2 hmac sha2 sha3 blake2 blake3 vsss-rs zeroize subtle p256 p384

root@kitploit:~

---

[Read more](https://github.com/supermagnum/galdralag-firmware)
Tool herunterladen
FeldZweckHost (galdra SQLite)Kontaktspeicher auf ChipFormat / Limit
Kontakt-IDStabile Host-PrimärschlüsselJaNeinText (id in SQLite)
AnzeigenameMenschenlesbare BezeichnungJaJaUTF-8-String; max. 240 Bytes pro Heap-Feld auf Chip
E-MailPrimäre MailadresseJaJaUTF-8-String; Suche auf Chip per E-Mail-Scan
RufzeichenAmateurfunk-RufzeichenJaJa12 Bytes, NUL-aufgefüllt; Suche auf Chip
DMR-Teilnehmer-IDDMR-Funk-IDJaJa32-Bit vorzeichenlos (0 = nicht vorhanden); Suche auf Chip
Badge-NummerMitarbeiter- oder Ausweis-IDJaJaUTF-8-String
OrganisationBehörde oder ArbeitgeberJaJaUTF-8-String
AbteilungTeam oder EinheitJaJaUTF-8-String
RolleJob- oder FunktionsbezeichnungJaJaUTF-8-String
NotizFreitext-KommentarJaJaUTF-8-String
Funk-ZugehörigkeitClub-, Netz- oder Allianz-BezeichnungJaJaUTF-8-String
StraßeStraßenanschriftJaJaUTF-8-String
LandLändername oder -codeJaJaUTF-8-String
PostleitzahlPLZ oder PostleitzahlJaJaUTF-8-String
RegionBundesland, Kreis oder RegionJaJaUTF-8-String
Fluxer-IDFluxer-Handle oder -IDJaJaUTF-8-String
Discord-IDDiscord-Benutzer-IDJaJaUTF-8-String
IRC-IDIRC-Nick oder ähnlichesJaJaUTF-8-String
TelefonnummerSprach- oder SMS-KontaktnummerJaNeinUTF-8-String; max. 32 Zeichen auf Host; vom Einreichender erklärt, nicht verifiziert
FingerprintSchlüsselanker (Suche, Sync)Ja (pgp_fingerprint)Ja32 Bytes; OpenPGP v4-Stil auf der Leitung; nicht identisch mit einem G:-Geräte-Fingerprint
Öffentlicher SchlüsselVerschlüsselungs-/VerifikationsmaterialJa (pgp_pubkey)Ja (Schlüsselbereich)Algorithmus: Ed25519, X25519, Brainpool P-256/P-384/P-512, NIST P-256/P-384, RSA-2048/3072/4096; bis zu 768 Bytes Blob auf Chip
PIN-geschützter SchlüsselSchlüssel erfordert PIN-EntsperrungHost speichert OpenPGP-Schlüssel separatJaPIN-Verifikator-Digest + AES-GCM-Wrap-Metadaten auf Chip
Zuletzt abgerufenWann Schlüsselmaterial aktualisiert wurdeJa (fetched_at)Ja (last_fetched)UTC auf Host; 32-Bit-Zeitstempel auf Chip
Läuft ab amSchlüsselablaufzeitJaNeinUTC-Datetime nur in SQLite
SchlüsselquelleWie der Host-Datensatz erstellt wurdeJa (source)Neinz.B. manuell, Keyserver, WKD, LDAP, Datei, Peer
FeldherkunftVertrauenslabel pro MetadatenfeldNeinJa (source_map)Zwei Bits pro Feld: SelfAttested, HostVerified, RegistrySync, OobVerified
DatensatzflagsAktiv, veraltet, eigene Identität, widerrufenTeilweise (Host-Logik)Jaz.B. STALE, SELF_KEY auf Chip
fuzz/README.md
  • Konformitätsvektor-Suiten: Einige Gruppen werden nicht ausgeführt (z.B. bestimmte AES-GCM-Wycheproof-Fälle); siehe docs/TEST_RESULTS.md für den Umfang.
  • Ladies and Gentlemen of the class of '99: wear sunscreen
    MetadatenfeldOpenPGP / GnuPGGaldra-Schlüssel (Host + Kontaktspeicher)
    Kontakt-/Datensatz-IDNein (Schlüssel-ID oder Fingerabdruck verwenden)Ja (SQLite id auf Host; nicht auf Chip)
    AnzeigenameNur innerhalb des Benutzer-ID-Textes (Name <email>)Ja (separates UTF-8-Feld)
    E-MailNur innerhalb des Benutzer-ID-TextesJa (separates Feld; Suche nach E-Mail auf Chip)
    StraßenadresseKein StandardfeldJa
    LandKein StandardfeldJa
    PostleitzahlKein StandardfeldJa
    Region / BundeslandKein StandardfeldJa
    OrganisationKein StandardfeldJa
    AbteilungKein StandardfeldJa
    Rolle / PositionKein StandardfeldJa
    Ausweis-/Mitarbeiter-IDKein StandardfeldJa
    RufzeichenKein StandardfeldJa (12 Bytes, NUL-aufgefüllt auf Chip)
    DMR-Teilnehmer-IDKein StandardfeldJa (32-Bit; Suche auf Chip)
    Funk-ZugehörigkeitKein StandardfeldJa
    Fluxer-IDKein StandardfeldJa
    Discord-IDKein StandardfeldJa
    IRC-IDKein StandardfeldJa
    TelefonnummerKein StandardfeldJa (nur Host-SQLite)
    Freitext-NotizKein StandardfeldJa
    OpenPGP-v4-FingerabdruckJa (40 Hex-Zeichen)Optional auf Host-Zeile beim Verknüpfen eines Zertifikats (pgp_fingerprint); 32 Bytes auf Chip für Galdra-Schlüssel
    G:-Geräte-FingerabdruckNeinJa (BLAKE3-160 über SIG-öffentlichem Schlüssel; Host-Werkzeug; Nicht der OpenPGP-v4-Wert)
    OpenPGP-Schlüssel-IDJa (kurze / lange Form)Nein
    Vertrauen / HerkunftWoT-Signaturen auf Benutzer-IDsFeldspezifische Labels: SelfAttested, HostVerified, RegistrySync, OobVerified (auf Chip)
    SchlüsselablaufJa (Zertifikat / Unterschlüssel)Nur Host (expires_at in SQLite)
    Letzte SchlüsselabrufzeitAbhängig vom Host-WerkzeugJa (fetched_at / last_fetched)
    Privater Schlüssel auf TokenSIG-, DEC-, AUT-Karten-SlotsSeparater Galdra-Schlüsselbereich (keine Benutzer-ID-Pakete)
    PIN zur Verwendung des privaten SchlüsselsPW1 / PW3 (OpenPGP-Karte)Optionale PIN-Umhüllung pro Galdra-Kontaktdatensatz
    OpenPGP-Kartenobjekt (nicht in obiger Tabelle)Host (GnuPG)Auf Token
    Primärer + SIG- / DEC- / AUT-UnterschlüsselÖffentlich im SchlüsselbundPrivat in versiegelten Slots
    Zertifizierungssignaturen (WoT)JaNein
    WiderrufszertifikatJaNein
    Algorithmusattribute (DO 0xC1 / 0xC2 / 0xC3)gpg --card-editJa
    galdra
    galdra-core-host
    Noch ist keine öffentliche Fulla-Registrierung bereitgestellt
    docs/server.md
    BereichTypischer Standard / DokumentAls standardmäßige OpenPGP-Karte + GnuPG verfügbar?
    OpenPGP-Kartenanwendung — APDUs, PINs, SIG/DEC/AUT-Slots, Generieren/Signieren/Entschlüsseln auf der KarteOpenPGP-Kartenspezifikation (siehe docs/OPENPGP_CARD.md)Ja — gleicher Host-Stack wie andere OpenPGP-Smartcards (gpg, scdaemon, CCID)
    USB CCID — Kommunikation mit dem Gerät als Smartcard-LeserUSB-CCID-GeräteklasseJa — Klassentreiber
    OpenPGP-Nachrichtenformat — verschlüsselte Dateien, E-Mail, SchlüsselpaketeRFC 4880 (und Aktualisierungen)Ja auf dem Host — GnuPG verwendet dies; die Karte analysiert keine E-Mails
    Shamir K-of-N — Aufteilen/Wiederherstellen von langfristigem Schlüsselmaterial im TresorNicht in OpenPGP-Kartenspezifikation; nicht in GnuPGNein — nur Firmware und Bereitstellungswerkzeuge; keine gpg --card-edit-Operation (siehe Shamir und vollständige Festplattenverschlüsselung)
    Authentifiziertes ephemeres ECDH — Vorwärtsgeheimes Sitzungsprotokoll auf dem TokenNicht in OpenPGP-KartenspezifikationNein — token-spezifisch; kein GnuPG-Kartenbefehl
    Chiffre-Profil-System — benannte symmetrische Kaskaden (übereinander gestapelte unabhängige Chiffren; bis zu vier Ebenen, drei ist eine unterstützte Tiefe) und zugehörige RichtlinieNicht in OpenPGP-KartenspezifikationNein — Firmware/Host-Token-Tools
    microSD-Ablenkung / Massenspeicher-Personas — USB-Verhalten eines nicht informierten HostsNicht in OpenPGP-KartenspezifikationNein — separate USB-Persönlichkeits-Codepfade
    WebAuthn / FIDO2CTAP / WebAuthnNicht implementiert — anderer Standard als OpenPGP-Karte
    EbeneRolle
    FestplatteVerschlüsselt mit einem Master-Schlüssel (z.B. AES-256 via LUKS, VeraCrypt oder einer rohen Blockebene)
    Master-SchlüsselMit SSS in N Anteile aufgeteilt, Schwelle K-of-N
    AnteileGehalten von Personen, Geräten oder Offline-Speicher; K Anteile zusammen rekonstruieren den Master-Schlüssel
    EntsperrenSchlüssel rekonstruieren, dann an cryptsetup, veracrypt oder Ihren Stack übergeben
    Schwellenwert2-aus-3 (kleines Team, etwas Redundanz); 3-aus-5 (häufig in Organisationen)
    AktienspeicherHardware-Token, separate Rechner, Papier, geografisch getrennte Standorte
    AktienschutzVerschlüsselung jeder Aktie für einen bestimmten Empfänger (z. B. mit dessen OpenPGP-Schlüssel) vor der Verteilung
    Wo rekonstruierenAir-Gapped-Rechner, HSM-Richtlinie oder kontrollierte Umgebung – nicht auf nicht vertrauenswürdigen gemeinsam genutzten Hosts
    SzenarioWarum SSS plus starke, policy-konforme Kurven wichtig sind
    Mitarbeiter verlässt das Unternehmen oder stirbtWiederherstellung bleibt ohne das exklusive Geheimnis dieser Person möglich
    Rechtmäßiger Zugriff im Rahmen eines ordentlichen VerfahrensEin Quorum kann erforderlich sein – keine einzelne Partei besitzt das vollständige Entsperrgeheimnis
    Unternehmens-SchlüsselhinterlegungPrüfbarer Split; kein einzelner Administrator hat vollständigen Zugriff
    Hardware-BeschlagnahmeMedien können beschlagnahmt werden, ohne K von N Aktien zu erfassen
    Regulatorische Konformität (EU / BSI)Brainpool erfüllt viele deutsche und EU-Regierungskryptografieanforderungen
    Brainpool-Funktionszeilen
    Ist das KI-Slop?
    Governikus-SignaturBestätigt, dass der Name auf dem Zertifikat mit der chipauthentifizierten Identität übereinstimmte, als der Benutzer den Ablauf durchführte
    RechtsraumIn diesem Dokument behandelter Status
    DeutschlandGovernikus/BSI-Ablauf wie oben beschrieben
    EstlandChipbasierte eID. Von RSA zu NIST P-384 (secp384r1) ECDSA in 2017–2018 nach der ROCA-Sicherheitslücke, die eine vollständige Aufgabe von RSA erzwang (der Chip konnte keine sicheren RSA-Schlüssel erzeugen und hatte keinen Weg zu größeren Schlüssellängen). Der private Schlüssel ist hardwaregebunden und kann nicht von der Karte gelesen werden. Kein bekannter Governikus-artiger OpenPGP-Signierdienst gefunden.
    BelgienChipbasierte eID. Ältere Karten verwendeten RSA 1024-Bit; neuere Karten (Applet 1.8 aufwärts) verwenden NIST P-384 ECDSA. Aktive Open-Source-Middleware-Ökosystem (eid-mw, OpenSC). Kein bekannter Governikus-artiger OpenPGP-Signierdienst gefunden.
    NorwegenDer nationale ID-Kartenchip (seit 2020 ausgegeben) ist ICAO 9303-konform und implementiert nur einen Reisedokument-Chip; er hat keine eID-Signierfunktion. Signierende eID ist getrennt: akkreditierte private Anbieter (Buypass, Commfides) unter SEID, historisch RSA 2048-Bit, Übergang zu RSA 3072-Bit mit ECC eingeführt in SEID 2.0. Kein bekannter Governikus-artiger OpenPGP-Signierdienst. Der Reisechip und die signierende eID sind unterschiedlich – relevant, falls jemand versucht, nur den Kartenchip direkt zu verwenden.
    ÖsterreichTeilweise untersucht. eID verwendet ECC (bestätigt); spezifische Kurve nicht in verfügbaren Quellen bestätigt. Multi-Token-Bürgerkarte-Modell statt einer einzigen Karte; weitgehend zu einer mobilen App migriert. Weitere Untersuchung zu Kurvendetails und einem etwaigen OpenPGP-Signierdienst erforderlich.
    USAPIV-Karte (Personal Identity Verification, FIPS 201 / NIST SP 800-78): nur an Bundesangestellte und Auftragnehmer ausgegeben – keine universelle Zivilkarte. Algorithmen: NIST P-256 obligatorisch für Authentifizierungsschlüssel; P-256 oder P-384 für Signieren/Schlüsselverwaltung; RSA 2048/3072 ebenfalls erlaubt; nur NIST-Kurven, kein Brainpool. Vertrauensanker ist die Federal Common Policy CA (FCPCAG2), nicht in standardmäßigen kommerziellen Vertrauensspeichern enthalten. Kein Governikus-artiger OpenPGP-Signierdienst gefunden; FPKI ist X.509-Infrastruktur getrennt von OpenPGP. Dass PIV nur für Bundesbedienstete gilt, bedeutet, dass es kein ziviler Vertrauensanker wie die deutsche eID ist.
    KanadaKeine nationale chipbasierte Identitätskarte mit On-Chip-Signierschlüsseln. Digitale Identität ist fragmentiert über Provinzprogramme (z. B. BC Services Card), mobile Apps (z. B. eID-Me) und einen sich entwickelnden föderalen Rahmen für digitale Berechtigungsnachweise. Keine einzelne Karte vergleichbar mit dem deutschen, estnischen oder belgischen Modell. Keine gleichwertige Karteninfrastruktur gefunden – in diesem Sinne kein brauchbarer Vertrauensanker.
    Andere LänderNicht untersucht
    ZielWo anfangen
    Projektübersicht, Neuigkeiten, Gemeinschaftsequoia-pgp.org
    Beitragen (Issues, Fixes, Features, Dokumentation); Kontakt vor großen ArbeitenContributing, Kontakt
    Entwicklerdokumentation — API-Oberfläche zur Erweiterung der Implementierung (sequoia-openpgp und verwandte Crates)Docs — z. B. sequoia-openpgp auf docs.rs
    Quellcode und Trackergitlab.com/sequoia-pgp (Kernbibliothek und Tools); github.com/sequoia-pgp (Mirrors / ausgewählte Repos); Projekte
    Neue Algorithmen im OpenPGP-StandardGehen immer noch über die IETF OpenPGP Working Group. Sequoia und andere Implementierungen setzen Entwürfe und RFCs um; schlagen Sie Protokolländerungen dort vor und koordinieren Sie sich mit Implementierern (einschließlich Sequoia), damit das Verhalten der Spezifikation entspricht.
    einer oder zwei
    docs/CIPHER_PROFILES.md
  • Keyed BLAKE3 zwischen Kaskadenschichten (CESS) — Zusätzlich zum eigenen AEAD-Tag jeder Schicht und zur äußeren Mode A ChaCha20-Poly1305-Hülle definiert CESS eine keyed BLAKE3-artige Integrität zwischen inneren Kaskadenstufen. Für registry-zugeordnete Profile (suite_id über eingebaute Namen) hängt cipher-profile ein 32-Byte HMAC-BLAKE3 über die AEAD-Ausgabe jeder inneren Schicht an, bevor die nächste Schicht verschlüsselt; Schlüssel werden mit HKDF-BLAKE3 unter Verwendung von cess::cess_blake3_integrity_gap_info (inner_info.rs) abgeleitet. Einzelschichtige eingebaute Profile überspringen zusätzliche Tags; benutzerdefinierte Profile (keine suite_id) behalten die Legacy-Kaskade ohne Zwischenschicht-MACs bei. Siehe docs/CIPHER_PROFILES.md und docs/CESS_CONFORMANCE.md. Kombinationsanzahlen unter cipher-profile-Chiffre-Regeln (fünf AEAD-Primitive, keine wiederholte Chiffre in einem Profil, Reihenfolge wichtig); die BLAKE3-Spalte ist die Design-Raum-Anzahl von CESS (unabhängig ein/aus pro Lücke), kein Umschalter pro Nachricht auf dem Host:

    Die 205-Zahl zählt nur Chiffre-Stapel (Permutationen von 1–4 verschiedenen Auswahlen aus AES-256-GCM, ChaCha20-Poly1305, Twofish-256, Serpent-256, Camellia-256). Die 1245-Zahl sind dieselben Stapel multipliziert mit jedem unabhängigen Ein/Aus-Muster für optionales Zwischenschicht-BLAKE3 (2^(k−1) Muster für k Schichten). Diese Firmware wendet Zwischenschicht-MACs für alle Lücken an, wenn ein eingebautes suite_id-Profil ≥ 2 Schichten hat (kein Umschalter pro Lücke). Eingebaute Profilnamen verwenden eine kleine Teilmenge der 205.

  • Optionaler microSD-Täuschungsdatenträger — wenn ein PSRAM-Chip verbaut ist, kann nach dem Entsperren ein zusätzlicher Bulk-Täuschungs-LUN erscheinen. Wenn keine microSD verbaut ist, ist das Gerät dennoch ein Hardware-Sicherheitstoken (Tresor, PIN-Richtlinie, OpenPGP/CCID und andere Token-Funktionen bleiben unverändert); nur dieser optionale Bulk-Datenträger fehlt. Für uninformierte Hosts präsentiert das Gerät weiterhin die übliche On-Chip-Massenspeicher-Täuschungspersona, wo konfiguriert. microSD-Inhalt ist, wenn vorhanden, absichtlich unverschlüsselt und unauffällig. Echtes Schlüsselmaterial lebt im On-Chip-RRAM hinter dem Tresor und der PIN-Richtlinie.

  • Vollständig offener Stack — CERN-OHL-W-2.0 RTL, offene Schaltpläne, reproduzierbarer Bootloader, Rust/Xous-Betriebssystem, IRIS-prüfbarer Silizium.

  • AlgorithmusStandardAnmerkungen
    BrainpoolP256r1 ECDH + ECDSARFC 5639, BSI TR-03111BSI-standardisiert, keine Beteiligung der NSA
    BrainpoolP384r1 ECDH + ECDSARFC 5639, BSI TR-03111~192-Bit-Sicherheit
    X25519 ECDHRFC 7748
    Ed25519 sign / verifyRFC 8032
    RSA-2048 / 3072 / 4096 OAEP, PSSRFC 8017Mindestens 2048 Bit erzwungen
    P-256, P-384NISTÜber p256 / p384 Workspace-Abhängigkeiten
    AlgorithmusStandardAnmerkungen
    AES-256-GCMFIPS 197, NIST SP 800-38DHardware-AES auf Baochip-1x
    ChaCha20-Poly1305RFC 8439Keine Beteiligung der NSA
    Twofish-256Schneier et al. 1998AES-Finalist, keine Beteiligung der NSA
    Serpent-256Anderson / Biham / Knudsen 1998AES-Finalist, 32 Runden, konservativer Spielraum
    AlgorithmusStandard
    HKDF (SHA-256 / SHA-512)RFC 5869
    HMAC (SHA-256 / SHA-512)RFC 2104
    PBKDF2RFC 8018
    SHA-2 (224 / 256 / 384 / 512)FIPS 180-4
    SHA-3 FamilieFIPS 202
    BLAKE2b / BLAKE2sRFC 7693
    BLAKE3BLAKE3-Spezifikation
    MerkmalAnmerkungen
    Shamir K-von-N Geheimnisverteilungvsss-rs — Aufteilung und Wiederherstellung auf dem Gerät
    Authentifiziertes flüchtiges ECDHVorwärtssicheres Sitzungsprotokoll — ephemeral-session-Crate
    Chiffre-Profil-SystemSymmetrische Kaskade: bis zu vier verschiedene AEADs gestapelt (z.B. drei unabhängige Schichten); schichtspezifische Schlüssel — cipher-profile — docs/CIPHER_PROFILES.md
    EigenschaftImplementierung
    VorwärtssicherheitFlüchtiges ECDH: Langzeitschlüssel signiert nur, stimmt nie zu
    PIN-Zähler vor VergleichZähler vor subtle::ConstantTimeEq in RRAM gespült — keine Ausnahmen
    Hardware-Nullung (Zeroisation)TRNG-basiertes mehrfaches Überschreiben; boot0 nullt vor USB-Enumeration
    Kein Geheimnis auf dem USB-BusUninformierter Host sieht nur Standard-Massenspeicher; kein Fingerabdruck möglich
    Monotone ManipulationsnachweiseHardware-Einwegzähler in immer eingeschalteter Domäne
    Dreifaktor-AuthentifizierungBesitz: USB-Token; Wissen: PIN auf dem Gerät (pin-policy); optional biometrisch nicht implementiert — docs/THREE_FACTOR_AUTH.md
    RRAM-Zähler und PrüfpfadMonotones HAL für PIN (und zukünftige zustandsbehaftete PQ-Signaturen); Profil-Prüfdatensätze und In-RAM-OpenPGP-Prüf-Hook — append-only NV-Prüfprotokoll nicht implementiert — docs/AUDIT_LOG.md, docs/RRAM_LAYOUT.md
    Konstante-Zeit-OperationenAlle Geheimnisvergleiche über subtle; verifiziert durch dudect-Harnesse
    test-hal niemals in ProduktionErzwungen durch check-fw-Xtask
    CrateRolle
    galdr-coreHAL-Traits (MonotonicCounter, HardwareTrng, ZeroiseController, VaultStorage), gemeinsame Fehler, test-hal-Fakes
    vaultRRAM-Vault-Verträge, HKDF-KeyPurpose-Labels, Schlüsselmaterialtypen (zeroize, kein Clone/Copy)
    pin-policyPIN-Zustandsmaschine; Zählererhöhung vor subtle::ConstantTimeEq; Schwellenwert-Nullstellung
    usb-personalityMassenspeicher- vs. authentifizierte-Entsperr-Personas (einschließlich Tarn-Massenspeicher-Rolle); Challenge/Response; OpenPGP/CCID-Kartenanwendung; USB-Trennung bei Sperre
    ephemeral-sessionAuthentifiziertes flüchtiges ECDH-Sitzungsprotokoll; Vorwärtssicherheit
    cipher-profileBenutzerkonfigurierbare Chiffre-Kaskaden-Profile; integrierte und benutzerdefinierte
    cessHKDF-BLAKE3 K_outer, ChaCha äußeres AEAD, suite_id || inner_blob; siehe CESS_CONFORMANCE.md
    biometric-apiBiometrische Vor-Gate-Drahttypen (CBOR, SignedMatchResult), Sitzungstoken-Helfer
    biometric-vaultTemplate-Versiegelung und Vault-seitige Integrationsstücke
    biometric-fingervein / biometric-sweetSteckbare biometrische Backend-Skizzen
    security-testsDudect-Zeitverhaltens-Testumgebungen für kryptografische Pfade
    host-toolsHost-Manifest-Hashing, Update-Verifikation, psram-unlock, galdralag-provision (Xous Two-Line-CDC-PIN-Bereitstellung)
    xtaskBuild, Check, Test, Fuzz, build-and-register (Xous galdralag-service), Zeitverhaltenstest
    galdra-core-hostSQLite-Schema, Kontakte/Gruppen/Prüfung/Synchronisation, HKP/WKD/LDAP-Abruf, Geräte- und OpenPGP-Host-Helfer
    galdraCLI über galdra-core-host
    galdradLokaler REST-Daemon
    galdra-gtkGTK4-Desktop-Oberfläche
    KaskadenlängeGeordnete unterschiedliche Chiffre-Stapel× optionales BLAKE3 ein/aus an jeder der Länge−1 Lücken zwischen den Schichten
    1 Schicht55 × 2^0 = 5
    2 Schichten2020 × 2^1 = 40
    3 Schichten6060 × 2^2 = 240
    4 Schichten120120 × 2^3 = 960
    Gesamt2051245