Frage

Lassen Sie sich sagen, ich habe eine verschlüsselte Datei auf ein iPhone und jedes Mal, wenn ich es entschlüsseln will, ich will stattdessen ein Entschlüsselungs Symbol zu „zeichnen“ von mit einer Tastatur verwenden, um es in eingeben.

Wenn Sie vom Benutzer anfordern, um ein Symbol zu zeichnen, eine Datei zu entschlüsseln, jedes Mal, es benötigt wird (zB jedes Mal, wenn sie Ihre Anwendung starten) würden sie wahrscheinlich es vorziehen, mit einem 20 Zeichen eingeben oder so Passwort auf der kleine Tastatur und sie würden immer noch die Sicherheit ein 20-Zeichen-Passwort ihnen geben würde, erhalten (je nachdem, wie kompliziert die Form / Symbol zieht sie ist).

Das Symbol würde sie höchstwahrscheinlich einen Schlaganfall hinweisen (zB es ist vorbei, wenn Sie Ihren Finger anheben), aber kann sehr komplex sein, so dass es schwer für jemanden, der es zu wiederholen, auch wenn sie sehen, dass es ziehen in. Ein bisschen wie, wie jede Person, die Unterschrift ist einzigartig und schwer zu duplizieren. Eigentlich kann dies nur allzu es erschweren, wenn es dupliziert zu verhindern, hat davor, so jetzt kann dies ignoriert werden, und wir können davon ausgehen, dass das Symbol nicht von jemandem gesehen werden, sonst und so spielt es keine Rolle, ob es wiederholt werden kann von ihnen oder nicht.

Ich denke, die wirkliche Frage ist, wie würden Sie das gleiche (vernünftigerweise) Hub konsequent auf den gleichen Schlüssel (zum Beispiel Hash-Wert) zu konvertieren. Es sollte offensichtlich einige Schwelle von Vergebung im Algorithmus sein, da der Benutzer nicht erwartet werden, kann der Hub genau 100% zu wiederholen.

Mit dem Symbol als ein Entschlüsselungsverfahren eine ganz andere Dimension dieses Problems hinzufügt. Sie wollen nie den erzeugten Hash-Wert überall in unverschlüsselter Form speichern, denn dann könnte jemand in der Lage sein, dass ein Teil der Festplatte zugreifen und den Entschlüsselungsschlüssel erhalten, ohne durch das gesamte Ziehprozess zu gehen, um die Datei manuell entschlüsseln. Sie könnten auch höchstwahrscheinlich nicht wollen, etwas zu speichern, wie die Form gezogen wird.

Ein gutes Beispiel für einen Schlaganfall, die ein Benutzer als ihre Entschlüsselung Symbol verwenden könnte, ist das Symbol „&“. Stellen Sie sich einen Benutzer zeichnet dieses Symbol auf ihrem iPhone jedes Mal, die sie benötigen, um eine Datei zu entschlüsseln. Die Größe des Symbols möglicherweise nicht das gleiche sein jedes Mal gezogen wird. die Drehung des Symbols kann auch unterschiedlich sein, je nachdem, wie der Benutzer sein Gerät hält. Idealerweise in beiden Fällen, weil das Symbol gezogen wurde, in Bezug auf die Benutzerschlaganfällen, die gleichen sind, sollten sie in der Lage sein, den gleichen Hash-Wert zu erzeugen und damit die Datei entschlüsseln.

Ich dachte, so etwas wie Form oder Zeichenerkennung ein ähnlicher Algorithmus ist. Wo der Benutzer etwas zieht (maßen die eine Form) und fixiert sie dann auf die richtige Form, die den gleichen Hash-Wert jedes Mal gezogen hätte. Aber für so etwas würden Sie wahrscheinlich brauchen eine Datenbank von Formen, die gezogen werden können, und wenn Sie so etwas wie alle Buchstaben im Alphabet wählen, nur 26 Buchstaben bekommen. Und vorausgesetzt, den Benutzer sollte nur noch ein Symbol ziehen, um die Datei zu entschlüsseln, Sie haben ein extrem unsicheres Passwort mit nur 26 Möglichkeiten.

