Forum: Mikrocontroller und Digitale Elektronik Verschlüsselung für Daten auf MMC-Karte


von Hilfesuchender Gast (Gast)


Lesenswert?

Hallo liebe Experten,

da ich mir nun schon Tage im Netz die Finger wund suche, dachte ich ich 
frage mal hier.
Ich habe mit einem Atmega wichtige Daten auf einer MMC-Karte abgelegt. 
Die Daten werden vom Controller auf die Karte geschrieben und mittels PC 
ausgelesen. Jetzt ist es aber wichtig, dass wenn die Karte in falsche 
Hände gerät sie nicht auf den ersten Blick (vielleicht auch nicht auf 
den zweiten, dritten,...) direkt gelesen werden kann.
Klar habe ich im Netz alles mögliche gefunden. Meist brauchen die 
Verfahren aber riesen RAM (max. 512 könnte ich noch liefern) und sind 
gähnend langsam bzw. brauchen viel Platz im Flash.
Ich habe auch schon versucht den eingebauten Passwortschutz der 
MMC-Karte selbst zu nutzen. Ich kann diese zwar mit dem Controller 
sperren und entsperren, dann kann aber Windows bzw. der Kartenleser 
nicht mehr darauf zugreifen.

So wie ich das sehe gibts 2 Möglichkeiten. Entweder eine gute 
Verschlüsselung bei der sich Controller und PC über das Passwort einig 
sind, oder ich kann Windows dazu bewegen die Karte irgendwie kurz per 
SPI anzusteuern oder so um sie zu "unlock"en.

Kennt vielleicht jemand eine fertige "verschluesselung.c" oder hat 
andere Ideen?

