Myślałem o wygenerowaniu hasła WPA-PSK i na stronie OpenBSD widzę wpa-psk(8):
The passphrase must be a sequence of between 8 and 63
ASCII-encoded characters.
Jakie dokładnie są tutaj kryteria „zakodowane w ASCII”? Tylko, że muszą to być 8-bitowe znaki z ustawionym wysokim bitem? Czy znaki niedrukowalne są dozwolone?
Pomyśl o tym ... Czy moje podejście do losowego generowania hasła ma jakiś sens? Czy lepiej byłoby wygenerować 64 losowe bajty i użyć tego jako klucza?
> Jakie dokładnie są tutaj kryteria „zakodowane w ASCII”? Tylko, że muszą to być 8-bitowe znaki z ustawionym wysokim bitem? Czy znaki niedrukowalne są dozwolone?
Każdy znak w zdaniu musi mieć kodowanie w zakresie od 32 do 126 (dziesiętnie) włącznie. (IEEE Std. 802.11i-2004, załącznik H.4.1)
Znak spacji jest zawarty w tym zakresie.
> Pomyśl o tym ... Czy moje podejście do losowego generowania hasła ma jakiś sens? Czy lepiej byłoby wygenerować 64 losowe bajty i użyć tego jako klucza?
> Myślę, że nadal wygeneruję 256 bitów przy użyciu bezpiecznego RNG ...
Czy router bezprzewodowy i każde urządzenie, które chcesz podłączyć do sieci bezprzewodowej, pozwala ręcznie wprowadzić klucz WPA-PSK w postaci 64 znaków szesnastkowych? Jeśli nie, być może będziesz musiał użyć hasła ASCII, aby móc wprowadzić je na wszystkich swoich urządzeniach.
Z dokumentu RFC2898 cytowanego przez @studiohack - W całym tym dokumencie hasło jest traktowane jako ciąg oktetu o dowolnej długości, którego interpretacja jako ciąg tekstowy jest nieokreślona. W trosce o interoperacyjność zaleca się jednak, aby aplikacje przestrzegały wspólnych reguł kodowania tekstu. ASCII i UTF-8 [27] to dwie możliwości. (ASCII jest podzbiorem UTF-8.)
asveikau,
Wygląda również na to, że OpenBSD, Linux, Windows i Mac OS X obsługują klucze szesnastkowe. Jedynym problemem, jaki napotkałem, jest to, że interfejs Maemo go nie lubi - ale plik XML wspierający konfigurację go obsługuje.
asveikau,
OK, widzę tę część 802.11i-2004, która to mówi. Masz rację.
W przypadku szyfrowania WPA-PSK klucz binarny pochodzi z hasła zgodnie z następującą formułą:
Funkcja PBKDF2 jest znormalizowaną metodą uzyskiwania klucza z hasła. Jest określony w RFC2898 z jasnym wyjaśnieniem, jak go obliczyć. Ta funkcja wymaga podstawowej funkcji pseudolosowej. W przypadku WPA podstawową funkcją jest HMAC-SHA1. SHA1 to funkcja obliczająca 160-bitowy skrót z dowolnej ilości danych wejściowych. Jest to jasno wyjaśnione w RFC3174. HMAC to znormalizowana metoda przekształcania funkcji skrótu kryptograficznego w funkcję uwierzytelniania wiadomości z kluczem. Jest określony w RFC2104.
Podsumowując, proces wyprowadzania klucza obejmuje iterację funkcji HMAC-SHA1 4096 razy, a następnie powtórzenie tej czynności w celu wygenerowania większej liczby bitów klucza. Ilość zastosowanych obliczeń jest równoważna z obliczeniem wartości skrótu SHA1 na poziomie 1 MB danych. Być może to wyjaśnia, dlaczego Javascript na tej stronie jest tak wolny.
Jeśli chodzi o twoje pytanie: Does my approach of randomly generating a passphrase make any sense? Would it be better to just generate 64 random bytes and use that as a key?Każdy z nich byłby bardzo silny, o ile używałbyś wszelkiego rodzaju symboli, liczb i losowych znaków alfabetu w swoim losowym haśle bajtów. Sposób, w jaki na to patrzę: oba (generowane lub losowe) byłyby niemożliwe do odgadnięcia / zhakowania ...
Hm Na podstawie mojego odczytu RFC wydaje się więc, że funkcja PBKDF2 nie zależy od tego, czy jest to drukowalna postać ASCII i powinna dobrze sobie radzić z danymi binarnymi. Myślę, że nadal wygeneruję 256 bitów przy użyciu bezpiecznego RNG ... (Nie jestem jednak pewien, że nie można zgadnąć. Są małe szanse, że w rezultacie wygeneruje to coś, co zderzy się ze słabym
From http://www.xs4all.nl/~rjoris/wpapsk.html - „Obliczanie klucza WPA - Od hasła do klucza szesnastkowego Szczegóły obliczeń”:
Jeśli chodzi o twoje pytanie:
Does my approach of randomly generating a passphrase make any sense? Would it be better to just generate 64 random bytes and use that as a key?
Każdy z nich byłby bardzo silny, o ile używałbyś wszelkiego rodzaju symboli, liczb i losowych znaków alfabetu w swoim losowym haśle bajtów. Sposób, w jaki na to patrzę: oba (generowane lub losowe) byłyby niemożliwe do odgadnięcia / zhakowania ...źródło