Czytałem HMAC na Wikipedii i byłem zdezorientowany co do kilku punktów.
- Gdzie używam HMAC?
- Dlaczego kluczowa część skrótu?
- Nawet jeśli ktoś z powodzeniem użył „ataku przedłużającego”, w jaki sposób byłoby to przydatne dla atakującego?
Czytałem HMAC na Wikipedii i byłem zdezorientowany co do kilku punktów.
kod uwierzytelniania wiadomości (MAC) jest tworzony z wiadomości i tajnego klucza przez algorytm MAC. Ważną właściwością MAC jest to, że niemożliwe jest ¹ utworzenie adresu MAC wiadomości i tajnego klucza bez znajomości tajnego klucza. Adres MAC tej samej wiadomości utworzony przez inny klucz wygląda na niepowiązany. Nawet znajomość MAC innych wiadomości nie pomaga w obliczaniu MAC nowej wiadomości.
HMAC to adres MAC oparty na funkcji skrótu. Podstawową ideą jest połączenie klucza i wiadomości i zhaszowanie ich razem. Ponieważ, biorąc pod uwagę kryptograficzny skrót, nie można dowiedzieć się, co to jest hash, znajomość skrótu (lub nawet zbioru takich skrótów) nie pozwala na znalezienie klucza. Podstawowy pomysł nie do końca działa, po części z powodu ataków z przedłużaniem długości, więc faktyczna konstrukcja HMAC jest trochę bardziej skomplikowana. Aby uzyskać więcej informacji, przejrzyj tag hmac w serwisie Cryptography Stack Exchange, w szczególności Dlaczego H (k || x) nie jest bezpieczną konstrukcją MAC?, Is H ( k || length || x) bezpieczna konstrukcja MAC? i funkcje HMAC vs MAC. Istnieją inne sposoby definiowania MAC, na przykład algorytmy MAC oparte na szyfrach blokowych, takich jak CMAC.
MAC uwierzytelnia wiadomość. Jeśli Alicja widzi wiadomość i adres MAC i zna powiązany tajny klucz, może sprawdzić, czy adres MAC został utworzony przez podmiot, który zna ten klucz, wykonując obliczenia MAC samodzielnie. Dlatego też, jeśli do wiadomości jest dołączony poprawny adres MAC, oznacza to, że wiadomość ta została w pewnym momencie odczytana przez posiadacza tajnego klucza. MAC to podpis oparty na tajnym kluczu, zapewniający podobne gwarancje do schematu podpisu opartego na kryptografii klucza publicznego, takiego jak schematy oparte na RSA, gdzie podpis musiał być wykonany przez głównego zobowiązanego posiadającego klucz prywatny.
Załóżmy na przykład, że Alicja zachowuje swój tajny klucz tylko dla siebie i używa go tylko do obliczania adresów MAC wiadomości, które przechowuje na serwerze w chmurze lub na innym zawodnym nośniku pamięci. Jeśli później odczyta wiadomość i zobaczy poprawny MAC dołączony do niej, wie, że jest to jedna z wiadomości, które przechowała w przeszłości.
Sam HMAC nie zapewnia integralności wiadomości. Może to być jeden ze składników protokołu zapewniającego integralność. Na przykład załóżmy, że Alicja przechowuje kolejne wersje wielu plików na zawodnym nośniku wraz z ich adresami MAC. (Ponownie zakładamy, że tylko Alicja zna tajny klucz.) Jeśli wczyta plik z poprawnym adresem MAC, wie, że odczytała poprzednią wersję jakiegoś pliku, który zapisała. Osoba atakująca, która kontroluje nośnik pamięci, może nadal zwrócić starsze wersje pliku lub inny plik. Jednym z możliwych sposobów zapewnienia integralności pamięci w tym scenariuszu byłoby uwzględnienie nazwy pliku i numeru wersji jako części danych, których MAC jest obliczany; Alicja musiałaby zapamiętać najnowszy numer wersji każdego pliku, aby sprawdzić, czy nie otrzymała nieaktualnych danych. Innym sposobem na zapewnienie integralności byłoby zapamiętanie przez Alicję adresu MAC każdego pliku (ale w tym przypadku równie dobrze sprawdziłby się skrót).
¹ „Niemożliwe”, ponieważ większa moc obliczeniowa niż jest to realistycznie możliwe.
HMAC to obliczona „sygnatura” często wysyłana wraz z niektórymi danymi. HMAC służy do weryfikacji (uwierzytelniania), czy dane nie zostały zmienione lub zastąpione. Oto metafora:
Zamierzasz wysłać do Sarah paczkę zawierającą zdjęcie. Oczekujesz, że otworzy paczkę i obejrzy zdjęcie. W niedalekiej przyszłości spodziewasz się, że odeśle ci paczkę z tym zdjęciem. Ważne jest, aby włożyła to samo zdjęcie z powrotem do opakowania. Musisz mieć absolutną pewność, że nie odeśle ci nawet trochę zmienionego zdjęcia lub nie zastąpi go innym. Masz setki tych paczek wysyłanych codziennie z różnymi zdjęciami; nigdy nie zapamiętałbyś zdjęcia tak szczegółowo, że można by było stwierdzić, czy zmieniła trochę (na przykład odgarnęła mały pryszczek z twarzy).
Oto, co możesz zrobić: zanim wyślij jej paczkę, umieść kolejną kopię zdjęcia w małym zamkniętym pudełku. Zatrzymaj klucz. Umieść małe zamknięte pudełko w paczce wraz z oryginalnym zdjęciem, które jej wysyłasz. Załóżmy, że wie, że nie może wyjmować zamkniętego pudełka z opakowania. Po odebraniu od niej paczki otwórz ją, połóż zdjęcie na stole. Otwórz zamknięte pudełko, wyjmij kopię, porównaj oba. Jeśli są takie same, to nie zmieniła zdjęcia (jest „autentyczne”). Jeśli w paczce nie ma zamkniętego pudełka lub klucz go nie otworzy, załóżmy, że zrobiła coś niecnego i wyrzuć całą paczkę do kosza. Piękno polega na tym, że nie musisz niczego „pamiętać” o tym, co jej pierwotnie wysłałeś; wszystko, czego potrzebujesz, aby zapewnić autentyczność zdjęcia, wróci do opakowania.
W powyższym przykładzie małe zamknięte pudełko reprezentuje HMAC. Twój klucz to klucz HMAC. Zdjęcie to dane, do których stosujesz HMAC.
Powyższe jest metaforą podróży w obie strony, w której tylko Ty masz klucz. Powiedzmy, że w innej sytuacji często wysyłasz paczki do Tommy'ego. Martwisz się, że wścibscy listonosze mogą otwierać paczki i zastępować zdjęcia lub je zmieniać. Robisz to samo z zamkniętym pudełkiem, z wyjątkiem tego przypadku, pozwalasz Tommy'emu mieć kopię klucza, aby po otrzymaniu paczki mógł otworzyć zamknięte pudełko i sam porównać zdjęcia. Jeśli po otrzymaniu zauważy, że zdjęcia różnią się, jego klucz nie otwiera pudełka lub brakuje pudełka, wie, że coś jest podejrzane.
Powyższe metafory opisują, dlaczego HMAC są potrzebne, ale nie tak bardzo, jak one praca. Zmieńmy ponownie metaforę, aby zbliżyć się do tego, jak działają:
Zachowajmy mentalny obraz paczki ze zdjęciem: chcesz ją wysłać, a następnie otrzymać z powrotem, tak jak poprzednio, upewniając się, że zdjęcie zostało nie zmieniane ani wymieniane przez odbiorcę ani podczas podróży w obie strony.
Przed zamknięciem paczki i wysłaniem jej pocztą należy wykonać kopię zdjęcia. Tym razem nie ma zamkniętego pudełka, zamiast tego muskasz kopię miksturą płynnych chemikaliów. Tylko Ty znasz przepis (klucz) na tę miksturę i za każdym razem, gdy pędzisz po kopii, używasz dokładnie tych samych pociągnięć pędzla. Mieszanina będzie wirować i rozmywać kopię zdjęcia w coś przypominającego sztukę współczesną; nazwijmy to HMAC. Nie jesteś do końca pewien, jak będzie wyglądać po wyschnięciu, ale wiesz, że jeśli wyszczotkujesz dwa identyczne zdjęcia z tą samą recepturą i tymi samymi pociągnięciami pędzla, powstałe HMAC będą wyglądać tak samo. Więc umieszczasz wysuszony HMAC w paczce wraz z oryginalnym zdjęciem i wysyłasz do Sarah.
Gdy otrzymasz pakiet z powrotem od Sarah, zawiera on, masz nadzieję, niezmienione oryginalne zdjęcie, wraz z tym, czego oczekujesz, jest HMAC, który utworzyłeś i dołączyłeś do niego. Wyjmij zdjęcie z opakowania, skopiuj je i utwórz kolejny HMAC z tą kopią (zastosuj swoją mieszankę / pociągnięcia pędzlem). Porównaj HMAC, który właśnie utworzyłeś z HMAC, który wrócił w pakiecie. Jeśli są identyczne, możesz być pewien, że Sarah i listonosze nie zmienili zdjęcia.
Gdyby Sarah zmieniła zdjęcie, wówczas HMAC nie będą identyczne. Jeśli Sarah zmieniła HMAC, wtedy HMAC nie będą identyczne. Jeśli Sarah zmieniła zdjęcie i próbowała utworzyć nowy HMAC, wtedy HMAC nie będą identyczne (ona nie zna twojego przepisu).
W ten sposób wiesz, czy zdjęcie (dane) jest autentyczne, czy nie, i właśnie do tego służą HMAC.
Krótka odpowiedź brzmi: „HMAC zapewnia podpisy cyfrowe przy użyciu kluczy symetrycznych zamiast PKI”. Zasadniczo, jeśli nie chcesz zajmować się złożonością kluczy publicznych / prywatnych, katalogu głównego zaufania i łańcuchów certyfikatów, nadal możesz mieć niezawodny podpis cyfrowy z HMAC. HMAC opiera się na kryptografii klucza symetrycznego i wstępnie współdzielonych sekretach zamiast na parach prywatny / publiczny. Wadą jest to samo, co w przypadku ogólnie kryptografii klucza symetrycznego - teraz musisz się martwić o dystrybucję i ochronę swoich tajnych kluczy.
1. Używasz HMAC zawsze, gdy chcesz zachować integralność danych (i ich autentyczność)
2. Klucz jest częścią HMAC, ponieważ jest to wspólny sekret znany tylko 2 stronom i tylko one mogą tworzyć HMAC i nikt inny. (Zapewnia autentyczność”)
3. Ataki przedłużające długość są niemożliwe na HMAC. Z drugiej strony MAC po prostu dołączają klucz do wiadomości, która jest na nią podatna. HMAC został wprowadzony w celu przezwyciężenia tego ataku na komputery MAC.
HMACS są używane, gdy trzeba sprawdzić dwa „integralność” i „autentyczność”. Na przykład: rozważ scenariusz, w którym wysyłany jest fragment danych wraz z hashem - możesz zweryfikować integralność wiadomości, ponownie obliczając hash wiadomości i porównując ją z hashem, który otrzymałeś. Jednak nie wiesz na pewno, czy wiadomość i skrót zostały wysłane przez kogoś, kogo znasz / którym ufasz. Gdybyś uciekł się do korzystania z HMACS, mógłbyś ponownie obliczyć HMAC używając tajnego klucza, który znasz tylko Ty i zaufana strona, i porównać go z HMAC, który właśnie otrzymałeś - w efekcie służąc celowi „autentyczności”.
Jak wspomniałem wcześniej, tajność klucza zapewnia, że HMAC został obliczony przez zaufaną stronę.
HMACS nie są kluczowane skróty. Ataki z rozszerzaniem długości są możliwe, gdy używasz skrótów z kluczem, a nie HMACS. Aby uzyskać więcej informacji, możesz sprawdzić to.
[EDYTUJ]
Odpowiedź zredagowana, aby odpowiedzieć na komentarz poniżej: - „Nadal nie rozumiem, dlaczego klucz znajduje się w wiadomości? Czy nie znam klucza publicznego strony? Jeśli znam klucz publiczny, to dlaczego klucz w wiadomości zamiast ja używam już znanego klucza? Jeśli Nie znam klucza, więc dlaczego miałbym ufać tej stronie? ”