it-swarm-eu.dev

Was bedeutet "Schlüssel mit einer Länge von x Bits"?

Ich würde gerne wissen, was es bedeutet zu sagen "das Kryptosystem C verwendet Schlüssel mit einer Länge von x Bits". Ich verstehe nicht, was die Bitlänge bedeutet ... hängt es nicht von der Codierung ab? Das gleiche Wort codiert in utf8, iso und unicode in Bitfolgen unterschiedlicher Länge. Gibt es also eine allgemeine Codierung, die zum Definieren der Länge eines Schlüssels verwendet wird? Oder bedeutet "Länge von x Bits" etwas völlig anderes?

22
strauberry

Für symmetrische Algorithmen ( symmetrische Verschlüsselung , Nachrichtenauthentifizierungscode ) ist ein Schlüssel eine Folge von Bits, so dass jede Folge der richtigen Länge ein möglicher Schlüssel ist. Zum Beispiel ist AES ein symmetrischer Verschlüsselungsalgorithmus (speziell ein Blockchiffre ), der über Schlüssel von 128, 192 und definiert wird 256 Bit: Jede beliebige Folge von 128, 192 oder 256 Bit kann als Schlüssel verwendet werden. Wie Sie diese Bits codieren, ist hier nicht relevant: Es liegt an Ihnen, ob Sie sie nur roh ausgeben (8 Bits pro Byte), Base64 oder hexadezimal verwenden oder sie aus einer Zeichenfolge ableiten oder was auch immer.

Es gibt einige Fallstricke mit einigen Algorithmen. Das beste Beispiel ist DES , ein Vorgänger von AES. DES ist definiert, um einen 64-Bit-Schlüssel zu verwenden. Wenn Sie sich jedoch die Algorithmusdefinition ansehen, sehen Sie, dass nur 56 dieser Bits verwendet werden. Die anderen 8 werden einfach ignoriert (wenn Sie die Bits von 1 bis 64 nummerieren, sind dies die Bits 8, 16, 24, 32, 40, 48, 56 und 64; sie sollen abhängig von den 56 anderen "Paritätsbits" sein. aber niemand stört sich wirklich daran, sie einzustellen oder zu überprüfen). Daher wird oft gesagt, dass DES einen 56-Bit-Schlüssel hat. Dies liegt daran, dass die Schlüssellänge mit der Sicherheit zusammenhängt: Wenn ein Algorithmus Schlüssel der Länge n Bits akzeptiert, gibt es 2n mögliche Schlüssel, und daher hat das Ausprobieren aller Schlüssel (Angriff als "erschöpfende Suche" oder "Brute Force" bekannt) eine Zeit proportional zu 2n (mit n groß genug, d. h. mehr als etwa 85, dies ist technologisch nicht realisierbar). In diesem Sinne bietet DES die Sicherheit eines 56-Bit-Schlüssels ( 2)56 "wirklich unterschiedliche" mögliche Schlüssel). Wenn Sie jedoch eine Bibliothek verwenden, die DES implementiert, erwartet diese Bibliothek DES Schlüssel als Folgen von 64 Bit (häufig als 8 Byte bereitgestellt).

Ein anderer Algorithmus mit einer speziellen Regel ist RC2 . Es akzeptiert Schlüssel mit einer Länge von 8 bis 128 Bit (nur ein Vielfaches von 8). Es gibt aber auch einen zusätzlichen Parameter namens effektive Schlüssellänge, der mit "T1" bezeichnet wird. Während der Verarbeitung des Schlüssels wird ein interner Wert auf eine Folge von T1-Bits "reduziert", was bedeutet, dass die nachfolgende Verschlüsselung nur von den Werten der T1-spezifischen Bits in diesem internen Wert abhängt. Der Widerstand von RC2 gegen eine erschöpfende Suche ist dann nicht größer als der, den ein T1-Bit-Schlüssel bietet, da man alle möglichen Sequenzen von T1-Bits für diesen internen Wert ausprobieren kann. RC2 hat jedoch immer noch eine tatsächliche Schlüssellänge (die Länge der als Schlüssel bereitgestellten Bitfolge), die größer als T1 sein kann.