Wäre euch sehr dankbar.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hm.. also nen CBC ( 
http://de.wikipedia.org/wiki/Cipher_Block_Chaining_Mode ) sollte auf nem 
MC recht leicht zu machen sein, vieleicht reicht dir aber auch schon 
eine Cäsar Chiffre (http://de.wikipedia.org/wiki/C%C3%A4sar-Chiffre) mit 
täglich wechseldem Schlüssel (also du machst dir halt ne interne Liste 
so das jeden Tag ein anderer Schlüssel verwendet wird)

von Martin.S (Gast)


Lesenswert?


von Michael U. (Gast)


Lesenswert?

Hallo,

keine Ahnung, wie sicher die Daten wirklich sein müssen, also wieviel 
Aufwand derjenige reinsteckt, wenn er die Karte in die Hände bekommt.

Gegen verlorene und zufällig gefundene Karte würde es vermutlich schon 
reichen, wenn ohne Dateisystem geschrieben und gelesen wird. Die Karte 
also formatiert lassen, aber RAW-Daten schreiben und am PC lesen.
Dann muß die PC-Software nur wissen, in welchen Sektoren die Daten 
liegen.
Wenn ich so eine Karte finden würde, würde ich sie in meinen Reader 
stecken, feststellen, daß es eine leere formatierte Karte ist und die 
für mich benutzen.

Wenn die Daten so kritisch sind, daß jemand die Karte klaut, weil er an 
die Daten will, wird es wohl schwieriger, das wäre dann wohl der "zweite 
Blick". Da wäre ja dann auch die Frage zu klären, ob er die passende 
PC-Software auch gleich mit klauen kann...

Gruß aus Berlin
Michael



von Tussi (Gast)


Lesenswert?


von Carsten P. (papa_of_t)


Lesenswert?

Ich würde auch ein Dateisystem draufspielen mit ein paar Dummy-Dateien, 
und die echten Daten dann Sektorweise woandershin schreiben (wie schon 
von Michael U. gesagt, umhüllt von ein paar Sektoren mit zufälligen 
Daten). Außerdem kannst Du noch relativ einfach  "verschlüsseln", indem 
Du Dir einen Satz ausdenkst, diesen als String im uC speicherst und 
jedes zu schreibende Byte mit einem Offset speicherst, das dem nächsten 
Zeichen in dem Satz entspricht. Das PC-Programm machst Du so, daß man 
diesen Satz eingeben muß beim Programmstart. Wenn der Dieb nicht gerade 
in der Lage ist, mit dem uC Testdaten zu erzeugen, sollte das nicht so 
leicht zu lesen sein. Die o.g. Verfahren sind natürlich noch sicherer.

von Michael U. (Gast)


Lesenswert?

Hallo,

@Carsten Pietsch: Deine Idee mit dem Satz gefällt, muß ich mir mal 
merken.
Offset würde ich aber vermutlich nicht nehmen, daß könnte Chaos geben, 
ein simples XOR mit dem ASCII des Buchstaben sollte es auch tun.
Ob ich Dummy-Dateien rauflegen würde, weiß ich nicht so recht, die Karte 
formatieren und dann alle Datensektoren mit Zufallswerten belegen außer 
FAT usw. natürlich, das kann ja das PC-Programm erledigen. Irgendwo 
mittendrin noch eine Kennung, an der der ATMega erkennt, daß es eine 
gültige Karte ist.

Das sollte auch Hexeditor-Freaks erstmal etwas hilflos schauen lassen.

Bei geziehlten Angriffen sieht das sowieso anders aus, da beschafft sich 
der Interessent dann sicher auch mehr Informationen und er weiß dann 
sicher auch, was er als Daten erwartet.

Gruß aus Berlin
Michael


von Jakob L. (jakob)


Lesenswert?

Hallo,

ich würde auf das Verstecken der Daten irgendwo im Dateisystem 
verzichten. Das macht die Programmierung der PC Software unnötig 
kompliziert. Es gibt auch Verschlüsselungsalgorithmen, die sehr wenig 
Speicher brauchen und problemlos auf einem µC implementiert werden 
können. Beispiele dafür sind XXTEA und RC4.

Gruss
Jakob

von Jupp (Gast)


Lesenswert?

Schreibe doch einfach die invertierten Daten als Rohdaten auf die Karte. 
Wenn jemand die Karte in seinen Kartenleser steckt, hat er nichts davon, 
da kein Dateisystem vorhanden ist. Und wenn jemand genauer hinschaut, 
sieht er nur Bytes und keinen Klartext oder ähnliches und wer kommt 
schon auf die Idee, dass er es einfach nur invertieren muss.

von Hilfesuchender Gast (Gast)


Lesenswert?

Hallo,

wow das ging ja schnell!

Schonmal danke für die guten Antworten. Ein Dateisystem nutze ich 
momentan sowieso keines. Allerdings beginnen meine Daten ab Sektor "0" 
und dadurch wird ja die FAT schon unbrauchbar (das könnte man aber ja 
noch ändern).
Allerdings ist mir "etwas mehr" Sicherheit schon wichtig.
AES oder sowas kommt wohl wegen den großen S-Boxen nicht in Frage.
Mit gefällt die Idee von Carsten Pietsch mit dem Satz und der 
XOR-Erweiterung von Michael U. ebenfalls ganz gut. Danke.

@ Jakob Lell
RC4 habe ich mir schon angesehen, das wäre eine Idee. Allerdings stört 
mich bei Wikipedia dazu der Text: "Die Sicherheit eines solchen 
Verfahrens ist nur gewährleistet, wenn sich die Zufallsfolge nicht 
wiederholt. Daher darf der Schlüssel bzw. das Passwort nur einmalig 
verwendet werden."
Soll das jetzt heißen ich müsste im Programm und im µC für jede Karte 
und jede Übertragung das PW wechseln. Eigentlich wollte ich sowas wie 
EIN PW für ALLE meine Karten.

Aber: VIELEN DANK bis hierher!!!

von Jakob L. (jakob)


Lesenswert?

Hallo,

das Problem mit der Widerholung des Passwortes kann man umgehen, indem 
man jedes mal, wenn man mit dem Beschreiben einer Karte anfängt, der 
Karte eine eindeutige Nummer vergibt. Das Passwort wird dann aus einem 
globalen Passwort und der eindeutigen Kartennummer zusammengesetzt. Die 
Kartennummer kann man als Klartext am Anfang der Karte schreiben. Wenn 
die Karte nach dem Auslesen erneut verwendet wird, dann braucht man auch 
wieder eine neue Nummer. Wenn die Nummern auf irgendeinem Grund doppelt 
vergeben werden, dann wird das ganze jedoch wieder unsicher (dieser 
Fehler wurde z.B. bei WEP gemacht).

Noch besser wäre allerdings ein Blockchiffrieralgorithmus. XXTEA ist 
auch klein genug für die Implementierung auf einem µC.

Gruss
Jakob

von Null (Gast)


Lesenswert?

Man kann uebertreiben. Ein 20bit rueckgekoppeltes Schieberegister 
genereiert einen Code der sich erst nach 1MBit wiederholt. Damit die 
Daten verXORt, sollte fuer normale Faelle genuegen.

von Uhu U. (uhu)


Lesenswert?

@ Michael
> Wenn ich so eine Karte finden würde, würde ich sie in meinen Reader
> stecken, feststellen, daß es eine leere formatierte Karte ist und die
> für mich benutzen.

Ah, Du bist auch einer von denen, die auf diesen feinen Ausspähtrick 
abfahren...

Beitrag "USB-Stick gesperrt?"

von Michael U. (Gast)


Lesenswert?

Hallo,

@Uhu Uhuhu:

ja. Mein Vertrauen in ein paar aufschreiende Tools, falls da was drauf 
ist und in die Abschottung einer VM ist im Moment noch groß genug.

Ich gehe aber davon aus, daß "Otto-Normaluser" das mit einer gefundenen 
Karte auch auf einem unsicheren System machen würde.

Ist aber eigentlich nicht Gegenstand seiner Problematik, denke ich.

Gruß aus Berlin
Michael

von Uhu U. (uhu)


Lesenswert?

Das mit der 'Standard-Malware' ist nicht das Problem.

Wenn ich jemanden ausspähen wollte, würde ich mir die Quellen für einen 
Trojaner besorgen, kräftig abändern und auf irgend so ein Flashteil 
packen, das ich dann 'zufällig' dort 'verliere', wo es mit einiger 
Wahrscheinlichkeit von meinem Opfer gefunden würde.

Da hilft der beste Virenscanner nix...

Aber vielleicht ist das ja auch eine geschickte Methode, den Inhalt der 
Karte vor zu langen Augen zu schützen - man muß nur die eigenen Rechner 
gegen das eigene Zeug immunisieren.

Der Trojaner kann gleich den unehrlichen Finder übers Internet melden!

von Hilfesuchender Gast (Gast)


Lesenswert?

@Uhu Uhuhu
genau so werd ichs machen ;-)
Man könnte aber auch noch nen Controller einbauen, der die Karte 
automatisch selbst zerstört, wenn sie in einen fremden Rechner kommt.
...

Jetzt aber Spass beiseite. Ich denke, ich werde die XXTEA-Methode mal 
probieren oder weil einfacher die Sache mit dem Schieberegister.

von Jakob L. (jakob)


Lesenswert?

Hallo,

ein 20 bit Schieberegister ist sehr unsicher. Wenn man einige Megabyte 
Daten bekommt, die damit verschlüsselt sind, und die Daten eine gewisse 
Redundanz haben, dann ist ein Wiederherstellen der Daten möglich. Es 
wäre selbst dann möglich, wenn das Schieberegister "echte" Zufallszahlen 
erzeugen würde, die sich lediglich alle 1 Mbit wiederholen. In der 
Realität ist die Zahl der möglichen Rückkopplungen im Schieberegister 
begrenzt, so dass man durch ausprobieren aller möglichen Varianten 
relativ schnell den Schlüssel bekommen würde. Gegen zufällige Finder, 
die nur die Speicherkarte wollen und kein ernsthaftes Interesse an den 
Daten haben, ist das natürlich ausreichend. Wenn die Daten wichtig sind 
und der Angreifer bereit ist, ein paar Tage/Wochen Arbeit und CPU 
Leistung einzusetzen, dann ist die Sache definitiv zu unsicher.

Gruss
Jakob

von Hilfesuchender Gast (Gast)


Lesenswert?

Also doch am besten XXTEA.
Ich habe jetzt da auch schon ein bisschen was dazu gelesen. Es scheint 
für einen µC wirklich ganz gut geeignet zu sein...
Wie steht es denn da mit der Sicherheit, wenn z.B. µC und PC immer das 
selbe Passwort für alle Karten verwenden. Mal abgesehen davon, dass man 
es aus dem PC Programm extrahieren könnte...
Ich denke da an sowas wie: PW wird in PC und µC einmal gesetzt und 
bleibt solange bis der Nutzer es irgendwann bei Bedarf mal ändert. 
Angenommen ein Kartenfinder kennt das PW von PC und µC NICHT, hat aber 
mehrere Karten in die Finger bekommen. Hat er dann eine Möglichkeit das 
PW bei XXTEA schnell zu entschlüsseln?

von Jakob L. (jakob)


Lesenswert?

Hallo,

bei XXTEA kommt der Angreifer nicht weiter, wenn er mehrere Karten 
bekommt, die mit dem gleichen Schlüssel verschlüsselt wurden (Es sei 
denn er findet eine Schwachstelle in XXTEA). Das ist auf jeden Fall 
wesentlich sicherer als ein einfaches Schieberegister. Allerdings sollte 
man einen Modus wie CBC verwenden, damit der Angreifer nicht einfach 
erkennen kann, dass zwei bestimmte Datenblöcke identisch sind.

Gruss
Jakob

von Hilfesuchender Gast (Gast)


Lesenswert?

@ Jakob Lell
Alles klar, dann werd ich das mal versuchen...
VIELEN DANK!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.