Forum: Mikrocontroller und Digitale Elektronik Verständnissprobleme mit der SD Karten- Speicherverwaltung


von Marco R. (marco_re)


Lesenswert?

Hallo Community,

ich arbeite mich gerade in die mC- Programmierung ein. Ich möchte ein 
Datenloggerprogramm erstellen, welches mir bestimmte Daten auf eine 
mikro SD speichert.

Mit der SPI Schnittstelle klappt das ja ganz gut, soweit ich das 
verstanden habe. Allerdings verstehe ich nicht ganz wie die SD Karte die 
Daten ablegt. Ich habe bereits sämtliche Artikel zu SD Karten u.ä. 
gelesen aber irgendwie stehe ich auf dem Schlauch.

Ich muss der Karte doch eine Adresse oder sowas übergeben, damit sie 
weiß wo die Daten abgelegt werden sollen?! Wie sieht die z.B. Adresse 
aus?

Zudem besitzen SD Karten ja mehrere Blöcke die um die 512 Byte groß 
sind. Und wenn ich nun z.B. nur ein 2 Byte großes Datenpacket speichern 
möchte, was ist dann mit den "restlichen 510" Byte?

Hoffe ihr könnt mir weiter helfen.

Viele Grüße Marco

von Peter II (Gast)


Lesenswert?

Marco Reiner schrieb:
> Und wenn ich nun z.B. nur ein 2 Byte großes Datenpacket speichern
> möchte, was ist dann mit den "restlichen 510" Byte?

geht nicht. Du musst immer 512byte übertragen.

von Falk B. (falk)


Lesenswert?

@ Marco Reiner (marco_re)

>Zudem besitzen SD Karten ja mehrere Blöcke die um die 512 Byte groß
>sind.

Es sind EXAKT 512 Byte.

> Und wenn ich nun z.B. nur ein 2 Byte großes Datenpacket speichern
> möchte, was ist dann mit den "restlichen 510" Byte?

Die muss man auch beschreiben.

Lange Rede, kurzer Sinn. Vergiss das Beschreiben "zu Fuss", nimm eine 
der vielen Bibliotheken, welche sich um die Dateiverwaltung kümmern 
(FAT). Dann kannst du ganz einfach und bequem Dateien auf die SD-Karte 
schreiben und lesen, und auch am PC. Siehe MMC- und SD-Karten. Ich 
kann die Lib von Meister ELM Chan empfehlen, die funktioniert prima!

http://elm-chan.org/fsw/ff/00index_e.html

von Marco R. (marco_re)


Lesenswert?

Danke für eure Antworten.

Die Daten sollten nicht für jedermann via Plug n Play am PC auslesbar 
sein, daher würde ich die gern die Daten ohne eine Verwaltungssystem 
abspeichern.

Oder kennt ihr brauchbare alternativen zwecks "Verschlüsselung"?


Ich habe leider noch keinen passenden Artikel zu SD Karten gefunden, wo 
der Speichervorgang konkret beschrieben wird, würde mich freuen wenn 
jemand von euch etwas passendes zum durchlesen hat.

Grüße Marco

von Noch einer (Gast)


Lesenswert?

Wenn du keine Verwaltungsinformationen haben willst - nimm einfach den 
unteren Layer einer SD-Library. Die haben alle zwei Schichten, 
Filesystem und SD-Karten-Zugriff.

Artikel über den Zugriff? Die beste konkrete Beschreibung ist der 
Programmcode. Initialisierung der Karte ist recht komplex. Historisch 
gewachsen gibt es da zig Varianten, die das Programm durchprobiert. Dann 
kommt nicht mehr viel: 512Byte-Block schreiben und lesen. Da gibt es 
auch 2 Varianten.

Wenn du dich da einarbeitest, bekommst du Schreikrämpfe und bist froh, 
dass andere Leute schon fertige Libraries zusammengestellt haben.

von Marco R. (marco_re)


Lesenswert?

Ok super das hört sich doch brauchbar an!
Danke ich werd mich da mal reinlesen.

