Implementacja funkcji zaawansowanych

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wyświetl źródło na GitHubie

Niektóre funkcje zaawansowane są opcjonalne, w zależności od tego, czy są obsługiwane na docelowej platformie sprzętowej.

Oczekująca ramka

IEEE 802.15.4 definiuje dwa rodzaje metod transmisji danych między tagiem nadrzędnym i podrzędnym: transmisję bezpośrednią i pośrednią. To ostatnie rozwiązanie powstałe przede wszystkim z myślą o urządzeniach z zasilaniem w trybie snu, które najczęściej śpią, i okresowo wybudzają rodziców w celu pobrania danych z kolejki.

  • Transmisja bezpośrednia – wydawca nadrzędny wysyła ramkę danych bezpośrednio do urządzenia końcowego. Skrzynia biegów

  • Transmisja pośrednia – jednostka nadrzędna przechowuje dane do momentu, aż zażąda tego urządzenia.Skrzynia biegów

W przypadku takiej sytuacji urządzenie końcowe musi najpierw przeprowadzić ankietę, aby ustalić, czy są w nim dostępne jakiekolwiek dane. Aby to zrobić, dziecko wysyła żądanie danych, które potwierdza rodzic. Następnie określa, czy na urządzeniu podrzędnym są jakieś dane. Jeśli tak, wysyła pakiet danych do urządzenia podrzędnego, które potwierdza odebranie danych.

Jeśli radio obsługuje dynamiczne ustawianie bita ramki Oczekujące w potwierdzeniach wychodzących na SED, sterowniki muszą zaimplementować interfejs dopasowania adresu źródłowego, aby włączyć tę funkcję. OpenThread używa tego interfejsu API, by informować, które SED chcą ustawić bit Frame Pending.

Jeśli radio nie obsługuje dynamicznego ustawiania fragmentu oczekującego na dodanie ramki, w radiu może zostać wyczerpany interfejs API do dopasowywania adresów źródłowych, by zwrócić żądanie OT_ERROR_NOT_IMPLEMENTED.

Skanowanie/wykrywanie energii za pomocą radia

Funkcja skanowania/wykrywania energii wymaga użycia przycisku radiowego do próbkowania energii prezentowanej w wybranych kanałach i zwracania wartości wykrywania energii do górnej warstwy.

Jeśli ta funkcja nie jest wdrożona, warstwa MAC IEEE 802.15.4 wysyła/odbiera pakiet Beacon „Request/Response”, by ocenić bieżącą wartość energii kanału.

Jeśli moduł radiowy obsługuje skanowanie/wykrywanie energii, wyłącz logikę skanowania oprogramowania, ustawiając makro OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0.

Akceleracja sprzętowa na potrzeby mbedTLS

mbedTLS definiuje kilka makr w głównym pliku nagłówka konfiguracji mbedtls-config.h, by umożliwić użytkownikom włączanie alternatywnych implementacji AES, SHA1, SHA2 i innych, a także poszczególnych funkcji kryptografii eliptycznej krzywej eliptycznej (ECC) w module GF(p). Więcej informacji znajdziesz w artykule na temat akceleracji sprzętowej mbedTLS.

OpenThread nie włącza tych makr, więc symetryczny algorytm kryptograficzny, algorytmy haszujące i funkcje ECC domyślnie wykorzystują wdrożenia oprogramowania. Te implementacje wymagają znacznej ilości pamięci i zasobów obliczeniowych. Aby zapewnić optymalną wydajność i wygodę użytkowników, zalecamy włączenie akceleracji sprzętowej zamiast oprogramowania, aby wykonać powyższe operacje.

Aby włączyć akcelerację sprzętową w trybie OpenThread, do podanego niżej pliku kompilacji ot-config w plikach CMake platformy należy dodać te pliki nagłówka mbedTLS:

  • Główna konfiguracja definiująca wszystkie niezbędne makra używane w OpenThread: /openthread/third-party/mbedtls/mbedtls-config.h
  • Konfiguracja użytkownika, która określa alternatywne implementacje modułów i funkcji: src/platform-name-mbedtls-config.h

Przykład z nrf52811.cmake:

target_compile_definitions(ot-config INTERFACE
    "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\""
)

Komentowane makra w mbedtls-config.h nie są obowiązkowe. Możesz je włączyć w pliku konfiguracji konfiguracji konkretnego użytkownika, aby przyspieszać sprzęt.

Aby zobaczyć pełną konfigurację dla konkretnego użytkownika, sprawdź plik mbedtls_config_autogen.h w ot-efr32.

Moduł AES

OpenThread Security stosuje kryptograf AES CCM (licznik z CBC-MAC) do odszyfrowywania/odszyfrowania wiadomości IEEE 802.15.4 lub MLE oraz zweryfikowania kodu integracji wiadomości. Akceleracja sprzętowa musi przynajmniej obsługiwać podstawowy tryb AES ECB ECB (Electronic Codebook Book) w przypadku podstawowych wywołań AES CCM.

Aby użyć alternatywnego wdrożenia modułu AES:

  1. Zdefiniuj makro MBEDTLS_AES_ALT w pliku nagłówka konfiguracji mbedTLS przeznaczonego dla użytkownika
  2. Określ ścieżkę do pliku aes_alt.h za pomocą zmiennej MBEDTLS_CPPFLAGS

Moduł SHA256

OpenThread Security stosuje algorytmy haszujące HMAC i SHA256 do obliczania wartości skrótu szyfrowania zarządzania kluczami sieciowymi i generowania PSKc zgodnie ze specyfikacją Thread.

Aby użyć alternatywnej podstawowej implementacji modułu SHA256:

  1. Zdefiniuj makro MBEDTLS_SHA256_ALT w pliku nagłówka konfiguracji mbedTLS przeznaczonego dla użytkownika
  2. Określ ścieżkę do pliku sha256_alt.h za pomocą zmiennej MBEDTLS_CPPFLAGS

Funkcje ECC

mbedTLS obsługuje obecnie akcelerację sprzętową tylko w przypadku części funkcji ECC, a nie całego modułu, więc możesz wdrożyć niektóre funkcje zdefiniowane w path-to-mbedtls/library/ecp.c, aby przyspieszyć mnożenie punktów ECC.

Krzywa secp256r1 jest używana w algorytmie wymiany kluczy w wersji roboczej ECJPAKE. Dlatego akceleracja sprzętowa powinna obsługiwać przynajmniej krótszą krzywą secp256r1. Przykład znajdziesz w artykule SiLabs CRYPTO Hardware Acceleration for mbedTLS.