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

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

w = s-1 mod qu1 = [ H (M) w ] mod qu2 = r w mod qv = [ (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