Cryptology Academy · Lekcja

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

Lekcja 1 z 412 kroki

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.

Bezpłatny start

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

  1. Ataki czasowe: wyodrębnianie kluczy z czasu wykonania
  2. Analiza mocy: SPA i DPA
  3. Kanały boczne elektromagnetyczne i akustyczne
  4. Środki zaradcze: maskowanie, zaślepianie i kod o stałym czasie wykonania
← Powrót do Cryptology Academy