toplip – ciekawy program do szyfrowania

“Po co miałbym szyfrować jakieś dane?” mógłby zapytać ktoś. Cóż, wycieki danych potrafią kosztować utratę konkretnych pieniędzy… Obawiam się, że w dzisiejszych czasach, kiedy cyberszpiegostwo kwitnie, a co chwila wykrywane są kolejne podatności 0-day, o szyfrowaniu można powiedzieć parafrazując znane powiedzenie o backupach: “Ludzie dzielą się na tych, co szyfrują swoje dane i na tych co będą je szyfrować.”

Historie tych, co już szyfrują zaczynają się zazwyczaj od „udostępniłem katalog a potem o tym zapomniałem i umieściłem w nim prywatne dane…” albo „pomyliłem się i załączyłem nie ten plik…” albo po prostu „mój laptop został skradziony”.

Programów do szyfrowania jest mnóstwo: od zwykłego GPG począwszy poprzez szyfrowane voluminy w rodzaju Veracrypt na szyfrowaniu całych partycji skończywszy. Tym razem jednak chciałbym przedstawić ciekawe narzędzie, oferujące opcje, których wyżej wymienione rozwiązania nie mają.

Toplip – tak się nazywa ów program – wysoko stawia poprzeczkę. Użyto w nim sprawdzonych rozwiązań: XTS-AES256, Scrypt, HMAC-SHA512 i wielu innych, zapewniających, że zastosowany szyfr naprawdę trudno jest złamać, a metody łamania haseł brute force zawodzą.

Instalacja

Toplipa nie ma niestety w repozytoriach. To zła wiadomość. Dobra jest taka, że program jest dostępny za darmo na stronie twórców: https://2ton.com.au/toplip/. Należy po prostu ściągnąć plik, a następnie nadać mu uprawnienia do wykonywania za pomocą polecenia:

chmod a+x toplip

Następnie, dla wygody, można go umieścić w katalogu, z którego będzie dostępny bez podawania ścieżki, np. /usr/local/bin. Trzeba w tym przypadku użyć uprawnień roota:

sudo mv toplip /usr/local/bin

Teraz można użyć programu w dowolnym katalogu, bez podawania ścieżki do pliku wykonywalnego.

Zwykłe szyfrowanie

Jeśli nie mamy dużych wymagań toplip można użyć jak każdego innego programu do szyfrowania. Program jest przeznaczony do szyfrowania plików i jako argument należy podać nazwę pliku (nie można, jak np. w przypadku GPG, wpisać z klawiatury wiadomości do zaszyfrowania).

toplip nazwapliku.txt > szyfr.bin

Na ekranie pojawi się komunikat – „wizytówka” programu i pytanie o hasło.

This is toplip v1.24 © 2015-2018 2 Ton Digital. Author: Jeff Marrison
A showcase piece for the HeavyThing library. Commercial support available
Proudly made in Cooroy, Australia. More info: https://2ton.com.au/toplip
plik1.txt Passphrase #1: generating keys…Done
Encrypting…Done

Co ciekawe – nie ma żadnych wymagań co do hasła – można użyć nawet jednego znaku. Najwyraźniej twórcy programu są tak pewni swoich mechanizmów obrony, że nie uważają za konieczne wymagać skomplikowanych ciągów znaków…

Mimo, że progam wymaga podania nazwy pliku na wejściu to – trochę niekonsekwetnie – nie zapisuje wyniku operacji na dysku tylko wysyła ją do stdout – czyli w praktyce na ekran i trzeba rezultat operacji przekierować do pliku, jak to podano w przykładzie powyżej. Rozszerzenie pliku wynikowego w przykładzie nie jest przypadkowe – wynikiem jest plik binarny. Można sobie jednak zażyczyć, by zawartość zaszyfrowanego kontenera została zakodowana base64:

$ toplip -b plik1.txt > szyfr.asc

Czasem jest to wygodne – tak przygotowany ciąg, jeśli nie jest zbyt długi, można nawet wkleić sobie do jakiegoś programu z notatkami, np. EverNote.

Odszyfrowanie

Podobnie jak przy szyfrowaniu program wysyła odszyfrowany ciąg znaków na stdout – trzeba go przekierować do pliku. Oryginalna nazwa pliku niestety zostaje nieodwracalnie utracona.

toplip -d szyfr.bin > plaintext.txt

Do odszyfrowania należy podać wszystkie opcje, które zostały użyte do zaszyfrowania danych np. jeśli plik został zaszyfrowany z opcją -b to bez podania tej opcji nie może zostać odszyfrowany. To dodatkowe utrudnienie dla atakującego, ale też i dla właściciela, który musi pamiętać jak zaszyfrował plik.

Prawdopodobne zaprzeczenie

Takiego zabezpieczenia nie spotyka się często w programach szyfrujących. Problem polega na tym, że właściciel zaszyfrowanego pliku może zostać zmuszony do jego odszyfrowania, np. szantażem. W takim przypadku dobrze jest mieć w zaszyfrowanym kontenerze zawartość, którą można ujawnić, nie pokazując tego, na czym naprawdę nam zależy. Toplip pozwala na upakowanie do 4 plików w jednym kontenerze, każdy jest chroniony innym hasłem:

$ toplip -alt plik1.txt plik2.txt > szyfr.bin
This is toplip v1.24 © 2015-2018 2 Ton Digital. Author: Jeff Marrison
A showcase piece for the HeavyThing library. Commercial support available
Proudly made in Cooroy, Australia. More info: https://2ton.com.au/toplip
plik2.txt   Passphrase #1: generating keys...Done
plik1.txt   Passphrase #1: generating keys...Done
Encrypting… … 

W trakcie szyfrowania pojawia się pytanie o hasło dla każdego pliku osobno.

