Итак, предположим, что вы делаете это локально (чтобы не было сетевого шума) и также знаете точную специфику своего процессора.
Хорошо. Это правдоподобная модель атаки, например, если злоумышленник запускает рекламу JavaScript в вашем браузере или имеет совмещенную виртуальную машину в том же облаке.
Возможно ли определить закрытый ключ (имея доступ к открытому ключу), сгенерированный libsodium, исходя из времени, необходимого для создания пары ключей?
Либсодиум использует Кривая25519 клавиши эллиптической кривой. Закрытый ключ Curve25519 представляет собой случайную битовую строку определенной длины. (Он расширен до строки байтов, в которой определенные биты имеют фиксированные значения, но это не добавляет побочный канал синхронизации.) Таким образом, процесс генерации закрытого ключа тривиален. Единственный правдоподобный побочный канал находится в самом генераторе случайных чисел.
Некоторые алгоритмы генерации случайных чисел используют примитивы, чувствительные к временным боковым каналам. В частности, CTR_DRBG полагается на AES, который уязвим для атак синхронизации кэша, если реализован в программном обеспечении наивным быстрым способом. CTR_DRBG очень часто меняет ключ AES, что делает его несколько менее уязвимым, чем в сценариях, когда злоумышленник может наблюдать за шифрованием с тем же ключом AES. Однако, такая атака может быть практичной, по крайней мере в идеальных условиях.
С другими популярными алгоритмами DRBG (например, Hash_DRBG или HMAC_DRBG), с реализацией AES, не основанной на таблицах (например,с использованием аппаратного ускорения, такого как AES-NI, или с использованием побитовой нарезки в программном обеспечении), или если DRBG достаточно часто считывает энтропию (что возможно на современном оборудовании с выделенным TRNG, таким как RDRAND на процессорах Intel или эквивалент на различных смартфонах). процессоры), атаки по времени на ГСЧ не вызывают беспокойства.
Что может быть более уязвимым, так это вычисление открытого ключа из закрытого ключа. Curve25519 позволяет относительно легко реализовать арифметику без временных побочных каналов, но это не данность.
А как насчет других алгоритмов, насколько это вообще возможно?
Для эллиптических кривых Вейерштрасса и Диффи-Хеллмана с конечным полем закрытый ключ представляет собой число между $2$ и $P-2$. Помимо атак RNG, как обсуждалось ранее, естественная реализация процесса генерации ключей не подвержена атакам по времени. Однако вычисление открытого ключа является уязвимы для атак по времени, если реализованы без мер предосторожности.
При использовании RSA генерация ключа представляет собой сложный процесс, включающий проверку (псевдо) простоты и некоторые дополнительные арифметические действия, потенциально уязвимые для атак по времени. В частности, на практике оказывается, что шаг, который наиболее подвержен утечке, - это расчет НОД сделано, чтобы проверить это $p-1$ и $q-1$ взаимно просты с общественным показателем.