Grüße
Marco

von Stefan F. (Gast)


Lesenswert?

Wenn du nur 2 Bytes beschrieben willst, musst du

1) Einen 512-Byte Block in ein Array einlesen
2) Zwei Bytes davon verändern
3) Den Block zurück auf die Karte schreiben

Achtung: Jeder Schreibzugriff reduziert die Lebensdauer der Karte. Wenn 
du fortlaufen 2 Bytes schreibst, hast du in 256 Schreibzugriffe pro 
Block. In dem Fall ist es besser, die Daten erstmal in einem Puffer zu 
sammeln und erst zum Schluss auf die Karte zu schreiben, wenn der Block 
komplett ist.

Ich komme mit der AVRFAT32 Library gut zurecht: 
http://www.mikrocontroller.net/articles/AVR_FAT32

In deinem Fall würdest du die Dateien file.c und fat.c einfach 
weglassen. Du arbeitest mit der mmc.c, die den Zugriff auf Blochebene 
macht. Der Dateiname täuscht, die Datei ist auch für SD und SD-HC 
Karten.

Du brauchst diese Funktionen:
1
  // prototypen
2
  extern uint8_t     mmc_init(void);    // initialisiert die pins und geschwindigkeit
3
  extern uint8_t     mmc_read_sector (uint32_t addr,uint8_t *Buffer);  // liest einen sektor mit adresse addr auf Buffer
4
  extern uint8_t     mmc_write_sector (uint32_t addr,uint8_t *Buffer);  // schreibt einen sektor mit der adresse addr aus dem puffer Buffer, auf die karte

von Schaulus Tiger (Gast)


Lesenswert?

Compact Flash Karten im True IDE Mode sind von der Ansteuerung her sehr 
simpel und einheitlich. Die Karten, Stecker und Controller Chips sind 
tendenziell robuster; auch Karten mit SLC-Chips sind gut lieferbar. Wer 
14 bis 16 Port-Pins spendieren kann sollte sich das mal anschauen.

> Die Daten sollten nicht für jedermann via Plug n Play am PC
> auslesbar sein, daher würde ich die gern die Daten ohne eine
> Verwaltungssystem abspeichern.

Kein Problem, die 512-Byte Blöcke sind einfach durchnummeriert. Ich 
schreibe eine ganz normale Partitionstabelle mit einer kleinen 
FAT16-Partition an den Anfang der Karten. Dahinter kommen meine Daten 
ohne weitere Metadaten. Damit sieht die Karte für den normalen 
PC-Benutzer wie ein völlig normales Speichermedium aus und Windows 
bietet nicht an, die Karte zu formatieren.

Partitionierungstools zeigen den eigentlichen Datenbereich als frei an. 
Wenn jemand den Platz formatiert, kommt er auch nicht leichter an deine 
Daten ran. Man kann auch eine zweite Partition anlegen mit einem 
seltenen Partitionstyp, dann gibt es keinen "freien" Platz und 
einfachere Tools verweigern jegliche Formatierung.

von Marco R. (marco_re)


Lesenswert?

Hast du mir ein paar Unterlagen wie man bei der Erstellung der Tabelle 
vorgeht?

Hört sich sehr gut an!

von Stefan F. (Gast)


Lesenswert?

Manche Leute legen eine Datei an, die den gesamten Speicherplatz der 
Karte belegt.

So kann der Mikrcocontroller einfach Blockweise drauf zugreifen, er muss 
nur wissen, wo genaun der erste Block beginnt. Und diese Startposition, 
wird sich nicht verändern, solange man die größer der Datei beibehält.

Solche Karten kann man besonders unter Windows einfacher weiter 
verarbeiten, als wenn sie kein Filesystem hätten. Können Scriptsprachen 
und Java überhaupt ohne Filesystem auf SD Karten zugreifen? Vermutlich 
nicht.

von Peter II (Gast)


Lesenswert?

