Zabezpieczanie kodu w AVR / Arduino i dostarczanie aktualizacji

9
  1. Jaki jest najlepszy sposób ochrony kodu flashowanego na dowolnym urządzeniu opartym na AVR przed inżynierią wsteczną?
  2. Jaki jest łatwy sposób dostarczania aktualizacji użytkownikom końcowym, którzy sami sami flashują bez ujawniania kodu? (Czy to z bootloaderem, który odszyfrowuje zaszyfrowany obraz?)

Nie puszczaj mnie za promowanie DRM, jestem zwolennikiem otwartych platform - jestem tylko ciekawy, jak to by działało.

stbtra
źródło
Nie rób Nie ma ŻADNEGO SPOSOBU, aby całkowicie zapobiec możliwości złośliwego zaprojektowania sprzętu / oprogramowania przez złośliwą osobę. Wszystko, co robią środki przeciw RE, powoduje, że cofanie zajmuje więcej czasu.
Connor Wolf,

Odpowiedzi:

9

Pierwszy:

Na chipie znajdują się bezpieczniki, które można ustawić, aby uniemożliwić zewnętrznym narzędziom odczytanie kodu z chipa. Poszukaj bezpieczników w karcie danych i / lub dokumentacji programisty.

Nie jest idealny, ale chroni przed prostymi atakami.

Druga:

Nie można bezpiecznie pobrać oprogramowania układowego. AVR nie może sam zaprogramować obszarów chronionych:

http://www.atmel.com/dyn/resources/prod_documents/doc1644.pdf

Najlepsze, co możesz zrobić, to użyć zaszyfrowanego języka tokenów (takiego jak podstawowy lub czwarty) i zabezpieczyć interpreter na chipie za pomocą programu ładującego, który może zaprogramować zaszyfrowane tokeny w otwartym obszarze. Podczas działania układ odszyfrowuje i wykonuje instrukcje w locie.

Adam Davis
źródło
3
Jeśli bezpieczniki nie są idealne, jaki rodzaj obejścia może to ominąć?
1
@Anonymous - Chemiczne wytrawianie pokrywy mikroukładu i używanie mikroskopów elektronowych, laserów i mikrobrobów do wyświetlania, łączenia i edytowania krzemu. Kosztuje co najmniej 500 USD, ale może być tańszy niż praca, którą wkłada stbra w urządzenie.
Kevin Vermeer
@KevinVermeer Czy chodziło Ci o 500 $? Wydaje mi się, że byłoby to o wiele droższe.
NickHalden,
Adam, wystąpił błąd, więc
usunąłem
3

Jeśli jest to tak ważne i szczególnie martwisz się, że konkurenci wykradną Twój kod, zabierz ochronę IP w swoich segmentach kodu. Powinieneś się tym zastanowić, jeśli mimo to chcesz zarabiać na projekcie.

Niektóre elementy kodu mogą być opatentowane (dla określonych metod przetwarzania i nowatorskich algorytmów) lub zarejestrowane jako wzory przemysłowe (wygląd, układ i zastosowanie kodu na urządzeniu). W tej sprawie możesz skonsultować się z prawnikiem ds. Własności intelektualnej.

Sketchy Fletchy
źródło
1

Jeśli napisałeś własny program ładujący, który akceptował zaszyfrowane dane przez port szeregowy, odszyfrował je i zapisał w obszarze przechowywania kodu, możesz mieć bezpieczną aktualizację oprogramowania układowego kodu. Każde urządzenie może nawet mieć swój unikalny klucz deszyfrujący w niestandardowym programie ładującym.


źródło
1
Myślę jednak, że @Adam Davis mówi, że jeśli używasz programu ładującego (nawet takiego, który napisałeś), nie możesz programować blokowanych obszarów chronionych bitami. Tak więc, jeśli napisałeś własny zaszyfrowany program ładujący, nie możesz zapobiec odczytaniu układu (problem 1). W każdym razie wydaje mi się, że otrzymuję link i arkusz danych.
Lou
jeśli bootloader i kod są zaszyfrowane, rozwiązałoby to drugi problem, pierwszy problem jest prawie rozwiązany, jeśli użyje wystarczająco bezpiecznego szyfrowania. (prędkość UC może być szyjką butelki).
Rick_2047,
Prawdziwe. @Adam Davis zasugerował powyższy zaszyfrowany język tokenów.
Lou