Teraz, na żądanie odszyfrowania, podajemy takie samo polecenie jak poprzednio:

toplip -d szyfr.bin > plaintext.txt

…oraz hasło do pliku, którego zawartość możemy bez obaw ujawnić. To, który plik zostanie odszyfrowany zależy po prostu od hasła, które podamy. Oczywiste jest, że hasła nie mogą być takie same. Można więc pokazać komuś mniej ważne dane, chroniąc jednocześnie właściwą zawartość kontenera.

Sposób zapisywania danych w szyfrowanym kontenerze uniemożliwia stwierdzenie, czy jest tam coś jeszcze, czy też nie. Dlatego właściciel takiego kontenera może zaprzeczyć, że trzyma w nim coś poza odszyfrowanymi właśnie danymi i zawsze będzie to prawdowpodobne stwierdzenie.

De facto nawet jeśli szyfrowany jest tylko jeden plik to toplip i tak dorzuca trochę losowych danych, by nie dało się stwierdzić, czy mamy do czynienia z jednym, czy z większą liczbą plików.

Jeśli wielkość zaszyfrowanego pliku jest istotna (bo na przykład nie mieści się w załączniku do maila), można zażyczyć sobie, by losowe dane nie były dodawane – za pomocą opcji -noalt. Oto jaka jest różnica (dla przejrzystości nadmiarowe komunikaty zostały usunięte z listingu):

$ toplip plik1.txt > szyfr1.bin # z dodatkowymi danymi
$ toplip -noalt plik1.txt > szyfr2.bin # bez dodatkowych danych
$ ls -l
-rw-rw-r-- 1 piotr piotr  478 2021.05.22 20:36:27 plik1.txt
-rw-rw-r-- 1 piotr piotr 1812 2021.05.23 12:13:37 szyfr1.bin
-rw-rw-r-- 1 piotr piotr  775 2021.05.23 12:13:52 szyfr2.bin

Drugi plik, który został zaszyfrowany bez dodatkowego narzutu jest ponad dwa razy mniejszy!

Zabezpieczenie wieloma hasłami

Każdy z plików szyfrowanych przez toplip może być zabezpieczony więcej niż jednym hasłem. Odpowiada za to opcja -c (od angielskiego count). Po niej podaje się ile haseł ma być wymaganych:

$ toplip -c 2 plik1.txt > szyfr.bin
This is toplip v1.24 © 2015-2018 2 Ton Digital. Author: Jeff Marrison
A showcase piece for the HeavyThing library. Commercial support available
Proudly made in Cooroy, Australia. More info: https://2ton.com.au/toplip
plik1.txt Passphrase #1: generating keys...Done
plik1.txt Passphrase #2: generating keys...Done
Encrypting...Done

Jak widać program prosi o dwa hasła, mimo że szyfrowany jest tylko jeden plik. Przy odszyfrowywaniu konieczne jest podanie takiego samego parametru -c z odpowiednią liczbą haseł oraz – w odpowiedzi na żądanie programu – wpisanie haseł w tej samej kolejności.

Taka procedura może się wydawać uciążliwa, ale możliwość zastosowania więcej niż jednego ciągu znaków zmniejsza ryzyko złamania hasła brute force’em praktycznie do zera.

Steganografia

Zgodnie z zasadą „czego oczy nie widzą, tego sercu nie żal” czasem lepiej dane w ogóle ukryć przed okiem intruza. Od dawna znana jest metoda chowania danych w plikach medialnych. Toplip potrafi ukryć poufne dane w obrazku formatu png lub jpg za pomocą opcji -m:

$ toplip -m tux.jpg plik1.txt > tux2.jpg
This is toplip v1.24 © 2015-2018 2 Ton Digital. Author: Jeff Marrison
A showcase piece for the HeavyThing library. Commercial support available
Proudly made in Cooroy, Australia. More info: https://2ton.com.au/toplip
plik1.txt Passphrase #1: generating keys...Done
Encrypting...Done

$ ls -lh
-rw-rw-r-- 1 piotr piotr 478 2021.05.22 20:36:27 plik1.txt
-rw-rw-r-- 1 piotr piotr 458 2021.05.22 20:36:33 plik2.txt
-rw-rw-r-- 1 piotr piotr 50K 2021.05.23 15:31:16 tux2.jpg
-rw-rw-r-- 1 piotr piotr 48K 2021.05.22 22:50:06 tux.jpg 

Jak widać plik tux2.jpg jest o 2 kB większy – jest w nim również zawartość pliku z danymi. Rzecz jasna są one „po drodze” szyfrowane.

Odzyskanie danych z obrazka jest analogiczne do odszyfrowywania pliku:

toplip -d tux2.jpg > dane.txt

Także i w tym przypadku nazwa pliku jest tracona, dane trzeba przekierować z stdout do nowego pliku.

Można w przypadku steganografii użyć również techniki prawdopodobnego zaprzeczenia i schować w obrazku dwa różne pliki, z których jeden będzie „przykrywką” dla drugiego:

toplip -m tux.jpg -alt plik1.txt plik2.txt > tux3.jpg

Oba pliki zostaną schowane w obrazku, a to, który plik zostanie odzyskany za pomocą polecenia

toplip -d tux2.jpg > dane.txt

będzie zależało od tego, które hasło podamy.

Toplip to progam o niestandardowym podejściu do tematu szyfrowania i oferujący niespotykane w innych programach możliwości. Jeśli ktoś chce dobrze dbać o swoje dane albo jest w posiadaniu informacji, która nie może trafić w niewłaściwe ręce – z pewnością jest wart polecenia.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni post
autohelp

Automatyczny help w skryptach bashowych

Następny post

Vimix – Edycja video „na żywo”

Powiązane posty