240 likes | 604 Views
Операции поддержки алгоритмов шифрования с открытым ключом и их реализация в микропроцессоре «Эльбрус». Выполнил: Скрябин Иван, 513 Научный руководитель: Сахин Ю.Х. Постановка задачи.
E N D
Операции поддержки алгоритмов шифрования с открытым ключом и их реализация в микропроцессоре«Эльбрус» Выполнил: Скрябин Иван, 513 Научный руководитель: Сахин Ю.Х.
Постановка задачи Развитие интернета и электронной коммерции вынуждает производителей микропроцессоров внедрять аппаратную поддержку алгоритмов шифрования: • Intel (Westmere), AMD (Bulldozer)- AES • VIA PadlockSecurity Engine - AES, SHA-1, SHA-256- Умножение Монтгомери (поддержка шифров с открытым ключом) • SPARC T3 (Криптографический ускоритель в каждом из 16 ядер)- DES, AES, Kasumi, MD5, SHA-1, SHA-256, SHA-512- Modular Arithmetic Unit (поддержка шифров с открытым ключом) ЗАДАЧА: Предложить решение по аппаратной поддержке алгоритмов шифрования с открытым ключом в микропроцессорах «Эльбрус»
Два типа алгоритмов шифрования • Шифры с секретным ключом • Многочисленное повторение одного и того же набора простых операций (раундов)над блоками данных 128 / 64 / 256 бит • Большое разнообразие шифров – сложно выделить общие операции, эффективней реализовывать конкретные алгоритмы • Шифры с открытым ключом • Сложные операции (умножение по модулю) над очень большими числами (192 – 3072 бит) • В основе – операции умножения и возведения в степень по модулю Encrypt Decrypt Bob Alice Encrypt Decrypt Bob Alice
Операции в шифрах с открытым ключом RSA (1024 – 3072 бит) 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(умножение точки на скаляр) Генерация ключей: • Выбор простых 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
Арифметика в двоичном поле GF(2n) Стандарт DSS определяет так же операции в GF(2n), потому что они эффективно реализуются аппаратно. GF(2n) – конечное поле многочленов степени меньше n с коэффициентами 0 или 1 x6 + x4 + x2 + x + 1 → 01010111(удобное представление в виде набора бит) Сложение и вычитание в GF(2n) Вместо сложения и вычитания – операция XOR Умножение и деление в GF(2n) 01010111 01010111 * Сложение ↔ XOR 10000011 1000 0011 01010111 1101 0100 Умножение (сложение ↔ XOR) 010101110 10101110000000 10101101111001 10001101100000 100000011001 Вычисление остатка по модулю (вычитание ↔ XOR) 100011011000 11000001
Операции в шифрах с открытым ключом ECDSA, ECDH, ГОСТ Р 31.10-2001 k * P RSA, DSA, DH P + Q AB mod M A-1 mod M A * B 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 * BU = P * M’ mod 2n // просто оставляем первые n битP = (P + U * M) >> n // деление на 2nif P ≥ M then// результат в пределах 0 ≤ P < 2*M P = P – Mend if
Умножение по модулюАлгоритм Монтгомери Использование умножения Монтгомери Mont(A, B) = A * B * 2-n mod Mдля вычисления A * Bmod M • Переход к представлению Монтгомери:Ar = A * 2n mod M = Mont(A, 22n)Br = B * 2n mod M = Mont(B, 22n) • Вместо обычного умножения – умножение МонтгомериPr = Mont(Ar, Br) = (A * 2n) * (B * 2n) * 2-n mod M = A * B * 2n mod M • Возврат к обычному представлениюP = Mont(Pr, 1) = (A * B * 2n) * 1 * 2-n = A * B Эффективен только для выполнения множества операций подряд
Умножение по модулюАппаратная реализация алгоритма Монтгомери w бит – размер слова Умножение Монтгомери: Mont(A, B) = A * B * 2-n mod M A[3] A[2] A[1] A[0] * B[3] B[2] B[1] B[0] w – битный ALU A * B[0] M * U0 A[i] B[j] P[i+j] P[i] M[i] Uj w ALU A * B[1] M * U1 вычисляет в цикле A * B[2] A[i] B[j] + P[i+j] P[i] + 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 B FSEL = 1 - умножение в GF(p) FSEL = 0 - умножение в GF(2n) FA HA Cout S Cout S Оптимизация дерева умножителя с учетом различия задержек по разным входам FA/HA 2 xor 2 xor 1 xor 1 xor A A A A A A A A B B B B B B B B Cin Cin Cin Cin Cin Cin Cin Cin Cout Cout Cout Cout Cout Cout Cout Cout S S S S S S S S 3 xor 3 xor 3 xor 4 xor
Умножитель в GF(p) и GF(2n) Подход 2: специальное построение дерева ai * bj w2 carry Wallace tree FA / HA array sum carry FA / HA array sum . . . carry FA / HA array sum Final adder 2w 2w - 1 Результат в GF(p) Результат в GF(2n)
Умножитель в GF(p) и GF(2n) Подход 3: использование умножителя из DesignWare IP Synopsys DesignWare DW02_mult (обычный умножитель) Синтезируемое verilog-описание для умножителя в GF(2n) A B w w A B A B x 2w 2w - 1 Результат в GF(2n) Результат в GF(p)
Умножитель в GF(p) и GF(2n) Сравнение подходов для умножителя 64x64 бит
Умножитель МонтгомериБазовый блок montmul_unit(64 бит) M[i] / M’0 A[i] B[j] P[i] 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] стадии задержки montmulunit montmulunit montmulunit A[i] M[i] P[i] result FSM FSM FSM FSM
Умножитель МонтгомериВыбор параметров конвейера: быстродействие Две64-битных стадии дают ускорение примерно в 4 раза для ECC и в 8 раз для RSAпо сравнению с программной реализацией (все операнды на регистрах, операции в GF(p)).
Умножитель МонтгомериВыбор параметров конвейера: площадь
Возведение в степень по модулю Вычисление «в лоб» ABmod 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) λ = (y2 – y1) / (x2 – x1)mod M x3 = λ2 – x1 – x2 mod M y3 = λ* (x1 – x3) – y1 mod M Удвоение точки: 2*P = (x3, y3) λ = (3*x12 + a) / (2 * y1) mod M x3 = λ2 – x1 mod M y3 = λ* (x1 – x3) – y1 mod M Операция деления (т.е. вычисления обратного по модулю) – медленная Для ускорения вычислений используются проекционные координаты
Сложение в группе точек на эллиптической кривой над полем GF(p) Сложение точек: λ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 умножений Проекционные координаты Переход к проекционным координатам (x, y) -> (x, y, 1) Возврат к обычному представлению (X, Y, Z) -> (X/Z2, Y/Z3) Вычисление обратного по модулю только на этапе возврата к обычному представлению
Архитектура сопроцессора MEMORY MEMORY MEMORY MEMORY 3.1 kb data bus Adder / Subtracter Montgomery Multiplier System interface Sequencer block Level 3 EC add/sub/double scalar mult Level 2 control mod exp Level 1 mod add/sub/mult
Результаты работы Разработано verilog-описание и произведён синтез криптографического сопроцессора для микропроцессора «Эльбрус», позволяющего аппаратно ускорить выполнение алгоритмов шифрования с открытым ключом. Особенности: • Поддержка современных алгоритмов шифрования с открытым ключом, включая алгоритмы на эллиптических кривых • Масштабируемость – размеры операндов ограничены только объёмом памяти. • Эффективность (умножение по модулю в 4-8 раз быстрее программной реализации) Основные характеристики: • Тактовая частота 500 MHz (90nm) • 3.1 kb внутренней памяти – поддержка до 4096 бит RSA и до 571 бит ECC • Площадь ~ 1.2мм2