Stefan Us schrieb:
> Können Scriptsprachen
> und Java überhaupt ohne Filesystem auf SD Karten zugreifen? Vermutlich
> nicht.

unter Windows und Linux kann man (mit entsprechenden Rechten) immer auf 
das RAW-Device zugreifen. Dabei spielt die Programmiersprache kaum eine 
rolle.

von Stefan F. (Gast)


Lesenswert?

> Hast du mir ein paar Unterlagen wie man bei der
> Erstellung der Tabelle vorgeht?

Du macht Witze, oder?

Stecke die Karte in deinen Rechner. Wenn sie noch keine 
Partitionstabelle hat, wird Windows dir anbieten, eine anzulegen. Danach 
kannst du mit dem Partitionsmanager (irgendwo in der Systemsteuerung) 
die Partition löschen.

von Marco R. (marco_re)


Lesenswert?

Also ich arbeite nun mit ElmChans' FatFS Library und zwar nur mit dem 
unteren Layer.

Wie schon von euch erwähnt habe ich dadurch keine 
Verwaltungsinformationen und somit kann auch niemand, wenn er die Karte 
an den PC anschließt irgendwelche Daten erkennen.

Mit einem HexEditor und dem notwendigen KnowHow könnte man ja trotzdem 
meine gespeicherten Daten auslesen und auswerten.

Daher brauche ich noch irgendeine Datenmanipulation die mir meine Daten, 
welche zu 90% aus Int- Arrays bestehen, sozusagen "verschlüsselt".

Denkt ihr, dass es ausreicht meine originalen Daten mit einem Faktor zu 
multiplizieren oder einfach mein Array von hinten angefangen auf die SD 
Karte zu speichern!? Oder ratet ihr mir zu verschlüsselungsverfahren wie 
RSA, AES.. etc.


Grüße Marco

von Walter S. (avatar)


Lesenswert?

Marco Reiner schrieb:
> Denkt ihr, dass es ausreicht meine originalen Daten mit einem Faktor zu
> multiplizieren oder einfach mein Array von hinten angefangen auf die SD
> Karte zu speichern!? Oder ratet ihr mir zu verschlüsselungsverfahren wie
> RSA, AES.. etc.

gegen wen willst die Daten schützen, deine Oma oder die NSA?

von Falk B. (falk)


Lesenswert?

@ Marco Reiner (marco_re)

>Wie schon von euch erwähnt habe ich dadurch keine
>Verwaltungsinformationen und somit kann auch niemand, wenn er die Karte
>an den PC anschließt irgendwelche Daten erkennen.

Kein 0815 User.

>Mit einem HexEditor und dem notwendigen KnowHow könnte man ja trotzdem
>meine gespeicherten Daten auslesen und auswerten.

Eben.

>Daher brauche ich noch irgendeine Datenmanipulation die mir meine Daten,
>welche zu 90% aus Int- Arrays bestehen, sozusagen "verschlüsselt".

Warum? Sind die sooooo brisant, dass sich da irgendjemand für 
interessieren könnte?

>Denkt ihr, dass es ausreicht meine originalen Daten mit einem Faktor zu
>multiplizieren

;-)
Diese "Verschlüsselung" ist so trivial, da lachen sogar die Amateure 
drüber.

>oder einfach mein Array von hinten angefangen auf die SD
>Karte zu speichern!?

Noch so ein Lacher.

> Oder ratet ihr mir zu verschlüsselungsverfahren wie
>RSA, AES.. etc.

Lass den Unsinn, nutze FATFS komplett und kümmere dich lieber um die 
wichtigen und schönen DInge in deinem Projekt.



Grüße Marco

von Marco R. (marco_re)


Lesenswert?

Danke für deine ehrliche Meinung.

Das sichere, manipuliersichere abspeichern der Daten ist Teil meiner 
Aufgabenstellung, daher kann ich das nicht einfach so umgehen/ 
ausblenden.

Das mit dem Faktor ist natürlich sehr trivial, aber wenn man den Faktor 
nicht kennt wird es denke ich ziemlich schwierig diesen herauszufinden, 
zumindest wenn der Anwender keine Originalen Daten kennt.

