Verschlüsselungsbibliothek für Arduino

Ich verwende ein Arduino, um eine Tastatur zu lesen und einen elektrischen Schlag bei Eingabe der Tastatur-PIN zu öffnen. Für diese Skizze wollte ich eine Art leichte Verschlüsselung verwenden, um die PINs im EEProm zu speichern. Kennt jemand eine solche Bibliothek? Ich habe gehört, dass es mit TwoFish möglich sein könnte.

Antworten (7)

Sie möchten Passwörter (PINs) nicht verschlüsseln – Sie möchten sie hashen . Wenn jemand ein Passwort eingibt, hashst du dieses Passwort und vergleichst den Hash mit dem gespeicherten Hash. Der Vorteil dieser Methode (seit über 30 Jahren verwendet) besteht darin, dass selbst wenn jemand die Quelle und die Hashes erhält, er immer noch nicht sagen kann, welche PINs mit den Hashes übereinstimmen, solange Sie eine ausreichend starke Hash-Funktion wählen .

Sie möchten die Verschlüsselung nicht selbst implementieren – Sie möchten die Bibliothek eines anderen verwenden, insbesondere eine mit einer offenen Implementierung, die von einer großen Community getestet wurde. Verschlüsselung ist schwierig, Testen ist schwierig, und das Testen von Verschlüsselung ist verdammt schwierig, also lassen Sie es jemand anderen für Sie tun.

Sie sollten sich die AVR Crypto Library ansehen , die mit GPLv3 lizenziert ist. Es gibt auch eine Implementierung von Skein für AVR .

Upvoted – Eine gute Ressource, die als Antwort auf die Frage eingestellt werden sollte.

Dieser Link, den Hristos gepostet hat, ist zwar möglicherweise nützlich, zählt aber sicherlich nicht als "Verschlüsselung". Es ist wirklich nur "Verschleierung".

Richtige Kryptografie ist notorisch leicht falsch zu machen, selbst für Leute, die sich mit Mathematik auskennen.

Als Antwort auf den ursprünglichen Beitrag - was sind die Angriffsmethoden, mit denen jemand Zugriff auf die PINs im EEProm erhalten würde? Sicherlich, wenn sie so weit in Ihre Elektronik eingedrungen sind, können sie einfach "das rote Kabel durchschneiden" und die Tür öffnen?

Wenn Sie irgendwie ein System haben , in dem Angreifer an die EEProm-Inhalte gelangen könnten, ohne bereits genügend Zugriff zu haben, um Ihre Tür zu öffnen, möchten Sie es wahrscheinlich neu gestalten. Sie könnten sich Einweg-Hash-Funktionen ähnlich dem Unix-Passwort-Hashing ansehen - auf diese Weise muss das EEProm keinen Entschlüsselungsschlüssel enthalten - das Problem ist, dass der Suchraum für PINs sehr klein ist - wenn ich die gehashte Version davon herunterladen kann PIN, ich kann ziemlich schnell alle 10.000 möglichen PINs ausprobieren, ich vermute, jeder moderne Laptop wird sie alle in ein paar Sekunden ausführen.

Ich stimme zu (und stimmte oben zu), ein Einweg-Hash wäre nützlich, und wenn Sie das System programmieren, könnten Sie die PIN so lang machen, wie Sie möchten, z. B. 8 Ziffern ergeben 100.000.000 Kombinationen, was viel länger dauern sollte.

Das Problem, das ich vorhersehe, ist, dass sie, wenn sie Ihre Pins sehen können, auch Ihr Programm sehen können, das Ihre Pins verschlüsselt/überprüft/entschlüsselt. Und wenn sie Ihren Chip haben, können sie das Programm nicht einfach so ändern, dass es für jede eingegebene PIN immer ein positives Ergebnis liefert (was die Überprüfung effektiv umgeht).

Wie wollen Sie die verschlüsselten PINs entschlüsseln, um zu überprüfen, ob der Benutzer eine gültige PIN eingegeben hat? Sie müssen den Entschlüsselungsschlüssel speichern ... an diesem Punkt, wenn der Angreifer Ihr Eeprom lesen kann, kann er auch Ihren Flash lesen, um den Verschlüsselungsschlüssel zu finden. Im Grunde wird Ihre gesamte Verschlüsselung völlig unbrauchbar. Auch wie die anderen Leute sagten, wenn er bereits die Fähigkeit hat, Ihren Chip zu lesen, könnte er einfach ein neues Programm schreiben. Es ist viel einfacher, einfach die Tür aufzustoßen, aber ich bezweifle, dass sich jemals jemand die Mühe machen würde, Ihren Chip zu hacken.

