Uwierzytelnianie typu wyzwanie-odpowiedź
W bezpieczeństwie komputerowym uwierzytelnianie typu wyzwanie-odpowiedź to rodzina protokołów, w których jedna strona przedstawia pytanie („wyzwanie”), a druga strona musi podać prawidłową odpowiedź („odpowiedź”) w celu uwierzytelnienia .
Najprostszym przykładem protokołu wyzwanie-odpowiedź jest uwierzytelnianie za pomocą hasła , w którym wyzwanie polega na zapytaniu o hasło, a prawidłową odpowiedzią jest prawidłowe hasło.
Przeciwnik, który może podsłuchiwać uwierzytelnianie hasła, może następnie uwierzytelnić się, ponownie wykorzystując przechwycone hasło. Jednym z rozwiązań jest nadawanie wielu haseł, z których każde jest oznaczone identyfikatorem. Weryfikator może następnie przedstawić identyfikator, a weryfikator musi odpowiedzieć poprawnym hasłem dla tego identyfikatora. Zakładając, że hasła są wybierane niezależnie, przeciwnik, który przechwyci jedną parę wiadomości wyzwanie-odpowiedź, nie ma wskazówek, które mogłyby pomóc w innym wyzwaniu w innym czasie.
Na przykład, gdy inne metody zabezpieczenia komunikacji są niedostępne, wojsko USA używa szyfru numerycznego AKAC-1553 TRIAD do uwierzytelniania i szyfrowania niektórych połączeń. TRIAD zawiera listę trzyliterowych kodów wyzwań, z których weryfikator ma wybrać losowo, oraz losowe trzyliterowe odpowiedzi na nie. Dla dodatkowego bezpieczeństwa każdy zestaw kodów jest ważny tylko przez określony czas, który zwykle wynosi 24 godziny.
Bardziej interesująca technika typu wyzwanie-odpowiedź działa w następujący sposób. Powiedzmy że Bob kontroluje dostęp do jakiegoś zasobu. Alice przychodzi, szukając wejścia. Bob rzuca wyzwanie, być może „52w72y”. Alicja musi odpowiedzieć jednym ciągiem znaków, który „pasuje” do wyzwania wystosowanego przez Boba. „Dopasowanie” jest określane przez algorytm uzgodniony przez Boba i Alicję. (Prawidłowa odpowiedź może być tak prosta, jak „63x83z”, przy czym algorytm zmienia każdy znak wyzwania za pomocą szyfru Cezara ). W prawdziwym świecie algorytm byłby znacznie bardziej złożony.) Bob za każdym razem stawia inne wyzwanie, a zatem znajomość poprzedniej poprawnej odpowiedzi (nawet jeśli nie jest „ukryta” za pomocą środków komunikacji używanych między Alicją a Bobem) jest Bezużyteczne.
Inne protokoły niekryptograficzne
Protokoły typu wyzwanie-odpowiedź są również używane do potwierdzania rzeczy innych niż wiedza o tajnej wartości. CAPTCHA to na przykład wariant testu Turinga , którego celem jest określenie, czy przeglądający aplikację internetową lub mobilną jest prawdziwą osobą. We wczesnych CAPTCHA wyzwaniem wysyłanym do widza był zniekształcony obraz jakiegoś tekstu, a widz odpowiadał, wpisując ten tekst. Zniekształcenie zostało zaprojektowane tak, aby utrudnić automatyczne optyczne rozpoznawanie znaków (OCR) i uniemożliwić programowi komputerowemu przejście jako człowieka. Jednak dzięki postępom w OCR, CAPTCHA są obecnie częściej oparte na wyzwaniach związanych z wykrywaniem obiektów.
Techniki kryptograficzne
Uwierzytelnianie niekryptograficzne było na ogół wystarczające w czasach przed Internetem , kiedy użytkownik mógł być pewien, że system proszący o podanie hasła był rzeczywiście systemem, do którego próbowali uzyskać dostęp, i że prawdopodobnie nikt nie podsłuchiwał kanału komunikacyjnego w celu obserwuj wprowadzane hasło. Aby rozwiązać problem niezabezpieczonych kanałów, konieczne jest bardziej wyrafinowane podejście. Wiele rozwiązań kryptograficznych obejmuje uwierzytelnianie dwukierunkowe , w którym zarówno użytkownik, jak i system muszą wzajemnie przekonać się, że znają wspólny sekret (hasło), przy czym ten sekret nigdy nie jest przesyłany w sposób jawny przez kanał komunikacyjny, w którym osoby podsłuchujące mogą być przyczajony.
Jednym ze sposobów na to jest użycie hasła jako klucza szyfrującego do przesłania losowo wygenerowanych informacji jako wyzwania , po czym drugi koniec musi zwrócić jako odpowiedź podobnie zaszyfrowaną wartość, która jest pewną z góry określoną funkcją pierwotnie oferowanej informacji, udowadniając w ten sposób, że był w stanie odszyfrować wyzwanie. Na przykład w Kerberos wyzwaniem jest zaszyfrowana liczba całkowita N , podczas gdy odpowiedzią jest zaszyfrowana liczba całkowita N + 1 , co dowodzi, że drugi koniec był w stanie odszyfrować liczbę całkowitą N . Funkcję skrótu można również zastosować do hasła i losowej wartości wyzwania, aby utworzyć wartość odpowiedzi. Inna odmiana wykorzystuje model probabilistyczny, aby zapewnić losowe wyzwania uwarunkowane danymi wejściowymi modelu.
Takie zaszyfrowane lub zaszyfrowane wymiany nie ujawniają bezpośrednio podsłuchującemu hasła. Mogą jednak dostarczyć wystarczającej ilości informacji, aby podsłuchujący mógł wywnioskować, jakie jest hasło, używając ataku słownikowego lub ataku siłowego . Wykorzystanie informacji generowanych losowo na każdej wymianie (i gdzie odpowiedź różni się od wyzwania) chroni przed możliwością ataku replay , w którym złośliwy pośrednik po prostu rejestruje wymieniane dane i retransmituje je w późniejszym czasie, aby oszukać kończy się myśleniem, że uwierzytelnił nową próbę połączenia od drugiej strony.
Protokoły uwierzytelniania zwykle wykorzystują kryptograficzny identyfikator jednorazowy jako wyzwanie, aby zapewnić, że każda sekwencja wyzwanie-odpowiedź jest niepowtarzalna. Chroni to przed podsłuchiwaniem z późniejszym atakiem powtórkowym . Jeśli implementacja prawdziwej wartości jednorazowej jest niepraktyczna, silny, bezpieczny kryptograficznie generator liczb pseudolosowych i kryptograficzna funkcja skrótu mogą generować wyzwania, których wystąpienie więcej niż raz jest wysoce nieprawdopodobne. Czasami ważne jest, aby nie używać jednostek jednorazowych opartych na czasie, ponieważ mogą one osłabić serwery w różnych strefach czasowych i serwery z niedokładnymi zegarami. Może być również ważne, aby używać jednostek jednorazowych opartych na czasie i zsynchronizowanych zegarów, jeśli aplikacja jest podatna na atak z opóźnionym komunikatem. Ten atak ma miejsce, gdy atakujący kopiuje transmisję, jednocześnie blokując jej dotarcie do miejsca docelowego, umożliwiając jej ponowne odtworzenie przechwyconej transmisji po wybranym przez siebie opóźnieniu. Można to łatwo osiągnąć na kanałach bezprzewodowych. Wartość jednorazowa oparta na czasie może zostać wykorzystana do ograniczenia atakującemu do ponownego wysłania wiadomości, ale ograniczona przez czas wygaśnięcia być może krótszy niż jedna sekunda, prawdopodobnie nie mający wpływu na aplikację, a tym samym łagodzący atak.
Wzajemne uwierzytelnianie odbywa się za pomocą uzgadniania typu wyzwanie-odpowiedź w obu kierunkach; serwer zapewnia, że klient zna sekret, a klient również , że serwer zna sekret, co chroni przed nieuczciwym serwerem podszywającym się pod prawdziwy serwer.
Uwierzytelnianie typu wyzwanie-odpowiedź może pomóc rozwiązać problem wymiany kluczy sesyjnych do szyfrowania. Korzystając z funkcji wyprowadzania klucza , wartość wyzwania i sekret mogą zostać połączone w celu wygenerowania nieprzewidywalnego klucza szyfrowania dla sesji. Jest to szczególnie skuteczne w przypadku ataku typu man-in-the-middle, ponieważ osoba atakująca nie będzie w stanie uzyskać klucza sesyjnego z wyzwania bez znajomości sekretu, a zatem nie będzie w stanie odszyfrować strumienia danych.
Prosta przykładowa sekwencja wzajemnego uwierzytelniania
- do klienta unikalną wartość wyzwania sc
- do serwera unikalną wartość wyzwania cc
- Serwer oblicza sr = hash(cc + secret) i wysyła do klienta
- Klient oblicza cr = hash(sc + secret) i wysyła do serwera
- Serwer oblicza oczekiwaną wartość cr i upewnia się, że klient odpowiedział poprawnie
- Klient oblicza oczekiwaną wartość sr i upewnia się, że serwer odpowiedział poprawnie
Gdzie
- sc to wyzwanie generowane przez serwer
- cc to wyzwanie generowane przez klienta
- cr to odpowiedź klienta
- sr to odpowiedź serwera
Przechowywanie hasła
Aby uniknąć przechowywania haseł, niektóre systemy operacyjne (np. typu Unix ) przechowują skrót hasła zamiast samego hasła. Podczas uwierzytelniania system musi tylko sprawdzić, czy skrót wprowadzonego hasła jest zgodny z haszem przechowywanym w bazie haseł. Utrudnia to intruzowi zdobycie haseł, ponieważ samo hasło nie jest przechowywane i bardzo trudno jest ustalić hasło pasujące do danego skrótu. Stanowi to jednak problem dla wielu (ale nie wszystkich) algorytmów typu wyzwanie-odpowiedź, które wymagają, aby zarówno klient, jak i serwer mieli wspólny sekret. Ponieważ samo hasło nie jest przechowywane, algorytm typu wyzwanie-odpowiedź zwykle będzie musiał użyć skrótu hasła jako sekretu zamiast samego hasła. W takim przypadku intruz może użyć rzeczywistego skrótu zamiast hasła, co sprawia, że przechowywane skróty są tak samo wrażliwe jak rzeczywiste hasła. SCRAM to algorytm typu wyzwanie-odpowiedź, który pozwala uniknąć tego problemu.
Przykłady
Przykładami bardziej wyrafinowanych algorytmów typu wyzwanie-odpowiedź są:
- ochrony hasłem i uzgadniania kluczy bez wiedzy (takie jak bezpieczne hasło zdalne (SRP) )
- Protokół uwierzytelniania Challenge-Handshake (CHAP) ( RFC 1994 )
- CRAM-MD5 , OCRA: Algorytm wyzwanie-odpowiedź pod przysięgą ( RFC 6287 )
- Mechanizm uwierzytelniania odpowiedzi na wyzwanie solone (SCRAM) ( RFC 5802 )
- system challenge-response ssh oparty na RSA .
Niektórzy uważają CAPTCHA za rodzaj uwierzytelniania typu wyzwanie-odpowiedź, które blokuje roboty spamujące .
Zobacz też
- Protokół uwierzytelniania typu challenge-handshake
- Filtrowanie spamu typu wyzwanie-odpowiedź
- CRAM-MD5
- Kryptograficzna funkcja skrótu
- Nonce kryptograficzne
- Kerberos
- Protokół Otway-Rees
- Protokół Needhama-Schroedera
- Protokół Wide Mouth Frog
- Umowa klucza uwierzytelniana hasłem
- Mechanizm uwierzytelniania odpowiedzi na wyzwanie solone
- SQRL
- Protokół ograniczający odległość
- Atak odbicia
- Powtórz atak
- Atak typu man-in-the-middle
- WebUwierzytelnianie