Also was hab ich denn für Alternativen? Vlt. doch eine Datei mit den 
Daten anlegen und die Datei selbst verschlüsseln?

und ja die Daten sind sehr brisant und sollten nur für die richtigen 
Personen auswertbar sein.

mfg
Marco

von M. P. (phpmysqlfreak)


Lesenswert?

Marco Reiner schrieb:
> Das mit dem Faktor ist natürlich sehr trivial, aber wenn man den Faktor
> nicht kennt wird es denke ich ziemlich schwierig diesen herauszufinden,
> zumindest wenn der Anwender keine Originalen Daten kennt.

Wenn die 0 eine 0 bleibt, sucht man den sonst kleinsten Wert, und dann 
beschränkt sich das "raten" meist auf eine Hand voll Werte. - 
Multiplizieren heißt nämlich auch: mehr benötigter Speicherplatz.

Vielleicht wäre es da doch einfacher, einen festen Schlüssel mit 16 
Bytes zu nehmen und den Block damit via XOR zu behandeln, solange Daten 
da sind. Bei vollständigen 0x00 blöcken ist der Schlüssel direkt zu 
erkennen.

Was könnte denn mit Daten passieren, die von einem "Unberechtigten" 
ausgelesen werden?

von Falk B. (falk)


Lesenswert?

@ Marco Reiner (marco_re)

>Das sichere, manipuliersichere abspeichern der Daten ist Teil meiner
>Aufgabenstellung, daher kann ich das nicht einfach so umgehen/
>ausblenden.

Dann mach es wenigsten ansatzweise richtig. Nutze normale FAT Dateien 
und verpass denen eine Verschlüsselung. AES, DES, oder auch einfachere 
Verfahren. ABer durch "Verstecken" ohne Dateisystem kriegst du keine 
Sicherheit, nur Stress.

>Das mit dem Faktor ist natürlich sehr trivial, aber wenn man den Faktor
>nicht kennt wird es denke ich ziemlich schwierig diesen herauszufinden,
>zumindest wenn der Anwender keine Originalen Daten kennt.

Du hast keine Ahnung von Chiffrierung ;-)
So einen "Code" knacken die Profis in 5 Minuten und trinken nebenbei 
noch Kaffee.

>Also was hab ich denn für Alternativen? Vlt. doch eine Datei mit den
>Daten anlegen und die Datei selbst verschlüsseln?

Genau.

von Marco R. (marco_re)


Lesenswert?

Die gespeicherten Messwerte sollen im Endeffekt nicht verändert werden 
können und zum anderen sollte man ohne Hintergrundwissen nicht darauf 
schließen können um was für Messwerte es sich handelt ( z.B. Spannungen, 
Stromstärken etc.).

Mein Projektleiter möchte gerne eine Art Verschlüsselung haben und am 
liebsten noch ohne Dateisystem auf der SD Karte arbeiten. Dass scheint 
allerdings viel zu anspruchsvoll zu sein, daher finde ich das mit dem 
unteren Layer der LIB sehr interessant.

Mithilfe eines weiteren Controllers könnte man die Daten dann wieder 
auslesen und schön in eine Datei schreiben.


Was ist denn der übliche Weg, um seine Daten zugriffssicher 
abzuspeichern?

von genialererfinder (Gast)


Lesenswert?

27, 9, 33, 90, 15... Was fällt an dieser Zahlenreihe auf??? Der geheime 
Faktor wird doch wohl nicht die 3 gewesen sein... :-))

5 und 10 fallen als Faktoren auch aus, also die einzig wirklich streng 
geheime Faktorzahl ist, glaube ich, die 7! ;-))

Riesengrosse Faktoren sind natürlich erst recht auffällig...

von Marco R. (marco_re)


Lesenswert?

