Guten Morgen, ich habe ein Bootloadertoll geschrieben mit dem ich einen Mikrocontroller flashen kann. Nach Beendigung des Flashvorgangs wird ein Reset im Mikrocontroller ausgeführt und die neue Applikation starten. Das funktioniert bei mir soweit. Nun möchte ich ein paar Sicherheitsaspekte einbauen. Zum Beispiel crc berechnen und vergleichen. Ich habe mir es so vorgestellt. Das PC Bootloadertool läd die binäre Datei. In der binären Datei ist zum Schluß eine CRC Prüfsumme enthalten, die zuvor über alle binären Daten berechnet wurde. Diese CRC Prüfsumme soll zuerst (bevor Flashvorgang ausgeführt wird) mit der aktuellen Prüfsumme die im Mikrocontroller enthalten ist verglichen werden. Stimmt die Prüfsumme nicht überein, dann kann der Flashvorgang gestartet werden. Welche Möglichkeiten gibt es noch ? Für jede Unterstützung bedanke ich mich schonmal im Vorfeld.
Erklär doch mal genauer, was du unter Sicherheitsaspekten verstehst. Das von dir beschriebene Prüfverfahren macht generell schon Sinn, allerdings würde ich das nicht unter "Sicherheitsaspekte" eingruppieren. Nach meinem Verständnis wären Sicherheitsaspekte eher: + Unbefugten Zugriff verwehren. + Prüfen ob Applikation richtig geflasht wurde + Falls beim Flashen ein Fehler auftrat: im Bootloader verbleiben, auch nach einem Reset
Wie würdest du diesen Punkt "Prüfen ob Applikation richtig geflasht wurde" realisieren ?
Ich wuerde jedes versendete Packet mit einem CRC sichern. Und wenn der CRC des Packetes nicht stimmt, wird das Packet nochmals uebertragen. Und ja, einen Gesammtcheck sollte man irgendwie haben. zB indem alle Packete gecheckt werden und man weiss wieviele Packete dazugehoeren. Toll, wenn du das ganze Programm uebertragen kannst um auf Korrektheit zu pruefen. Nicht jeder hat so viel RAM. Ich musste bei meinem Bootloader direkt brennen. Jedes korrekt uebertragene Packet wurde sofort gebrannt.
Ich sende die binären Daten über den CAN-Bus an den Mikrocontroller. Eine CRC Prüfung von jeden CAN Frame ist nicht notwendig, da der CAN schon eine CRC Prüfung macht. Einen Telegrammzähler habe ich auf der Mikrocontrollerseite. Welchen CRC sollte nehmen ?
Ein CRC16 kann Einbit-fehler in 2^16 bits = 8k bytes erkennen. Wenn das Teil groesser ist, waere ein CRC32 angesagt. Falls gegen absichtliche Manipulation geschuetzt werden soll, allenfalls ein Hash.
Danke für die Antwort. Ich bräuchte eine CRC32, da ich Daten von insgesamt 65kByte übertragen muss.
>Diese CRC Prüfsumme soll zuerst (bevor Flashvorgang ausgeführt wird) mit >der
aktuellen Prüfsumme die im Mikrocontroller enthalten ist verglichen >werden.
Die sind nur gleich wenn auf dem Mikrocontroller und dem PC die gleichen
Daten für die CRC zugrundegelegt wurden, also brauchst du nicht Flashen
weil würde sich ja eh nichts ändern. Du verstehst ?
Ich denke du willst etwas anderes machen.
Ich denke du willst ein Program auf dem PC das sich die BIN datei nimmt,
hinten ne CRC dranhängt und dem Mikrocontroller sendet. Der µC speicher
die Daten erst mal im RAM berechnet mit dem gleichen Verfahren auch eine
CRC und Vergleicht beide. Stimmen diese Überein wird der RAM Inhalt ins
Flash geladen.
CRC als Passwortschutz ?
Man könnte die Vorherige CRC aus dem Flash natürlich als Passwort
benutzen um den Flashvorgang überhaupt zu erlauben. Wenn die Richtigen
Lockbits gesetzt sind. Spätestens beim dritten Update hat man jedoch die
Vorgängerversion und das Passwordt ist bekannt.
Die Daten werden vom Mikrocontroller empfangen und sofort ins Flash gespeichert. Wenn alle Daten empfangen wurden werden die Daten in den oberen Flashbereich kopiert und ein Reset vom Mikrocontroller wird durchgeführt.
Also ich werde es nun so umsetzen. Auf der PC Seite wird zunächst einen CRC Summe aus den binären Daten erzeugt. Diese CRC Summe wird nun mit der CRC Summe die zuvor auf dem Mikrocontroller gespeichert wurde verglichen. Bin Nichtübereinstimmung kann der Flashvorhang durchgeführt werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.