Powrót

Szyfrowanie danych

W obecnych czasach trudno zachować swoją „prywatność”. Dochodzi do nas coraz więcej informacji o cyberatakach lub inwigilacji. Można przed tym się bronić, a jedną z takich możliwości jest szyfrowanie danych. Jak to zrobić, jak się posłużyć szyfrowaniem?

Ochrona własnych danych w trakcie transmisji (choćby jako transmisji szeregowej) może czasami być przydatna, gdyż są takie sytuacje, gdy nie mamy ochoty aby te dane dostały się w niepowołane ręce. Oczywiście my jesteśmy dalecy od organizowania cyberataków i nie będziemy przetwarzać tajnych informacji. Ideą tego artykułu jest nabycie elementarnej wiedzy związanej z tematyką.

Szyfrowanie (kryptografia)

Kryptografia (gr. kryptos – ukryty oraz grafo – pisać) to dziedzina wiedzy związana z utajnianiem wiadomości. Z historycznego punktu widzenia wykorzystanych było wiele różnych patentów w tej dziedzinie, jak chociażby rozwiązanie mechaniczne widoczne na fotografii tytułowej (udostępniona jako własność publiczna przez autora, Matt Crypto z angielskiej Wikipedii). Obecnie wszystko opiera się na matematyce, gdzie zastosowane rozwiązania są na tyle złożone, że znacząco wybiegają poza ramy czasopisma „Zrozumieć Elektronikę”, co nie znaczy, że nie da się wykorzystać gotowych wzorców we własnych pracach.

Samo szyfrowanie polega na zamianie jawnych danych (przykładowo tekstu jako ciągu bajtów) na dane zaszyfrowane (również jako ciąg bajtów niekoniecznie już czytelnych). Odbywa się to według określonego algorytmu (sposobu postępowania, którego celem jest osiągnięcie zamierzonego efektu), gdzie każdy bajt wejściowej informacji jest zamieniany na dane wyjściowe, które nie są już czytelne jak dane oryginalne. Banalnie prostym tego przykładem jest odwrócenie każdego bitu w kodzie znaku. Jednak taki algorytm nie gwarantuje nawet małej ochrony informacji. Znając algorytm (czyli przepis na to, co trzeba zrobić) łatwo można dane odszyfrować (ponownie odwrócić bity danych i uzyskać oryginalną wiadomość). Dodanie do algorytmu dodatkowej informacji powoduje, że proces deszyfracji może zostać znacząco utrudniony.
Tym dodatkowym elementem jest tzw. klucz szyfrujący. Jest to informacja, która jest ustalona (w jakikolwiek sposób) i użyta do szyfrowania a także odszyfrowania. W przypadku szyfrowania i deszyfrowania używany jest ten sam klucz (ta sama informacja) i w takim przypadku mowa jest o algorytmie symetrycznym. Istnieje również algorytm asymetryczny, gdzie wyróżnia się klucz publiczny oraz prywatny. Ten pierwszy może być zupełnie jawny, drugi powinien znać tylko właściciel. Kolejną istotną informacją jest to, że szyfrowanie jest operacją blokową i polega na szyfrowaniu bloku wejściowego przy użyciu zadanego klucza i przekształceniu go na blok wyjściowy o takiej samej długości (nie da się szyfrować danych „w locie” po jednym bajcie).

Algorytm 3DES

Jest to algorytm szyfrowania symetrycznego, polegający na trzykrotnym przetworzeniu danych wejściowych za pomocą algorytmu DES (ang. Data Encryption Standard). Należy on do grupy symetrycznych szyfrów blokowych i został zaprojektowany w 1975 roku przez IBM. Szyfrowany blok danych jest dzielony na fragmenty o wielkości 8 bajtów (co przy okazji oznacza, że wielkość wejściowego bloku danych jest wielokrotnością 8 bajtów). Klucz stosowany w tym algorytmie zawiera 192 bity (czyli 24 bajty) i jest podzielony na trzy części (rysunek 1), gdzie każdy z tych „podkluczy” bierze udział w kolejnych krokach algorytmu DES (DES ma klucz 64 bitowy – 8 bajtów).

Rysunek 1

Wykonane kroki są następujące:

  • szyfrowanie bloku pierwszym kluczem (co daje w wyniku „papkę” danych),
  • deszyfrowanie drugim kluczem (co daje większą papkę” danych),
  • szyfrowanie trzecim kluczem (co daje jeszcze większą „papkę” danych).

Algorytm w piśmie rysunkowym pokazuje rysunek 2.

Rysunek 2

Przykład użycia

Prezentowana realizacja algorytmu 3DES opiera się na rozwiązaniu, które opracował Richard Outerbridge (które zostało udostępnione do domeny publicznej) i z moimi modyfikacjami jest dedykowane dla mikrokontrolerów AVR (ze względu na architekturę Harvard i specyficzne funkcje dostępu do stałych tablic umieszczonych w segmencie kodu). Nie jest jednak przywiązane do jakiegokolwiek modelu mikrokontrolera (moduł descrypto.hdescrypto.c). Można go użyć przykładowo do ochrony zawartości pamięci EEPROM lub do szyfrowania transmisji poprzez UART (pamiętając o 8-bajtowej blokowości danych). Poniższy program prezentuje „obróbkę” danych polegającą na:

  • wyświetleniu zawartości bloku danych przed zaszyfrowaniem,
  • wyświetlenie zawartości bloku danych po zaszyfrowaniu,
  • wyświetlenie zawartości bloku danych po odszyfrowaniu.

Każde wyświetlenie jest realizowane jako wysłanie przez UART tekstu pokazanego na ekranie terminala (emulatorze terminala). Tekst jest wyświetlany w formie znaków (dla znaków kontrolnych wyświetlany jest znak kropki) oraz ten sam tekst w formie liczb 8-bitowych w formacie dziesiętnym.

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze majowym czasopisma Zrozumieć Elektronikę (ZE 5/2024). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 5/2024 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy. Jeśli ma to być numer z tym artykułem trzeba zaznaczyć, że chodzi o ZE 4/2024.
UWAGA!!! E-mail z linkiem do materiałów (weTransfer) wysyłamy zazwyczaj w ciągu 24 godzin. Czasem zdarza się jednak, że trafia do spamu. Jeśli więc nie pojawi się w ciągu 48 godzin prosimy sprawdzić w folderze spam, a ewentualny problem zgłosić na adres: kontakt@piotr-gorecki.pl.