Ein neuer Ansatz zur funktionsbasierten Verschlüsselung

Ein neuer Ansatz zur funktionsbasierten Verschlüsselung

  • 26. April 2025
  • Vasilis Vryniotis
  • . Keine Kommentare
Ein neuer Ansatz zur funktionsbasierten Verschlüsselung

Kryptographie fühlt sich oft wie eine uralte dunkle Kunst voller mathematischer Konzepte, starrer Schlüsselgrößen und strenger Protokolle an. Aber was wäre, wenn Sie die Idee des „Schlüssels“ völlig überdenken könnten? Was wäre, wenn der Schlüssel keine feste Masse aus Teilen wäre, sondern ein lebendiges, atmendes Objekt? Funktion?

VernamVeil ist eine experimentelle Figur, die genau dieser Idee nachgeht. Der Name ist eine Hommage an Gilbert Vernam, einen der Köpfe hinter der One-Time-Pad-Theorie. VernamVeil ist in reinem Python geschrieben (mit einer optionalen Numpy-Abhängigkeit für die Vektorisierung) und richtet sich an Entwickler, die neugierig auf das Innenleben der Kryptographie sind. Es bietet einen unterhaltsamen und lehrreichen Raum, um ein Verständnis für die Verschlüsselung zu entwickeln. Der Hauptalgorithmus besteht aus etwa 200 Zeilen Python-Code (ohne Dokumentation, Kommentare und Leerzeilen) und weist außer den Standard-Python-Bibliotheken keine externen Abhängigkeiten auf.

Es ist wichtig, von Anfang an zu beachten: Ich bin ein ML-Wissenschaftler und habe keine Ahnung vom Innenleben der Kryptographie. Ich habe diese Prototypenbibliothek als unterhaltsames Wochenendprojekt geschrieben, um die Domäne zu erkunden und grundlegende Konzepte zu erlernen. Daher ist VernamVeil nicht für den Produktionsgebrauch oder den Schutz sensibler Daten in der Praxis gedacht. Es handelt sich eher um ein Lernwerkzeug, um ein Experiment als um eine Garantie für Sicherheit. Den vollständigen Code finden Sie auf GitHub.

Warum Funktionen statt Tasten?

Herkömmliche symmetrische Verschlüsselungen basieren auf statischen Schlüsseln, Geheimnissen fester Länge, die bei falscher Handhabung oder Wiederholung Schwachstellen aufdecken können. VernamVeil verwendet stattdessen a Funktion So generieren Sie den Schlüsselstrom dynamisch: fx(i, seed) -> bytes.

Diese einfache Änderung eröffnet mehrere Vorteile:

  • Keine offensichtliche Wiederholung: Solange die Funktion und der Startwert unvorhersehbar sind, bleibt der Schlüsselfluss frisch.
  • Mathematische Flexibilität: Du kannst machen fx Funktionen mithilfe kreativer mathematischer Ausdrücke, Polynome oder sogar externer Datenquellen.
  • Potenziell unendliche Flüsse: Inspiriert vom One-Time-Pad ermöglicht VernamVeil wichtige Streams so lange wie nötig und vermeidet so die Wiederverwendung in großen Datensätzen.

Kurz gesagt: Anstatt sich auf die Geheimhaltung einer festen Zeichenfolge zu verlassen, verlässt sich VernamVeil auf den Reichtum und die Unvorhersehbarkeit mathematischen Verhaltens. Und vor allem ist es modular; Sie können Ihre festlegen fx der als Ihr geheimer Schlüssel dient.

Hauptmerkmale und kurzes Beispiel

VernamVeil präsentiert eine Reihe von Ideen zur Verbesserung der Sicherheit und zur Vermittlung guter kryptografischer Hygiene:

  • Anpassbarer Schlüsselfluss: Verwenden Sie eine beliebige Funktion, die einen Index und einen Startwert benötigt, um dynamisch Bytes zu erzeugen. Die Funktion und der Anfangsschlüssel bilden zusammen Ihren geheimen Schlüssel.
  • Symmetrischer Prozess: Für die Ver- und Entschlüsselung werden die gleiche Funktion und der gleiche Seed verwendet.
  • Verschleierungstechniken: Echte Brocken werden mit zufälligem Rauschen gefüllt, mit gefälschten Brocken (Ködern) gemischt und auf Basis eines Samens gemischt.
  • Samenentwicklung: Nach jedem Block wird der Seed aktualisiert, um sicherzustellen, dass kleine Änderungen in der Eingabe zu großen Unterschieden in der Ausgabe führen.
  • Nachrichtenauthentifizierung: Integrierte MAC-basierte Überprüfung zur Erkennung von Manipulationen.
  • Hochgradig konfigurierbar: Passen Sie die Fragmentgröße, die Padding-Zufälligkeit, die Lockrate usw. an, um mit unterschiedlichen Verschleierungs- und Leistungsstufen zu experimentieren.
  • Vektorisierung: Einige Operationen können optional mit Numpy vektorisiert werden. Ein reiner Python-Fallback ist ebenfalls verfügbar.

