Ponieważ istnieje wiele chińskich firm, które mogą z łatwością odtworzyć projekt PCB i wyodrębnić plik .hex z mikrokontrolerów (nawet z bezpieczna pamięć flash), programiści oprogramowania wbudowanego muszą dodać więcej ochrony do swoich produktów. W moim przypadku używam STM32F103 i chcę dodać układ scalony kryptograficzny ATSHA204A na mojej płytce drukowanej, aby chronić mój adres IP. Robiąc to, mam nadzieję nawet jeśli uda im się wyjąć .hex z MCU i sklonować płytkę, plik hex nie będzie działać, jeśli nie rozpozna chipa kryptograficznego na PCB.
Ten układ kryptograficzny ma unikalny numer seryjny, który został napisany podczas produkcji i zawsze można go przeczytać. Posiada również pewne funkcje, takie jak bezpieczny obszar do przechowywania pewnych tajnych danych, możliwość generowania liczb losowych i wysyłania ich do hosta przez I2C lub one-wire, możliwość obliczenia skrótu SHA-256 jakiegoś podanego ciągu i tak dalej. / p>
Teraz próbuję zrozumieć, jak powinienem z tym pracować, ponieważ jestem kimś w rodzaju nooba w temacie uwierzytelniania. Z tego, co zrozumiałem po przeczytaniu arkusza danych, przepływ pracy będzie wyglądał następująco:
Personalizacja układu scalonego kryptografii:
-
Bezpieczny obszar w kryptowalutach chip zostanie wypełniony przez hosta (w moim przypadku STM32F103) jakimś losowym tajnym kluczem dla każdego produktu, tylko raz.
-
Tajny klucz będzie również obecny w hostach flash pamięć.
Uwierzytelnianie tablicy (w moim rozumieniu, co prawdopodobnie jest błędne):
-
Host żąda losowej liczby z krypto-IC. Następnie host generuje połączony ciąg znaków z tajnym kluczem i losową liczbą (jednorazową?) I oblicza jego skrót SHA-256.
-
Teraz host powinien wysłać losowy klucz z powrotem do crypto-IC i oczekuj, że wygeneruje ten sam ciąg z tajnym kluczem wewnątrz crypto-IC i obliczy jego skrót SHA-256.
-
Crypto-IC wysyła obliczony hash z powrotem do hosta, a host porównuje skróty.
-
Jeśli skróty pasują, sprawdź poprawność. Jeśli tego nie zrobią, host odmówi pracy.
Przepływ pracy jest prawdopodobnie błędny, ale głównym pomysłem powinno być coś bliskiego. Czy ktoś może to wyjaśnić?
Odpowiedź
Przepływ pracy jest prawdopodobnie błędny, ale główna idea powinna być coś bliskiego.
Nie, to jest w zasadzie bezużyteczne. Byłoby w porządku, gdybyś użył swojego układu kryptograficznego, na przykład do sprawdzenia autentyczności urządzenie dodatkowe (powiedzmy, że drukarka weryfikująca wkład została wyprodukowana przez tę samą firmę).
To nie pomaga tobie , ponieważ " odmawia działania " nie poleci, jeśli ktoś ma kod maszynowy twojego oprogramowania układowego: znalezienie czeku w zdemontowanym kodzie maszynowym zwykle nie oznacza tego trudne. Następnie wystarczy zastąpić " skok do „zatrzymaj się i nic nie rób” " z " przejdź do „start użytecznej funkcjonalności „"; zazwyczaj wiąże się to ze zmianą bajtu.
Musisz zaszyfrować interesującą część oprogramowania układowego w pamięci trwałej (zazwyczaj jest to wbudowana pamięć flash MCU). Tylko program ładujący korzystający z chipa kryptograficznego aby odszyfrować główne oprogramowanie sprzętowe, pozostanie niezaszyfrowane. Podczas rozruchu program ładujący odszyfrowuje oprogramowanie układowe do pamięci RAM.
Mały problem: musisz być całkiem sprytny, sprzętowo, aby nie można było wystarczy podłączyć analizator logiczny między MCU a układem kryptograficznym i węszyć odszyfrowane bajty.
Istnieją obejścia, które zaciemniają rzeczy poprzez dzikie skakanie po pamięci podczas odszyfrowywania itp. Problem polega na tym, że nic nie ma co do tego tajemnicą, to trochę więcej pracy, aby zrozumieć, w jaki sposób odbywa się skakanie z kodu maszynowego. (A jeśli uda Ci się wstawić pojedynczy fragment kodu maszynowego na tej szynie, który spowoduje, że MCU przesyła całą pamięć RAM przez jakiś pin, to też gra skończona; nie ma dla Ciebie znaczenia, czy wiesz, gdzie ten fragment kodu kończy się w pamięci RAM, znajdziesz go później w zrzucie, ważne jest tylko, aby został wykonany w pewnym momencie.)
Innymi słowy, jeśli naprawdę myślisz, że oprogramowanie jest to komercyjnie interesujące (ludzie szalenie to przeceniają! W przypadku rzeczy, które nie są głównie oprogramowaniem sprzętowym, na przykład w przypadku dowolnego urządzenia konsumenckiego i jakiejkolwiek kontroli przemysłowej, zwykle trudno jest zdobyć wszystkie części i zbudować to samo / podobne urządzenie tańsze niż oryginalne, a całkowite przepisanie oprogramowania układowego jest często łatwe w porównaniu z tym), wtedy jedyną szansą jest zintegrowanie tajnego przechowywania, szyfrowanej pamięci masowej i bezpiecznego wykonywania (aby zrzucenie pamięci RAM było niemożliwe).
Istnieją mikrokontrolery, które to robią. Zwykle są nieco droższe.Ale, jak możesz się domyślić, jeśli na przykład znajdujesz się w środowisku obronnym, w którym musisz poświadczyć, że oprogramowanie sprzętowe nie może być modyfikowane, cóż, to Twoja droga.
Nintendo produkuje urządzenia, w przypadku których zachęta finansowa, aby nikomu nie pozwalać nikomu czytać ich oprogramowania sprzętowego, a nawet go modyfikować, jest silna:
Niemożność uruchamiania na konsolach oprogramowania, które nie było licencjonowane przez Nintendo, ma kluczowe znaczenie dla ich modelu biznesowego. Dlatego niemożność obejścia sprawdzania podpisów gry jest najważniejsza i dlatego Nintendo Switch oferuje wiele warstw ochrony. Jak można się domyślić, „nie ma żadnej gwarancji – byli po prostu hobbystów (nawet osoby z zainteresowaniami kryminalnymi / handlowymi!), Którzy znaleźli sposób na obejście tego problemu.
Ale zauważysz jedną rzecz: tylko dlatego, że trudno jest osiągnąć doskonałość, nie oznacza, że nie warto, co utrudnia sklonowanie urządzenia. Z mojego skromnego doświadczenia wynika, że klonery zazwyczaj skapitulują gdy tylko będziesz potrzebować zrozumienia, jak działa urządzenie, aby je skopiować – w przeciwnym razie byliby w sytuacji, gdy mieliby inżynierów, którzy mogliby wykonać twoją pracę, mniej więcej, a ci inżynierowie zwykle pracują w twoim sektorze, a nie w jakieś fałszywe laboratorium. Dlatego dobrym środkiem odstraszającym jest umieszczenie zaszyfrowanego oprogramowania układowego w pamięci flash. Nie jest to idealne rozwiązanie, ale w chwili, gdy musieliby wyjąć analizator logiczny i spędzić tygodnie na inżynierii wstecznej protokół deszyfrowania do pamięci RAM, aby uzyskać coś, co mogliby skopiować, może wystarczyć, że uznają ryzyko finansowe za zbyt wysokie i sięgną po coś innego.
Komentarze
- " ludzie szalenie przeceniają to, że ", ale ludzie równie szalenie przeceniają koszt inżynierii wstecznej.
- Dziękuję za świetną odpowiedź, nie mogą głosować za brakiem reputacji. Tak, ' w zasadzie niemożliwe jest zapewnienie 100% bezpieczeństwa, ale dodanie bardzo prostego środka bezpieczeństwa z chipem kryptograficznym 0,3 USD może zwiększyć koszt inżynierii wstecznej z około 3-cyfrowych do może 5-cyfrowa, zwiększając wymagany czas z kilku dni do kilku miesięcy, jeśli zabezpieczenie jest wystarczająco sprytnie zaprojektowane. I może odstraszyć hakerów (w zależności od potencjału finansowego produktu). Myślę, że przejdę dalej, szyfrując " interesującą część " głównego oprogramowania sprzętowego.
- I ' skalujemy oszacowanie w dół do " wydłużając czas z godziny do może kilka dni ", a koszt jest w zasadzie nieistotny w obu przypadkach. Koszt byłby " zasadniczo darmowy " dla każdego, kto ' kłamie narzędzia elektroniczne w każdym razie, a nawet jeśli nie, 200 € plus laptop daje rozsądny początek.
- Czy w takim razie powinienem się poddać i nie używać żadnej ochrony? 🙂
- @NotReallyaMaster, że ' zależy od Ciebie; ' poświęciłem cały ostatni akapit mojej odpowiedzi na to pytanie.