Eine andere Sache, dachte ich an ist das Symbol brechen könnte, die in winzige Segmente gezogen wird und dann Symbolerkennung auf diejenigen laufen. So vorstellen, dass Sie vier Symbole in einer Datenbank haben: vertikale Linie, horizontale Linie, und diagonal in beide Richtungen. Jetzt, da der Benutzer zieht, wird jedes Segment als eine von diesem erkannt, und dann werden sie alle kombiniert, um einen Hash-Wert zu bilden. So vorstellen, wählte der Benutzer als ihre Entschlüsselung Symbol den Kleinbuchstaben „r“. So würden sie beginnen, indem eine vertikale Linie nach unten zeichnen, gefolgt von einer vertikalen Linie, gefolgt von einer diagonalen Linie nach oben und nach rechts. Ein Problem bei dieser Methode ist, wie würden Sie wissen, wenn Sie den Hub in einzelne Segmente zu zerlegen? Sie würden wahrscheinlich wollen auch berücksichtigen, wie lange jedes einzelne Segment grob ist (beispielsweise in Schritten von 40 Pixel). Auf diese Weise, wenn jemand ein deformierten „r“ zieht, wo die Buckel in der Nähe der Unterseite kommt es nicht, da die gleichen s anerkanntymbol und somit würde die Datei nicht entschlüsselt werden.

Ein drittes Verfahren könnte den Bildschirm nach oben in ein Raster wird Teilung (nicht sicher, welche Größe noch) und einfach, in denen Zellen der Hub zu sehen gezogen und unter Verwendung dieser Daten irgendwie eine Zeichenfolge zu erzeugen.

Jede andere Ideen, wie diese umgesetzt werden könnten? Haben Sie schon einmal so etwas wie dieses gehört? Gibt es grundlegende Mängel, die ein System wie dieses von der Arbeit?

verhindern

Danke

War es hilfreich?

Lösung

Das Problem der Daten mit keyMaterial Verschlüsselung, die kleinen Fehler haben kann ist recht umfangreich untersucht. Insbesondere gibt es eine Reihe von Vorschlägen für die Daten unter Verwendung von biometrischen Daten (z.B. Fingerabdruck oder ein Netzhautscan) als Schlüssel zu schützen. Eine typische Vorgehensweise ist eine entsprechende Fehlerkorrekturcode zu verwenden, Ihr ursprüngliches Schlüsselmaterial K nehmen, das Syndrom davon berechnen und nur das Syndrom zu speichern. Sobald Sie eine zweite Lesung des Schlüsselmaterials K bekommen ‚kann das Syndrom sein Einsatz K von K wiederherzustellen‘, wenn K und K ‚nahe genug (wo‘ nahe genug“natürlich auf dem Fehlerkorrekturschema abhängig ist.)

Um Ihnen den Einstieg, hier ist ein Papier schlägt eine Fuzzy-Gewölbe Schema . Dies ist ein allgemeiner Vorschlag für ein Verschlüsselungsschema einer „fuzzy“ Taste. Natürlich müssen Sie noch prüfen, wie Eigenschaften von Zeichnungen zu extrahieren, die für die Verwendung eines solchen Fehlerkorrekturschema stabil genug sind. Sie müssen auch prüfen, wie viel Entropie man von einem solchen Zeichnungen extrahieren kann. So schlecht wie Passwörter in Bezug auf Entropie sind, können sie immer noch schwer zu schlagen sein.

Andere Tipps

Ich würde eine Veränderung der Segmentierung Variante versuchen. Erkennen Sie einfache Muster - ich gerade und diagonale Linien für diese haften bleiben wird, aber in der Theorie könnte man auch hinzufügen, Kreise, Bögen und vielleicht andere Dinge

Sie können ganz sicher sein, wenn eine Zeile endet und eine andere beginnt, da es 8 Richtungen und Sie können eine Richtungsänderung (oder für einen einfacheren Ansatz, nur Stift erkennen und Stift nach unten und sie als Linie Trennzeichen) erkennen. Die erste Zeile gibt einen Skalierungsfaktor, so dass die Länge von jeder anderen Zeile kann als Faktor dargestellt werden (beispielsweise in einer üblichen L-Form, wobei die erste vertikale Linie würde die „Basislänge“ B geben und die andere Leitung hätte dann die Länge von in etwa 0,5 * b). Nachdem der Benutzer fertig ist, können Sie den kleinsten Faktor s verwenden, um die Längen „rund“, so dass Sie eine Reihe von ganzzahligen Längen haben werden wie [1 * s, 2 * s, 4 * s, 5 * s]. Dadurch wird das System zu verhindern, zu genau zu sein, und mit der Basislänge macht das System robust gegenüber Skalierung.