Für asymmetrische Algorithmen (auch bekannt als Kryptographie mit öffentlichem Schlüssel , einschließlich asymmetrischer Verschlüsselung, digitaler Signaturen, einiger Schlüsselaustauschprotokolle und ein paar weitere esoterische Algorithmen), Schlüssel arbeiten mit Paaren bestehend aus einem öffentlichen Schlüssel und einem privaten Schlüssel. Diese Schlüssel sind mathematische Objekte mit einer starken internen Struktur. Die "Schlüssellänge" ist dann ein herkömmliches Maß für die Größe eines der beteiligten mathematischen Objekte.

Zum Beispiel enthält ein öffentlicher RSA-Schlüssel eine große Ganzzahl namens Modul Sowie eine andere Ganzzahl (normalerweise klein) namens öffentlicher Exponent. Wenn wir einen "1024-Bit-RSA-Schlüssel" sagen, meinen wir, dass der Modul eine Länge von 1024 Bit hat, d. H. Eine ganze Zahl größer als 2 ist1023 aber niedriger als 21024. Eine solche Ganzzahl könnte als eine Folge von 1024 Bits, d. H. 128 Bytes, codiert werden. Der öffentliche Schlüssel muss jedoch auch den öffentlichen Exponenten enthalten, damit die tatsächlich codierte Länge größer wird. Und der private Schlüssel ist aus theoretischer Sicht das Wissen darüber, wie der Modul in Primzahlen berücksichtigt werden kann; Die traditionelle Codierung für dieses Wissen ist die der Primfaktoren, zusammen mit einer Reihe von Hilfswerten, die aus den Faktoren neu berechnet werden könnten (was jedoch etwas teuer wäre) und bei der schnelleren Ausführung des Algorithmus helfen können.

Für unterschiedliche Schlüsseltypen, die über unterschiedliche Mathematik arbeiten, werden andere "Längen" verwendet, sodass Sie die Sicherheit von Algorithmen nicht direkt vergleichen können, indem Sie einfach die Schlüssellängen vergleichen. Ein 256-Bit-Schlüssel ECDSA ist weitaus sicherer als ein 768-Bit-RSA-Schlüssel. Außerdem ermöglicht die mathematische Struktur von öffentlichen/privaten Schlüsselpaaren viel schnellere Angriffe als das einfache Ausprobieren von zufälligen Bits, und es gibt viele subtile Details. Unter diese Website finden Sie Erklärungen und Online-Rechner für die verschiedenen Regeln zum Vergleichen von Schlüsselgrößen, die sich viele Regulierungsorganisationen ausgedacht haben.

23
Thomas Pornin

Betrachten Sie die einfache Verschlüsselung, bei der jeder Buchstabe im Alphabet nach rechts verschoben wird, sodass A zu B wird, B zu C wird und so weiter. Damit: HALLO wird verschlüsselt als: IFMMP

Ich kann einen Buchstaben nach rechts, zwei Buchstaben nach rechts oder bis zu 25 Buchstaben nach rechts verschieben. Betrachten Sie die "Anzahl der Buchstaben rechts" als "Schlüssel". Es dauert 5 Bits, um eine Zahl zwischen 0 und 25 zu halten. Daher beträgt die Schlüsselgröße "5 Bits".

Oder anstatt nach rechts zu wechseln, nehmen wir an, dass wir das Alphabet nach dem Zufallsprinzip neu anordnen und eine Eins-zu-Eins-Zuordnung vornehmen: ABCDEFGHIJKLMNOPQRSTUVWXYZ RJQFGSKPBTODUZLNHYAVXEMWIC In diesem Fall schlagen wir den Buchstaben 'H' in der Tabelle nach es wird in den Buchstaben 'P' umgewandelt und die Nachricht: HALLO wird zu: PGDDL

