Witam
Sytuacja, miejsce: system mikroprocesorowy, mikrokontroler AVR Atmega + zewnętrzna pamięć FLASH z dużą ilością danych. Komunikacja między nimi poprzez interfejs SPI więc bardzo łatwa do "podsłuchania". W pamięci FLASH znajdują się dane, których wprowadzenie kosztowało kilka miesięcy pracy (do postaci pliku BIN/HEX). Chcę zaszyfrować i zabezpieczyć dane przed użyciem przez nieupoważnione osoby
Bez żadnego szyfrowania bez problemu można odczytać komórkę oraz odczytywaną daną poprzez nasłuch interfejsu SPI. Samego interfejsu SPI nie da się zaszyfrować i zawsze można nasłuchać adres komórki i odczytaną z niej daną. Jedyne co można zrobić to zaszyfrować dane a sam algorytm deszyfrowania i odczytu umieścić w pamięci AVR'ka którą można zablokować przed odczytem (przynajmniej dla zwykłego śmiertelnika, ale to wystarcza
Mam takie propozycje zaszyfrowania danych.
1.Szyfrowanie pojedynczych bajtów.Czyli każdy bajt z osobna szyfrowany jest tym samym algorytmem. Danemu takiemu samemu bajtowi odpowiada taka sama zaszyfrowana dana , czyli wszędzie gdzie będzie literka "a" to wszędzie będzie zaszyfrowana jako np. "0x33". To rozwiązanie jest słabe bo...dane we FLASH'u to zwykły tekst a ten tekst wyświetlany jest na wyświetlaczu LCD 2x16 znaków, więc wystarczy odczytać te 16 kolejnych zaszyfrowanych znaków na magistrali SPI i przyrównać je do tego co widać kolejno na LCD. I algorytm złamany. Zwykłe przypisanie jawnej danej z LCD do zaszyfrowanej, bajt do bajtu, kolejno jak leci.
2.Szyfrowanie grupą 16 bajtów czyli 1 wierszem na LCD. I tutaj jest kilka możliwości, możemy dane pozamieniać losowo w tej tabeli 16 bajtów wg klucza w procesorze, którego nie da się odczytać. Sam klucz można też uzależnić dodatkowo od tego, który to jest wiersz w z kolei, można zrobić kilka kluczy "mieszających" miejsca. Można także brać ostatni bajt adresu komórki w pamięci flash i wykonać jakąś funkcję logiczną na komórce, czyli w obrębie 255 komórek literka "a" będzie zakodowana w różny sposób bez względu na to ile razy wystąpi.
3.Aby utrudnić "podsłuch" magistrali SPI można wpleść losowo odczyt "dummy bytes" czyli bajtów nic nie znaczących, fizycznie mogą być odczytane i mieć wartość ale dla zostaną odrzucone, a jakie zostaną odrzucone to wie tylko algorytm w procesorze, który jest nie do odczytu. Wadą jest dłuższy czas odczytu ale w tym przypadku to nie ma znaczenia bo odczytanie i odszyfrowanie 32 bajtów dla LCD to i tak błyskawica.
4.Ostatni sposób to porozrzucać dane w obrębie 255 bajtów, tzn linijka tekstu "Ala ma kota" nie byłaby zapisana w kolejnych komórkach pamięci flash ale każda z literek porozrzucana w obrębie bloku 255 bajtów, np A w komórce X, l w komórce X+33, a w komórce X+41 itd, wszystko lososwo, ale zgodnie z algorytmem w procesorze.Czyli blok 255 bajtów zamieszany w betoniarce
Jak myślicie jeśli połączyć 3 i 4 sposób i wpleść w odczyt "dummy byte" co 2 bajt to jest to do złamania przez konkurencję? Dodatkowo można połączyć jeszcze z 1 i 2 sposobem. Odnalezienie algorytmu na odkodowanie tego wydaje się niemożliwe, tzn. ilość kombinacji do sprawdzenia jest ogromna! Po pierwsze hacker (program) musiałby wpaść na to, że bajty zostały pomieszane, w obrębie jakiego bloku bajtów zostały pomieszane i w końcu jak zostały pomieszane, wg jakiej matrycy mieszającej...już samo wpadnięcie na to, że takie coś zostało zrobione nie mówiąc o odgadnięciu bloku bajtów wydaje się być nierealne...
Wpadło mi jeszcze do głowy co do magistrali SPI, wplecenie do 2 bajt dummy bytes jest za proste bo na to można wpaść przypadkiem
Lepszym sposobem byłoby odczytanie 128 bajtów z czego tylko 16 jest prawdziwych a które z nich na jakich pozycjach to wie tylko algorytm deszyfrujący zamknięty w procesorze
Nasłuch magistrali SPI owszem da odczyt 128 bajtów w obrębie 255 bajtów, znamy adres i dane ale nie wiemy, które z nich wyświetlane są na ekranie
Jak myślicie dobre zabezpieczenie?
Dzięki Pozdrawiam.
Przeniesiono z Programowanie Ogólne. - arnoldziq
Sytuacja, miejsce: system mikroprocesorowy, mikrokontroler AVR Atmega + zewnętrzna pamięć FLASH z dużą ilością danych. Komunikacja między nimi poprzez interfejs SPI więc bardzo łatwa do "podsłuchania". W pamięci FLASH znajdują się dane, których wprowadzenie kosztowało kilka miesięcy pracy (do postaci pliku BIN/HEX). Chcę zaszyfrować i zabezpieczyć dane przed użyciem przez nieupoważnione osoby
Bez żadnego szyfrowania bez problemu można odczytać komórkę oraz odczytywaną daną poprzez nasłuch interfejsu SPI. Samego interfejsu SPI nie da się zaszyfrować i zawsze można nasłuchać adres komórki i odczytaną z niej daną. Jedyne co można zrobić to zaszyfrować dane a sam algorytm deszyfrowania i odczytu umieścić w pamięci AVR'ka którą można zablokować przed odczytem (przynajmniej dla zwykłego śmiertelnika, ale to wystarcza
Mam takie propozycje zaszyfrowania danych.
1.Szyfrowanie pojedynczych bajtów.Czyli każdy bajt z osobna szyfrowany jest tym samym algorytmem. Danemu takiemu samemu bajtowi odpowiada taka sama zaszyfrowana dana , czyli wszędzie gdzie będzie literka "a" to wszędzie będzie zaszyfrowana jako np. "0x33". To rozwiązanie jest słabe bo...dane we FLASH'u to zwykły tekst a ten tekst wyświetlany jest na wyświetlaczu LCD 2x16 znaków, więc wystarczy odczytać te 16 kolejnych zaszyfrowanych znaków na magistrali SPI i przyrównać je do tego co widać kolejno na LCD. I algorytm złamany. Zwykłe przypisanie jawnej danej z LCD do zaszyfrowanej, bajt do bajtu, kolejno jak leci.
2.Szyfrowanie grupą 16 bajtów czyli 1 wierszem na LCD. I tutaj jest kilka możliwości, możemy dane pozamieniać losowo w tej tabeli 16 bajtów wg klucza w procesorze, którego nie da się odczytać. Sam klucz można też uzależnić dodatkowo od tego, który to jest wiersz w z kolei, można zrobić kilka kluczy "mieszających" miejsca. Można także brać ostatni bajt adresu komórki w pamięci flash i wykonać jakąś funkcję logiczną na komórce, czyli w obrębie 255 komórek literka "a" będzie zakodowana w różny sposób bez względu na to ile razy wystąpi.
3.Aby utrudnić "podsłuch" magistrali SPI można wpleść losowo odczyt "dummy bytes" czyli bajtów nic nie znaczących, fizycznie mogą być odczytane i mieć wartość ale dla zostaną odrzucone, a jakie zostaną odrzucone to wie tylko algorytm w procesorze, który jest nie do odczytu. Wadą jest dłuższy czas odczytu ale w tym przypadku to nie ma znaczenia bo odczytanie i odszyfrowanie 32 bajtów dla LCD to i tak błyskawica.
4.Ostatni sposób to porozrzucać dane w obrębie 255 bajtów, tzn linijka tekstu "Ala ma kota" nie byłaby zapisana w kolejnych komórkach pamięci flash ale każda z literek porozrzucana w obrębie bloku 255 bajtów, np A w komórce X, l w komórce X+33, a w komórce X+41 itd, wszystko lososwo, ale zgodnie z algorytmem w procesorze.Czyli blok 255 bajtów zamieszany w betoniarce
Jak myślicie jeśli połączyć 3 i 4 sposób i wpleść w odczyt "dummy byte" co 2 bajt to jest to do złamania przez konkurencję? Dodatkowo można połączyć jeszcze z 1 i 2 sposobem. Odnalezienie algorytmu na odkodowanie tego wydaje się niemożliwe, tzn. ilość kombinacji do sprawdzenia jest ogromna! Po pierwsze hacker (program) musiałby wpaść na to, że bajty zostały pomieszane, w obrębie jakiego bloku bajtów zostały pomieszane i w końcu jak zostały pomieszane, wg jakiej matrycy mieszającej...już samo wpadnięcie na to, że takie coś zostało zrobione nie mówiąc o odgadnięciu bloku bajtów wydaje się być nierealne...
Wpadło mi jeszcze do głowy co do magistrali SPI, wplecenie do 2 bajt dummy bytes jest za proste bo na to można wpaść przypadkiem
Jak myślicie dobre zabezpieczenie?
Dzięki Pozdrawiam.
Przeniesiono z Programowanie Ogólne. - arnoldziq
