Операции поддержки алгоритмов шифрования с открытым

advertisement
Операции поддержки алгоритмов
шифрования с открытым ключом
и их реализация
в микропроцессоре «Эльбрус»
Выполнил: Скрябин Иван, 513
Научный руководитель: Сахин Ю.Х.
Постановка задачи
Развитие интернета и электронной коммерции вынуждает производителей
микропроцессоров внедрять аппаратную поддержку алгоритмов шифрования:
 Intel (Westmere), AMD (Bulldozer)
- AES
 VIA Padlock Security Engine
- AES, SHA-1, SHA-256
- Умножение Монтгомери (поддержка шифров с открытым ключом)
 SPARC T3 (Криптографический ускоритель в каждом из 16 ядер)
- DES, AES, Kasumi, MD5, SHA-1, SHA-256, SHA-512
- Modular Arithmetic Unit (поддержка шифров с открытым ключом)
ЗАДАЧА: Предложить решение по аппаратной поддержке
алгоритмов шифрования с открытым ключом
в микропроцессорах «Эльбрус»
Два типа алгоритмов шифрования
 Шифры с секретным ключом
Encrypt
Decrypt
Bob
Alice

Многочисленное повторение одного и того же набора простых операций (раундов) над
блоками данных 128 / 64 / 256 бит

Большое разнообразие шифров – сложно выделить общие операции, эффективней
реализовывать конкретные алгоритмы
 Шифры с открытым ключом
Encrypt
Decrypt
Bob
Alice

Сложные операции (умножение по модулю) над очень большими числами (192 – 3072 бит)

В основе – операции умножения и возведения в степень по модулю
Операции в шифрах с открытым ключом
RSA
(1024 – 3072 бит)
Генерация ключей:
• Выбор простых p, q. φ = (p-1) * (q-1)
• N = p * q (1024 – 3072 бита)
• Выбор e, взаимно простого с φ
• Вычисление d = e-1 mod φ
(N, e) – открытый, (p, q, d) – секретный ключ
Шифрование сообщения m (m < N)
c = me mod N
Расшифровка:
m = cd mod N
Основные операции (A, B, M: 1024 - 3072 бит)


A*B mod M
AB mod M
ECDSA
(192 – 512 бит)
Операции над точками (x, y) эллипт. кривой
y2 = x3 + a*x + b
mod q
Базовая точка P порядка n (n*P=0)
Q=d*P : Q – открытый, d – секретный ключ
Проверка подписи (r, s) сообщения m
• Вычислить w = s-1 mod n
• Вычислить u1 = m*w, u2 = r*w mod n
• Вычислить X = u1*P + u2*Q = (x1, y1)
• Сравнить x1 == r mod n
Основные операции (числа: 192 – 512 бит)




A*B mod M
AB mod M
P + Q (сложение точек элл. кривой)
k*Q
(умножение точки на скаляр)
Арифметика в двоичном поле GF(2n)
Стандарт DSS определяет так же операции в GF(2n), потому что они
эффективно реализуются аппаратно.
GF(2n) – конечное поле многочленов степени меньше n
с коэффициентами 0 или 1
x6 + x4 + x2 + x + 1 → 01010111 (удобное представление в виде набора бит)
Сложение и вычитание в GF(2n)
0101 0111
1000 0011
Сложение ↔ XOR
1101 0100
Вместо сложения и вычитания –
операция XOR
Умножение и деление в GF(2n)
*
01010111
10000011
01010111
010101110
10101110000000
Умножение
(сложение ↔ XOR)
10101101111001
10001101100000
100000011001
100011011000
11000001
Вычисление остатка
по модулю
(вычитание ↔ XOR)
Операции в шифрах с открытым ключом
ECDSA, ECDH,
ГОСТ Р 31.10-2001
k*P
P+Q
AB mod M
A * B mod M
RSA, DSA, DH
A-1 mod M
в GF(P) и GF(2n)
A, B, M, k - от 192 до 3072 бит
- реализованные операции
Умножение по модулю
Требования к аппаратной реализации
 Масштабируемость (scalable)
