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?
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 polecenieenc
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ę.
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