Московский государственный университет имени М.В.Ломоносова
Опубликован: 28.11.2014 | Доступ: свободный | Студентов: 1380 / 124 | Длительность: 23:26:00
ISBN: 978-5-9556-0163-2
Лекция 4:

Алгоритмы асимметричного шифрования

Стандарт цифровой подписи DSS

Национальный институт стандартов и технологии США (NIST) разработал федеральный стандарт цифровой подписи DSS. Для создания цифро-вой подписи используется алгоритм DSA (Digital Signature Algorithm). В качестве хэш-алгоритма стандарт предусматривает использование алго-ритма SHA-1 (Secure Hash Algorithm). DSS первоначально был предложен в 1991 году и пересмотрен в 1993 году в ответ на публикации, касающиеся безопасности его схемы.

Подход DSS

Стандарт DSS может использоваться только для создания цифровой подписи. В отличие от RSA, его нельзя использовать для шифрования или обмена ключами. Тем не менее, это технология открытого ключа.

Рассмотрим отличия цифровых подписей, создаваемых DSS, от цифровых подписей, создаваемых такими алгоритмами как RSA.

Создание и проверка подписи с помощью алгоритма RSA

Рис. 4.4. Создание и проверка подписи с помощью алгоритма RSA
Создание и проверка подписи с помощью стандарта DSS

Рис. 4.5. Создание и проверка подписи с помощью стандарта DSS

В алгоритме RSA подписываемое сообщение подается на вход сильной хэш-функции, которая создает хэш-код фиксированный длины. Для создания подписи этот хэш-код подписывается с использованием закрытого ключа отправителя. Затем сообщение и подпись пересылаются получателю. Получатель вычисляет хэш-код сообщения и проверяет подпись, используя открытый ключ отправителя. Если вычисленный хэш-код равен значению, полученному при проверки подписи, то считается, что подпись корректна.

В DSS также используется сильная хэш-функция. Хэш-код является входом функции подписи вместе со случайным числом k, созданным для этой конкретной подписи. Функция подписи также зависит от закрытого ключа отправителя KRА и множества параметров, известных всем участникам. Можно считать, что это множество состоит из глобального открытого ключа KUG. Результатом является подпись, состоящая из двух компонент, обозначаемых какS и R.

Для проверки подписи получатель также создает хэш-код полученного сообщения. Этот хэш-код вместе с подписью является входом в функцию верификации. Функция верификации зависит от глобального открытого ключа KUG и от открытого ключа отправителя KUА. Выходом функции верификации является значение, которое должно равняться компоненте R подписи, если подпись корректна. Функция подписи такова, что только отправитель, знающий закрытый ключ, может создать корректную подпись.

Теперь рассмотрим детали алгоритма, используемого в DSS.

Алгоритм цифровой подписи DSS

DSS основан на трудности вычисления дискретных логарифмов и базируется на схеме, определенной ElGamal и Schnorr.

Общие компоненты группы пользователей

Существует три параметра, которые являются открытыми и могут быть общими для большой группы пользователей.

160-битное простое число q, т.е. 2159< q < 2160.

Простое число р длиной между 512 и 1024 битами должно быть таким, чтобы q делилось на (р – 1), т.е. 2L-1< p < 2L, где 512 < L < 1024 и (p-1)/q является целым.

g = h(p-1)/q (mod p), где h является целым между 1 и (р-1), и g должно быть больше единицы.

Зная эти значения, отправитель выбирает закрытый ключ и создает открытый ключ.

Закрытый ключ отправителя

Закрытый ключ х должен быть числом между 1 и (q-1)и должен быть выбран случайно или псевдослучайно.

x - случайное или псевдослучайное целое, 0 < x < q

Открытый ключ отправителя

Открытый ключ вычисляется следующим образом:

у = g^x (mod \;p)

Вычислить у по известному х довольно просто. Однако, имея открытый ключ у, вычислительно невозможно определить х, который является дискретным логарифмом у по основанию g.

Случайное число, уникальное для каждой подписи.

k - случайное или псевдослучайное целое, 0<k<q, уникальное для каждого подписывания.

Подписывание

Для создания подписи отправитель вычисляет две величины, r и s, которые являются функцией от компонент открытого ключа (p, q, g), закрытого ключа пользователя х, хэш-кода сообщения Н(М) и целого k, которое должно быть создано случайно или псевдослучайно и должно быть уникальным при каждом подписывании.

r = g^k ((mod\; p) mod\; q)\\
s = (k^{-1}\cdot (H (M) + x\cdotr)) (mod\; q)

Подпись равна (r, s).

Проверка подписи

Получатель выполняет проверку подписи, используя следующие формулы. Он вычисляет значение v, которое является функцией от компонент общего открытого ключа, открытого ключа отправителя и хэш-кода полученного сообщения. Если эта величина равна компоненте r в подписи, то подпись считается действительной.