Angenommen, die zufällige Neuordnung des Alphabets erfolgt mit einer mathematischen Folge, die auf einer 5-Bit-Zahl basiert, sodass jede Zahl eine andere Folge erzeugt. Somit ist die 5-Bit-Nummer wieder der "Schlüssel".

Das Problem mit einem 5-Bit-Schlüssel ist, dass er nur 32 Kombinationen hat. Wenn ich den Verschlüsselungsalgorithmus kenne, kann ich alle 32 Schlüssel verwenden, bis ich die richtige Kombination gefunden habe. Je größer der Schlüssel, desto schwieriger wird dies - EXPONENTIELL. Ein 6-Bit-Schlüssel hat 64 Kombinationen, ein 7-Bit-Schlüssel hat 128 Kombinationen und so weiter. Ein 10-Bit-Schlüssel hat tausend Kombinationen, ein 20-Bit-Schlüssel hat eine Million Kombinationen, ein 30-Bit-Schlüssel hat eine Milliarde Kombinationen.

Angenommen, Sie haben einen Computer, der eine Milliarde Schlüssel pro Sekunde testen kann, um alle Kombinationen brutal zu erzwingen. Das heißt, Sie können einen 30-Bit-Schlüssel in nur einer Sekunde brechen. Das bedeutet jedoch, dass Sie eine Milliarde Sekunden (oder 34 Jahre) benötigen, um einen 60-Bit-Schlüssel zu knacken.

Alle 30 Bits, die wir hinzufügen, machen es milliardenfach schwieriger. Eine Spionageagentur wie die NSA kann 60-Bit-Schlüssel mit Supercomputern knacken, aber ein 90-Bit-Schlüssel ist milliardenfach schwieriger zu knacken, und ein 120-Bit-Schlüssel wäre eine weitere milliardenfach schwierigere als einen 90-Bit-Schlüssel zu knacken.

Aus diesem Grund gelten ältere WEP (40 Bit) und DES (56 Bit)) als veraltet: Wir können sie mit Desktop-Computern knacken, indem wir alle Kombinationen ausprobieren. Deshalb verwendet moderne Krypto wie AES 128 Wir können diese Algorithmen nicht brachial knacken.

14

Die Länge eines Schlüssels in Bits ist nichts anderes als eine Angabe seiner Größe. Ein 128-Bit-Schlüssel benötigt 16 Byte Speicherplatz - nur die vom Prozessor verwendeten Rohbits. Es gibt nichts Besonderes, keine Übersetzung.

Eine Codierung ist eine Zuordnung von Bits zu etwas, das Bedeutung hat. Beispielsweise ist die 8-Bit-Sequenz 01100001 (0x61) in ASCII) der Buchstabe "a". Da Schlüssel zufällige Daten sind und keine Bedeutung haben, kommt die Codierung nur zum Übersetzen von Binärdaten ins Spiel etwas Druckbares, zum Beispiel BASE64. Anstelle von "Welche Bitfolge muss ich den Buchstaben a schreiben?" - was bei verschiedenen Codierungen variieren kann - lautet der Schlüssel "Was ist dieses Bit? Was ist dieses Bit? Was ist dieses Bit?" ? ".

3
Jeff Ferland

Das gleiche Wort codiert in utf8, iso und unicode in Bitfolgen unterschiedlicher Länge. Gibt es also eine allgemeine Codierung, die zum Definieren der Länge eines Schlüssels verwendet wird?

Ein Schlüssel ist kein Wort. Es ist eine Folge von Bits. Die "allgemeine Kodierung", von der Sie sprechen, ist keine Kodierung.

Außerdem gibt es Code-Punkt-> Zeichenfolgencodierungen mit den Namen UTF-8 und ISO- *, aber Unicode ist keine Codierung. Es ist ein Zeichensatz.

Vielleicht hilft es, einige Begriffe zu definieren.

