Иванов Разрушаюсчие программные воздействия 2011
.pdfРис. 2.7. Схема зараженного алгоритма генерации ключей RSA-HSE
51
(δ|t :δ|k/4: ε):= πβ-1(e)
Вычисление δ с помощью атаки БДФ
Разложение
на множители модуля n
Рис. 2.8. Схема алгоритма атаки на RSA-HSE
По времени работы данный алгоритм генерации ключевой информации практически не отличается от стандартного алгоритма генерации ключей RSA.
Сокрытие простого множителя в модуле. Рассмотрим пер-
вый алгоритм данного типа — RSA – HWPF1(n) (Hidden Whole Prime Factor (n) – сокрытие всего простого множителя в модуле). Это сильная версия клептографической атаки на RSA, предложенная Юнгом и Янгом. Суть данного алгоритма в том, что в начале генерируется простой множитель p, который затем трижды шифруется различными способами ((E, N) – открытый ключ разработчика, (D, N) – закрытый ключ разработчика, K – секретный ключ разработчика, B1, B2 – целые положительные числа). В качестве модуля n берется число, старшие биты которого совпадают с зашифрованным множителем p. Далее вычисляется значение простого множителя q так, чтобы при умножении на p получался бы модуль n.
Схема модифицированного алгоритма генерации ключевой информации RSA – HWPF1(n) представлена на рис. 2.9.
Для того чтобы восстановить простой множитель p из модуля n, сначала извлекаются зафиксированные в модуле k бит, кото-
52
рые затем дважды расшифровываются с помощью секретного ключа разработчика K и единожды с помощью закрытого ключа (D, N). Схема алгоритма атаки на RSA – HWPF1(n) представлена на рис. 2.10.
В следующей версии клептографической атаки на RSA того же типа приведенный алгоритм был модифицирован для увеличения производительности. Изначально алгоритм требовал нескольких итераций для генерации простых множителей, однако это длительная процедура, и поэтому время работы алгоритма значительно больше, чем в стандартном алгоритме генерации ключевой информации RSA.
Скорость работы можно увеличить, если уменьшить количество бит зашифрованного первого множителя, сохраняемых в модуле n. Таким образом, облегчается задача подбора второго множителя.
Сначала необходимо сформировать случайное число s определенного размера (например, 512 бит). Затем с помощью односторонней хеш-функции вычислить первый множитель p = H(s), в случае если он окажется не простым, необходимо s сгенерировать заново. С помощью открытого ключа разработчика (E, N) шифруется число s: r = sE mod N. Число r (или часть его битов) фиксирует старшую часть битов n. Далее необходимо подобрать такое значение второго множителя q, чтобы при умножении на p получалось бы n с зафиксированными старшими битами. Далее открытая и секретная экспоненты формируются стандартным образом.
53
Формирование простого p, |p| = k, i := 0
p' := FY(p), Y = K + i
нет
i < B1?
да
нет
|p'| < k?
да
p'' := (p’)E mod N, |N| = k |
|
i := i + 1 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
j := 0
p''' := GX(p''), X = K + j, |p'''| = k
нет
j < B2?
да
r := (p''' : RND), |RND| = k
q := [r/p] |
|
q простое? |
нет |
|
|
да |
|
n := pq, |n| = 2k |
j := j + 1 |
φ(n) := (p - 1)(q - 1) |
|
Формирование e |
|
НОД(e, φ(n)) = 1? |
нет |
да |
|
d := e-1mod φ(n) |
|
FY(p) – односторонняя функция с секретом, K – ключ разработчика
GX(p’’) – односторонняя функция с секретом, K – ключ разработчика
(p''' : RND) - конкатенация p''' со случайным числом RND размерности k
[r/p] – целая часть от деления r на p
Рис. 2.9. Cхема зараженного алгоритма генерации ключей RSA – HWPF1(n)
54
p''' := (n|k)
p'' := GX-1(p'''), X = K + j, 0 ≤ j < B2
p' := (p'')D mod N
p := FY-1(p'), Y = K + i, 0 ≤ i < B1
q = n/p
Рис. 2.10. Cхема алгоритма атаки на RSA – HWPF1(n)
Схема второго варианта алгоритма генерации ключевой информации RSA – HWPF2(n) представлена на рис. 2.11.
Для доступа к секретному ключу пользователя разработчик извлекает из модуля зафиксированные там биты r, расшифровывает их и вычисляет p = H(s). Если же не все биты r фиксируют старшую часть модуля, необходимо перебрать неизвестные биты до тех пор, пока s = rD mod N не будет давать значение p = H(s), которое является делителем модуля n, где (D, N) – секретный ключ разработчика.
Схема алгоритма атаки на RSA – HWPF2(n) представлена на рис. 2.12.
Следующий алгоритм RSA – HPF (Hidden Prime Factor – со-
крытие простого множителя) – наиболее сильная версия из всех представленных здесь зараженных алгоритмов. Алгоритм основывается на атаке Копперсмита, с помощью которой можно раз-
55
ложить на множители модуль n, если известна небольшая часть битов одного из множителей.
Теорема 3. Теорема Копперсмита.
----------------------------------------------------------------------------------
Пусть n = pq, где |n| = k, тогда, если известно k/4 младших или старших битов p, n можно эффективно разложить на множители.
----------------------------------------------------------------------------------
Главная идея этого алгоритма в том, чтобы скрыть часть битов простого множителя p в представлении модуля n (n|3k/8|k/41 представляют собой зашифрованные pk/4). Впоследствии, получив эти биты секретным способом, можно разложить модуль n на множители, используя атаку Копперсмита.
Схема алгоритма атаки на RSA-HPF представлена на рис. 2.13. Для того чтобы получить секретный ключ, нужно извлечь из
модуля |
n зафиксированные биты (n|3k/8|k/4), вычислить |
pk/4 := |
πβ -1(n|3k/8|k/4) и с помощью атаки Копперсмита модуль n |
разложить на множители p и q.
Схема алгоритма атаки на RSA-HPF представлена на рис. 2.14.
В |
отличие от |
предыдущих алгоритмов, функция вида |
πβ (x) |
= x xor 2 β||x| |
не безопасна для этой схемы. После получе- |
ния двух пар множителей (p, q) и (p’, q’) несложно проверить: (n’ xor n)|3k/8|k/4 = (p’ xor p)|k/4.
Подходящие шифрующие функции разработчика для этой схемы выглядят следующим образом:
|
|
|
|
|
−1 |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||||
π |
(x)= x xor (2μ) |
|
|
|
modβ или |
|||||||
β,μ |
|
|
|
x |
|
|
|
|
|
|
|
|
π |
(x)= (x−1 modβ)xor |
(2μ) |
|
|
|
β |
|
, |
||||
|
|
|
||||||||||
|
|
|||||||||||
β,μ |
|
|
|
|
|
|
|
|
|
|
|
|
где β, μ – секретные параметры, |
такие что | β| [max|n|, |
|||||||||||
2max|n|], | μ| [max |n|1/2, |
2max |n|1/2]. |
|
|
|
|
1 Из старших 3k/8 разрядов n берутся k/4 младших разрядов. 56
Формирование s |
p := H(s) |
нет |
p – простое? |
да |
r := pE mod N |
Вычисление (q, c) |
|
из (r : RND) = pq + с |
|
N := pq, |n| = k |
|
φ(n) := (p - 1)(q - 1) |
|
Формирование e, |e| ≤ k |
|
НОД(e, φ(n)) = 1? |
нет |
|
|
да |
|
d := e-1mod φ(n) |
|
H(s) – хеш-функция
(E, N) - открытый ключ разработчика
(r : RND) – конкатенация r cо случайным числом RND. q должно быть простым
Рис. 2.11. Схема зараженного алгоритма генерации ключей RSA – HWPF2(n)
57
Рис. 2.12. Схема алгоритма атаки на RSA – HWPF2(n)
Время генерации ключей в этом алгоритме приблизительно такое же, как в оригинальном алгоритме RSA.
2.3. Необнаруживаемое восстановление секретного ключа для алгоритма цифровой электронной подписи ECDSA
ECDSA (Elliptic Curve Digital Signature Algorithm) – алгоритм с открытым ключом для создания электронной цифровой подписи на основе эллиптических кривых [37, 51, 63, 64].
Для формирования подписи задаются характеристики (q, F) поля GF(2q), в котором ведутся вычисления, параметры (a, b) используемой эллиптической кривой и ее порядок n. Должна быть известна базовая точка кривой G. Подписывающая сторона А должна обладать секретным ключом dA (случайным числом в диапазоне [1, n − 1]), а также открытым ключом QA = dAG. Схема алгоритма формирования подписи (r, s) от сообщения m по стандарту ECDSA показана на рис. 2.15.
58
Формирование e |
Формирование |
простого p |
нет |
НОД(e, p – 1) = 1? |
да |
Формирование |
простого q’ |
|
n’ := pq’, |n’| = k |
|
|
n := (n’|k/8 : πβ (pk/4) : n’|5/8k) |
|
|
q := [n/p] + (1 ± 1)/2, |
|
|
q - нечетное число |
|
|
НОД(e, q - 1) > 1, |
нет |
|
|
|
|
q – составное число? |
|
|
да |
|
|
Формирование |
|
|
четного m, |m| = k/8 |
|
|
q := q xor m, n := pq |
|
да |
НОД(e, q - 1) > 1, |
|
|
|
|
|
q – составное число? |
|
|
нет |
|
|
d := e-1mod φ(n) |
|
e – некоторая открытая экспонента (3, 17, 65537...),
для которой должно быть найдено соответствующее n
[n/p] – целая часть от деления n на p
Рис. 2.13. Схема зараженного алгоритма генерации ключей RSA-HPF
59
Рис. 2.14. Схема алгоритма атаки на RSA-HPF
Схема алгоритма проверки подписи с использованием открытого ключа QA показан на рис. 2.16.
Для того чтобы вычислить секретный ключ злоумышленнику достаточно знать число k, сформированное при генерации цифровой подписи. Простейшим способом доступа к числу k является замена генератора случайных чисел на генератор ПСЧ.
В этом случае для восстановления секретного ключа владельца устройства (например, смарт-карты) злоумышленнику потребуется повторять формирование гаммы до тех пор, пока не будет получено число ki', удовлетворяющее условию
r' = r, где r' = x1' mod n, а (x1', y1') = ki'G.
60