Hier ist ein kurzes Beispiel für das Verschlüsseln und Entschlüsseln von Nachrichten:

import hashlib
from vernamveil import FX, VernamVeil


def keystream_fn(i: int, seed: bytes) -> int:
    # Simple cryptographically safe fx; see repo for more examples
    hasher = hashlib.blake2b(seed)
    hasher.update(i.to_bytes(8, "big"))
    return hasher.digest()

fx = FX(keystream_fn, block_size=64, vectorise=False)


cipher = VernamVeil(fx)
seed = cipher.get_initial_seed()
encrypted, _ = cipher.encode(b"Hello!", seed)
decrypted, _ = cipher.decode(encrypted, seed)

Dieser einfache Workflow hebt bereits mehrere grundlegende Ideen hervor: den skalierbaren Seed, die Verwendung von a fxund wie umkehrbar die Verschlüsselung/Entschlüsselung ist, wenn sie richtig konfiguriert ist.

Unter der Haube: Wie VernamVeil funktioniert

VernamVeil vereint mehrere Techniken, um eine Verschlüsselung zu erstellen, die Spaß macht, aber dennoch wichtige kryptografische Prinzipien einführt. Sehen wir uns die wichtigsten Schritte an:

1. Aufteilung und Trennzeichen

Zunächst wird die Nachricht in Blöcke konfigurierbarer Größe (standardmäßig 32 Byte) unterteilt. Echte Chunks werden vorher und nachher mit zufälligen Bytes aufgefüllt. Zwischen jedem Stück a zufälliges Trennzeichen wird eingefügt, aber noch wichtiger ist, dass das Trennzeichen selbst später verschlüsselt wird, was bedeutet, dass seine Abgrenzungsfunktion im endgültigen Chiffretext verborgen bleibt.

Dies macht es äußerst schwierig zu erkennen, wo sich die tatsächlichen Daten befinden.

2. Verschleierung mit gefälschten Fragmenten und Mischen

Nicht alle Teile sind echt. VernamVeil spritzt gefälschte Stücke die rein zufällige Bytes enthalten. Die echten und falschen Stücke sind dann Mischung deterministisch, basierend auf einem abgeleiteten Mischungssamen.

Dies hat mehrere Auswirkungen:

  • Angreifer können echte Daten nicht einfach von Täuschungsdaten unterscheiden.
  • Obwohl es einige strukturelle Muster gibt, sind sie tief unter der Verschleierung verborgen.

Bei verschlüsselten Trennzeichen macht dies die Rekonstruktion von Nachrichten ohne den richtigen Seed und eine leistungsstarke Funktion in der Praxis äußerst schwierig.

3. XOR-basierte Stream-Verschlüsselung mit Seed Evolution

Die verschleierte Nachricht wird dann Byte für Byte mit einem von Ihnen generierten Schlüsselstrom XOR-verknüpft fx Funktion.

Es gibt jedoch eine entscheidende Wendung: Der Samen entwickelt sich im Laufe der Zeit. Nach der Verarbeitung jedes Blocks wird der Seed aktualisiert, indem der aktuelle Seed zusammen mit den gerade verschlüsselten (oder entschlüsselten) Daten gehasht wird.

Diese Entwicklung erfüllt zwei Ziele:

  • Lawineneffekt: Eine Änderung um ein Byte am Anfang der Nachricht führt zu größeren Änderungen in der gesamten Ausgabe.
  • Geheimnis umgekehrt: Die Bottom-up-Geheimhaltung bleibt gewahrt, da sich jeder Samen durch Hashing des vorherigen Samens mit dem aktuellen Stück Klartext entwickelt, sodass das Wissen über den aktuellen Samen nicht aus früheren Samen abgeleitet werden kann.

Der Samen fungiert als Zustandsbehaftete ZeichenfolgeDadurch werden wiederholte Schlüsselflussmuster vermieden.

4. Nachrichtenauthentifizierung (MAC)

Wenn VernamVeil aktiviert ist, fügt es schließlich eine einfache Form von hinzu authentifizierte Verschlüsselung:

  • Es wird ein BLAKE2b HMAC des Chiffretextes berechnet.
  • Das resultierende Tag wird dem Chiffretext hinzugefügt.

Bei der Entschlüsselung wird der MAC-Tag überprüft Vor entschlüsseln Sie die Nachricht. Wenn das Tag nicht übereinstimmt, schlägt die Entschlüsselung sofort fehl und schützt so vor Manipulationen und bestimmten Arten von Angriffen wie Oracle-Padding.

Weitere Informationen zu Design, Funktionen, Einschränkungen und Best Practices sowie weitere technische Beispiele finden Sie in der Readme-Datei im Repository.

