AES vs Blowfish do szyfrowania plików

107

Chcę zaszyfrować plik binarny. Moim celem jest uniemożliwienie odczytania pliku każdemu, kto nie ma hasła.

Które rozwiązanie jest lepsze, AES czy Blowfish z tą samą długością klucza? Można założyć, że atakujący ma duże zasoby (oprogramowanie, wiedzę, pieniądze) na złamanie pliku.

mimrock
źródło
4
Blowfish ma ponad dekadę, myślę, że masz na myśli aes vs twofish ...
wieża
Masz rację, mogłem o to zapytać. Na szczęście Jerry świetnie podsumował temat.
mimrock
@Rook Im starszy, tym lepsza jest praktyczna zasada dotycząca algorytmów bezpieczeństwa. Nowe algorytmy są przeznaczone dla osób, którym bardziej zależy na wydajności niż na bezpieczeństwie.
ceving

Odpowiedzi:

188

Prawdopodobnie AES. Blowfish był bezpośrednim poprzednikiem Twofish. Twofish był zgłoszeniem Bruce'a Schneiera do konkursu, który wyprodukował AES. Został oceniony jako gorszy od wpisu o nazwie Rijndael, który stał się AES.

Poza tym ciekawe: w pewnym momencie konkursu wszyscy uczestnicy zostali poproszeni o wyrażenie opinii na temat rankingu szyfrów. Prawdopodobnie nie jest zaskoczeniem, że każdy zespół wybrał swój własny wpis jako najlepszy - ale co drugi zespół wybrał Rijndael jako drugi najlepszy.

To powiedziawszy, istnieją pewne podstawowe różnice w podstawowych celach Blowfish w porównaniu z AES, które mogą (prawdopodobnie) faworyzować Blowfish pod względem absolutnego bezpieczeństwa. W szczególności Blowfish próbuje utrudnić atak brutalnej siły (wyczerpanie klucza), czyniąc początkową konfigurację klucza dość powolną operacją. Dla zwykłego użytkownika ma to niewielkie znaczenie (to wciąż mniej niż milisekunda), ale jeśli próbujesz złamać miliony kluczy na sekundę, różnica jest dość znaczna.

Ostatecznie jednak nie uważam tego za główną zaletę. Generalnie polecam AES. Moim następnym wyborem byłby prawdopodobnie Serpent, MARS i Twofish w tej kolejności. Blowfish przyszedłby gdzieś po nich (choć jest kilka innych, które prawdopodobnie poleciłbym przed Blowfish).

Jerry Coffin
źródło
11
Myślę, że inne algorytmy były uważane za bezpieczniejsze niż Rijndael, ale oferowały bardzo dobrą wydajność, podczas gdy bezpieczeństwo zostało ocenione jako wystarczająco dobre. Projektowanie algorytmu szyfrującego jest zawsze kompromisem między bezpieczeństwem a wydajnością.
CodesInChaos
10
@CodeInChaos: W zależności od twojego punktu widzenia, to przynajmniej prawda - Serpent był prawdopodobnie najbardziej konserwatywnym projektem. W szczególności doszli do wniosku, że wersja 16-nabojowa będzie wystarczająca - podwoili ją więc do 32 nabojów. Najlepszy obecnie znany atak jest skuteczny tylko przeciwko 11 rundom. Gdyby pierwotne pytanie nie ograniczało konkretnie wyboru do AES i Blowfish, a po prostu pytało o najbezpieczniejszy, dość dobrze znany szyfr, prawdopodobnie powiedziałbym Serpent ...
Jerry Coffin
Również to, że „Interesujące na bok” pojawiło się w kilku pytaniach i źródłach podczas nauki do egzaminu CompTIA Security +. W końcu małe rzeczy mogą nie być tak bezużyteczne!
Everlight
Blowfishjest najszybszy
user924
23

Nie jest często uznawany fakt, że rozmiar bloku szyfru blokowego jest również ważnym aspektem bezpieczeństwa (chociaż nie jest tak ważny jak rozmiar klucza).

Blowfish (i większość innych szyfrów blokowych z tej samej epoki, jak 3DES i IDEA) ma 64-bitowy rozmiar bloku, który jest uważany za niewystarczający dla dużych rozmiarów plików, które są obecnie powszechne (im większy plik, a mniejszy rozmiar bloku , tym większe prawdopodobieństwo powtórzenia się bloku w zaszyfrowanym tekście - a takie powtarzające się bloki są niezwykle przydatne w kryptoanalizie).

