OpenSSL vs GPG za szyfrowanie kopii zapasowych poza witryną?

Biorąc pod uwagę możliwość użycia GPG i OpenSSL do lokalnego szyfrowania przed przeniesieniem archiwów do lokalizacji kopii zapasowych poza siedzibą, jakie są zalety i wady każdego rozwiązania?

Tło: Obecnie zarządzam infrastrukturą serwerową opartą na Ubuntu 14.04.1 z wszystkimi aktualnymi łatkami zastosowanymi w miarę ich dostępności.

Wszystkie te systemy są bezgłowe, automatycznie budowane przy użyciu sprawdzonych predeedów i narzędzi automatyzacji i uruchamiane w maszynach wirtualnych za pośrednictwem KVM na jednolitym Sprzęt oparty na technologii Intel.

Mamy preferencje dla Rubiego, ale silniejsze preferencje dla "robienia rzeczy poprawnie". Z tego powodu wybraliśmy klejnot "kopia zapasowa" jako środek do tworzenia zaszyfrowanych archiwów danych, które chcemy zachować, ponieważ utworzy on te same zaszyfrowane archiwa dla programisty używającego Vagranta, które byłyby w produkcji, niezależnie od mechanizmu, za pomocą którego są przesyłane.

Całym oprogramowaniem i konfiguracją zarządza się za pomocą Puppet, więc żadna decyzja nie będzie miała wpływ na" doświadczenie użytkownika " lub wygodę. Każda z tych opcji utworzy odpowiednie skrypty do zarządzania, weryfikacji lub przywracania z utworzonych kopii zapasowych.

Biorąc pod uwagę, czy jedna z opcji szyfrowania oferuje jakąkolwiek przewagę nad drugą, gdy jest używana do tego celu?

Author: K. Darien Freeheart, 2015-01-31

1 answers

Wybrałbym GPG do szyfrowania plików, ma dziesiątki lat bezpiecznego testowanego szyfrowania i bardzo łatwo jest mieć wielu "odbiorców" (klucze zapasowe?) lub podpisy z jego kluczami publicznymi , a nawet serwerami (jeśli byłyby przydatne).

Z GPG, wszystkie proste błędy zostały uniknięte/naprawione, wybiera dłuższy "losowy" klucz dla rzeczywistego szyfrowania i robi dużą liczbę "rund", aby uczynić go bardzo bezpiecznym.

OpenSSLpowinien BYĆ w stanie robić wszystkie te same rzeczy, (to istnieje od 1998 roku, ale jeśli numery wersji cokolwiek znaczą, osiągnęła wersję 1 w 2010 roku), ale bardzo łatwo jest popełnić błąd, który może drastycznie obniżyć bezpieczeństwo. I z tego postu na security.stackexchange.com (od stycznia 2013) i inne przez użytkownika reputacji 159k, polecenie openssl enc może pozostawić coś do życzenia:

Format szyfrowania używany przez OpenSSL jest niestandardowy: jest "tym, co robi OpenSSL" i jeśli wszystkie wersje OpenSSL mają tendencję do zgadzam się ze sobą, nadal nie ma dokumentu referencyjnego opisującego ten format poza kodem źródłowym OpenSSL. Format nagłówka jest dość prosty:

Magiczna wartość (8 bajtów): bajty 53 61 6C 74 65 64 5f 5f wartość salt (8 bajtów)

Stąd stały 16-bajtowy nagłówek, zaczynający się od kodowania ASCII łańcucha " Solted__", a następnie samego salt. To wszystko ! Nic nie wskazuje na algorytm szyfrowania; powinieneś sam to śledzić.

Proces, w którym hasło i salt są przekształcane w klucz i IV nie jest udokumentowany, ale spojrzenie na kod źródłowy pokazuje, że wywołuje on specyficzną dla openssl EVP_BytesToKey() funkcję, która używa niestandardowej funkcji wyprowadzania klucza z powtarzającym się hashowaniem. Jest to konstrukcja niestandardowa i niezbyt dobrze sprawdzona (!), który opiera się na funkcji hash MD5 o wątpliwej reputacji (!!); funkcja ta może być zmieniona w wierszu poleceń za pomocą undocumented -md flaga (!!!); "licznik iteracji" jest ustawiany przez polecenie enc na 1 i nie można go zmienić (!!!!). Oznacza to, że pierwsze 16 bajtów klucza będzie równe MD5 (password||salt) i tyle.

To jest dość słabe ! każdy, kto wie, jak pisać 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 będą osiągalne z GPU). Jeśli używasz "openssl enc", upewnij się, że Twoje hasło ma bardzo wysoką entropię ! (tj. wyższy niż zwykle zalecany; celuj co najmniej na 80 bitów). Lub, najlepiej, nie używać go w ogóle; zamiast tego, przejdź do czegoś bardziej solidnego (GnuPG , wykonując symetryczne szyfrowanie hasła, używa silniejszego KDF z wieloma iteracjami podstawowej funkcji skrótu).

man enc nawet ma to pod "bugami":

Powinna istnieć opcja pozwalająca na liczenie iteracji wliczony w cenę.

 46
Author: Xen2050,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 10:45:55