Czy openssl Aes-Encryption Lossy?

-2

Jeśli chodzi o sposób szyfrowania wiersza polecenia aes-encrypt , czy mogę to wykorzystać jako niezawodny sposób tworzenia kopii zapasowych?

Jestem na Os X btw.

Co próbowałem:

zip -er ./test.zip ./test # zip w/ password

Dodano to do mojego .bash_profile

#$1 == input file
#$2 == output file
aesenc ()
{
        openssl enc -aes-256-cbc -salt -in "$1" -out "$2"
}

#$1 == enc file
#$2 == out file
aesdecr ()
{
        openssl enc -d -aes-256-cbc -in "$1" -out "$2"
}

aesenc test.zip test.zip.enc aesdecr test.zip.enc test.zip

Sprawdziłem pliki i wszystko wydaje się być w porządku na powierzchni.

Chciałeś tylko usłyszeć, czy ktoś wie więcej?

Kanion Kolob
źródło
Utrata szyfrowania to straszny pomysł. Czy mylisz szyfrowanie z kompresją?
Spiff

Odpowiedzi:

3

Myślę, że masz na myśli kompresję stratną, taką jak JPEG, kompresja stratna nieodwracalnie traci dane, kompresja stratna byłaby okropna dla danych w ogóle i działa tylko dla obrazów, ponieważ obraz nadal wygląda „wystarczająco dobrze”, nawet po utracie danych.

Komenda openssl enc nie jest „stratna”, więc powinna być niezawodna dla danych ... ale IMO korzystające z programu o dłuższej historii i lepszej obsłudze kluczy, takiego jak gpg / pgp, byłoby lepsze do bezpiecznych szyfrowanych kopii zapasowych. Jest polecany przez pana Edwarda Snowdena i jest stosunkowo „dowodem rządowym”, a przynajmniej w przeszłości czytałem kilka rzeczy na temat szyfru openssl, które go dotyczą.

Zobacz to pytanie OpenSSL vs GPG do szyfrowania kopii zapasowych poza witryną? aby uzyskać więcej informacji, takich jak:

z tego postu na security.stackexchange.com (od stycznia 2013 r.) i innego autorstwa użytkownika o reputacji 159 tys. openssl enckomenda może pozostawić coś do życzenia:

Format szyfrowania używany przez OpenSSL jest niestandardowy: jest „tym, co robi OpenSSL”, a jeśli wszystkie wersje OpenSSL zwykle się ze sobą zgadzają, nadal nie ma dokumentu referencyjnego, który opisuje ten format oprócz kodu źródłowego OpenSSL. Format nagłówka jest raczej prosty:

wartość magiczna (8 bajtów): bajty 53 61 6c 74 65 64 5f 5f wartość soli (8 bajtów)

Stąd ustalony 16-bajtowy nagłówek, zaczynający się od kodowania ASCII łańcucha „Solted__”, po którym następuje sama sól. To wszystko ! Brak wskazania algorytmu szyfrowania; powinieneś sam to śledzić.

Proces, w którym hasło i sól są zamieniane na klucz, a IV nie jest dokumentowany, ale spojrzenie na kod źródłowy pokazuje, że wywołuje on specyficzną dla OpenSSL funkcję EVP_BytesToKey () , która wykorzystuje niestandardową funkcję wyprowadzania klucza z kilkoma powtarzającymi się skrótami . Jest to niestandardowy i źle sprawdzony konstrukt (!), Który opiera się na funkcji skrótu MD5 o wątpliwej reputacji (!!); tę funkcję można zmienić w wierszu polecenia za pomocą nieudokumentowanej -md flagi (!!!); „liczba iteracji” jest ustawiona przez encpolecenie na 1 i nie można go zmienić (!!!!). Oznacza to, że pierwsze 16 bajtów klucza będzie równe MD5 (hasło || sól) i to wszystko.

To jest dość słabe! Każdy, kto wie, jak napisać kod na komputerze, może spróbować złamać taki schemat i będzie mógł „wypróbować” kilkadziesiąt milionów potencjalnych haseł na sekundę (setki milionów można osiągnąć za pomocą GPU). Jeśli używasz „openssl enc”, upewnij się, że twoje hasło ma bardzo wysoką entropię! (tj. wyższy niż zwykle zalecany; celuj przynajmniej na 80 bitów). A najlepiej nie używaj go wcale; zamiast tego wybierz coś bardziej niezawodnego ( GnuPG , podczas szyfrowania symetrycznego hasła, używa silniejszego KDF z wieloma iteracjami podstawowej funkcji skrótu).

man enc ma nawet to pod „BŁĘDAMI”:

Powinna istnieć możliwość włączenia licznika iteracji.

Xen2050
źródło