Z drugiej strony AES ma rozmiar bloku 128-bitowego. Już sama ta uwaga uzasadnia użycie AES zamiast Blowfish.

kawiarnia
źródło
2
Zaletą 64-bitowego rozmiaru bloku jest to, że ułatwia upuszczenie nowego algorytmu do starej aplikacji jako zamiennika (3) DES.
dajames
Rozmiar bloku to ciekawy argument. Kilka miesięcy temu napisałem artykuł, w którym teoretyzuje się, że rozmiar bloku dowolnego szyfru symetrycznego można rozszerzyć do dowolnej długości: cubicspot.blogspot.com/2013/02/ ...
CubicleSoft
16

Jeśli chodzi o same algorytmy, wybrałbym AES, z prostego powodu, że został zaakceptowany przez NIST i będzie przez lata recenzowany i kryptoanalizowany. Jednak sugerowałbym, że w praktycznych zastosowaniach, chyba że przechowujesz jakiś plik, który rząd chce zachować w tajemnicy (w takim przypadku NSA prawdopodobnie dostarczyłby ci lepszy algorytm niż zarówno AES, jak i Blowfish), używając któregokolwiek z tych algorytmów wygrał nie robi zbyt dużej różnicy. Całe bezpieczeństwo powinno być w kluczu, a oba te algorytmy są odporne na ataki siłowe. Blowfish okazał się słaby tylko w implementacjach, które nie wykorzystują pełnych 16 rund. I chociaż AES jest nowszy, fakt ten powinien skłonić Cię bardziej do BlowFish (jeśli brałeś pod uwagę tylko wiek). Pomyśl o tym w ten sposób

Oto, co chciałbym ci przedstawić ... zamiast patrzeć na te dwa algorytmy i próbować wybrać między algorytmem, dlaczego nie spojrzysz na schemat generowania kluczy. Potencjalny napastnik, który chce odszyfrować Twój plik, nie będzie siedział tam i nie wymyśli teoretycznego zestawu kluczy, których można użyć, a następnie przeprowadzi atak siłowy, który może zająć miesiące. Zamiast tego zamierza wykorzystać coś innego, na przykład zaatakować sprzęt serwera, przeprowadzić inżynierię wsteczną zestawu, aby zobaczyć klucz, spróbować znaleźć plik konfiguracyjny zawierający klucz, a może szantażować znajomego, aby skopiował plik z komputera . To będą miejsca, w których jesteś najbardziej narażony, a nie algorytm.

nerdybeardo
źródło
4
AES został niedawno dodany do listy „zepsutych szyfrów” na Wikipedii, ale najgorszy atak na Blowfish dotyczy marnych czterech rund i wyraźnie brakuje go na liście zepsutych szyfrów. Komentarz Bruce'a na temat zaskoczenia, że ​​ludzie nadal używają Blowfish, jest tym, co odstrasza wdrażających. Jednak nie jest uszkodzony, obsługuje zmienne rozmiary kluczy, obsługuje większe rozmiary kluczy niż AES i, z punktu widzenia programowania, jest łatwy do wdrożenia w porównaniu z większością innych symetrycznych szyfrów blokowych. Blowfish przetrwał próbę czasu, która jest największym zagrożeniem dla każdego szyfru symetrycznego.
CubicleSoft,
Zgadzam się, że AES nie jest prawie uszkodzony. Jednak za mniej więcej 10 lat będziemy potrzebować nowego standardu. Również każdy z finalistów AES był fantastycznym szyfrem. Wąż jest przez wielu uważany za najtrudniejszy do złamania, ale AES był najbardziej elegancki. (I tak, jeśli spojrzysz na sposób szyfrowania i deszyfrowania, jest to zdecydowanie eleganckie.)
nerdybeardo
8

AES.

(Zakładam również, że masz na myśli dwie ryby, a nie dużo starszą i słabszą rozdymkę)

Oba (AES i twofish) są dobrymi algorytmami. Jednak nawet gdyby były równe lub dwie ryby były nieco lepsze pod względem technicznym, NADAL wybrałbym AES.

Czemu? Reklama. AES to standard szyfrowania rządowego, dlatego też używają go miliony innych podmiotów. Utalentowany kryptoanalityk po prostu dostaje więcej "bum za grosze" znajdując lukę w AES niż robi to dla znacznie mniej znanych i używanych dwóch ryb.