Hier ist eine Methode der einfachen Verschlüsselung in C, die leicht auf den Arduino portiert werden könnte. Dies scheint der einfachste Weg zu sein, Daten mit den begrenzten Ressourcen des Arduino zu verschlüsseln.

-EDIT- Um den Schlüssel aus Ihrem Programm herauszuhalten, können Sie die Hälfte der PIN zum Schlüssel machen. Das bedeutet, dass Ihr Programm die Schlüsselhälfte der PIN nimmt, um die verschlüsselte 1/2-PIN zu entschlüsseln, die im EEProm gespeichert ist. Wenn der entschlüsselte Schlüssel von EEProm mit dem Teil Ihrer PIN übereinstimmt, der nicht der Schlüssel ist, würde die Tür entriegelt. Dies würde nur in einer Situation funktionieren, in der es den Eindringlingen nicht möglich ist, die Tür aufzubrechen oder den Arduino neu zu programmieren.

Aber wenn sie keinen Zugriff auf Ihren Chip haben, brauchen Sie die PIN nicht zu verschlüsseln.

Ich hasse es, die Frage nicht zu beantworten, während ich eine andere stelle, aber ...

Gibt es einen Grund, warum Ihr Gerät nicht manipulationssicher ist? Ich habe Druckknopfschalter in Schraubenlöchern gesehen, die „auf der Bank“ implementiert wurden, um die Art von Manipulation zu erkennen, über die Sie sich Sorgen machen. Dann ... kommt das Kind mit einer Butan-Mikrolampe, die es schafft, Ihren Chip zu bekommen, ohne etwas abzuschrauben (oder den Chip zu beschädigen). Irgendwie kannte er das Design Ihres manipulationssicheren Systems, das (hoffentlich auch) das Erkennen von Änderungen beinhaltet Umgebungslicht und/oder Ton. Wenn die Abdeckung abgenommen wird, werden beide ganz anders ... Tag oder Nacht.

Wenn dies der Fall ist, sollte es ein zweiteiliges System sein, bei dem die exponierten Teile mit etwas kommunizieren, bei dem die Verschlüsselung einfacher implementiert werden kann. Außerdem berücksichtigen Prüfsummen (Hilfe) das Kind mit der Fackel.

Ich denke, Sie verlangen von einem Schraubenzieher, dass er ein Hammer ist.

Diese Kommentare sind wirklich treffend. Es ist nichts Falsches daran, zu versuchen, zu experimentieren, um etwas über Verschlüsselung zu lernen, aber dies ist nicht wirklich ein gutes Projekt, um solche Dinge zu lernen. Sie wollen wirklich ein gutes Lehrbuch und einen Computer, und wie @bigiain sagt, ist die Mathematik notorisch leicht falsch.

Um besser zu verstehen, wie Kryptografie funktioniert und womit Sie es zu tun haben, ist das Handbook of Applied Cryptography hervorragend und kostenlos:

Wenn Sie nur Ihr Projekt sichern möchten, ist dies ein ineffizienter Weg. Wenn Sie sich für Kryptografie interessieren, beginnen Sie mit diesem Buch und einem Computer.

Ich verstehe Kryptografie, lese Bruce Schneier und programmiere seit über zwanzig Jahren. Ich verstehe, dass die wirkliche Bedrohung darin besteht, einfach die Tür aufzubrechen und an irgendeiner Art von Arduino-Controller vorbeizugehen. Ich kann es einfach nicht guten Gewissens mit Klartext-PINs im EEProm installieren, wenn es sich vermeiden lässt. Fliege
Es gibt eine Reihe einfacher Verschleierungsmethoden, die in dieser Rolle genauso effektiv wären, wenn Sie das Speichern von Klartext-PINs vermeiden möchten. Die obigen Antworten versuchten nur, Ihnen zu helfen, zu verstehen, was Kryptografie tut und was nicht. Hier ist eine AES-Bibliothek: hoozi.com/Articles/AESEncryption.htm Ich möchte auch sagen, dass nur weil Sie seit 20 Jahren programmieren, das nicht bedeutet, dass Sie Kryptografie „verstehen“. Es ist ein ganz anderes Feld. Ein 20-jähriger Automechaniker ist ein Fachmann, aber ich würde nicht erwarten, dass er einen CAN-Bus von Grund auf neu konstruiert. Überprüfen Sie bitte Ihre Einstellung.
Oh Gott... 20 Jahre Programmieren und du denkst, dass es möglich ist, Laufzeitdaten zu verschlüsseln????? Aufhören.