Jetzt konvertieren irgendwie diese Informationen (Längen und Richtungen) in einen String (oder einem Hash-Wert, was auch immer Sie mögen), und es wird das gleiche für die gleichen Striche sein, selbst wenn das Symbol übersetzt oder skaliert werden.

Darüber hinaus können Sie speichern eine 2D-Offset-Wert (natürlich „abgerundet“, auch) für jede Zeile nach der zweiten Linie, so dass die Leitungen auch an der gleichen Position müssen sein, wenn Sie dies nicht tun, L und T werden höchstwahrscheinlich die gleiche Zeichenfolge erhalten (1 line up-down, 1 Zeile links-rechts Länge 0,5). So Positionen Speicherung stärkt das Ganze ein wenig, aber ist optional.

EDIT:

Wenn Sie den Winkel der ersten Linie als Basiswinkel nehmen, können Sie auch robust machen diese Rotation.

Bitte beachten Sie, dass dieser Algorithmus nur 3 Bits pro Hub gibt, wenn alle Linien von gleicher Länge und maximal vielleicht bis zu 6-8 Bits pro Hub sind, etwas mehr, wenn Sie Positionen speichern, zu. Dies bedeutet, dass Sie ein ziemlich komplexes Symbol von etwa 20-40 Hüben bräuchten 128 Bit Sicherheit zu erhalten.

Eine einfache Möglichkeit, mehr Variation / Sicherheit hinzufügen würde die Benutzer verschiedene Farben aus einer gegebenen Palette verwenden zu lassen.

, um das Risiko, dass jemand zu reduzieren, beobachten Sie, Sie jede Zeile verschwinden könnten, nachdem es mit einem sehr geringen Kontrast zum Hintergrund zu einer Farbe ändern gezogen oder die Farbe ist.

Die Handschrifterkennung nimmt oft die Dauer des Strichs berücksichtigt mehr als die tatsächliche Länge und so.

Während es Druckempfindlichkeit bezieht sich, denke ich, können Sie möglicherweise einige ähnliche konzeptionelle Bits zu, um zu sehen, was Sie hier denken .... jdadesign.net/safelock/

Das ist nicht genau das gleiche Thema, aber es ist die nächste Sache, die im Moment in den Sinn kommt.

Ich glaube nicht, dass Sie aus einer Hand gezeichnet Symbol genug „Bits“ bekommen könnte eine sichere Verschlüsselung durchzuführen. Wie Sie beachten, müssen Sie genug Slop in der Erkennung ermöglichen, dass die natürlichen Schwankungen in Zeichnung toleriert werden. Mit anderen Worten, Sie haben Rauschen in den Schlägen zu verwerfen, sie in reproduzierbares Signal zu glätten. Aber Rauschen (hohe Entropie) macht besseren kryptographischen Schlüssel.

Denken Sie an es auf diese Weise. Wenn Sie die Geste in Segmente nach oben tun zersetzen, unten, links und rechts, würde jedes Segment 2 Bits von Informationen darstellen. Für einen AES-Schlüssel, würde das Symbol 64 solche Segmente müssen. Das ist eine ziemlich komplizierte Geste zu erinnern. Und wenn es durch Wiederholung viele Segmente in einer Reihe vereinfacht ist ( „rechts, rechts, rechts, ...“) macht es einen lausigen (vorhersehbar, nicht zufällige) drücken.

Ich habe eine andere darüber nachdenken muß. Ich bin keine comp-sci Person, aber würde so etwas wie diese Arbeit.

Lassen Sie uns sagen, dass mit dem, was Symbol oder „Muster“ jemand zieht. Das einzig gangbare, was Sie mit links sind zu analysieren, sind alle Punkte in dem Muster erzeugt in touchBegan, touchMoved und touchEnded Veranstaltungen.

So ... wir alle Punkte erzeugt nehmen, sei es 100 oder eine Million, ist es nicht wirklich wichtig sind.

teilen sie in Gruppen, so viele Gruppen, wie Sie wollen. Je mehr desto besser Ich gehe davon aus, aber für dieses Beispiel nehmen wir sie Gruppen in 4 gesetzt. Mit 100 Punkten, Gruppe 1 enthalten würde Punkte 1> 25, Gruppe 2 enthält 26> 50 und so weiter.

Für jede Gruppe alle Punkte mit einer mittleren Position berechnen.

Es kann besser funktionieren, wenn die Leinwand Räume in ein Gitter unterteilt ist, und die ‚durchschnittliche Positionen‘ erhalten, aufgetragen auf ihre nächste Koordinate.

