Warum Unschärfe vertrauliche Informationen nicht schlecht verbirgt

Sicherlich hat jeder im Fernsehen und im Internet Fotos von Menschen gesehen, besonders verschwommen, um ihre Gesichter zu verbergen. Zum Beispiel Bill Gates:



Dies funktioniert größtenteils, weil es keine bequeme Möglichkeit gibt, die Unschärfe in ein ausreichend detailliertes Foto umzukehren, um ein Gesicht zu erkennen. Mit Gesichtern ist also alles in Ordnung. Viele greifen jedoch darauf zurück, vertrauliche Zahlen und Texte zu verwischen. Ich werde zeigen, warum dies eine schlechte Idee ist.

Angenommen, jemand hat aus irgendeinem schrecklichen Grund ein Foto seines Schecks oder seiner Kreditkarte im Internet veröffentlicht (um im Forum zu beweisen, dass er eine Million Dollar verdient oder etwas Lustiges gezeigt hat, oder um die Größe von etwas mit einer Kreditkarte zu vergleichen usw.). .) verwischte das Bild mit einem zu häufigen Mosaikeffekt, um die Zahlen auszublenden:



Scheint sicher, weil niemand die Zahlen lesen wird? FALSCHE ANTWORT. Es gibt einen Angriff auf dieses Schema:

Schritt 1. Holen Sie sich ein sauberes Scheckbild


Es gibt zwei Möglichkeiten, dies zu tun. Sie können die Zahlen entweder in einem grafischen Editor entfernen oder ein Konto bei derselben Bank eröffnen und Ihre eigene Karte aus demselben Winkel fotografieren, Weißabgleich und Kontrast kombinieren. Entfernen Sie dann die Zahlen in einem grafischen Editor (bei einem hochauflösenden Foto ist dies einfacher).

In unseren Beispielen ist dies natürlich leicht zu bewerkstelligen:



Schritt 2. Iterationen


Verwenden Sie ein Skript, um alle möglichen Kontonummern zu durchlaufen und eine Prüfung für jede einzelne Gruppe von Nummern zu erstellen. Bei VISA-Karten werden die Nummern beispielsweise nach 4 gruppiert, sodass Sie jeden Abschnitt einzeln verarbeiten können. Dies erfordert nur 4 × 10.000 = 40.000 Bilder, die vom Skript leicht generiert werden können.



Schritt 3. Verwischen Sie jedes Bild identisch mit dem Original


Bestimmen Sie die genaue Größe und den Pixelversatz der Mosaikkacheln, mit denen das Originalbild verwischt wird (einfach), und machen Sie dasselbe mit jedem Ihrer unscharfen Bilder. In diesem Fall sehen wir, dass das verschwommene Bild aus einem 8x8-Pixel-Mosaik besteht und der Versatz durch Zählen vom oberen Rand des Bildes (nicht gezeigt) bestimmt wird:



Jetzt sortieren wir alle Bilder, verwischen sie auf die gleiche Weise wie das Original und erhalten so etwas:



Schritt 4. Bestimmen Sie den Mosaik-Helligkeitsvektor für jedes unscharfe Bild.


Was bedeutet das? Nehmen wir die Mosaikversion 0000001 (erhöht):



... und bestimmen Sie die Helligkeitsstufe (0-255) für jeden Bereich des Mosaiks und benennen Sie sie auf einheitliche Weise als a=[a1,a2...,an]::



In diesem Fall erstellt die Kontonummer 0000001 einen Mosaikhelligkeitsvektor a(0000001)=[213,201,190,...]. Wir finden den Mosaik-Helligkeitsvektor für jede Kontonummer auf dieselbe Weise, indem wir ein Skript verwenden, um jedes Bild zu verwischen und die Helligkeit zu lesen. Lass a(x)- Kontonummernfunktion x. Dann a(x)ibezeichnet den i-ten Vektorwert des Mosaikhelligkeitsvektors avon der Kontonummer erhalten x. Oben a(0000001)1=213.

Jetzt machen wir dasselbe für das ursprüngliche Referenzbild, das wir im Internet oder irgendwo gefunden haben, und erhalten einen Vektor, den wir hier aufrufen werden z=[z1,z2,...zn]::



Schritt 5. Suchen Sie das Bild, das dem Originalbild am nächsten liegt.


Definieren Sie den Helligkeitsvektor des Mosaiks des Originalbilds, nennen wir es z=[z1,z2,...zn]und berechnen Sie dann einfach die Entfernung von jeder Kontonummer (angezeigt durch x) zum Helligkeitsvektor des Mosaiks (nach Normalisierung):

d(x)= sqrt((a(x)0/N(a(x))z0/N(z))2+(a(x)1/N(a(x))z1/N(z))2+...)


wobei N(a(x)) und N(z) die angegebenen Normalisierungskonstanten sind

N(a(x))=(a(x)02+a(x)12+...)2


N(z)=(z02+z12+...)2


Finden Sie jetzt einfach die kleinste d(x). Bei Kreditkarten bestätigt nur ein kleiner Teil der möglichen Nummern die hypothetisch mögliche Anzahl von Kreditkarten, sodass auch hier nichts kompliziert ist.

In unserem Fall berechnen wir beispielsweise

N(z)= sqrt(2062+2112+...)=844,78459


N(a(0000001))=907,47837


N(a(0000002))=909,20647


und berechnen Sie dann die Entfernungen:

d(0000001)=1,9363


d(0000002)=1,9373


...


d(1124587)=0,12566


d(1124588)=0,00000


...


Vielleicht entspricht die Kontonummer dem Mosaik 1124588?

