[zrzeczenie się: Jestem specjalistą od bezpieczeństwa / kryptografii i codziennie zajmuję się takimi pytaniami dotyczącymi architektury bezpieczeństwa.]
Natknąłeś się na problem przechowywania poświadczeń w taki sposób, że dostęp do nich może uzyskać nienadzorowany proces, ale osoba atakująca nie może. Jest to dobrze znany i bardzo trudny problem do rozwiązania.
Jeśli twoje urządzenie IoT ma wbudowany w płytę główną sprzętowy magazyn kluczy, taki jak niektóre moduły TPM, lub odpowiednik magazynu kluczy wspieranego przez system Android lub Apple Secure Enclave, możesz go użyć.
Z tradycyjnymi serwerami można korzystać z HSM lub kart inteligentnych, ale jedynym pełnym oprogramowaniem, o którym wiem, jest uzyskanie klucza AES z pewnego rodzaju „sprzętowego odcisku palca” zbudowanego przez połączenie numerów seryjnych wszystkich urządzeń. Następnie użyj tego klucza AES do zaszyfrowania poświadczeń. Proces działający na tym samym serwerze może zrekonstruować klucz AES i odszyfrować poświadczenia, ale po wyodrębnieniu pliku z serwera nie można go odszyfrować.
IoT wrzuca do tego klucz z dwóch powodów:
Założenie, że numery seryjne sprzętu są unikalne, prawdopodobnie nie ma zastosowania, i
W przeciwieństwie do serwerów, osoby atakujące mają fizyczny dostęp do urządzenia, dlatego prawdopodobnie mogą uzyskać powłokę na urządzeniu, aby uruchomić program deszyfrujący.
Zarówno szyfrowanie sprzętowe (TPM), jak i szyfrowanie „sprzętowego odcisku palca” są co najwyżej zaciemniające, ponieważ zasadniczo, jeśli proces lokalny może odszyfrować dane, osoba atakująca, która może uruchomić ten proces lokalny, może go również odszyfrować.
Wygląda więc na to, że standardowa sztuczka tutaj nie działa. Pierwsze pytanie, które musisz sobie zadać, to:
- Jaki jest mój model zagrożenia / gdzie ten projekt znajduje się na
Secure <--> Convenient
skali?
Ostatecznie myślę, że musisz albo zdecydować o tym security > convenience
i poprosić człowieka o wprowadzenie poświadczeń po każdym uruchomieniu (używając czegoś takiego jak odpowiedź @ BenceKaulics ), lub zdecydujesz o tym security < convenience
i po prostu umieścisz poświadczenia na urządzeniu, być może używając jakiegoś zaciemnienia, jeśli czuję, że to robi różnicę.
Jest to trudny problem, utrudniony przez naturę urządzeń IoT.
Dla kompletności pełne rozwiązanie przemysłowe tego problemu to:
- Daj każdemu urządzeniu IoT unikalny klucz publiczny RSA w czasie produkcji. Zapisz ten klucz publiczny w db względem numeru seryjnego urządzenia.
- Przechowuj poufne dane uwierzytelniające na odpowiednim serwerze, nazwijmy to „bramą”.
- Gdy urządzenie IoT uwierzytelnia się w bramie (przy użyciu klucza RSA), brama otwiera dla niego sesję przy użyciu przechowywanych poświadczeń i przekazuje token sesji z powrotem do urządzenia.
- Dla najlepszego bezpieczeństwa brama jest bramą fizyczną (lub VPN), dzięki czemu cały ruch z urządzenia IoT przechodzi przez bramę i masz większą kontrolę nad regułami zapory i tym podobne - idealnie zapobiegając bezpośredniemu urządzeniu (tunelowanemu bez VPN) dostęp do Internetu.
W ten sposób atakujący, który naruszy urządzenie, może otworzyć sesję, ale nigdy nie ma bezpośredniego dostępu do poświadczeń.