genialererfinder schrieb:
> 27, 9, 33, 90, 15... Was fällt an dieser Zahlenreihe auf??? Der geheime
> Faktor wird doch wohl nicht die 3 gewesen sein... :-))
>
> 5 und 10 fallen als Faktoren auch aus, also die einzig wirklich streng
> geheime Faktorzahl ist, glaube ich, die 7! ;-))
>
> Riesengrosse Faktoren sind natürlich erst recht auffällig...

Ja man könnte ja natürlich auch Gleitkommazahlen nehmen, aber ja es 
scheint lösbar zu sein

von genialererfinder (Gast)


Lesenswert?

Ja, wie man das KGV einer Zahlenreihe herausfindet wurde schon vor 
einigen Jahren entdeckt!

Alerdings finde ich die Idee, auf ein Standarddateisystem zu verzichten 
nicht mal so abwegig. Ist zwar nicht bombensicher, aber die Arbeit macht 
sich einfach kein Mensch!

Mein (oder Phillip seiner?) Schlau TV speichert Aufzeichnungen auch in 
unbekannten Format auf SD karte - glaube es hat sich noch niemand die 
Mühe gemacht das mal zu auseinander zu tüddeln...

von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Marco Reiner schrieb:

> Das sichere, manipuliersichere abspeichern der Daten ist Teil meiner
> Aufgabenstellung, daher kann ich das nicht einfach so umgehen/
> ausblenden.

Das schaffst Du aber nicht, wenn dir schon die Grundlagen fehlöen, wie 
zb die Kenntnis der MMC Spezifikation 4 oder 5, je nachdem was grad 
aktuell ist. Habe ich durchgearbeitet und mir auch was eigenes damals 
gemacht. Schwer ist esn nicht, Lohnt aber nicht da schon tausend andere 
das gemacht haben.

https://www.sdcard.org/downloads/pls/simplified_specs/archive/partE1_100.pdf

Spec V1.0 Uralt, neue sind kostenpflichtig.

Und "sicher" ist PGP, SSL und darauf basierende streamfähige Verfahren, 
die aber die oberste Schicht bilden, noch über der FAT Verwaltung. Ohne 
FAt ist eine SD nur eine grosse Anzahl sektoren mit 512 Bytes, die bei 0 
anfangen und bis viele Millionen gehen.

Verschlüsselung (PGP etc.)
Verwaltungslayer (FAT)
Bitlayer (Disc I/O)
PHY (Hardware)

Hier mein Interface:

// Globale Prototypen
// -----------------------------------
byte mmc_WriteBlock(byte,int16,byte*);    // Einen Block aus Buffer 
einschreiben
byte mmc_ReadBlock(byte,int16,byte*);    // Einen Block in Buffer 
einlesen
byte mmc_FormatCard();            // Formatiert eine 128MB Karte
byte mmc_Format32MB(byte);          // Formatiert eine 32MB Bank
byte mmc_Reset();
byte mmc_init();
// -----------------------------------

// Interne Verwendung
uint8_t mmc_OpenWrite(uint8_t,uint32_t);
uint8_t mmc_OpenRead(uint16_t);
uint8_t mmc_init();
void mmc_InitSPI(byte);
uint8_t mmc_response(byte response);
uint8_t mmc_GetResponse();
uint8_t mmc_WhileBusy();
uint8_t mmc_reset();
uint8_t mmc_Wakeup();
void mmc_Reboot();
void mmc_ErrorBlinker();
uint8_t SPIMMC(byte);

von Falk B. (falk)


Lesenswert?

@ Marco Reiner (marco_re)

>Die gespeicherten Messwerte sollen im Endeffekt nicht verändert werden
>können und zum anderen sollte man ohne Hintergrundwissen nicht darauf
>schließen können um was für Messwerte es sich handelt ( z.B. Spannungen,
>Stromstärken etc.).

Dazu gibt es eine Verschlüsselung.

>Mein Projektleiter möchte gerne eine Art Verschlüsselung haben

Dann mach doch eine, welche den namen verdient. Dazu muss man sich halt 
mal in die Materie ein wenig einarbeiten. D.h. man muss was zum Thema 
lesen, was andere, DEUTLICH intelligentere Leute als DU dazu gedacht und 
herausgefunden haben.

