it-swarm.com.de

Was wäre die Schlüsselgröße für ein Bild, das als Schlüssel verwendet wird?

Ich arbeite an einem Kryptosystem, das Farbbilder als Schlüssel für die Verschlüsselung verwendet. Ich versuche zu erraten, wie groß mein Kryptosystem ist, um die Machbarkeit eines Brute-Force-Angriffs zu ermitteln. Mein Kryptosystem verwendet RGB-Bilder jeder Größe M x N.

Das Bild wird auch von einem chaotischen Attraktor erzeugt, der für Anfangswerte empfindlich ist, so dass jedes erzeugte Bild anders ist. Diese Bilder sind ein Beispiel:

(colourful generated images

Ich habe noch kein Papier gefunden, das versucht, die gleiche Berechnung durchzuführen. Irgendeine Idee, wie groß der Schlüssel ist?

Ihre letzte Bearbeitung zeigt an, dass Ihre Bilder prozedural generiert wurden, sodass Ihre Schlüsselgröße daher durch den Status begrenzt ist, der zum Generieren eines Bildes erforderlich ist. Ihre scheint parametrisiert zu sein durch vier Gleitkommazahlen für die Anfangsbedingungen (und feste Ausgabebildgröße, Kamerastandort, Punktlichtort, Konvergenzbedingungen usw.).

Diese 128-Bit-Status werden dann von einem Algorithmus, der ausschließlich von Ihrem bereitgestellten Status abhängt, in ein Bild umgewandelt, sodass Ihr Bild- "Schlüssel" nicht mehr als 128 Bit Informationen enthalten kann. Tatsächlich denke ich, dass ganze Klassen von Anfangswerten identische Ausgaben erzeugen (z. B. wenn alle vier Floats extrem klein sind), so dass Ihre Bild- "Schlüssel" -Größe streng weniger als 128 Bit beträgt.

Es hat wirklich keinen Vorteil, die 128-Bit-Status zu berühren, indem Sie sie in ein Bild (und dann irgendwie zurück) verwandeln, wenn Sie nur die Größe des Schlüssels reduzieren.

99
Blender

Ein Bild ist viel zu groß, um direkt als Verschlüsselungsschlüssel verwendet zu werden. Sie sollten es zuerst über ein KDF ausführen.

Es hängt auch ganz vom Bild ab, ob es genug Entropie hat, um nützlich zu sein. Sie könnten ein 1000x1000-Bild haben, das durchgehend weiß ist, aber als Schlüssel wäre es nutzlos, da es keine Entropie enthält. Bilder von Kameras haben in der Regel eine angemessene Entropie in den unteren Bits, so dass dies in Ordnung sein könnte, aber Ihre Benutzer müssten verstehen, dass nicht jedes Bild ein guter Schlüssel ist.

Bilder als Schlüssel sind im Allgemeinen keine gute Idee. Bilder werden normalerweise zum Teilen aufgenommen, und Schlüssel möchten Sie nicht jedem zeigen. Die Verwendung eines Bildes als Schlüssel klingt für mich auch so, als ob es sich auf Sicherheit durch Dunkelheit stützen könnte (dh Sie verwenden nur ein Bild aus den Tausenden, die Sie auf Ihrem Computer haben, aber das ist wahrscheinlich eine sehr niedrige Entropie unter 20 Bit, es sei denn, Sie haben eine verrückte Anzahl von Bildern).

Fühlen Sie sich frei, dies weiterzuentwickeln, um zu lernen, aber bis Sie ein viel besseres Verständnis für Kryptographie haben, ist es besser, solche Dinge den Experten zu überlassen (siehe Warum sollten wir nicht unsere eigenen rollen? =).

22
AndrolGenhald

Jedes Kryptosystem sollte Schlüssel mit Schlüsselgrößen in den Sicherheitsstufen 128, 192 und 256 Bit-of-Entropy haben.

Die Frage kommt also auf Sie zurück: Woher kommen diese Bilder und wie viel Entropie enthalten sie? Wenn es sich um vollständig zufällige Bitströme handelt, die als Bild interpretiert werden (ohne Berücksichtigung des Entropieverlusts durch verlustbehaftete Komprimierungscodecs), erhalten Sie log_base2(256x256x256) = 24 bits of entropy per pixel, sodass Sie jeweils 6/8/11 Pixel für die benötigen 128/192/256-Bit-Sicherheitsstärken.

Wenn Sie keine völlig zufälligen Bilder erzeugen und stattdessen zulassen, dass Benutzer Fotos verwenden, habe ich keine Ahnung, wie Sie überhaupt anfangen würden, die Entropie in einem dieser Bilder zu schätzen.


Fazit: Die Verwendung von Bildern als Schlüsselmaterial scheint eine wirklich seltsame Sache zu sein und widerspricht der gängigen Praxis, dass Schlüsselmaterial vollständig zufällige Daten aus einer Kryptografie sind -Stärke RNG.

Aufgrund der Informationen in Ihrer Frage bin ich auch nicht davon überzeugt, dass Brute-Force der Angriff ist, über den Sie sich Sorgen machen müssen. Ich würde mich mehr mit dem Angriff "Zugriff auf ihren Laptop erhalten und jedes Bild auf ihrer Festplatte ausprobieren" befassen.

10
Mike Ounsworth

Ich kann den Bildern entnehmen, dass Ihre Schlüsselgröße deutlich kleiner ist als die Größe der Bilder (da die meisten von ihnen sonst wie zufällig farbige statische Aufladung aussehen würden).

Ihre Schlüsselgröße ist kleiner oder gleich dem Basis-2-Logarithmus der Gesamtzahl der verschiedenen Bilder, die Ihr chaotisches Attraktorprogramm erzeugen kann. *

Das ist eine andere Art zu sagen, dass Ihre Schlüsselgröße kleiner oder gleich (wahrscheinlich kleiner als) der Anzahl von Bits ist, die erforderlich sind, um alle Eingaben für Ihr chaotisches Attraktorprogramm anzugeben.

Wenn Sie das Bild hashen und den Hash als Kryptoschlüssel verwenden, ist Ihre Schlüsselgröße gleich oder kleiner als die Größe des Hash.

* Das ist Ihre genaue Schlüsselgröße, wenn Ihr Verschlüsselungsalgorithmus so etwas wie "XOR jedes Bit des Bildes mit dem entsprechenden Bit des Klartextes" ist (verwenden Sie diesen Algorithmus nicht für wichtige Geheimnisse, übrigens, da Teile der Nachricht durch das Grau abgedeckt sind Bereiche in Ihren Bildern können sehr einfach zu entschlüsseln sein.

7
Robyn

tl; dr - Sie schlagen einen Key-Stretching-Algorithmus vor, der 128 Jahre alt wird Eingabebits in einen viel größeren Schlüssel. Dies ist nicht so gut wie die Verwendung eines viel größeren Schlüssels derselben Größe, obwohl es nicht unbedingt so schwach ist wie die 128 Eingabebits. Trotzdem sieht Ihre Bitmap sehr geordnet aus, was stark darauf hindeutet, dass sie weitaus schwächer ist als eine zufällig generierte Bitmap.


Laut @ Blenders Antwort verwenden Sie nur 128 Bit, um das Bild zu erzeugen. Ich vermute, dass Sie möchten, dass das Bild selbst als Schlüssel zählt, der größer ist als die 128 Bits, die Sie in den Algorithmus eingefügt haben, der es generiert hat. Und es könnte.

Insbesondere versuchen Sie, einen Key-Stretching-Algorithmus zu erstellen, der versucht, 128 Eingabebits in einen viel größeren Schlüssel zu strecken. Dies ist nicht unbedingt fruchtlos, aber es gibt Dinge zu beachten:

  1. Ein Key-Stretching-Algorithmus kann für Brute-Force-Eingaben anfällig sein. Selbst wenn jemand den Algorithmus zur Bilderzeugung nicht rückentwickeln könnte, könnte er beispielsweise alle möglichen $ 2 ^ {128} $ -Eingaben versuchen, um alle möglichen $ 2 ^ {128} $ möglichen Bilder zu generieren, und dann jedes ausprobieren. Um dies zu verhindern, müssen Sie sicherstellen, dass der Algorithmus zur Bilderzeugung zu teuer ist, als dass ein solcher Angriff möglich wäre.

  2. Ihr Bild sieht auf lokaler Ebene alles andere als zufällig aus. Dies bedeutet, dass jeder, der ein paar Pixel davon betrachtet, wahrscheinlich die benachbarten Pixel mit überdurchschnittlichen Erfolgsaussichten erraten kann. Dies bedeutet, dass der Algorithmus nicht pseudozufällig ist, selbst gegen einen Angreifer, der den Algorithmus zur Bilderzeugung nicht rückentwickeln kann.

  3. Ihr Bild sieht auf globaler Ebene alles andere als zufällig aus. Dies bedeutet, dass die angezeigten Formen eine globale Geometrie haben und die Bilder Pixel auf einem gut erzogenen Hintergrund verschwenden. Dies schwächt die Pseudozufälligkeit erneut erheblich, was möglicherweise darauf hindeutet, dass es leicht sein könnte, vollständig zu brechen.

  4. Es gibt keinen wirklichen Vorteil bei einem Algorithmus zum Strecken von Schlüsseln, der ein Bild erzeugt, im Gegensatz zu jeder anderen Darstellung derselben Daten. Zugegeben, der gestreckte Schlüssel sieht zwar hübsch aus wie ein Bild, aber diese Schönheit spiegelt lediglich seine Schwäche gegenüber einer zufällig generierten Bitmap wider.

Diese Website scheint zufällige Schwarz-Weiß-Bitmaps mit angegebenen Abmessungen zu generieren. Hier ist zum Beispiel eine $ 250\mal 250 $ -Pixel-Bitmap:
.
Diese Bitmap ist (sollte) zufällig, da ein Angreifer, der eine beliebige Kombination seiner Pixel betrachtet, keine besseren Chancen haben sollte, zu erraten, was ein anderes Pixel sein könnte.


Wie viel Entropie?

Leider ist auf dieser Website MathJax nicht aktiviert, sodass es schwierig ist, Ihre Frage direkt zu beantworten, ohne dass sie seltsam aussieht. Hier schreibe ich eine Antwort, als ob MathJax verfügbar wäre.

Die Menge der zufällig erzeugten RGB-Bilder einer bestimmten Länge und Breite enthält $$ {\ left (n_\text {Rot} \, n_\text {Grün} \, n_\Text {Blau}\rechts)} ^ { n_\text {width} \, n_\text {height}} \,\text {mitglieder}\, $$ wobei:

  • $ n_\text {Red} $ ist die Anzahl der möglichen Werte für die Dimension " red" eines Pixels.

  • $ n_\text {Green} $ ist die Anzahl der möglichen Werte für die Dimension " grün" eines Pixels.

  • $ n_\text {Blue} $ ist die Anzahl der möglichen Werte für die Dimension " blau" eines Pixels.

  • $ n_\text {width} $ ist die Anzahl der Pixel in der Breite; und

  • $ n_\text {length} $ ist die Anzahl der Pixel in der Länge.

Da dann die Entropie $\log_2 {\ left (n_\text {Members}\right)} ist, wäre dies $$\begin {align}\left [\ text {entropy}\right] & ~ = ~\log_2 {\ left ({\ left (n_\text {Red} \, n_\text {Green} \, n_\text {Blue}\right)} ^ {n_\text {width} \, n_\text { Höhe}}\rechts)}\[5px] & ~ = ~ {n_\Text {Breite} \, n_\Text {Höhe}} \,\log_2 {\ links (n_\Text {Rot} \, n_\Text {Grün} \, n_\text {Blau}\rechts)}\,.\End {align} $$

Bei einem Schwarzweißbild:

  • $ n_\text {Red} = 2, $ da es zwei mögliche Werte für den roten Kanal gibt;

  • $ n_\text {Green} = n_\text {Blue} = 1, $ da die Werte des grünen und blauen Kanals so definiert sind, dass sie dem roten Kanal entsprechen (so dass alle Pixel entweder schwarz oder weiß sind;

die Entropie wäre also $$\left [\ text {entropy}\right] ~ = ~ {n_\text {width} \, n_\text {height}} \,\log_2 {\ left (2\times 1\times 1\right)} ~ = ~ {n_\text {width} \, n_\text {height}}\,. $$

3
Nat

Wenn Sie es also schaffen, die anfänglichen Probleme zu überwinden, die mit zu geringer Schlüsselgröße und zu viel Verlust verbunden sind, und danach KDF verwenden, ist es schließlich von Vorteil, diese Schlüssel für die Authentifizierung zu verwenden.

Die Generierung dieses Materials muss in Bezug auf einen herkömmlichen Hash ewig dauern. Wenn also die Anfangsparameter wie ein Kennwort behandelt werden, sind die Angriffszeiten für Kennwörter langsam.

Aber es gibt einfachere Wege, das zu bekommen. bcrypt() und Freunde skalieren gut.

0
Joshua