Obscurity nie zapewnia ochrony w szyfrowaniu. Więcej ciał szukających, studiujących, sondujących i atakujących algorytm jest zawsze lepsze. Chcesz najbardziej „sprawdzonego” algorytmu, a teraz jest nim AES. Jeśli algorytm nie podlega intensywnej i ciągłej kontroli, powinieneś umieścić mniejszą pewność co do jego siły. Jasne, że dwie ryby nie zostały zagrożone. Czy to z powodu siły szyfru, czy po prostu dlatego, że zbyt mało ludzi przyjrzało się bliżej… JESZCZE

Gerald Davis
źródło
5

Wybór algorytmu prawdopodobnie nie ma większego znaczenia. Używałbym AES, ponieważ zostało lepiej zbadane. O wiele ważniejszy jest wybór odpowiedniego trybu pracy i funkcji wyprowadzania klucza .

Możesz rzucić okiem na specyfikację formatu TrueCrypt w poszukiwaniu inspiracji, jeśli chcesz mieć szybki losowy dostęp. Jeśli nie potrzebujesz dostępu swobodnego, tryb XTS nie jest optymalnym trybem, ponieważ ma słabości inne tryby. Możesz też dodać jakiś rodzaj kontroli integralności (lub kod uwierzytelniający wiadomości).

CodesInChaos
źródło
1
Oczywiście - niezwykle ważne jest, aby użyć dobrej funkcji wyprowadzania klucza, takiej jak PBKDF2.
kawiarnia
3

Wiem, że ta odpowiedź narusza warunki twojego pytania, ale myślę, że prawidłowa odpowiedź na twój zamiar jest po prostu taka: użyj dowolnego algorytmu, który pozwala na najdłuższą długość klucza, a następnie upewnij się, że wybrałeś naprawdę dobry klucz. Niewielkie różnice w wydajności większości dobrze szanowanych algorytmów (kryptograficznie i chronologicznie) są przytłaczane przez kilka dodatkowych bitów klucza.

Mike Jones
źródło
7
Nie mogę się zgodzić. Szyfr IBM Lucifer (poprzednik DES) używany jako 128-bitowy klucz - ale DES (tylko z kluczem 56-bitowym) okazał się znacznie bezpieczniejszy, gdy odkryto (ponownie) różnicową kryptoanalizę.
Jerry Coffin
3
Samo spojrzenie na długość klucza jest bardzo kiepską miarą.
Gerald Davis
2
Dlatego powiedziałem „najbardziej cenione algorytmy”. Jeśli weźmiesz pod uwagę Blowfish 128bit gorszy od AES 128bit, musisz zgodzić się, że Blowfish 256bit wydmuchuje AES 128bit z wody. Równie ważne jest generowanie kluczy i zarządzanie nimi. Jeśli Twoim kluczem jest „hasło”, to naprawdę nie ma znaczenia, jakiego algorytmu używasz. Mówię, że OP prawdopodobnie patrzy na niewłaściwą rzecz.
Mike Jones
2
W pytaniu jest powiedziane, że klucze będą pochodzić z haseł. Złamanie systemu poprzez brutalne wymuszenie hasła będzie prawdopodobnie dużo łatwiejsze niż zaatakowanie któregokolwiek z wymienionych tutaj algorytmów. Długość klucza jest prawie całkowicie nieistotna, gdy klucz pochodzi z hasła.
dajames
Zaznaczasz moją odpowiedź, mimo że mówisz dokładnie to samo co ja? Powiedziałem długość klucza i wybrałem naprawdę dobry klucz. Zgodnie z jaką definicją „dobrego” uważaliby Państwo klucz za dobry, gdyby nie wypełniał wszystkich bitów klucza?
Mike Jones,
3

Oba algorytmy (AES i twofish) są uważane za bardzo bezpieczne. Zostało to szeroko omówione w innych odpowiedziach.

Ponieważ jednak AES jest obecnie szeroko stosowany w 2016 r., Został specjalnie przyspieszony sprzętowo na kilku platformach, takich jak ARM i x86. Chociaż przed akceleracją sprzętową AES nie jest znacznie szybszy niż dwójka, teraz jest znacznie szybszy dzięki dedykowanym instrukcjom procesora.

galinette
źródło