Transakcje finansowe przy użyciu elektronicznej gotówki
19.01.2011 - Sebastian Bala, Tomasz Wasilczyk
W pierwszej połowie lat dziewięćdziesiątych ubiegłego wieku firma Digicash opracowała technologie kryptograficzne umożliwiające realizację pieniądza cyfrowego. Nowe protokoły miały umożliwić bezpieczne transakcje finansowe w sieci. Atrakcyjność elektronicznej gotówki miała polegać na anonimowości operacji kupna przy użyciu takich pieniędzy. Wcześniej, jedyną formą płatności, która nie ujawniała tożsamości kupującego były transakcje gotówkowe. Główna różnica pomiędzy pieniądzem cyfrowym i banknotami papierowymi miała polegać tylko na tym, że aby obracać gotówką cyfrową niezbędne jest posiadanie konta w banku. W roku dwutysięcznym specjaliści związani z instytucjami pieniądza elektronicznego wyrażali przekonanie, że w roku 2010 transakcje pieniądzem elektronicznym będą nie mniej powszechne niż gotówkowe. Zapowiedzi jeszcze się nie sprawdziły. Pieniądz cyfrowy nie jest dzisiaj powszechny. W tym artykule przedstawimy prosty protokół do realizacji transakcji przy użyciu gotówki cyfrowej. Wyjaśnimy jak działają narzędzia kryptograficzne, których użyto w protokole. Zobowiązanie bitowePrzypuśćmy, że w leniwej czteroosobowej rodzince nikt nie chce wynieść śmieci. Jednym ze sposobów wyznaczenia osoby, która przespaceruje się tym razem do śmietnika, jest gra w marynarza. Scenariusz gry zazwyczaj wygląda tak. Ustawiamy osoby w pewnym porządku. Niech porządkiem będzie mama, tato, Kasia, Jacek. Wszyscy jednocześnie wystawiają dłonie pokazując pewną ilość palców. Załóżmy, że liczba palców wystawionych przez każdą z osób wynosi 0, 1, 2 lub 3. Wystawione palce wszystkich czterech dłoni są sumowane. Następnie wykonywana jest standardowa odliczanka: mama, tato, Kasia, Jacek, mama, tato, Kasia... Odliczamy tyle razy, ile wyniosła suma wystawionych palców. Osoba na której skończono wyliczanie idzie wynieść śmieci. Wyobraźmy jednak sobie, że szybkooki Jacek jest nie tylko spostrzegawczy, ale i potrafi błyskawicznie liczyć. Przy założeniu, że reszta rodziny gra uczciwie i na sygnał start wyciąga zza pleców ręce z ustaloną liczbą palców, Jacek mógłby pokazać swoje palce nieco później – przeliczywszy palce pozostałych uczesników. Wtedy, jeśli reszta wyciągnęła w sumie 4 palce, on pokaże 1, 2 lub 3 i nie pójdzie wynieść śmieci. Cały problem tkwi w jednoczesności. Problem jednoczesności można rozwiązać wymyślając taki protokół postępowania, w którym: Powyższe warunki nazwijmy własnościami jednoczesności. Niedoskonały protokół może posiadać wady powodujące, że zmiana decyzji podjętej w chwili będzie możliwa później. Przykładem może być historia, która zdarzyła się pierwszemu autorowi. Otóż, dawno dawno temu, w czasach gdy panele LCD nie były na kieszeń zwykłego użytkownika, DYREKCJA postanowiła kupić nowe monitory. Między dwoma pracownikami wywiązał się spór, gdyż oświadczono, że zakupiono dla nich dwa monitory – jeden 19 calowy i jeden 17 calowy – bez przypisania do osób. Poproszono ich o ustalenie między sobą, który monitor będzie należeć do kogo. Po długiej dyskusji, nie mogąc dojść do porozumienia, postanowili podczas obiadu ustalić protokół wylosowania osoby, której miał przypaść większy monitor. Protokół był taki:
Następnego dnia w południo doszło do wymiany kartek przy świadku. Jedna z osób patrzących na to co otrzymała powiedziała "nie! Grasz nie fair!" Procedura mogła być prostsza, np. zamiast "osoby parzystej" można było ustalić "osobę orła" i rzucić monetą, ale protokół wymyślany był z dużym dystansem do całej sprawy, gdyż obie strony miały dosyć absurdalnego sporu. Stąd taka skomplikowana procedura. Niestety tylko jedna z osób zauważyła, że protokół ma lukę i postanowiła to wykorzystać. Zobaczmy co było na kontrowersyjnej kartce: Zobowiązanie bitowe w kryptografii określane jest jako proces ustalenia pomiędzy dwoma stronami, Alicją i Bobem, jednego bitu lub ciągu bitów, w taki sposób, aby wymienione wyżej własności jednoczesności były spełnione. Proces taki może być zobrazowany następującym scenariuszem: Alicja losuje bit lub ciąg bitów, umieszcza go na kartce w sejfie (trudnym do otwarcia bez klucza). Zamyka sejf na klucz, którego jedyny egzemplarz posiada wyłącznie ona. Wysyła sejf do Boba. Bob przechowuje sejf do momentu o którym mowa w b). Wtedy Alicja i Bob spotykają się, aby zajrzeć do sejfu. Bob posiada sejf z zawartością, a Alicja klucz, więc nie może być mowy o zmianie decyzji podjętej przez Alicję w czasie pomiędzy zamknięciem a otwarciem sejfu. Zobowiązania bitowe realizowane są w świecie cyfrowym, zatem nie może być mowy o przesyłaniu ciężkiego sejfu światłowodami. W praktyce, zobowiązanie najłatwiej zaimplementować przy użyciu funkcji haszujących. Argumentami funkcji haszujących są ciągi bitów. Dla uproszczenia będziemy zakładać, że długość argumentów jest ustalona (choć w praktyce jest inaczej). Wartościami są również ciągi bitów ustalonej długości, ale krótsze od tych używanych jako argumenty. Załóżmy, że jest odwzorowaniem między ciągami 128 bitowymi i 64 bitowymi, co zapisujemy . Funkcje haszujące posiadają tę własność, że w praktyce nie jest możliwe obliczenie argumentu , znając wartość funkcji haszującej (nazwijmy to nieodwracalnością), oraz trudno jest znaleźć , taki że (nazwijmy to odpornością na kolizje). Wchodząc w szczegóły, zobowiązanie bitowe odbywa się w taki sposób: Alicja i Bob mają dostęp do algorytmu obliczającego . Alicja losuje 64 bitowy ciąg , oraz ustala 64 bitowe zobowiązanie . Oblicza . Wynik wysyła do Boba. Podczas sprawdzenia zobowiązania, Alicja przesyła Bobowi parę , a Bob oblicza sprawdzając czy Alicja nie oszukuje. Ciąg jest zobowiązaniem, natomiast jest losowym ciągiem. ma znaczenie gdy Alicja miałaby tworzyć zobowiązania dla Boba wielokrotnie. Ustalenie zobowiązania po raz drugi bez dodatkowego czynnika losowego, powoduje, że Bob ma dodatkową wiedzę o równości zobowiązań Alicji. Inaczej mówiąc, bez użycia ciągu , Bob wiedziałby, które sejfy przesłane przez Alicję mają taką samą zawartość. W dalszej części, dla uproszczenia pominiemy składnik . Zobowiązanie bitowe będzie realizowane poprzez aplikację funkcji haszującej do zobowiązania .
(2 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com