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