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.
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
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.
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
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
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.
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!!!
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
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.
@ 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?"
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
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!
@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.
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
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?
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