2012-06-09 11 views
7

Piszę aplikację na Androida, która ma na celu szyfrowanie i odszyfrowywanie plików przy użyciu AES 256. Używam trybu AES-CBC i PBKDF2 do wyprowadzania klucza AES z wprowadzonego przez użytkownika hasła. Ponadto generuję bezpieczną, pseudolosową sól dla każdego klucza szyfrowania pliku. Przechowuję IV i sól w zaszyfrowanym pliku, więc mogę ponownie je odczytać i później zregenerować klucz, aby móc odszyfrować plik.Czy przechowywanie soli wraz z szyfrowanym zabezpieczeniem przerwania pliku?

Moje pytanie: Czy przechowywanie soli wraz z zaszyfrowanym plikiem powoduje zerwanie zabezpieczenia i jakiekolwiek znaczenie samej soli? Czy atakujący nie zna soli, a IV nie atakuje zaszyfrowanych plików w trybie offline, aby znaleźć klucz szyfrujący?

Odpowiedz

10

Głównym celem tej soli nie jest zachowanie tajemnicy, ale upewnienie się, że atakujący nie może używać skrótów przy próbie brutalnego wymuszenia hasła, np. Za pomocą tablic tęczowych (tj. Jednego istniejącego stołu lub nowego do użycia w wielu zaszyfrowanych plikach) lub brutalne wymuszanie wielu zebranych plików (które powinny mieć różne sole) na raz.

Dopóki twoje hasło ma wystarczającą entropię, a liczba iteracji w twojej funkcji wyprowadzania klucza jest wystarczająco wysoka, przechowywanie soli za pomocą zaszyfrowanego tekstu nie stanowi problemu. Sama sól nie pozwoli nikomu odszyfrować pliku.

Ponadto, jeśli chcesz zachować sól w tajemnicy (to zwykle nazywane jest "pieprzem" zamiast soli), musisz wymyślić jakiś mechanizm, aby uzyskać odpowiednią sól dla tego, kto legalnie robi odszyfrowanie.

+0

Ale co jeśli atakujący zbuduje tęczowy stół z ważną solą, którą będzie mógł odczytać z pliku w postaci zwykłego tekstu? –

+9

@AlexAmiryan Budowanie stołu tęczowego jest co najmniej tak kosztowne, jak brutalny atak. Więc jeśli nie możesz ponownie wykorzystać tabeli (i to właśnie sole zapobiegają), nie ma sensu budować stołu. Po prostu wykonaj bezpośredni atak. – CodesInChaos

2

Sól służy do jednokierunkowych funkcji, takich jak hashowanie hasła.

Losowa IV jest używana dla funkcji dwukierunkowych, takich jak szyfrowanie danych, które można później odszyfrować.

Oba są losowymi bajtami i są używane, aby zapobiec temu samemu materiałowi, który wygenerował ten sam wynik po zastosowaniu przez funkcję. Jeśli więc dwie osoby wybiorą to samo hasło do przechowywania swoich danych i zachowają tę samą informację, zaszyfrowane bajty będą inne.

Możesz przechowywać je z boku zaszyfrowanego pliku.

Użyj również więcej niż jednej iteracji z PBKDF2, albo jest to dość bezużyteczne. Według Wikipedia iOS 3 używa 2000 iteracji, a iOS 4 używa 10.000.

+1

Czy możesz być bardziej opisowy, dlaczego bezpieczne jest przechowywanie IV i soli razem z zaszyfrowanym plikiem? –

Powiązane problemy