Szyfrowanie symetryczne komunikatów

Szyfrowanie symetryczne wykorzystuje klucz symetryczny – ten sam dla obydwu stron – w celu szyfrowania i deszyfrowania komunikatów.

Przykład

Przykład będzie wykorzystywał narzędzie openSSL.

Komunikat

Zapiszmy do pliku komunikat do zaszyfrowania:

echo "Enigma złamana przez polskich matematyków" > message.txt

Wybór szyfru

Zanim zaczniemy szyfrować komunikaty, musimy zdecydować jakiego szyfru użyjemy. Aby zestawić dostępne szyfry należy użyć komendy:

co zwróci nam listę dostępnych szyfrów. W moim systemie jest to:

-aes-128-cbc               -aes-128-cfb               -aes-128-cfb1
-aes-128-cfb8              -aes-128-ctr               -aes-128-ecb
-aes-128-ofb               -aes-192-cbc               -aes-192-cfb
-aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr
-aes-192-ecb               -aes-192-ofb               -aes-256-cbc
-aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8
-aes-256-ctr               -aes-256-ecb               -aes-256-ofb
-aes128                    -aes128-wrap               -aes192
-aes192-wrap               -aes256                    -aes256-wrap
-aria-128-cbc              -aria-128-cfb              -aria-128-cfb1
-aria-128-cfb8             -aria-128-ctr              -aria-128-ecb
-aria-128-ofb              -aria-192-cbc              -aria-192-cfb
-aria-192-cfb1             -aria-192-cfb8             -aria-192-ctr
-aria-192-ecb              -aria-192-ofb              -aria-256-cbc
-aria-256-cfb              -aria-256-cfb1             -aria-256-cfb8
-aria-256-ctr              -aria-256-ecb              -aria-256-ofb
-aria128                   -aria192                   -aria256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-camellia-128-cbc          -camellia-128-cfb          -camellia-128-cfb1
-camellia-128-cfb8         -camellia-128-ctr          -camellia-128-ecb
-camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb
-camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ctr
-camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc
-camellia-256-cfb          -camellia-256-cfb1         -camellia-256-cfb8
-camellia-256-ctr          -camellia-256-ecb          -camellia-256-ofb
-camellia128               -camellia192               -camellia256
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                 -cast5-ecb                 -cast5-ofb
-chacha20                  -des                       -des-cbc
-des-cfb                   -des-cfb1                  -des-cfb8
-des-ecb                   -des-ede                   -des-ede-cbc
-des-ede-cfb               -des-ede-ecb               -des-ede-ofb
-des-ede3                  -des-ede3-cbc              -des-ede3-cfb
-des-ede3-cfb1             -des-ede3-cfb8             -des-ede3-ecb
-des-ede3-ofb              -des-ofb                   -des3
-des3-wrap                 -desx                      -desx-cbc
-id-aes128-wrap            -id-aes128-wrap-pad        -id-aes192-wrap
-id-aes192-wrap-pad        -id-aes256-wrap            -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap  -rc2                       -rc2-128
-rc2-40                    -rc2-40-cbc                -rc2-64
-rc2-64-cbc                -rc2-cbc                   -rc2-cfb
-rc2-ecb                   -rc2-ofb                   -rc4
-rc4-40                    -seed                      -seed-cbc
-seed-cfb                  -seed-ecb                  -seed-ofb
-sm4                       -sm4-cbc                   -sm4-cfb
-sm4-ctr                   -sm4-ecb                   -sm4-ofb

Generowanie klucza symetrycznego

Każdy szyfr oczekuje innej długości klucza. Przykładowo dla szyfrów z rodziny AES (aes-128-cbc, aes-128-cfb8, … aes256-wrap) numerek w nazwie oznacza ilość bitów klucza.

Weźmy na przykład szyfr aes-256-ecb, oczekuje on 256 bitów (16 bajtów). Tak więc, znając już potrzebną długość klucza, możemy go wygenerować (i przekierować wynik do pliku) używając polecenia:

openssl rand -hex 16 > symmetric_key

Szyfrowanie komunikatu

Aby zaszyfrować nasz komunikat użyjemy komendy:

openssl enc -aes-256-ecb -in message.txt -out message.enc -K $(cat symmetric_key)

Odszyfrowywanie komunikatu

Odszyfrowywanie komunikatu jest podobne do szyfrowania (zwróć uwagę na opcję -d):

openssl enc -aes-256-ecb -d -in message.enc -out decrypted_message.txt -K $(cat symmetric_key)

Problem z wymianą kluczy

Największym problemem szyfrowania symetrycznego jest wymiana kluczy. Zwłaszcza jeśli mamy więcej niż dwie instancje komunikujące się ze sobą. Rozwiązaniem tego problemu jest szyfrowanie hybrydowe.

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *