CRAM-MD5

W kryptografii CRAM-MD5 to mechanizm uwierzytelniania typu wyzwanie-odpowiedź ( CRAM ) oparty na algorytmie HMAC-MD5 . Jako jeden z mechanizmów obsługiwanych przez Simple Authentication and Security Layer (SASL) jest często wykorzystywany w programach pocztowych w ramach Uwierzytelniania SMTP oraz do uwierzytelniania użytkowników POP i IMAP , a także w aplikacjach realizujących LDAP , XMPP , BEEP i inne protokoły.

Gdy takie oprogramowanie wymaga uwierzytelnienia w przypadku połączeń nieszyfrowanych, CRAM-MD5 jest preferowany w stosunku do mechanizmów przesyłających hasła „w sposób jawny”, takich jak LOGIN i PLAIN . Nie może jednak zapobiec uzyskaniu hasła za pomocą ataku siłowego , więc jest mniej skuteczny niż alternatywne mechanizmy, które unikają haseł lub wykorzystują połączenia szyfrowane za pomocą Transport Layer Security (TLS).

Protokół

Protokół CRAM-MD5 obejmuje pojedynczy cykl wyzwania i odpowiedzi i jest inicjowany przez serwer:

  1. Wyzwanie: Serwer wysyła do klienta ciąg znaków zakodowany w base64 . Przed kodowaniem może to być dowolny ciąg losowy, ale standard, który obecnie definiuje CRAM-MD5, mówi, że ma on format wartości nagłówka wiadomości e-mail Message- ID (w tym nawiasy kątowe ) i zawiera dowolny ciąg losowych cyfr, znacznik czasu , oraz w pełni kwalifikowana nazwa domeny serwera .
  2. Odpowiedź: klient odpowiada łańcuchem utworzonym w następujący sposób.
    1. Wyzwanie jest dekodowane przy użyciu algorytmu base64.
    2. Dekodowane wyzwanie jest haszowane przy użyciu HMAC-MD5 , ze wspólnym sekretem (zwykle jest to hasło użytkownika lub jego skrót) jako tajny klucz.
    3. Zaszyfrowane wyzwanie jest konwertowane na ciąg małych cyfr szesnastkowych.
    4. Nazwa użytkownika i znak spacji są poprzedzone cyframi szesnastkowymi.
    5. Konkatenacja jest następnie kodowana w standardzie base64 i wysyłana na serwer
  3. Porównanie: serwer używa tej samej metody do obliczenia oczekiwanej odpowiedzi. Jeśli podana odpowiedź i oczekiwana odpowiedź są zgodne, oznacza to, że uwierzytelnienie powiodło się.

Silne strony

Hash jednokierunkowy i nowe losowe wyzwanie zapewniają trzy rodzaje bezpieczeństwa:

  • Inni nie mogą powielić skrótu bez znajomości hasła. Zapewnia to uwierzytelnianie.
  • Inni nie mogą odtworzyć skrótu — zależy to od nieprzewidywalnego wyzwania. Nazywa się to różnie świeżością lub zapobieganiem powtórkom .
  • Obserwatorzy nie uczą się hasła; to się nazywa tajemnica.

Słabości

  • Brak wzajemnego uwierzytelniania : klient nie weryfikuje serwera. Jednak uwierzytelnianie SASL odbywa się zwykle za pośrednictwem TLS , które weryfikuje tożsamość serwera.
  • Słabe przechowywanie haseł: niektóre implementacje wymagają dostępu do haseł użytkowników w postaci zwykłego tekstu, podczas gdy inne (np. Dovecot ) wykorzystują etap pośredni procesu HMAC do przechowywania skrótu MD5 hasła (ściśle mówiąc o wewnętrznych zmiennych HMAC i_key_pad i o_key_pad) . Takie implementacje wykorzystują to, że do obliczenia md5(coś_z_64_bajtami || coś_else) potrzebne są tylko md5_internal(coś_z_64_bajtami) i coś_else (ze względu na Merkle-Damgård w MD5; md5_internal to md5 bez ostatniego bloku). Ponieważ i_key_pad i o_key_pad znajdują się na początku wewnętrznego i zewnętrznego skrótu HMAC i mają długość 64 bajtów, można to wykorzystać.
  • Zagrożenie odwracalnością: atak słownikowy offline w celu odzyskania hasła jest możliwy po przechwyceniu udanej wymiany protokołu CRAM-MD5 (np. przy użyciu Cain & Abel ). To zagrożenie jest nieuniknione w każdym schemacie mieszania hasła, ale bardziej nowoczesne algorytmy wykorzystują rozciąganie klucza w celu zwiększenia kosztu ataku o współczynnik tysiąca lub więcej. I odwrotnie, skróty CRAM-MD5 można obliczyć przy użyciu bardzo niewielu zasobów obliczeniowych na dedykowanym sprzęcie, a nawet przy użyciu standardowych procesorów .
  • Zdolność proxy: W przeciwieństwie do schematu uzgodnienia klucza uwierzytelnianego hasłem (PAKE), CRAM-MD5 nie ustanawia sekretu współdzielonego między dwoma punktami końcowymi, ale nieznanego podsłuchującemu. Aktywny człowiek pośrodku może zatem otworzyć połączenie z serwerem, otrzymać wyzwanie, zaoferować to wyzwanie klientowi, otrzymać odpowiedź klienta i przekazać tę odpowiedź do serwera. Może teraz usuwać dalsze wiadomości klienta, podszywając się pod klienta na serwerze.

Normy

CRAM-MD5 jest zdefiniowany przez IETF standard-track dokument RFC 2195, który zastępuje RFC 2095, z wcześniejszego roku 1997. Te de facto standardy definiują CRAM-MD5 jako metodę uwierzytelniania dla protokołów POP i IMAP do zarządzania skrzynkami pocztowymi .

CRAM-MD5 to jedna z metod uwierzytelniania obsługiwana przez proste uwierzytelnianie i warstwę zabezpieczeń (SASL), zdefiniowaną w 2006 r. w dokumencie RFC 4422, który zastępuje standard RFC 2222 z 1997 r.

Internet Assigned Numbers Authority (IANA) prowadzi rejestr mechanizmów SASL, w tym CRAM-MD5, do ograniczonego użytku.

CRAM-MD5 jest wymagany dla funkcji On-Demand Mail Relay (ODMR), zdefiniowanej w dokumencie RFC 2645.

Przestarzały

Zalecono wycofanie standardu 20 listopada 2008 r. Jako alternatywę zaleca zamiast tego np. SCRAM lub SASL Plain chroniony przez TLS .

Zobacz też

  1. ^ "funkcja weryfikuj_poświadczenia" . Źródło Dovecot 2.0 . Źródło 23 stycznia 2014 r .
  2. ^ "plik hmac-md5.c" . Źródło Dovecot 2.0 . Źródło 23 stycznia 2014 r .
  3. ^ „Proste uwierzytelnianie i mechanizmy warstwy bezpieczeństwa (SASL)” . Rejestry protokołów . IANA .
  4. ^ Zeilenga <[email protected]>, Kurt. „CRAM-MD5 do historii” . narzędzia.ietf.org . Źródło 2020-12-05 .