STM32 w aplikacjach kryptograficznych

 

Rys. 4. Budowa ścieżek komunikacyjnych w STM32F4

Rys. 4. Budowa ścieżek komunikacyjnych w STM32F4

 

 

Producent zapewnia, że zachowano kompatybilność „w dół” bloków peryferyjnych wbudowanych w STM32F4 z peryferiami zastosowanymi w STM32F2. Z dostępnych obecnie opisów wynika, że parametry niektórych z nich poprawiono.

 

 

I tak:

  • timery-generatory PWM mogą być taktowane sygnałem o częstotliwości do 168 MHz,
  • liczniki RTC zapewniają większą iż dotychczas rozdzielczość pomiaru (dziesiąte i setne części sekund),
  • interfejs cyfrowego audio I2S umożliwia w pełni dupleksowy transfer danych, co pozwala stosować mikrokontrolery STM32-F4 w profesjonalnym sprzęcie muzycznym,
  • interfejs MAC Ethernet obsługuje protokół synchronizacji czasu IEEE1588 w nowej wersji v2.

Wprowadzono także kilka pomniejszych udoskonaleń, ale pomniemy je tutaj, nie są one bowiem głównym tematem naszych rozważań.

STM32F4 w kryptografii

Wydajność obliczeniowa współczesnych mikrokontrolerów jest na tyle duża, że nie sprawi specjalnych trudności programowa realizacja większości popularnych algorytmów szyfrujących – tak jak się dzieje w szeroko rozumianych systemach PC, w których metodami kryptograficznymi chronione są m.in. łącza sieciowe czy zawartość twardych dysków. Prędkości szyfrowanego strumienia danych uzyskiwane w programowej realizacji algorytmów szyfrujących są wystarczające do wielu praktycznych zastosowań, a jakość ochrony akceptowalna nawet w aplikacjach komercyjnych.
Rozwiązanie “czysto” programowe ma jednak wadę polegającą na pochłanianiu dużych zasobów mocy obliczeniowej, co może uniemożliwić implementację do wykonania przez mikrokontroler innych zadań. Był to podstawowy powód wyposażenia niektórych mikrokontrolerów STM32F2 i STM32F4 w sprzętowe, konfigurowalne bloki kryptograficzne:

  • koprocesor kryptograficzny CRYP,
  • generator skrótów HASH,
  • generator liczb losowych RNG.

 

Rys. 5. Schemat blokowy koprocesora CRYP

Rys. 5. Schemat blokowy koprocesora CRYP

 

 

Koprocesor kryptograficzny CRYP (jego schemat pokazano na rysunku 5) jest konfigurowalnym blokiem obliczeniowym, na wejściu i wyjściu którego (od strony magistrali AHB2) znajdują się bufory FIFO danych wejściowych i wyjściowych o organizacji 8×32 bity. Silnik kryptograficzny wyposażono w zestaw rejestrów sterujących i pomocniczych, w tym dwa rejestry stanu początkowego oraz cztery rejestry dla wartości kluczy.
CRYP może pracować jako dwukierunkowy kryptoprocesor realizujący blokowe algorytmy symetryczne DES (standard FIPS PUB 46 z późniejszymi zmianami, w UE opisany w ISO/IEC18033-3), TripleDES (FIPS PUB 46-3, ISO/IEC 18033-3 (2005)) lub AES (FIPS PUB 197). W pierwszym przypadku do ochrony danych jest stosowany jeden klucz o długości 56 bitów, w przypadku TripleDES są stosowane trzy klucze o łącznej skutecznej długości 168 bitów, w przypadku AES klucz może mieć długość 128, 192 lub 256 bitów. We wszystkich trybach szyfrowania/deszyfrowania, koprocesor kryptograficzny może pracować zarówno w elastycznym, pozwalającym kodować dowolne bloki danych trybie ECB (Electronic Codebook), jak i bezpieczniejszym, przeznaczonym do kodowania całych partii danych CBC (Cipher Block Chaining). W trybie AES koprocesor można wykorzystać także jako kryptoprocesor strumieniowy AES-CTR z 32-bitowym polem licznikowym i 64-bitowy wektorem początkowym (inicjującym).
Jak widać, możliwości konfiguracyjne bloku CRYP są duże i pozwalają wygodnie korzystać ze wszystkich wymienionych konfiguracji szyfrowania i deszyfrowania. Dzięki możliwości wymiany danych przez kanały DMA bez angażowania CPU, blok CRYP realnie spełnia rolę koprocesora wspomagającego CPU w specyficznych obliczeniach. Drobną, ale nieistotną z punktu widzenia większości aplikacji, niedoskonałością bloku CRYP jest brak możliwości samodzielnego konfigurowania przez użytkownika bloków substytucji S-Box, które zawsze mają wartości ustalone przez standardy (DES/TDES/AES), co nieco ogranicza możliwość zmiany stopnia ochrony kodowanych danych przez aplikację użytkownika.

O autorze