Rafał Grycuk, Damian Jakubiak - Implementacja protokołu Shamira
Transkrypt
Rafał Grycuk, Damian Jakubiak - Implementacja protokołu Shamira
Implementacja protokołu Shamira w aplikacji internetowej "Biblioteka Tajemnic" Rafał Grycuk1, Damian Jakubiak2 Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok IV [email protected] 2 Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok IV [email protected] 1 Streszczenie W poniższej pracy pokazano sposób zastosowania protoko łu Shamira w aplikacji internetowej. Serwis składa się z bazy danych napisanej w języku T-SQL, zarządzanej systemem MSSQL i aplikacji web, napisanej w technologii ASP.NET. Dzięki swojej funkcjonalności, umożliwia użytkownikowi dzielenie się plikami bądź informacjami w formie tekstu z wybranymi przez siebie użytkownikami zarejestrowanymi w serwisie Biblioteka Tajemnic. 1 Wstęp Od samego początku istnienia dziedziny jaką jest Informatyka, towarzyszy jej troska o bezpieczeństwo i zachowanie tajności przesyłanych danych. Istnieje niezliczona liczba protokołów i zabezpieczeń, utrudniająca osobą postronnym dostęp do danych, których upublicznienie jest rzeczą niepożądaną. O jeden z nich została oparta aplikacja internetowa „Biblioteka Tajemnic”, o której traktuje niniejsza praca. Jest nim opisany w drugim rozdziale protokół Shamira. Dzięki niemu użytkownik, może w bezpieczny sposób dzielić się informacją z innymi. Dzieje się to w następujący sposób: Użytkownik umieszcza informację/plik w bazie danych aplikacji WWW, wybiera użytkowników, którzy mogą ją odczytać i minimalną liczbę osób, która jest wymagana do odczytania tejże informacji/pliku. W tym momencie zostaje wygenerowana para numer-klucz. Informacja zostaje podzielona na liczbę powierników i rozes łana na ich maile. Od tej chwili powiernicy mogą wyrażać chęć odczytania powierzonej im tajemnicy. Warunkiem ukazania się jej na ekranach odbiorców jest osiągnięcie progu, jakim jest minimalna liczba osób podana wcześniej przez nadawcę, chcących odczytać tajemnice. Jeżeli warunek zostanie spe łniony tajemnica ukazuje się odbiorcom, w przeciwnym wypadku zwraca pusty ciąg znaków. 1 2 Protokół Shamira W rozumieniu matematycznym dwa punkty wyznaczają jednoznacznie prostą, trzy punkty wyznaczają parabolę, i ogólnie n punktów wyznacza jednoznacznie wielomian stopnia n-1. W protokole Shamira osoba dzieląca wybiera wielomian stopnia t-1, którego wartość np. w zerze, jest równa, „sekretowi”. Jako fragmenty sekretu udostępniane są wartości tego wielomianu w różnych punktach. Zebranie t punktów pozwala dokonać interpolacji wielomianu i wyznaczyć jego wartość w zerze. [1] Podczas wykonywania protokołu Shamira wyróżniamy dwa podstawowe etapy: • podział klucza (sekretu), • weryfikacja (odtworzenie) klucza (sekretu). Z kolei na każdy z nich sk łada się kilka podpunktów, których wykonanie jest niezbędne do poprawnego przekazania i odtworzenia danych. Aby poprawnie zaszyfrować i podzieli ć sekret należy wykonać następujący algorytm: 1. Dealer generuje liczbę pierwszą p większą od max(D,n) oraz definiuje a 0 = D 2. Wyznacza w ciele ℤp k-1 losowych współczynników a1 , a2 ,... ,ak-1 oraz definiuje wielomian nad ciałem ℤp jako q(t) = (a 0+ a1t + … + ak-1tk-1) mod p 3. Oblicza q(i) dla i = 1, 2, …, n oraz przesyła stronie o numerze i parę (i, 1(i)). Aby poprawnie odtworzyć klucz należy obliczyć następujące równanie: Jeżeli k (lub więcej) stron (uczestników) posiada (i 1 ,Di1 ),(i2 ,D2 ),...,(ik ,Dik ) wtedy weryfikacja może odbyć się w oparciu o wzór interpolacyjny Lagrange'a : [2][3] 3 Budowa Aplikacji 3.1 Interfejs użytkownika W skład interfejs u użytkownika wchodzą następujące podstrony: Strona główna: Składa się z menu, które służy użytkownikowi do przemieszczania się miedzy podstronami aplikacji oraz animacji. Dodaj użytkownika: Zawiera menu, pola, które należy wypełnić, aby zarejestrować nowego użytkownika i przycisk zatwierdzający wprowadzone dane Zmień hasło: 2 Podstrona dostępna jedynie dla zalogowanych użytkowników. Posiada pola, które należy wypełnić, aby zmienić aktualne hasło użytkownika. Do potwierdzenia wprowadzonych danych służy przycisk „zmień hasło”. Dodaj tajemnice: Podstrona zawiera pola, które należy wype łnić aby dodać nową tajemnice(rys. 1). Rys. 1. Widok podstrony „Dodaj tajemnice” Odzyskaj tajemnice: Funkcjonalność tej podstrony, jest dostępna jedynie kiedy zalogowany użytkownik jest powiernikiem minimum jednej tajemnicy. Usuń tajemnice: Podstrona umożliwia użytkownikowi usuwanie niepotrzebnych tajemnic. Jej funkcjonalność jest dostępna jedynie dla zalogowanych użytkowników posiadających tajemnice. Zaloguj: Funkcjonalność strony dostępna jest jedynie dla niezalogowanych użytkowników zapisanych wcześniej w bazie danych. Posiada pola które należy wype łnić, aby móc w pe łni korzysta ć z 3 funkcji oferowanych przez aplikację „Biblioteka Tajemnic”. Wszystkie wprowadzone dane, należy potwierdzić używając przycisku zaloguj. Autorzy: Zawiera nazwiska autorów projektu „Biblioteka Tajemnic” oraz ich funkcje podczas tworzenia. 3.2. Zawartość bazy danych Baza danych, z której korzysta aplikacja „Biblioteka tajemnic” sk łada się z czterech relacji: uzytkownicy, uzytkownicyDoTajemnice, pliki i tajemnice, które pozostają w związku. Atrybutami tabeli uzytkownicy są: • login – unikalny ciąg znaków, służący do logowania się do aplikacji • haslo – hasło do konta, generowane z dwóch pól, haslo i data_rejestracji. Oba pola są wcześniej hashowane skrótem MD5, następnie łączone i ponownie hashowane. • data_rejestracji – data w której użytkownik zarejestrowa ł się w serwisie • email – adres internetowej skrzynki pocztowej użytkownika. Atrybutami tabeli tajemnice są: • nazwa_tajemnicy • login_wlasciciela – identyfikator użytkownika, który jest w łaścicielem tajemnicy • liczba_uczestnikow – liczba powierników tajemnicy • liczba_odkryc – liczba odsłon tajemnicy • min_licz_uczest – próg liczby użytkowników umożliwiający odczytanie tajemnicy • p – najmniejsza liczba pierwsza, większa od tajemnicy zapisanej w postaci liczby • sumakontrolna – zahashowana suma pól: nazwaTajemnicy, BigInt i p Atrybutami tabeli uzytkownicyDoTajemnice są: • nr_tajemnicy • nr_uzytkownika Obie kolumny tworzą klucz z łożony. Atrybutami tabeli pliki są: • nr – unikalny identyfikator pliku • plik – plik w postaci binarnej • nazwa • rozszerzenie – rozszerzenie pliku 4 • naz_tajemnicy – identyfikator tajemnicy Rys. 2 Diagram encji zaimplementowanych w bazie danych Tab. 1 Zestawienie atrybutów i ich w łaściwości dla wszystkich tabel Atrybut Typ danych Więzy intregralności tabela uzytkownicy login varchar(50) not null; unique haslo varchar(50) not null email varchar(50) not null; unique; check([email] like '%@%.%') data_rejestracji datetime not null tabela tajemnice nazwa_tajemnicy varchar(50) not null; unique login_wlasciciela int not null; foreign key(użytkownicy[nr]) liczba_uczestnikow int not null; check([liczba_uczestnikow] >= [min_licz_uczest]) liczba_odkryc int not null min_licz_uczest int not null; check([liczba_uczestnikow] >= [min_licz_uczest]) 5 p nvarchar(max) not null sumakontrolna nvarchar(MAX) not null tabela uzytkownicyDoTajemnice nr_tajemnicy int not null; foreign key(tajemnice[nr]) nt_uzytkownika int not null; foreign key(uzytkownicy[nr]) tabela plik nr int identity(1,1), primary key plik varbinary(max) not null nazwa varchar(50) not null rozszezenie varchar(50) Not null nr_tajemnicy int not null; foreign key(tajemnice[nr]) Składowane procedury: dodaj_tajemnice – procedura definiuje parametr @nr, który będzie kluczem głównym nowej krotki (rekordu). Wartość tego parametru jest ustawiana na maksymalną znalezioną warto ść atrybutu nr w tabeli tajemnice. Następnie sprawdza czy wartość parametru nie jest wartością pustą. Jeśli warunek jest spe łniony, ustawia wartość parametru @nr na ‘1’, w przeciwnym wypadku inkrementuje parametr @nr. Następnie wstawia nowy rekord do tabeli tajemnice z kluczem glównym @nr wraz z pozostałymi atrybutami przekazanymi przez aplikacje i zwraca do aplikacji parametr @nr. dodaj_uzytkownika – procedura przebiega analogicznie do procedury dodaj_tajemnice z tym, że dodaje nowy wpis do tabeli uzytkownicy i zwraca do aplikacji wartośc ‘0’. edytuj_uzytkownika – procedura nadpisuje do tabeli uzytkownicy zaktualizowanie dane i zwraca do aplikacji wartość ‘0’. inkrementuj_liczbe_odkryc – procedura pobiera atrybut liczba z krotki z tabeli tajemnice, której atrybut nazwa_tajemnicy jest zgodny z podanym procedurze atrybutem @nazwa_tajemnicy, następnie jednoktrotnie go inkrementuje, nadpisuje w w miejscu, z którego go pobrala i zwraca do aplikacji wartość ‘0’. pobierz_email – procedura sprawdza zgodność atrybutu @ login z polem login tabeli użytkownicy. Jeżeli wartości są równe, przypisuje atrybutowi @email wartość z krotki email z tabeli użytkownicy i zwraca do aplikacji wartość ‘0’. pobierz_numer – procedura sprawdza zgodność atrybutu @ login z polem login tabeli użytkownicy. Jeżeli wartości są równe, przypisuje atrybutowi @nr wartość z krotki nr z tabeli użytkownicy i zwraca do aplikacji wartość atrybutu @nr. przydziel_tajemnice – procedura nadpisuje wartości atrybutów @nr_tajemnicy i @klucz do tabeli tajemnice, tylko wtedy gdy login jest zgodny z z wartością atrybutu @login i zwraca do aplikacji wartość ‘0’. 6 sprawdz_email – procedura kopiuje do atrybutu @wartosc zawartość pola email i sprawdza czy nie jest ono puste,jeżeli jest puste ustawia w pole @wartosc znak ‘0’ i zwraca do aplikacji wartość @wartość. sprawdz_login – procedura kopiuje do atrybutu @wartosc zawartość pola login i sprawdza czy nie jest ono puste,jeżeli jest puste ustawia w pole @wartosc znak ‘0’ i zwraca do aplikacji wartość @wartość. usun_tajemnice – procedura usuwa wartość wszystkich atrybutów z tabeli tajemnice o podanym nr i zwraca do aplikacji wartość ‘0’. 4 Implementacja protokołu Shamira w aplikacji „Biblioteka Tajemnic” Na szczególną uwagę zasługują dwie funkcje: encrypt i decrypt. Pierwsza z nich dzieli sekret na zadaną liczbę części w zależności od podanego progu. Progiem jest minimalna liczba osób, która jest wymagana do otwarcia tajemnicy. Jest to pierwsza część implementacji protokołu. Następnie wygenerowana para identyfikator-klucz, zostaje wysłana na prywatne adresy e-mail wybranych powierników. Podczas dodawania tajemnicy generowana jest suma kontrolna, która to jest realizowana przez funkcję CreateCheckSum. Przyjmuje ona takie argumenty jak: nazwaTajemnicy(string), tajemnica(BigInt), p(BigInt). Po wywołaniu funkcji następuje zsumowanie argumentów i hashowanie skrótem MD5 przy pomocy funkcji hash. Argument p jest to najmniejsza liczba pierwsza większa od tajemnicy zapisanej w postaci liczby. Funkcja decrypt jako argumenty przyjmuje tablicę kluczy i numerów oraz pobrany z bazy danych parametr p. Jej zadaniem jest rozkodowanie tajemnicy do postaci liczby. Następnie przy pomocy funkcji asciidecode przyjmującej jako argument parametr tajemnica(BigInt), uzyskiwany jest ciąg znaków (string), który jest pierwotną wersją tajemnicy podanej przez właściciela. Funkcja ta dzieli liczbę na trzycyfrowe segmenty a następnie każdy z nich zamienia na znak w kodzie ASCII. Znaki są sumowane i zwracane. Odwrotne działanie wykonuje funkcja asciicode, która jako argument przyjmuje ciąg znaków (string), a następnie przekształca każdy znak na odpowiadające mu liczby w kodzie ASCII. Uzyskane w ten sposób segmenty liczb są dodawane i zwracane. 4.1. Webserwisy AddWill – funkcja, poprzez której wywołanie, użytkownik wyraża chęć otwarcia tajemnicy, jednocześnie dodając swój identyfikator i klucz do web serwisu. Jako argumenty przyjmuje identyfikator, klucz i nazwę tajemnicy. NamberOfWilling - zwraca liczbę użytkowników chcących pobrać tajemnicę. Jako parametr przyjmuje nazwę tajemnicy. OpenSecret – sprawdza liczbę użytkowników, którzy wyrazili chęć przeczytania tajemnicy. Jeżeli ich liczba jest równa bądź większa od minimalnej liczby powierników ustalonej przez właściciela, otwiera tajemnicę, w przeciwnym wypadku zwraca pusty ciąg znaków. 7 Podsumowanie Aplikacja „Biblioteka Tajemnic” dzięki wykorzystaniu protokołu Shamira w sposób całkowicie bezpieczny i kontrolowany przez nadawcę daje możliwość udostępniania danych tylko wybranym powiernikom. Jej funkcjonalność może być wykorzystana szczególnie w dziedzinie prawa spadkowego, gdzie obecność spadkobierców jest niezbędna do odczytania testamentu a nie mają oni możliwości stawienia się w biurze prawnika. Wystarczy że zarejestrują się w serwisie „Biblioteka Tajemnic” i zostaną dodani do dokumentu jako powiernicy. Aplikacja w przekonaniu autorów, w znacznym stopniu może usprawni ć wy żej opisane działania. Bibliografia Dostępny w Internecie: http://www.dura.net76.net/Uns-Dzielenie_sekretu-er.php [2] Jakubski, A.: Kryptograficzne metody dzielenia sekretu, Częstochowa 2008 [3] Shamir,A. Hot to Share a Secret [oneline], 1979, Dostępny w Internecie: http://securespeech.cs.cmu.edu/reports/shamirturing.pdf [1] Dzielenie Sekretu, [oneline], 2009, 8