Podpisywanie kontraktów

Z Wikipedii, wolnej encyklopedii

Podpisywanie kontraktów – problem kryptograficzny, w którym dwie strony podpisują umowę zyskującą ważność dopiero po podpisaniu przez obie strony.

Trudność polega na tym, że niemożliwe jest jednoczesne składanie podpisów i niezależnie od szczegółów protokołu następuje taki moment, w którym jedna ze stron ma już podpisany kontrakt, druga natomiast jeszcze go nie ma. Jeśli teraz przerwie się komunikację, strona posiadająca kontrakt może twierdzić, że kontrakt obowiązuje (gdyż ma podpisaną kopię), bądź też że nie (bo nikt inny jej nie ma).

Jednym z rozwiązań są kontrakty probabilistyczne, gdzie kontrakt jest podpisany jedynie z jakimś prawdopodobieństwem. Jedna strona ma wtedy kontrakt podpisany z odrobinę wyższym prawdopodobieństwem niż druga. Procedura wygląda następująco:

  • Kontrakt jest dzielony na podkontraktów, mających tę samą zawartość z wyjątkiem numeru podkontraktu.
  • Podpisywane są podkontrakty po kolei. Jeśli strona zerwie połączenie będzie dysponowała co najwyżej jednym podkontraktem więcej niż druga.
  • Jeśli chce się aktywować kontrakt, do którego nie ma się wszystkich podkontraktów, należy udać się do sędziego, który wylosuje numer podkontraktu, który obowiązuje dla danego kontraktu. Szansa że wylosowano ten podkontrakt, który ma tylko oszust wynosi czyli jest dość niewielka (choć jest to tylko liniowo mało). W pozostałych przypadkach albo obu uczestników ma odpowiedni podkontrakt albo żaden z nich nie ma.

Innym rozwiązaniem jest wykorzystanie uczestnika, któremu ufają oboje podpisujący. Procedura jest bardzo prosta:

  • Obu podpisujących wysyła podpisy zaufanemu uczestnikowi.
  • Kiedy zaufany uczestnik otrzyma wszystkie podpisy, rozsyła wszystkim tak podpisany dokument.

Do najbardziej obiecujących rozwiązań należy optymistyczne podpisywanie kontraktów, w którym z zaufanego uczestnika korzysta się tylko w przypadkach wystąpienia problemów, prawidłowy przebieg podpisywania przebiega jednak bez niego.