Pytanie:
Jak i kiedy używać HMAC?
user5575
2012-09-13 16:22:23 UTC
view on stackexchange narkive permalink

Czytałem HMAC na Wikipedii i byłem zdezorientowany co do kilku punktów.

  1. Gdzie używam HMAC?
  2. Dlaczego kluczowa część skrótu?
  3. Nawet jeśli ktoś z powodzeniem użył „ataku przedłużającego”, w jaki sposób byłoby to przydatne dla atakującego?
Jeśli ktoś jest ciekawy, co chciałem wiedzieć, to hmac to sposób na podpisywanie danych przy użyciu klucza ** symetrycznego **. Dodatkowym atutem jest „Jest to bardziej skomplikowane niż haszowanie wiadomości i klucza razem, co nie jest bezpieczne”.
Mój przyjaciel prowadzi jedną z największych giełd „kryptowalut” na świecie. Jego API wymaga podpisywania przez HMAC wszystkich wywołań API za pomocą prywatnego klucza API użytkownika (będzie to „sekret”, o którym mowa w pytaniu), który zawiera klucz publiczny w hashu. Jest to podstawowy przypadek użycia, jako dodatkowa warstwa bezpieczeństwa dla wywołań API. W świecie kryptowalut jest to jedyna platforma, która nie została jeszcze zhakowana, pomimo milionów prób. HMAC jest przydatny, po prostu upewnij się, że wiesz, jak go używać. Myślałem, że tak, ale nie zapłaciłem i zapłaciłem cenę w postaci niszczycielskiego włamania do API.
użyj tego do debugowania https://8gwifi.org/hmacgen.jsp
Pięć odpowiedzi:
Gilles 'SO- stop being evil'
2012-09-18 06:01:50 UTC
view on stackexchange narkive permalink

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.

uważam to za trochę niejasne i długie, chociaż zdecydowanie się trochę nauczyłem
Czy można udostępniać kod „hmac”?Wydaje mi się to zagmatwane - to hash, ale nie można go udostępniać.
@R11G Nie rozumiem twojego pytania.Zwróć uwagę, że „to jest hash” nie jest użytecznym sposobem zrozumienia HMAC.HMAC to MAC.Fakt, że jest oparty na skrócie, jest szczegółem implementacji.Istnieją inne algorytmy MAC, które mają te same właściwości bezpieczeństwa, ale nie używają wewnętrznie skrótu, na przykład CMAC.
@Gilles Przepraszamy.Chodziło mi o to, że jeśli loguję HMAC w moich dziennikach usług - czy jest to potencjalna luka w zabezpieczeniach?
@R11G To zależy od tego, jaki jest HMAC i do jakiej gwarancji bezpieczeństwa dążysz.Nie możesz wrócić z HMAC do wejścia bez klucza.Nawet z kluczem możesz wrócić tylko zgadując dane wejściowe i sprawdzając je.Jeśli jednak zobaczysz ten sam HMAC dwa razy, wiesz, że musi to być to samo wejście z tym samym kluczem.
Dlaczego „HMAC” nie zapewnia integralności wiadomości?Wikipedia i inne odpowiedzi mówią, że zapewnia integralność wiadomości i myślę, że tak.„Może być używany do jednoczesnej weryfikacji integralności danych i uwierzytelnienia wiadomości, tak jak w przypadku każdego adresu MAC”.--- z Wikipedii
@Rick To subtelność, o której niestety często nie mówi się.Załóżmy, że otrzymałeś wiadomość i przypuszczalny HMAC tej wiadomości z niezaufanego źródła.Obliczasz HMAC wiadomości za pomocą odpowiedniego klucza i widzisz, że poprawny HMAC jest równy domniemanemu HMAC.Co to dowodzi?Dowodzi, że wiadomość została podpisana przez podmiot, który zna tajny klucz, czyli dowodzi autentyczności wiadomości.Ale (chyba że była tylko jedna wiadomość podpisana tym konkretnym kluczem) nie masz możliwości sprawdzenia, którą z podpisanych wiadomości masz.Więc to nie dowodzi uczciwości.[cd.]
@Rick Innym scenariuszem, w którym HMAC udowadnia integralność, jest otrzymanie wartości HMAC z _zaufanego_ źródła, a wiadomość z niezaufanego źródła.W tym przypadku dowodzi to integralności wiadomości.Zwróć uwagę, że w tym scenariuszu hash działałby równie dobrze.
Dave
2014-09-27 06:45:09 UTC
view on stackexchange narkive permalink

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.

Dziękuję Ci.Wydaje mi się, że wyjaśnienie dotyczące "wirowanego obrazu" jest naprawdę pomocne.
(Tak, wiem, że spóźniłem się 5 lat.) Problem pojawia się, gdy Sarah ma kilka twoich zdjęć.Mogłaby ci odesłać niewłaściwy, a ponieważ „klucz” jest powszechny, z radością byś go zaakceptował.Mogą być wymagane dodatkowe kontrole lub zaakceptowane ryzyko.Gilles powyżej opisuje ten problem.
dtoubelis
2015-04-08 21:06:15 UTC
view on stackexchange narkive permalink

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.

Dzięki, próbowałem zrozumieć, w jakich scenariuszach użyjesz HMAC, a nie schematu podpisu cyfrowego z kluczem publicznym, wydaje się, że to świetny przykład dlaczego - nie potrzebujesz PKI
Ważne rozróżnienie między kluczami symetrycznymi i asymetrycznymi
Masz na myśli, że HMAC nie potrzebuje PKI?
@PRVS Tak, dokładnie tak, HMAC nie wymaga PKI.
sudhacker
2012-09-13 18:37:34 UTC
view on stackexchange narkive permalink

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.

+1, ponieważ byłem zdezorientowany, dlaczego po prostu połączyć wiadomość z kluczem i jaką różnicę ma klucz w porównaniu z samym konkatenacją. Chociaż nadal jestem zdezorientowany.
user1187
2012-09-13 16:50:44 UTC
view on stackexchange narkive permalink
  • 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? ”

  • Klucz nie znajduje się„ w ”wiadomości. Klucz jest używany podczas generowania HMAC z wiadomości. Klucz używany do generowania HMACS nie jest żadnym „kluczem publicznym”. To bardziej jak wspólny sekret między dwiema stronami. Możesz sprawdzić metodę uwierzytelniania REST API dla rzeczy AWS, aby lepiej zrozumieć, w jaki sposób HMACS jest używany do podpisywania adresów URL.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...