"Aber du hast dein eigenes Bild verwendet, das leicht zu entziffern ist!"


In der realen Welt echte Fotos, keine fiktiven Beispiele aus Photoshop. Wir haben Textverzerrungen aufgrund von Kamerawinkel, unvollständiger Ausrichtung und so weiter. Dies hindert eine Person jedoch nicht daran, die Art der Verzerrung genau zu bestimmen und ein geeignetes Skript zu erstellen! In jedem Fall können einige definierte Mindestabstände als Kandidaten betrachtet werden, insbesondere in der Welt der Kreditkarten, in der Zahlen wunderschön in 4er-Gruppen unterteilt sind und nur 1 von 10 Zahlen tatsächlich eine gültige Zahl ist, was die Auswahl mehrerer wahrscheinlich macht Kandidaten.

Um dies in realen Fotografien zu realisieren, sollte der Entfernungsalgorithmus verbessert werden. Beispielsweise können Sie die obige Abstandsformel neu schreiben, um zusätzlich zum Durchschnitt Standardabweichungen zu normalisieren. Sie können auch unabhängig RGB- oder HSV-Werte für jeden Bereich des Mosaiks verarbeiten sowie Skripte verwenden, um Text um mehrere Pixel in jede Richtung zu verzerren und zu vergleichen (was Ihnen auf einem schnellen PC immer noch eine völlig begrenzte Anzahl von Vergleichen lässt). Sie können Algorithmen verwenden, die den vorhandenen Algorithmen für den nächsten Nachbarn ähneln, um die Zuverlässigkeit der Arbeit in realen Fotos zu erhöhen.

Also ja, ich habe mein Bild verwendet und es für diesen Fall angepasst. Aber der Algorithmus kann sicherlich für den realen Gebrauch verbessert werden. Aber ich habe weder die Zeit noch den Wunsch, etwas zu verbessern, weil ich nicht nach Ihren Informationen suche. Eines ist jedoch sicher: Dies ist eine sehr einfache Situation. Verwenden Sie keine einfachen Mosaike, um das Bild zu verwischen. Sie reduzieren lediglich die Informationsmenge im Bild, die alles enthält log(10N)/log(2)effektive Bits von Kontodaten. Wenn Sie solche Bilder verteilen, möchten Sie persönliche Informationen entfernen, anstatt den Zugriff darauf zu behindern, indem Sie die Menge an visuellen Informationen reduzieren.

Stellen Sie sich ein grafisches Bild von 100 × 100 vor. Angenommen, ich habe gerade die Pixel gemittelt und jedes durch einen Durchschnittswert ersetzt (dh ich habe das Bild in ein Einzelpixel-Mosaik verwandelt). Sie haben gerade eine Funktion erstellt, die aus 256 ^ (10000) Varianten bis zu 256 Varianten gehasht hat. Offensichtlich können Sie mit den empfangenen 8 Bits das Original-Image nicht wiederherstellen. Wenn Sie jedoch wissen, dass es insgesamt 10 Optionen für das Originalbild gibt, können Sie anhand dieser 8 Bits leicht feststellen, welches verwendet wurde.

Wörterbuch-Angriffsanalogie


Die meisten UNIX / Linux-Systemadministratoren wissen, dass Kennwörter in / etc / passwd oder / etc / shadow mit einer Einwegfunktion wie Salt oder MD5 verschlüsselt werden. Dies ist ziemlich sicher, da niemand das Passwort entschlüsseln kann, indem er seinen verschlüsselten Text betrachtet. Die Authentifizierung erfolgt durch die gleiche Einwegverschlüsselung des vom Benutzer beim Betreten des Systems eingegebenen Kennworts und durch Vergleichen dieses Ergebnisses mit dem gespeicherten Hash. Wenn sie übereinstimmen, hat der Benutzer den Test erfolgreich bestanden.

Es ist bekannt, dass ein Einweg-Verschlüsselungsschema leicht bricht, wenn ein Benutzer ein Wörterbuchwort als Passwort auswählt. Der Angreifer muss lediglich das gesamte englische Wörterbuch verschlüsseln, den verschlüsselten Text jedes Wortes mit dem in / etc / passwd gespeicherten verschlüsselten Text vergleichen und das richtige Wort als Kennwort auswählen. Daher wird Benutzern normalerweise empfohlen, komplexere Kennwörter zu wählen, bei denen es sich nicht um Wörter handelt. Ein Wörterbuchangriff kann wie folgt dargestellt werden:



In ähnlicher Weise ist Bildunschärfe ein Einweg-Verschlüsselungsschema. Sie konvertieren das Bild, das Sie haben, in ein anderes Bild, das zur Veröffentlichung bestimmt ist. Da die Kontonummern normalerweise Millionen nicht überschreiten, können wir ein „Wörterbuch“ möglicher Nummern erstellen. Beispielsweise liegen alle Zahlen zwischen 0000001 und 9999999. Starten Sie dann die automatische Verarbeitung, bei der jedes dieser Bilder auf ein Foto mit leerem Hintergrund gesetzt wird - und verwischen Sie jedes Bild. Dann bleibt nur noch, um die verschwommenen Pixel zu vergleichen und zu sehen, welche Optionen am ehesten mit dem Original übereinstimmen.

Lösung


Die Lösung ist einfach: Bilder nicht verwischen! Malen Sie sie stattdessen einfach über:



Denken Sie daran, dass Sie Informationen vollständig entfernen und nicht wie auf einem verschwommenen Foto reduzieren möchten.

Source: https://habr.com/ru/post/de449608/


All Articles