
Атаки по времени представляют собой сложную категорию побочных атак, которые могут раскрыть конфиденциальную информацию на основе времени, которое система тратит на обработку определенных входных данных. По мере развития криптографической защиты, особенно с приближающейся угрозой со стороны квантовых компьютеров, атаки по времени привлекают внимание как один из наиболее мощных инструментов для получения ранее утекшей информации или даже обхода шифрования. В этой исчерпывающей статье мы начнем с уровня новичка, чтобы понять атаки по времени, перейдем к их продвинутому использованию и влиянию — особенно касательно постквантовой криптографии — и предложим практические примеры, образцы кода и лучшие практики в области кибербезопасности.
Атака по времени — это вид побочной атаки, при которой злоумышленник измеряет точную длительность вычислений на системе для получения конфиденциальных данных. Эти атаки используют детали реализации, которые по неосторожности утечкают информацию через наблюдаемые различия во времени выполнения.
if выражения) зависят от секретных данных.Атаки по времени обычно включают следующие шаги:
Рассмотрим (плохую) реализацию проверки пароля:
int check_password(const char *input, const char *correct) {
while (*correct && *input && *input == *correct) {
input++;
correct++;
}
return *correct == 0 && *input == 0;
}
Эта функция прекращает проверку, как только находит несовпадение. Злоумышленник может измерить, сколько времени функция занимает для разных угадываний, и поочередно выведать символы пароля.
Основополагающая работа по атакам по времени была выполнена Полом Кочером в 1996 году, демонстрируя практические атаки на ключи дешифрования RSA только по времени выполнения операций. С тех пор практически все крупные криптографические библиотеки проверяют свои рутины на предмет утечек, зависящих от времени.
В 2013 году Флориан Вейм и Адам Лэнгли задокументировали уязвимости по времени в различных реализациях TLS, позволяющие атакам извлекать сессионные куки.
Некоторые реализации Bitcoin-кошельков утекали различия во времени при проверке seeds кошельков, что могло привести к краже средств пользователей.
Современные криптосистемы пытаются уменьшить риск побочных каналов, но тонкости реализации изобилуют:
Облачные вычисления и совместное аппаратное обеспечение усложняют ситуацию: соседи-злоумышленники могут измерять операции через кэши ЦПУ, считая секреты из соседних задач.
Сегодняшние криптосистемы с открытым ключом (RSA, эллиптическая кривая, DH) находятся под угрозой квантовых алгоритмов (Шора, Гровера). Национальный институт стандартов и технологий (NIST) сертифицирует "постквантовые" криптосистемы, такие как Kyber, Dilithium и Saber, для замены алгоритмов, небезопасных для квантовых вычислений.
Постквантовые алгоритмы часто вводят более сложные структуры (многочлены, решетки, случайные выборки) с неравномерными вычислительными профилями. Это может создать новые утечки времени.
"Атаки по времени позволяют злоумышленникам получить ранний доступ, собирая утекшую информацию на основе временных изменений."
— Sectigo.com
Kyber является основанным на решетках механизмом инкапсуляции ключа (KEM), стандартизированным NIST для защиты на будущее. В отличие от классических алгоритмов, его ядро вычисляет многочлены и выборки случайных чисел, добавляя алгоритмическую сложность.
В недавнем анализе компании CyberArk показано, как некорректные реализации могут утекать биты секретного ключа:
Предположим, у нас есть криптографическая служба, работающая локально на порту 12345. Мы хотим измерить время ответа для определенной операции и проанализировать возможные утечки времени.
#!/bin/bash
host=localhost
port=12345
input="test_data"
runs=1000
for i in $(seq 1 $runs); do
START=$(date +%s%N)
echo -n "$input" | nc $host $port > /dev/null
END=$(date +%s%N)
DURATION=$((($END - $START)/1000)) # микросекунды
echo $DURATION
done > timings.txt
import numpy as np
import matplotlib.pyplot as plt
timings = np.loadtxt('timings.txt')
print(f"Среднее время ответа: {timings.mean()} μs")
print(f"Стандартное отклонение: {timings.std()} μs")
plt.hist(timings, bins=50)
plt.title("Распределение времени")
plt.xlabel("Микросекунды")
plt.ylabel("Частота")
plt.show()
Попробуйте изменить input (предположительный пароль) и построить график зависимости времени от значения предположения. Сильные корреляции могут указывать на утечки времени.
При написании кода безопасности уменьшите или устраните изменения времени выполнения, зависящие от данных. Большинство современных библиотек безопасности предлагают примитивы с постоянным временем для общих операций.
Пример на C: сравнение с постоянным временем
int constant_time_compare(const unsigned char *a, const unsigned char *b, int len) {
unsigned char result = 0;
for (int i = 0; i < len; i++) {
result |= a[i] ^ b[i];
}
return result == 0;
}
Пример на Python: сравнение с постоянным временем
import hmac
def secure_compare(a, b):
return hmac.compare_digest(a, b)
В системах с устаревшим оборудованием иногда вводятся случайные задержки, чтобы скрыть время выполнения операций. ПРИМЕЧАНИЕ: Это обычно не рекомендуется, так как просто добавляет шум, но не устраняет уязвимость.
Пример на Python: добавление случайной задержки
import time
import random
def operation_with_jitter(op, *args, **kwargs):
start = time.perf_counter()
result = op(*args, **kwargs)
delay = random.uniform(0, 0.005) # до 5 миллисекунд
time.sleep(delay)
return result
В статье ACM 2024 года исследуются временные и энергетические издержки побочных каналов в квантовой оперативной памяти (QRAM). По мере того, как квантовые компьютеры становятся реальностью, не только классические реализации, но и квантовые схемы могут утекать данные через побочные каналы.
Это расширяет поверхность атаки: даже в полностью квантовом режиме злоумышленники все еще могут "подслушивать по бокам".
Несмотря на продвижение криптографических технологий, атаки по времени остаются постоянной угрозой в области кибербезопасности, часто эксплуатируя невнимательные ошибки реализации, а не математические слабости алгоритмов. Квантовое будущее увеличивает эту угрозу: новые криптосистемы вводят новые риски по времени, и исследования в области побочных атак на классические и квантовые алгоритмы ведутся активно. Понимая, тестируя и защищаясь от утечек времени, специалисты по безопасности могут помочь обеспечить надежность этих систем в будущем.
Авторские права 2024 – Для образовательного использования. Всегда используйте этические практики и получайте разрешение перед проведением каких-либо тестов безопасности.
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.