Protokół ślepych podpisów

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Protokół ślepych podpisów (blind signature) jest w kryptografii formą cyfrowego podpisu, w którym podpisywany dokument nie jest znany osobie podpisującej. Ślepy podpis może być potem zweryfikowany z wiadomością. Ślepe podpisy są na ogół wykorzystywane w protokołach opartych na prywatności, w których autor wiadomości i podpisujący to różne osoby. Do przykładów należą systemy elektronicznych wyborów i elektronicznych pieniędzy.

Prosta analogią używaną do porównania ze ślepymi podpisami, jest zamykanie wiadomości z kalką w kopercie, która potem jest podpisywana przez inna osobę. Pomimo że osobą podpisująca nie widziała wiadomości, to każdy może potem stwierdzić jej autentyczność.

Ślepe podpisy uniemożliwiają również powiązanie wiadomości z jej autorem, nawet po przekazaniu jej oryginału do osoby która ja wcześniej podpisała. Wykorzystywane jest to w przypadku e-pieniędzy. Bank podpisuje e-pieniądz posiadaczowi konta. Następnie taki pieniądz może zostać łatwo zweryfikowany (łatwo udowodnić, że bank go zatwierdził), jednak nawet bank nie wie komu i kiedy go podpisał. W przypadku e-pieniędzy próba wielokrotnego użycia tego samego banknotu umożliwia ustalenie jego właściciela. Podobnie jest w przypadku elektronicznych głosowań. Każdy jest uprawniony do jednego głosu. Dlatego przed oddaniem głos podpisuje się ślepym podpisem. Oczywiste jest że osoba podpisująca nie powinna rozpoznać informacji którą podpisała, nawet kiedy ta informacja trafi wraz z podpisem do "elektronicznej urny".

Jeden z najprostszych algorytmów ślepych podpisów jest oparty na podpisie RSA. Tradycyjnie podpis RSA jest wyliczany poprzez podniesienie do potęgi wiadomości m do tajnego wykładnika d, wszystko modulo publiczne N. Ślepa wersja dodaje losowy czynnik r, taki że NWD(r,N) = 1. Następnie r jest spotęgowane przez publiczny wykładnik e (mod N), wartość r^e jest tutaj użyta jako czynnik zaciemniający. Osoba podpisująca otrzymuje iloczyn wiadomości i czynnika oślepiającego m(r^e) mod N. Ślepy podpis S' jest wtedy obliczany jako:

 s' \equiv (m*r^e)^d\ (\mathrm{mod}\ N)

Autor wiadomości może wtedy usunąć czynnik zaślepiający wyliczając S, prawidłowy podpis RSA wiadomości m:

 s \equiv s' * r^{-1}\ (\mathrm{mod}\ N)

Można łatwo sprawdzić poprawność algorytmu:

 s = s' * r^{-1} = (m*r^e)^d *r^{-1} = m^{d}*r^{ed}*r^{-1}=m^{d}

Zobacz też[edytuj | edytuj kod]