Überprüfen Sie dann den relativen Abstand zwischen allen Gruppen. So ist das zwischen 1,2 1,3 1,4 2,3 2,4 3,4.

Sie haben jetzt so viele verschiedene Punkte, und Informationen über diese Punkte einen Schlüssel zu erzeugen. Die Mittelwerte und das Gitter sollte etwas glätten, wenn nicht alle der Entropie helfen.

Sie müssen die Benutzer fragen, können ihr Muster ein paar Mal zu ziehen, und jede Gruppe gegen Gruppen aus früheren Versuchen zu vergleichen. Auf diese Weise können Sie feststellen, welche Gruppen die Benutzer konsistent zeichnen können. Es hat den zusätzlichen Vorteil der Ausbildung der Anwender Hand an ihrem Muster zeichnen.

Ich vermute, dass desto mehr Punkte und Gruppen, die Sie haben, desto genauer ist dies sein wird.

In der Tat, ich werde es versuchen, mich geben.

Gestures.

http://depts.washington.edu/aimgroup/proj/dollar/

Sie können Sie Algorithmen für bestimmte Gesten besitzen definieren. Zum Beispiel ein Kreis,

1.Suchen den Startpunkt 2. Finden Sie die meisten links, am weitesten rechts und am weitesten für Punkte und einen ungefähren Radius bekommen. 3. Überprüfen alle Punkte gegen den Radius mit einer Fehlerquote (25%?) 4. Wenn der Radius out überprüft, haben Sie einen Kreis.

Vertikal-Gerade: 1. Überprüfen Sie den Startpunkt und Endpunkt X und Y-Positionen. 2. Vergleichen Sie die dazwischen Punkte gegen die x und y von Anfang und Ende. 3. Wenn sie in etwa auf dem gleichen X-Koord sind, aber aufsteigend oder Y Koordinaten absteigend, haben Sie eine vertikale Linie.

Und so weiter, immer komplexer für kompliziertere Gesten.

Sie können sogar Gesten kombinieren. Also lassen Sie uns sagen, dass Sie für 6 Gesten einen Algorithmus haben. Sie können sie kombinieren verschiedene Symbole zu bilden. Die Reihenfolge, in der die Gesten geschaffen werden könnte wichtig sein, eine zusätzliche Sicherheitsebene hinzugefügt wird.

Was ist, wenn Sie alle der x nehmen, y-Koordinaten des Schlaganfalls und vorgeformten auf ihnen eine Art von linearem 2-Wege-Betrieb? Sie könnten dann eine ‚ungefähre‘ Hash berechnen, und wenn die Anzahl berechnet, wenn der Hub innerhalb ... sagen wir 10% Ihrer Annäherung, dann gewähren Sie Zugriff ..

Es hängt alles davon ab, welche Art von Angriff Sie versuchen, gegen zu verhindern. Wenn Sie voll auf Verschlüsselung will, wo Sie davon ausgehen, dass der Angreifer vollen Zugriff auf die verschlüsselte Datei hat, dann müssen Sie eine ganze Menge von Bits der Entropie ein angemessenes Schutzniveau zu erreichen. Vorausgesetzt, dass Sie die Algorithmen richtig, dann können Sie die beiden an die Macht der Entropie des Eingangs in Bits nehmen (die obere Grenze hierfür ist die Anzahl der verschiedenen möglichen Eingaben), multipliziert mit der Höhe der Zeit ist der Schlüssel Setup-Prozedur dauert, dividieren, um wie viel mehr Rechenleistung der Angreifer hat und sich die Zeit der Angreifer Ihre Verschlüsselung mit brutaler Gewalt zu nehmen hat zu brechen.

Zum Beispiel so etwas wie die 9-Zellen-Figur Unlock-Methode von Android könnte man etwa 16 Bit Entropie erhalten. Nehmen wir an, Sie 5 Sekunden CPU-Zeit verwenden, um die Verschlüsselungsschlüssel zu berechnen. Dann mit einem durchschnittlichen PC, dauert es 5 * 2 ** 16/20 Sekunden bzw. etwa 4,5 Stunden zu knacken. Jeder Verlust der Entropie in der Eingabe oder Ineffizienz im Schlüssel-Setup und Verschlüsselung, die schnell abnehmen zu Minuten, ganz zu schweigen, wenn Cluster von Computern verwendet werden.

ehrlich zu sein, das wird nicht viel besser als nur die Datei in einem obskuren Dateiformat zu speichern und zu hoffen, niemand rechnet sie aus

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top