Возможность работы с числами «произвольного»
размера – расчёт на будущее
 Работа в двух полях (dual-field)
Поддержка операций в GF(p) и в GF(2n)
в соответствии со стандартом США
 Высокая разрядность (high-radix)
Разрядность функционального блока от 32 бит для
повышения производительности
Умножение по модулю
Алгоритм Монтгомери
Ключевая идея – заменить деление на M делением на 2n, которое легко
выполняется аппаратно
Mont(A, B) = A * B * 2-n mod M
Алгоритм:
A, B < M < 2n , M - нечётное
M’ = -M-1 mod 2n // предвычисленная константа, зависит только от M
P=A*B
U = P * M’ mod 2n
P = (P + U * M) >> n
if P ≥ M then
P=P–M
end if
// просто оставляем первые n бит
// деление на 2n
// результат в пределах 0 ≤ P < 2*M
Умножение по модулю
Алгоритм Монтгомери
Использование умножения Монтгомери
Mont(A, B) = A * B * 2-n mod M
для вычисления
A * B mod M
1. Переход к представлению Монтгомери:
Ar = A * 2n mod M = Mont(A, 22n)
Br = B * 2n mod M = Mont(B, 22n)
2. Вместо обычного умножения – умножение Монтгомери
Pr = Mont(Ar, Br) = (A * 2n) * (B * 2n) * 2-n mod M = A * B * 2n mod M
3. Возврат к обычному представлению
P = Mont(Pr, 1) = (A * B * 2n) * 1 * 2-n = A * B
Эффективен только для выполнения множества операций подряд
Умножение по модулю
Аппаратная реализация алгоритма Монтгомери
w бит – размер слова
Умножение Монтгомери:
Mont(A, B) = A * B * 2-n mod M
*
w – битный ALU
A[i] B[j]
P[i] M[i]
P[i+j]
A[3]
A[2]
A[1]
A[0]
B[3]
B[2]
B[1]
B[0]
A * B[0]
M * U0
Uj
w
A * B[1]
ALU
M * U1
вычисляет в цикле
A[i]
*
B[j]
+
P[i+j]
P[i] +
A * B[2]
M[i] * Uj
M * U2
A * B[3]
M * U3
00 .. 0 00 .. 0 00 .. 0 00 .. 0
A * B * 2-n mod M A * B
Умножитель в GF(p) и GF(2n)
Подход 1: модифицированные FA / HA
FSEL
A
B
Cin
FSEL
A
FA
Cout
B
FSEL = 1 - умножение в GF(p)
FSEL = 0 - умножение в GF(2n)
HA
S
Cout S
Оптимизация дерева умножителя с учетом
различия задержек по разным входам FA/HA
A
B
Cout
Cin
S
B
Cout
3 xor
B
Cout
2 xor
A
A
Cin
S
3 xor
Cin
A
S
B
Cout
Cin
S
B
Cout
Cin
S
A
B
Cout
3 xor
B
Cout
2 xor
1 xor
A
A
Cin
S
4 xor
Cin
S
1 xor
A
B
Cout
Cin
S
Умножитель в GF(p) и GF(2n)
Подход 2: специальное построение дерева
ai * bj
w2
carry
carry
FA / HA array
sum
FA / HA array
sum
...
Wallace tree
carry
FA / HA array
sum
Final adder
2w
Результат в GF(p)
2w - 1
Результат в GF(2n)
Умножитель в GF(p) и GF(2n)
Подход 3: использование умножителя из DesignWare IP
Synopsys DesignWare DW02_mult
(обычный умножитель)
A
w
A
B
B
Синтезируемое verilog-описание
для умножителя в GF(2n)
w
A
B
x
2w
Результат в GF(p)
2w - 1
Результат в GF(2n)
Умножитель в GF(p) и GF(2n)
Сравнение подходов для умножителя 64x64 бит
Умножитель Монтгомери
Базовый блок montmul_unit (64 бит)
A[i]
B[j]
P[i]
M[i] / M’0
precalc
x
x
U
+
+
C
S
(C, S) = C + A[i]*B[j] + P[i] + M[i]*U
P[i-1]
Умножитель Монтгомери
Организация конвейера
MEMORY
MEMORY
MEMORY
MEMORY
B[j]
стадии
задержки
A[i]
M[i]
P[i]
FSM
montmul
unit
montmul
unit
montmul
unit
FSM
FSM
FSM
result
Умножитель Монтгомери
Выбор параметров конвейера: быстродействие
Две 64-битных стадии дают ускорение примерно в 4 раза для ECC и в 8 раз для RSA
по сравнению с программной реализацией (все операнды на регистрах, операции в GF(p)).
Умножитель Монтгомери
Выбор параметров конвейера: площадь
Возведение в степень по модулю
Вычисление «в лоб»
AB mod M = A * A * A * … * A mod M
[!] 2n операций умножения по модулю если B – n-битное число
Быстрое возведение в степень (Square & multiply)
x19 - ?
19 : 100112 = (2 * 2 * 2 + 1) * 2 + 1
x19 = (((x2)2)2 * x)2 * x
В среднем n + n/2 операций умножения
Вычисление обратного значения по модулю
Малая теорема Ферма:
A-1 mod M = AM - 2 mod M если M – простое число
Сложение в группе точек
на эллиптической кривой над полем GF(p)
y2 = x3 + a*x + b mod M
P = (x1, y1), Q = (x2, y2), P ≠ Q
Сложение точек:
P + Q = (x3, y3)
Удвоение точки:
2*P = (x3, y3)
λ = (y2 – y1) / (x2 – x1) mod M
x3 = λ2 – x1 – x2 mod M
y3 = λ* (x1 – x3) – y1 mod M
λ = (3*x12 + a) / (2 * y1) mod M
x3 = λ2 – x1 mod M
y3 = λ* (x1 – x3) – y1 mod M
Операция деления (т.е. вычисления обратного по модулю) – медленная
Для ускорения вычислений используются проекционные координаты
Сложение в группе точек
на эллиптической кривой над полем GF(p)
Проекционные координаты
Переход к проекционным координатам
(x, y) -> (x, y, 1)
Возврат к обычному представлению
(X, Y, Z) -> (X/Z2, Y/Z3)
Вычисление обратного по модулю только
на этапе возврата к обычному
представлению
Сложение точек:
λ1 = X1 * Z22
λ2 = X2 * Z12
λ3 = λ1 – λ2
λ4 = Y1 * Z23
λ5 = Y2 * Z13
λ6 = λ4 – λ5
λ7 = λ1 + λ2
λ8 = λ4 + λ5
Z3 = Z1*Z2* λ3
X3 = λ62 – λ7* λ32
λ9 = λ7 * λ32 – 2 * X3
Y3 = (λ9 * λ6 – λ8 * λ33) / 2
Итого: 16 умножений
Архитектура сопроцессора
MEMORY
MEMORY
MEMORY
MEMORY
3.1 kb
Sequencer block
data bus
Adder /
Subtracter
Montgomery
Multiplier
Level 3
EC add/sub/double
scalar mult
Level 2
control
mod exp
Level 1
mod add/sub/mult
System
interface
Результаты работы
Разработано verilog-описание и произведён синтез криптографического
сопроцессора для микропроцессора «Эльбрус», позволяющего аппаратно
ускорить выполнение алгоритмов шифрования с открытым ключом.
Особенности:

Поддержка современных алгоритмов шифрования с открытым ключом,
включая алгоритмы на эллиптических кривых

Масштабируемость – размеры операндов ограничены только объёмом памяти.

Эффективность (умножение по модулю в 4-8 раз быстрее программной
реализации)
Основные характеристики:

Тактовая частота 500 MHz (90nm)

3.1 kb внутренней памяти – поддержка до 4096 бит RSA и до 571 бит ECC

Площадь ~ 1.2мм2
Download