Elektroda.pl
Elektroda.pl
X
Metal Work Pneumatic
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

TechEkspert 17 Cze 2015 09:01 1908 0
  • Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.
    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

    W poprzednim odcinku WINC1500 cz. I przyjrzeliśmy się modułowi WiFi WINC1500, oraz udało się zestawić połączenie modułu z AP (punktem dostępowym Wi-Fi). W dalszej części warsztatów Atmel przygotował aplikację na urządzenie mobilne, która odbierze dane wysyłane przez platformę testową z wykorzystaniem modułu WINC1500. Przyjrzymy się także sprzętowym rozwiązaniom kryptograficznym.

    Czujnik temperatury wysyłający dane z wykorzystaniem WiFi.

    Konfigurację sprzętową pozostawiamy bez zmian, podłączony pozostaje moduł WINC1500 oraz I/O1.

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

    W pliku demo.c w funkcji demo_start() dodajemy inicjalizację czujnika temperatury at30tse_init();. Następnie deklarujemy strukturę potrzebną do utworzenia gniazda sieciowego, które będzie służyło do wysyłania komunikatów rozgłoszeniowych zawierających informacje o temperaturze. Inicjalizujemy także API gniazdek sieciowych socketInit(), oraz konfigurujemy funkcję registerSocketCallback() obsługującą zdarzenia komunikacji sieciowej.
    Zaglądnijmy do pliku demo.h, uzupełnijmy dane pozwalające na dostęp do AP z którym połączy się moduł i smartfon, oraz dane dot. komunikacji sieciowej:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W przesyłanych komunikatach poza informacjami o temperaturze, zawarta będzie nazwa czujnika (powinna być unikalna), co pozwoli na poprawne działanie komunikacji rozgłoszeniowej. Konfiguracja AP powinna umożliwiać komunikację po między stacjami, warto zwrócić uwagę m.in na opcję o nazwie zbliżonej do "Block Relay Between Clients" czyli blokowania ruchu między klientami.

    Można wykorzystać projekt samd21_xplained_pro_winc1500_empty_project.7z z poprzedniej części, zmieniając zawartość pliku demo.c:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod






    Aplikację na Android przygotowaną przez Atmel znajdziecie w pliku Atmel_IOT_Sensor_v2.0.18.7z. Aplikacja pozwala na odczyt temperatury z czujnika oraz sterowanie LED na płytce SAM D21. Efekty działania demo przygotowanego przez Atmel można zobaczyć na poniższym filmie.



    Komunikaty informujące o działaniu programu wysyłane są na wirtualny port szeregowy debugera. Modyfikując plik demo.c można eksperymentować z trybami obniżonego poboru mocy
    (np. m2m_wifi_set_sleep_mode(M2M_PS_H_AUTOMATIC, 1); ).

    Demo czujnika prezentuje podstawowe możliwości modułu WINC1500, jednak zastosowana komunikacja nie zapewnia łatwej skalowalności oraz bezpieczeństwa. Dla zachowania bezpieczeństwa powinniśmy zapewnić tajność, integralność, autentyczność informacji.

    Układ ATECC108 pozwala m.in na sprzętową realizację funkcji skrótu SHA-256. Dla przypomnienia funkcja skrótu zamienia wejściowy ciąg danych na wyjściowy o stałej długości. Minimalne zmiany ciągu wejściowego powodują generowanie znacząco różniących się wyników, dodatkowo nie powinny występować kolizje (dwa różne ciągi wejściowe dające ten sam wynik).
    Przykładowo:
    SHA256("elektroda.pl")="ad946ad4397990e4a2bbe85c5b7422e1328cbb26d795125a051b70a051e54426"
    SHA256("elektroda,pl")="0067eb7828616df271b0b2b649956835db9f21cd77f1a443e8e50fa27e7af367"
    jak widać zmiana jednego znaku z "." na "," całkowicie zmienia wynik działania funkcji mieszającej.
    Przyjmuje się, że funkcja skrótu jest jednokierunkowa, co oznacza że na podstawie wyniku funkcji haszującej nie jest możliwe (jest trudne obliczeniowo) odtworzenie danych wejściowych.

    Sprzętowe mechanizmy zabezpieczenia urządzeń IoT.

    Opisane zalety funkcji skrótu wzmocnione są jej sprzętową implementacją w ATECC108. W układzie możliwe jest zapisanie ciągu danych (klucz).
    Klucz można zapisać tylko raz, następnie nie da się odczytać klucza zapisanego w urządzeniu. W jaki sposób możemy wykorzystać sprzętowe SHA w ATECC108 oraz bezpiecznie osadzony tajny klucz ?

    Wyobraźmy sobie, że nasze urządzenie IoT to np. czujka alarmowa, chcemy mieć pewność, że dane które odbieramy pochodzą z naszej czujki, że nie doszło np. do zakłócenia transmisji lub nasz czujnik nie został unieszkodliwiony oraz zastąpiony fałszywym. W obu urządzeniach komunikujących się bezprzewodowo można umieścić ATECC108 z zapisanym tajnym kluczem, którego nie można odczytać lub zmienić.

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.
    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

    1. W etapie pierwszym losujemy liczbę lub ciąg znaków, (ATECC108 posiada także generator liczb losowych (RNG)). Będzie to "wyzwanie" dla naszego czujnika w protokole challenge-response.

    2. Łączymy losowy ciąg z tajnym kluczem wewnątrz ATECC108 podając na wejście SHA i otrzymujemy skrót.

    3. Losowa liczba jest przesłana do urządzenia IoT, urządzenie wyposażone jest w ATECC108 z osadzonym kluczem identycznym jak w stacji bazowej.

    4. Urządzenie oblicza skrót losowej liczby i tajnego klucza oraz przesyła odpowiedź do stacji bazowej.

    5. Stacja bazowa porównuje odpowiedź z obliczoną przez siebie wartością kończąc challenge-response jeżeli wartości są zgodne oznacza to, że komunikujemy się z urządzeniem posiadającym właściwy klucz.


    Klientem łączącym się z urządzeniem IoT może być np. smartfon, trudno oczekiwać aby wszystkie smartfony, tablety, komputery posiadały wbudowany układ ATECC108 (można pomyśleć np. o dodatkowym urządzeniu podłączonym do USB). Można zastosować rozwiązanie w którym ATECC108 będzie obecny wyłącznie w urządzeniu IoT natomiast drugą stroną komunikacji będzie aplikacja działająca na urządzeniu mobilnym. Rozwiązanie mniej bezpieczne lecz bardziej elastyczne.
    Po stronie aplikacyjnej możemy zbudować tabelę poprawnych odpowiedzi dla np. 100000 różnych zapytań. Co ciekawe w kolejnych wersjach aplikacji możemy wymienić zawartość tabeli bez konieczności zmiany urządzeń z kluczem osadzonym w ATECC108. Nawet po zdekompilowaniu aplikacji tajny klucz nie zostanie ujawniony (będzie znany jedynie zbiór zastosowanych pytań i poprawnych odpowiedzi).

    Zaletą rozwiązania jest brak możliwości odczytania tajnego klucza nawet po przechwyceniu urządzenia, zdekompilowaniu kodu, podsłuchiwaniu transmisji itp.

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.
    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

    1. Wysyłamy do urządzenia pytanie z tablicy pytanie-odpowiedź oraz liczbę losową.

    2. Pobieramy właściwą odpowiedź z tablicy pytanie-odpowiedź i przesłaną liczbę losową oraz obliczamy skrót.

    3. W urządzeniu IoT obliczamy skrót dla zapytania w połączeniu z tajnym kluczem.

    4. Obliczamy skrót połączenia liczby losowej i obliczonej w pkt. 3 odpowiedzi (tym sposobem właściwa odpowiedź obliczona w pkt. 3 nie jest transmitowana po między urządzeniami).

    5. Porównujemy w aplikacji otrzymaną odpowiedź z wcześniej obliczonym skrótem, jeżeli wartości są zgodne oznacza to, że komunikujemy się z "prawdziwym" urządzeniem.

    Zastosowanie w protokołach liczb losowych, utrudnia ataki polegające na "nagraniu" i "odtworzeniu" ostatniego komunikatu (np. rozkazu włącz światło).

    Jeżeli zamiast liczby losowej będziemy wykorzystywali dane które transmitujemy do urządzenia IoT, możemy sprawdzić czy potwierdzenie otrzymania danych (np. komendy do wykonania) zostało odesłane przez "prawdziwe" urządzenie, oraz czy dane nie zostały uszkodzone podczas transmisji.

    Tym sposobem możemy uzyskać podstawowy poziom zabezpieczenia integralności oraz autentyczności informacji.

    Wyniki operacji z powyższego przykładu możemy wykorzystać do budowania klucza użytego w symetrycznym algorytmie szyfrowania zabezpieczającego transmisję po między urządzeniami. W ostatnim etapie nie wysyłamy wartości do porównania, tylko wykorzystujemy ją jako klucz dla blokowego algorytmu szyfrowania symetrycznego AES.

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.
    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

    Stosując powyższe metody możemy np. dystrybuować zaszyfrowany, oraz zabezpieczony przed przekłamaniami firmware do urządzeń.

    Udało się uzyskać kolejną funkcjonalność - poufność informacji.

    Kryptografia asymetryczna w oparciu o ATECC108.

    Układ ATECC108 pozwala także na realizację kryptografii asymetrycznej. W przypadku kryptografii symetrycznej wykorzystujemy jeden tajny klucz, który służy zarówno do zaszyfrowania danych, jak również do odzyskania danych z szyfrogramu. ATECC108 umożliwia wykorzystanie kryptografii asymetrycznej opartej o ECC (krzywe eliptyczne). W kryptografii asymetrycznej występuje para kluczy, jeden umożliwia zaszyfrowanie danych, drugi umożliwia odszyfrowanie danych. Jeden z kluczy najczęściej nazywany jest kluczem publicznym (ten który służy do szyfrowania danych), drugi to klucz prywatny (umożliwia odszyfrowanie danych). Wykorzystanie podpisu cyfrowego przy użyciu ECDSA pozwala na sprawdzenie autentyczności informacji.

    Płytka CryptoAuthXplained.

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. II.

    Na module testowym znajdziemy układy ATSH204A, ATAES132A, ATECC508A.
    ATSHA204A posiada sprzętowe obliczanie SHA-256, sprzętowy magazyn kluczy, generator liczb losowych, 4.5Kb EEPROM dla danych i kluczy, 512 bit OTP (jednokrotnie programowalne).
    ATECC108A lub ATECC508A posiada sprzętowe obliczanie SHA-256, sprzętowy magazyn kluczy, generator liczb losowych, a także obsługę ECDSA (dla 508A także ECDH), 8.5Kb (10Kb dla 508A) EEPROM dla kluczy, certyfikatów i danych, 512 OTP (jednokrotnie programowalne). Układy posiadają unikalne 72 bitowe numery.
    ATAES132 - pamięć EEPROM posiadająca sprzętowy algorytm szyfrujący AES-128, generator liczb losowych.
    Domyślne adresy układów na magistrali I2C:
    ATSHA204A – 0xC8
    ATECC508A – 0xC0
    ATAES132A – 0xA0

    W wykorzystaniu układów pomocne są gotowe biblioteki, przykładowo aby pobrać losowy ciąg z układu ATECC508A wywołujemy funkcję atca_get_random_number(rand_out);

    W kolejnym odcinku prześlemy dane z czujników przez Wi-Fi do internetu, a następnie odczytamy wysłane dane dzięki usłudze dedykowanej dla urządzeń IoT.

    Materiał przygotowany we współpracy z firmą JM elektronik.


    Fajne! Ranking DIY
  • Metal Work Pneumatic