Московский государственный университет имени М.В.Ломоносова
Опубликован: 19.11.2003 | Доступ: свободный | Студентов: 12376 / 4861 | Оценка: 4.36 / 4.13 | Длительность: 13:09:00
ISBN: 978-5-9556-0102-1
Лекция 10:

Цифровая подпись

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

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

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

Подход DSS

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

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

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

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

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

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

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

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

Теперь рассмотрим детали алгоритма, используемого в 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,10.

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

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

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

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

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

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

y = gx mod p

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

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

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

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

r = (gk mod p) mod q
s = [ k-1 (H (M) + xr) ] mod q
Подпись = (r, s)

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

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

w = s-1 mod q
u1 = [ H (M) w ] mod q
u2 = r w mod q
v = [ (gu1 yu2) mod p ] mod q
подпись корректна, если v = r

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

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

g = h(p-1)/q mod p
то gt mod p = gt mod q mod p

По теореме Ферма, так как h является взаимнопростым с p, то hp-1 mod p = 1. Следовательно, для любого неотрицательного целого n

gnq 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
= 1n mod p = 1

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

gnq+z mod p = (gnq gz) mod p
= ((gnq mod p) (gz mod p )) mod p
= gz 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 
    = (gx mod p)(rw) mod q mod p   по правилам
    = gx ((rw) mod q) mod p         модульной арифметики
    = g(x ((rw mod q))) mod q mod p   по лемме 1
    = g(xrw) mod q mod p

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

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

(ks) mod q = (k((k-1(H(M) + xr)) mod q)) mod q
    = (k (k-1(H(M) + xr))) mod q
    = ((kk-1) mod q) ((H(M) + xr) mod q) mod q
    = (H(M) + xr) mod q

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

((H(M) + xr) w) mod q 
    = (((H(M) + xr) mod q) (w mod q)) mod q
    = (((ks) mod q) (w mod q)) mod q
    = (kws) mod q
    = (k mod q) ((ws) mod q)) mod q
    = k mod q

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

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

v = ((gu1 yu2) mod p) mod q
  = ((g(H(M) w) mod q y(rw) mod q) mod p) mod q
  = ((g(H(M) w) mod q 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
  = ((gw (H(M) + xr) mod q) mod p) mod q
  = (gk mod p) mod q
  = r
< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Мария Архипова
Мария Архипова