>und am
>liebsten noch ohne Dateisystem auf der SD Karte arbeiten.

Dann ist er ein ein Depp, der nur fricklen kann, anstatt eine solide 
Lösung anzustreben!

> Dass scheint
>allerdings viel zu anspruchsvoll zu sein, daher finde ich das mit dem
>unteren Layer der LIB sehr interessant.

Jaja, man kann sich auch wunderbar mit Nebensächlichkeiten aufhalten, 
und die EIGENTLICHE Aufgabe total vergessen.

>Mithilfe eines weiteren Controllers könnte man die Daten dann wieder
>auslesen und schön in eine Datei schreiben.

OMG!

>Was ist denn der übliche Weg, um seine Daten zugriffssicher
>abzuspeichern?

Sagte ich das nicht bereits?

von Falk B. (falk)


Lesenswert?

@ Marco Reiner (marco_re)

>> Riesengrosse Faktoren sind natürlich erst recht auffällig...

>Ja man könnte ja natürlich auch Gleitkommazahlen nehmen, aber ja es
>scheint lösbar zu sein

Unsinn. Du hast nicht die leiseste Ahnung von Verschlüsselung, deine 
eigenen Ideen sind einfach kindisch und albern. Als murkse weiter so rum 
oder mach es richtig. Wie das geht, habe ich dir beschrieben.

von Stefan F. (Gast)


Lesenswert?

Wir alle wissen, dass man SD Karten auch ohne FAT verwenden kann. Aber 
ob das eine gute Idee ist, wage ich stark zu bezweifeln.

Das FAT Dateisystem ist Bestandteil der SD Spezifikation. Eine SD Karte 
ohne FAT Dateisystem zu verwenden, bedeutet, die Hardware zu 
missbrauchen. In diesem Fall erlischt die Garantie.

Ich würde nie ein professionelles Ding konstruieren, welches auf 
missbrauchte Teile basiert. Sowas könnte man nur unter der Ladentheke 
verkaufen, aber nicht offiziell mit Produkthaftung und so.

Ich benutze mein Auto auch nicht ohne die vorgesehenen Sitze - auch wenn 
das technisch Problemlos machbar ist.

Außerdem löst das die Aufgabe "Sicherheit" keinesfalls. Man schafft 
Sicherheit nicht durch Verschleierung. Diese Methode ist was für völlige 
Laien.

Gegen Manipulation und Auslesen schützt man Dateien durch asymmetrische 
Verschlüsselung. Eine leicht anzuwendende Software dazu ist PGP 
(freilich nicht auf 8bit Mikrocontrollern).

Die allerwichtigste Frage ist: Welcher Grad an Sicherheit ist gefordert?

Im einfachsten Fall genügt bereits eine Dateiendung, die man nicht per 
Doppelklick öffnen kann.

von Frank K. (fchk)


Lesenswert?

Marco Reiner schrieb:

> Mein Projektleiter möchte gerne eine Art Verschlüsselung haben und am
> liebsten noch ohne Dateisystem auf der SD Karte arbeiten. Dass scheint
> allerdings viel zu anspruchsvoll zu sein, daher finde ich das mit dem
> unteren Layer der LIB sehr interessant.
>
> Mithilfe eines weiteren Controllers könnte man die Daten dann wieder
> auslesen und schön in eine Datei schreiben.
>
>
> Was ist denn der übliche Weg, um seine Daten zugriffssicher
> abzuspeichern?

Man nimmt ein anerkannt sicheres Verschlüsselungsverfahren und sorgt für 
eine sichere Schlüsselverwaltung. Verschlüsselung ist witzlos, wenn man 
den Schlüssel einfach extrahieren kann.

So etwas ist die Arbeit von Cryptographen. Die erzählen Dir, wie es 
richtig geht. Wenn Du nämlich auch nur einen kleinen Fehler machst, 
gefährdest Du die Sicherheit Deines Systems.

