Ataki czasowe: wyodrębnianie kluczy z czasu wykonania
Pokazać atak czasowy z wykorzystaniem pamięci podręcznej na implementację, której czas nie jest stały
Ataki czasowe: wyodrębnianie kluczy z czasu wykonania to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Czym jest atak czasowy
Atak czasowy to atak bocznokanałowy, w którym przeciwnik mierzy czas trwania operacji kryptograficznych, aby wywnioskować tajne dane. Nawet różnice rzędu nanosekund mogą ujawnić bity klucza.
Dlaczego czas wykonania ujawnia sekrety
Rozgałęzienia i odwołania do pamięci w kodzie kryptograficznym często zależą od wartości tajnych. Pętla, która kończy się wcześniej po napotkaniu bitu o wartości zero, działa szybciej — atakujący mierzy tę różnicę.
Ataki czasowe z użyciem pamięci podręcznej na AES
Klasyczne odwołania do tablic AES trafiają do linii pamięci podręcznej procesora, których adresy zależą od bajtów klucza. Narzędzia takie jak Flush+Reload pozwalają atakującemu obserwować, do których linii pamięci podręcznej uzyskano dostęp.
Wyrocznia czasowa RSA Bleichenbachera
Atak Bleichenbachera z 1998 roku wykorzystywał różnice czasowe podczas sprawdzania dopełnienia PKCS#1 v1.5. Miliony wybranych szyfrogramów mogły posłużyć do odzyskania 1024-bitowego klucza prywatnego RSA.
Zdalne ataki czasowe
Nawet w sieci różnice czasowe poniżej milisekundy można zmierzyć przy dostatecznej liczbie próbek. Atak Lucky13 wykorzystywał czas obliczania MAC w trybie CBC w TLS przez internet.
Pomiar czasu w Pythonie
Należy używać time.perf_counter_ns(), aby uzyskać rozdzielczość nanosekundową. Aby zademonstrować podatne porównanie:
import time
def vulnerable_compare(a, b):
for x, y in zip(a, b):
if x != y:
return False
return len(a) == len(b)
start = time.perf_counter_ns()
vulnerable_compare(b"secret_key_here", b"wrong_key_xxxxx")
elapsed = time.perf_counter_ns() - start
print(f"Elapsed: {elapsed} ns")Symulacja wyroczni czasowej
Wyrocznia czasowa zwraca informację, czy zgadnięta wartość jest poprawna, a jednocześnie ujawnia czas wykonania. Możemy odzyskać sekret bajt po bajcie, mierząc, które zgadnięcie trwa najdłużej przed zwróceniem False.
Analiza statystyczna danych czasowych
Pojedyncze pomiary są zaszumione. Atakujący zbierają tysiące próbek dla każdego kandydata i używają testów statystycznych (test t, test Welcha), aby odróżnić sygnał od szumu.
Atak Mangera na OAEP
W 2001 roku Manger wykazał, że nawet RSA z dopełnieniem OAEP ujawnia informacje, jeśli implementacja rozróżnia komunikat „pierwszy bajt ma wartość zero” od innych błędów na podstawie różnic w czasie wykonania.
Przykłady z rzeczywistego świata
W OpenSSL, GnuTLS i NSS występowały luki CVE związane z atakami czasowymi. Atak Lucky13 na TLS (CVE-2013-0169) dotyczył praktycznie każdej biblioteki TLS w momencie jego ujawnienia.
Sprawdzenie wiedzy
Jaka technika statystyczna pomaga atakującym odróżnić sygnał czasowy od szumu pomiarowego?
Podsumowanie lekcji
Ataki czasowe wydobywają sekrety kryptograficzne poprzez pomiar różnic w czasie wykonania. Działają lokalnie, wykorzystując pamięć podręczną, lub zdalnie, za pośrednictwem sieci. Analiza statystyczna oddziela sygnał od szumu. Rozwiązaniem jest kod działający w stałym czasie — zostanie omówiony w lekcji o środkach zaradczych.
Ucz się Cryptology Academy dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 67
- Lekcje
- 261
Często zadawane pytania
Czy lekcja „Ataki czasowe: wyodrębnianie kluczy z czasu wykonania” jest bezpłatna?
Tak — pełny tekst „Ataki czasowe: wyodrębnianie kluczy z czasu wykonania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ataki czasowe: wyodrębnianie kluczy z czasu wykonania”?
Pokazać atak czasowy z wykorzystaniem pamięci podręcznej na implementację, której czas nie jest stały Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Ataki czasowe: wyodrębnianie kluczy z czasu wykonania”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Ataki czasowe: wyodrębnianie kluczy z czasu wykonania
- Analiza mocy: SPA i DPA
- Kanały boczne elektromagnetyczne i akustyczne
- Środki zaradcze: maskowanie, zaślepianie i kod o stałym czasie wykonania