Ein "Zeichensatz", beispielsweise Unicode, ist ein Satz von Symbolen, die normalerweise durch einen ganzzahligen Index gekennzeichnet sind. Im Unicode werden diese Symbole auch als Codepunkte bezeichnet (streng Unicode-Skalarwerte).

Eine "Zeichenfolge" ist eine Folge von Symbolen, die aus einem Alphabet ausgewählt wurden. Sofern nicht anders angegeben, ist die Sequenz von endlicher Länge und das Alphabet ist eine Teilmenge von Unicode. Der Begriff kann jedoch auch für andere Alphabete verwendet werden: eine "Byte-Zeichenfolge" (wobei das Alphabet die Menge von Ganzzahlen ist, die in 8 Bits dargestellt werden können [0,255]). oder [-128,127]) oder "UTF-16-Zeichenfolge" (wobei das Alphabet die Menge von ganzen Zahlen ist [0,65535]).

Eine "Codierung" ist eine (normalerweise umkehrbare) Zuordnung von einer Art von Zeichenfolge zu einer anderen. UTF-8 ordnet "Code-Punkt" -Sequenzen (auch als reguläre Zeichenfolgen bezeichnet) Byte-Zeichenfolgen zu.

1
Mike Samuel

Ich verstehe nicht, was die Bitlänge bedeutet ... hängt es nicht von der Codierung ab?

Text - eine Folge von Zeichen und anderen Glyphen aus mehreren Sprachen - ist eine Abstraktion. Menschen wissen, wie man mit Text umgeht, Computer jedoch nicht - bis wir einen Weg gefunden haben, wie Computer dies tun können. Dieser Weg wird als "Codierung" bezeichnet - eine Codierung ist eine Möglichkeit, eine Folge von Zeichen einer Folge von Bytes zuzuordnen und eine Folge von Bytes wieder einer Folge von Zeichen zuzuordnen. Bei einer Codierung kann ein Zeichen in ein Byte codiert werden, während bei einer anderen Codierung dasselbe Zeichen in vier Bytes codiert wird.

Text kann einfach codiert in eine Folge von Bytes sein. Text ist jedoch abstrakt und muss codiert sein, um behandelt zu werden.

Aber eine Folge von Bytes ist nur eine Folge von Bytes und hat nichts mit Text zu tun und hat überhaupt kein Konzept für Codierungen.

Folgen von Bits entsprechen Sequenzen von Bytes, solange ihre Längen immer ein Vielfaches von 8 Bits sind. Wenn also jemand von einem 16-Byte-Schlüssel spricht, entspricht dies einem 128-Bit-Schlüssel.

Wenn man sich mit kryptografischen Funktionen befasst, sollte man immer darauf achten, nur Sequenzen von Bits oder Bytes zu behandeln. Wenn jemand Text hat, den er verschlüsseln oder hashen möchte, sollte er zuerst darauf achten, den Text zuerst in eine Folge von Bytes zu codieren, wobei entweder in allen Fällen dieselbe Codierung verwendet wird oder notiert wird, welche Codierung in diesem Fall verwendet wurde. Man sollte nur Bytes verschlüsseln oder hashen, niemals Text: und Codierungen sind, wie man Text in Bytes übersetzt. Wenn ein Schlüssel in der Hex- oder Base64-Textcodierung dargestellt ist, sollte man ebenfalls darauf achten, den Schlüssel zuerst wieder in Bytes zu decodieren.

1
yfeldblum

Die tatsächliche Bedeutung davon ist, wie viele Bits den gewünschten Schlüssel bilden, um mit den Verschlüsselungs- oder Entschlüsselungsalgorithmen fortzufahren. Angenommen, die Schlüsselgröße beträgt 256 Bit. Dies bedeutet, dass Sie eine Ganzzahl verwenden, die größer als 2 ^ 255 und kleiner als 2 ^ 256 ist. Zwischen der Ganzzahl müssen Sie sie als öffentlichen oder privaten Schlüssel verwenden.

0
seshu babu