Dein Projektleiter möge sich jemanden mit Ahnung von der Sache holen. 
Sorry, ist so. Da setzt man keinen Anfänger ran.

Für die Verschlüsselung brauchst Du Rechenleistung. Ein AVR reicht 
nicht. Es gibt Controller mit Hardware-Crypto.

Zur SD-Card: Schau mal her, was jede SD Card kann.
https://www.sdcard.org/developers/overview/copyright_protection/index.html

Diese Informationen sind geheim, und Mitglied in diesem exklusiven Club 
zu werden ist teuer. Extrem teuer. Unanständig teuer. Keine Ahnung, wie 
ernst es Euch ist. Aber Du solltest wissen, dass es so etwas gibt, und 
dass das S in SD für Secure steht. MMC-Karten, die elektrisch und 
mechanisch sehr ähnlich sind, haben dieses Feature nicht.

fchk

von karl (Gast)


Lesenswert?

Stefan Us schrieb:
> Das FAT Dateisystem ist Bestandteil der SD Spezifikation. Eine SD Karte
> ohne FAT Dateisystem zu verwenden, bedeutet, die Hardware zu
> missbrauchen. In diesem Fall erlischt die Garantie.
>
> Ich würde nie ein professionelles Ding konstruieren, welches auf
> missbrauchte Teile basiert. Sowas könnte man nur unter der Ladentheke
> verkaufen, aber nicht offiziell mit Produkthaftung und so.

Teil der spec ist auch, wo der mbr und die fat liegen müssen (stichwort 
allocation unit). Eine sd ist nach der Formatierung mit einem pc ohne 
spezielle tools auch nicht mehr sd konform. das ist aber mehr eine 
verfügbarkeitsgeschichte als ein technisches Problem.

von Falk B. (falk)


Lesenswert?

@ Frank K. (fchk)

>So etwas ist die Arbeit von Cryptographen. Die erzählen Dir, wie es
>richtig geht. Wenn Du nämlich auch nur einen kleinen Fehler machst,
>gefährdest Du die Sicherheit Deines Systems.

>Dein Projektleiter möge sich jemanden mit Ahnung von der Sache holen.
>Sorry, ist so. Da setzt man keinen Anfänger ran.

Naja, im Prinzip schon, praktisch muss man dennoch fragen, welchen Grad 
an Verschlüsselung man braucht.

Es geht wahrscheinlich nur ein einfache Sachen, die nicht jede Nase 
einfach so lesen soll und nicht um Top Secret Daten. Da braucht es nicht 
den TOP Algorthimus.

>Für die Verschlüsselung brauchst Du Rechenleistung. Ein AVR reicht
>nicht. Es gibt Controller mit Hardware-Crypto.

Die ATXmegas haben AES in Hardware drin.

von Christian J. (Gast)


Lesenswert?

Stefan Us schrieb:

> Das FAT Dateisystem ist Bestandteil der SD Spezifikation. Eine SD Karte
> ohne FAT Dateisystem zu verwenden, bedeutet, die Hardware zu
> missbrauchen. In diesem Fall erlischt die Garantie.

Ich frage mich wer solchen Unsinn in die Welt setzt? Weder das eine noch 
das andere stimmt. Mannomann..... muss ja dann mal meinen Ex Arbeitgeber 
einformieren, dass er tausende Produkte zurück ruft, wo die SD einfach 
nur ein riesengroßer Array ist ohne jedes Dateisystem dahinter .... 
hicks.

von Nosnibor (Gast)


Lesenswert?

Ich stimme stefanus zu, daß man heutzutage eine SD-Karte nur noch mit 
FAT benutzen sollte. Früher sah das anders aus, aber inzwischen haben 
die Hersteller gemerkt, daß es echt schwer ist, einen universellen 
wear-levelling-Algorithmus zu basteln (zumal die diesbezüglichen 
Ansprüche der Speicherchips ständig steigen), und sich die Aufgabe etwas 
vereinfacht.
Auch sonst ist es einfach bequem, wenn man die aufgezeichneten Daten mal 
eben schnell im PC lesen kann. Und sei es auch nur, um ein Backup zu 
haben.