Zukünftige Richtungen und offene Ideen

VernamVeil ist ein früher Prototyp und es gibt viel Raum für Experimente und Verbesserungen. Hier sind einige mögliche Richtungen für die Zukunft:

  • Vektorisierte Operationen: Wechseln Sie zu reinem Python bytes hat numpy, PyTorchOder TensorFlow Arrays könnten die Schlüsselstromgenerierung, die Fragmentverschlüsselung und die Erzeugung von zufälligem Rauschen durch Vektorisierung erheblich beschleunigen. Zum Ändern: Diese Funktion wurde nach der ersten Veröffentlichung hinzugefügt und steigerte die Leistung der Implementierung erheblich.
  • Anziehen: Ein Hintergrundthread könnte E/A-Vorgänge kontinuierlich vorbereiten, sodass die Verschlüsselung nie ins Stocken gerät. Zum Ändern: Asynchrone E/A wurde nach der ersten Veröffentlichung hinzugefügt.
  • Konsolendienstprogramm: Fügen Sie eine Befehlszeilenschnittstelle (CLI) hinzu, damit Benutzer VernamVeil mit konfigurierbaren Parametern direkt vom Terminal aus ausführen können. Zum Ändern: Diese Funktion wurde nach der ersten Veröffentlichung hinzugefügt.
  • Wechseln Sie zu einer niedrigeren Sprache: Python wurde wegen seiner Klarheit und einfachen Experimentierbarkeit ausgewählt, aber der Wechsel zu einer schnelleren Sprache wie Rust, C++ oder sogar Go könnte die Geschwindigkeit und Skalierbarkeit erheblich verbessern. Zum Ändern: Nach der ersten Veröffentlichung habe ich eine optionale C-Erweiterung entwickelt, um Hashing-Vorgänge deutlich zu beschleunigen.
  • Verbessern Sie das Verschlüsselungsdesign: Das grundlegende Verschlüsselungsmodell (XOR-basiert, funktionsgesteuert) wurde im Hinblick auf pädagogische Klarheit und nicht auf Widerstandsfähigkeit gegen komplexe Angriffe entwickelt. Bei der Entwicklung robusterer Verschleierungsschichten, besserer Schlüsselstromgeneratoren und sichererer authentifizierter Verschlüsselungsschemata gibt es noch viel Neuland. Zum Ändern: Ich habe die synthetische IV-Seed-Initialisierung hinzugefügt, auf verschlüsselte und dann auf MAC-Authentifizierung umgestellt, den Hash auf HMAC geändert und eine starke Authentifizierung hinzugefügt. fx Beispiele und andere Funktionen nach der ersten Veröffentlichung.

Wenn Sie weitere Ideen oder Vorschläge haben, können Sie gerne ein GitHub-Problem eröffnen. Ich würde gerne gemeinsam über Verbesserungen nachdenken! Und wenn Sie ein Experte für Kryptographie sind, Ich würde mich über jede konstruktive Kritik sehr freuen.. VernamVeil wurde als Lernübung von jemandem außerhalb des Kryptobereichs konzipiert, daher ist es sehr wahrscheinlich, dass schwerwiegende Mängel oder Missverständnisse bestehen bleiben. Darüber hinaus kann es aufgrund meiner begrenzten Kenntnisse in Kryptographie dazu kommen, dass einige der von mir verwendeten Techniken unwissentlich bestehende Konzepte neu erfinden. Insbesondere wenn Ihnen bekannte Muster oder Standardpraktiken auffallen, die ich nicht richtig oder gar nicht benannt habe, wäre ich über einen Hinweis überaus dankbar. Das Erlernen der richtigen Terminologie und Referenzen würde mir helfen, das Projekt besser zu verstehen und zu verbessern.

Letzte Gedanken

VernamVeil hat nicht das Ziel, seriöse kryptografische Bibliotheken wie AES oder ChaCha20 zu ersetzen. Stattdessen ist es ein Spielplatzeine Möglichkeit, Konzepte wie dynamische Schlüsselgenerierung, authentifizierte Verschlüsselung, Seed-Evolution und Verschleierung zu lernen, zu basteln und zu erkunden, ohne sich in extrem dichter Mathematik zu verlieren.

Dies zeigt, dass es bei der Kryptographie nicht nur um den Schutz von Geheimnissen geht, sondern auch darum, Geheimnisse zu schützen überlagerte Unvorhersehbarkeit, Annahmen brechenUnd kreativ denken darüber, wo sich Schwachstellen verbergen könnten.

Wenn Sie neugierig sind, wie Verschlüsselungsprimitive in der realen Welt aufgebaut sind, oder einfach nur Mathematik und Code auf unterhaltsame Weise erkunden möchten, ist VernamVeil ein guter Ausgangspunkt. Ich freue mich auf eure Kommentare und Reaktionen.

Source link

Similar Posts