w = s^{-1} (mod\; q)\\
u1 = (H (M)\cdot w) (mod\; q)\\
u2 = r\cdot w\; mod\; q\\
v = ((g^{u1}\cdot y^{u2}) (mod \;p)) (mod \;q)

Подпись корректна, если v = r

Докажем, что v = r в случае корректной подписи.

Лемма 1. Для любого целого t, если

g = h^{(p-1)/q}(mod \;p)\\
то\; g^t (mod \; p) = g^{t mod\; q}(mod\; p)

По теореме Ферма, так как h является взаимнопростым с p, то

h^{p-1}(mod\; p) = 1.

Следовательно, для любого неотрицательного целого n

g^{nq}(mod p) = (h^{(p-1)/q}(mod\; p))^{nq}(mod\; p)\\
= h^{((p-1)/q) nq}(mod\; p)\\
= h^{(p-1)n}(mod\; p)\\
= ((h^{(p-1)}(mod p))^n) (mod \;p)\\
= 1^n(mod\; p) = 1

Таким образом, для неотрицательных целых n и z мы имеем

g^{nq+z} (mod \;p)	= (g^{nq \cdot gz)}(mod \;p)\\
= (((g^{nq}(mod p)) \cdot (g^z(mod \; p ))) (mod \;p)\\
= g^z(mod \;p)

Любое неотрицательное целое t может быть представлено единственным способом как t = nq + z, где n и z являются неотрицательными целыми и 0<z<q. Таким образом z = t (mod q).

Лемма 2. Для неотрицательных чисел a и b: g(a mod q + b mod q)(mod p) = g(a+b) mod q(mod p).

По лемме 1 мы имеем

g^{(a mod \;q + b mod \;q)}(mod\; p) = g^{(a mod \;q + b mod\; q) mod \;q(mod\; p)\\
= g^{(a + b) mod\; q}(mod\; p)

Лемма 3. y(rw) mod q(mod p) = g(xrw) mod q(mod p)

По определению y = gx(mod p). Тогда:

y^{(rw) mod q}(mod\; p) = (g^{x}(mod\; p))^{(rw) mod q}(mod\; p)\\
= g^{x ((rw)\; mod \; q)}(mod\; p)\; - \;по\; правилам \;модульной\; арифметики\\
= g^{(x\; ((rw\; mod \;q)))\; mod\; q}(mod p)\; -\; по\; лемме \;1\\
= g^{(xrw)\; mod\; q}(mod\; p)

Лемма 4. ((H(M) + x•r) • w) (mod q) = k

По определению s = (k-1• (H(M) + x•r)) (mod q). Кроме того, так как q является простым, любое неотрицательное целое меньшее q имеет мультипликативную инверсию. Т.е. (k •k-1) (mod q = 1). Тогда:

(k\cdot s) (mod\; q)= (k  \cdot (k^{-1}\cdot (H(M) + x\cdot r)) (mod\; q)) (mod\; q)\\
= (k \cdot (k^{-1}(H(M) + x\cdotr))) (mod\; q)\\
= ((k \cdot k^{-1}) (mod \;q) \cdot ((H(M) + x\cdot r) (mod\; q) (mod\; q)\\
= (H(M) + x\cdot r) (mod\; q)

По определению w = s-1(mod q), следовательно, (w•s) (mod q)=1. Следовательно:

((H(M) + x\cdot r) w) (mod\; q) = ((H(M) + x\cdot r) (mod \;q) \cdot w (mod \;q)) (mod q)\\
= ((k \cdot s) (mod\; q) \cdot w (mod \;q)) (mod\; q)\\
= (k\cdot w\cdot s) (mod\; q)\\
= (k (mod\; q) \cdot (w \cdot s) (mod \; q))) (mod \; q)\\
= k (mod\; q)

Так как 0 < k < q, то k (mod q) = k.

Теорема. Используя введенные выше определения для v и r, докажем, что v=r.

v= ((g^{u1}\cdot y^{u2}) (mod \;p)) (mod \;q)\\
= (g^{(H(M) w) (mod \;q)} \cdot y^{(rw) (mod\; q))} (mod \;p)) (mod \;q)\\
= (g^{(H(M) w) (mod\; q)} \cdot g^{(xrw)(mod\; q))} (mod \;p)) (mod \;q)\\
= (g^{(H(M) w) (mod\; q) + (xrw) (mod\; q))} (mod \;p)) (mod \;q)\\
= (g^{(H(M) w + xrw)(mod\; q))} (mod \;p)) (mod \;q)\\
= (g^{w (H(M) + xr) mod \;q)} (mod \;p)) (mod \;q)\\
= (g^k(mod\; p))\; (mod\; q)\\
= r