Verwenden einer konstanten IV mit Einzelblockverschlüsselung

  • Ich habe viele kleine Geheimnisse, die ich verschlüsselt in einer Datenbank speichern möchte. Der Datenbankclient verfügt über die Schlüssel, und der Datenbankserver behandelt die Verschlüsselung und Entschlüsselung nicht. Alle meine Geheimnisse bestehen aus 16 Bytes oder weniger, was bei Verwendung von AES nur einen Block bedeutet. Ich verwende eine Konstante IV (und einen Schlüssel), um die Verschlüsselung deterministisch zu machen. Mein Grund für die deterministische Verschlüsselung ist die Möglichkeit, die Datenbank mithilfe von verschlüsseltem Text auf einfache Weise abzufragen und sicherzustellen, dass das gleiche Geheimnis nicht zweimal gespeichert wird (indem die Spalte UNIQUE verwendet wird ). Soweit ich sehen kann, sollte dies kein Problem sein, solange der Schlüssel geheim ist. Aber ich möchte sicher sein: Bin ich richtig oder falsch? Falls ich falsch liege, welche Angriffe könnten durchgeführt werden?

    BTW: Hashes sind hier aufgrund einer relativ geringen Anzahl möglicher Klartexte ziemlich nutzlos. Mit einem Hash wäre es trivial, den ursprünglichen Klartext zu erhalten.

    04 March 2011
    tryeng
2 answers
  • Eine ideale Verschlüsselung für Nachrichten der Länge n ist eine Permutation der 2 n Sequenzen von n Bits, die in den 2 n ! ! zufällig ausgewählt werden. Der "Schlüssel" ist die Beschreibung, welche Permutation gewählt wurde.

    Eine sichere Blockverschlüsselung soll von einer idealen Verschlüsselung nicht zu unterscheiden sein, wobei n ist die Blockgröße. Für AES gilt n = 128 (d. H. 16 Bytes). AES soll eine sichere Blockverschlüsselung sein.

    Wenn alle Ihre Geheimnisse genau 16 Bytes (oder weniger als 16 Bytes) haben, werden sie mit einiger Auffüllkonvention eindeutig auf 16 Bytes erweitert ), dann ist eine ideale Chiffre das, was Sie wollen, und AES "as selbst" sollte in Ordnung sein. Mit gängigen AES-Implementierungen, die das Auffüllen anwenden und willkürlich lange Streams verarbeiten möchten, können Sie eine Verschlüsselung mit einem Block erhalten, indem Sie den ECB-Modus oder den CBC-Modus mit einem All-Zero-IV anfordern.

    Alle Fragen zu IV und warum die Verkettungsmodi wie CBC überhaupt notwendig waren, stammen von Multiblock-Nachrichten. AES verschlüsselt 16-Byte-Nachrichten (nicht mehr und nicht weniger): Bei Verkettungsmodi geht es um die Emulation einer idealen Chiffre für längere Nachrichten. Wenn in Ihrer Anwendung alle Nachrichten genau 16 Byte lang sind (oder kürzer sind, Sie jedoch Padding hinzufügen), benötigen Sie nur das "rohe" AES. und eine feste IV ist eine nahe genug Emulation von rohem AES.

    Beachten Sie jedoch Folgendes:

    • Wenn Sie verschlüsselte Elemente in einer Datenbank speichern und für die gesamte Lebensdauer Ihrer Anwendung eine Eindeutigkeit benötigen, ist Ihr geheimer Schlüssel langlebig. Wenn Sie einen geheimen Schlüssel für lange Zeit geheim halten, kann dies ein schwieriges Problem sein. Zum Beispiel benötigen langlebige geheime Schlüssel eine Art Speicher (der einen Neustart verhindert). Wie verwalten Sie tote Festplatten? Zerstören Sie sie in einem mit Säure gefüllten Kessel?

    • Die Verschlüsselung gewährleistet Vertraulichkeit und nicht Integrität . In den meisten Sicherheitsmodellen können Angreifer aktiv sein (d. H

    04 March 2011
    Thomas Pornin
  • Wenn die Assembly öffentlich verfügbar ist oder werden kann, können Ihr Schlüssel und Ihr IV mithilfe von Reflector ermittelt werden, um den Quellcode verfügbar zu machen, der sie verwendet. Das wäre das Hauptproblem dabei, wenn die Daten wirklich geheim wären. Es ist möglich, MSIL zu verschleiern, dies macht es jedoch schwieriger, es durchzuverfolgen. Es muss immer noch Computer-konsumierbar sein, sodass Sie es nicht wirklich verschlüsseln können.

    04 March 2011
    KeithS