Zur Sicherheit/Verschlüsselung sehe ich hier zwei Forderungen: 
Geheimhaltung (der Angreifer soll die Daten nicht lesen können, obwohl 
er die SD-Karte lesen kann) und Manipulationsschutz (der Angreifer kann 
die SD-Karte lesen, schreiben und dem System wieder unterjubeln; der 
rechtmäßige Benutzer soll den Daten ansehen können, daß sie manipuliert 
wurden).

Geheimhaltung erreicht man durch Verschlüsselung.
Am einfachsten ist da ein symmetrischer Algorithmus, z.B. AES oder XTEA. 
Den sollte man noch mit einem geeigneten Modus kombinieren (CBC oder CFB 
oder so), damit der Angreifer nicht sieht, wenn sich dieselben Daten 
wiederholen. Der Nachteil bei symmetrischen Verfahren ist, daß man den 
Schlüssel hüten muß, weil zum Ver- und Entschlüsseln derselbe benutzt 
wird. Wenn also die Gefahr besteht, daß dem Angreifer der ganze 
Datenlogger in die Hände fällt, so daß er Flash und EEPROM auslesen 
kann, brauchst du was stärkeres.
Stärker in diesem Sinn sind asymmetrische Verschlüsselungsverfahren, bei 
denen also zum Verschlüsseln ein anderer Schlüssel gebraucht wird als 
zum Entschlüsseln. Leider sind die auch deutlich aufwendiger, was 
Speicherplatz und Rechenzeit angeht. RSA ist so ein typischer Kandidat: 
irgendwer hat den in einen AVR gequetscht bekommen, aber bei einer 
zeitgemäßen Schlüssellänge ist der Prozessor dann eine halbe Stunde nur 
mit RSA-Rechnen beschäftigt, um einen Datenblock zu verschlüsseln. ECC 
sollte weniger anspruchsvoll sein, keine Ahnung wie das in der Praxis 
aussieht. Ich würde beim AVR nach Möglichkeit bei symmetrischen 
Algorithmen bleiben.

Zur Manipulationserkennung muß man die Daten sozusagen "unterschreiben". 
Dafür gibt es auch wieder asymmetrische und symmetrische Verfahren. Die 
asymmetrischen basieren wieder auf RSA oder ECC und sind entsprechend 
aufwendig. Die symmetrischen benötigen als Baustein einen 
Hashalgorithmus, der meist deutlich aufwendiger ist als eine 
symmetrische Verschlüsselung, aber nicht so schlimm wie das 
asymmetrische Zeug.
Und dann kann man noch mogeln: an jeden Datensatz eine CRC oder so 
anhängen, bevor verschlüsselt wird. Wenn die Verschlüsselung gut ist, 
kann der Angreifer das nicht unbemerkt manipulieren, weil er die 
Prüfsumme nicht richtig hinbekommt (mit einer gewissen 
Wahrscheinlichkeit entsprechend der Länge der Prüfsumme). Wenn die 
Verschlüsselung schlecht bzw. unpassend ist, kann der Angreifer die CRC 
passend zu seiner Manipulation korrigieren (so geschehen bei WEP), oder 
die Redundanz des Klartextes zum Knacken der Verschlüsselung ausnutzen.

von grundschüler (Gast)


Lesenswert?

Stefan Us schrieb:
> Wir alle wissen, dass man SD Karten auch ohne FAT verwenden kann. Aber
> ob das eine gute Idee ist, wage ich stark zu bezweifeln.

Immerhin ist diese Idee im Code von elm chan bereits angelegt. Mit der 
Option Fast_seek wird eine linktable angelegt, in die mit cmd25 direkt 
geschrieben wird. Der mögliche Geschwindigkeitszuwachs ist enorm. Leider 
gibt es zu fast_seek wenig Codebeispiele.

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.