Rozproszony system dostępu do informacji wraŜliwych

Transkrypt

Rozproszony system dostępu do informacji wraŜliwych
Politechnika Łódzka
Instytut Informatyki
PRACA DYPLOMOWA MAGISTERSKA
Rozproszony system dostępu do informacji
wraŜliwych
Wydział Fizyki Technicznej, Informatyki i Matematyki Stosowanej
Promotor: dr Michał Morawski
Dyplomant: Tomasz Witkowski
Nr albumu: 127350
Kierunek: Informatyka
Specjalność: Sieci Komputerowe i Systemy Teleinformatyczne
Łódź 14.09.2009
Instytut Informatyki
90-924 Łódź, ul. Wólczańska 215, budynek B9
tel. 042 631 27 97, 042 632 97 57, fax 042 630 34 14 email: [email protected]
Spis treści
Wykaz skrótów i akronimów ................................................................................ 5
1
Wstęp ........................................................................................................... 6
2
Cel i zakres pracy ........................................................................................ 7
3
Infrastruktura klucza publicznego ................................................................. 7
3.1
4
Certyfikaty X.509 ........................................................................................ 10
4.1
Struktura i opis pól .............................................................................. 11
4.2
Rozszerzenia ...................................................................................... 15
4.2.1
UŜycie klucza (ang. Key usage) ................................................... 15
4.2.2
Polityki certyfikacji (ang. Certificate Policies) ................................ 16
4.2.3
Alternatywna nazwa posiadacza (ang. Subject alternative name) 16
4.2.4
Podstawowe ograniczenia (ang. Basic constraints)...................... 17
4.2.5
Ograniczenia nazw (ang. Name constraints) ................................ 17
4.2.6
Rozszerzone uŜycie klucza (ang. Extended key usage)............... 18
4.3
Odwoływanie certyfikatów ................................................................... 18
4.4
Weryfikacja certyfikatu ........................................................................ 19
4.4.1
Zawartość ..................................................................................... 19
4.4.2
ŚcieŜka certyfikacji ....................................................................... 20
4.5
5
Kryptografia klucza publicznego ......................................................... 10
Podsumowanie ................................................................................... 20
Certyfikaty Atrybutowe ................................................................................ 21
5.1
Struktura i opis pól .............................................................................. 22
5.2
Atrybuty i ich typy ................................................................................ 25
5.2.1
Informacje
uwierzytelniające
(ang.
Service
Authentication
Information) ............................................................................................... 26
5.2.2
ToŜsamość (ang. Access Identity) ................................................ 27
5.2.3
Podmiot odpowiedzialny (ang. Charging Identity)......................... 27
str. 2
5.2.4
Grupa - (ang. Group) .................................................................... 27
5.2.5
Rola (ang. Role) ........................................................................... 27
5.2.6
Poziom Dostępu (ang. Clearance)................................................ 28
5.3
Rozszerzenia ...................................................................................... 28
5.3.1
ToŜsamość audytowa (ang. Audit Identity) ................................... 29
5.3.2
Odbiorcy certyfikatu (ang. AC Targeting) ..................................... 29
5.3.3
Identyfikator klucza autoryzacyjnego (ang. Authority Key Identifier)
..................................................................................................... 29
5.3.4
Dostęp do danych wydawcy (ang. Authority Information Access) i
miejsca dystrybucji list CRL (ang. CRL Distribution Points) ....................... 30
5.3.5
5.4
Szyfrowanie atrybutów ........................................................................ 30
5.5
Weryfikacja certyfikatu ........................................................................ 31
5.6
Odwoływanie ....................................................................................... 32
5.6.1
Brak odwołań (ang. Never revoke) ............................................... 32
5.6.2
Wskaźnik na CRL w certyfikacie (ang. Pointer at AC) .................. 32
5.7
6
Brak informacji o odwołaniach (ang. No Revocation Available).... 30
Podsumowanie ................................................................................... 32
Przechowywanie kluczy. ............................................................................. 34
6.1
Depozyty kluczy .................................................................................. 34
6.2
Podział klucza ..................................................................................... 35
6.3
Schematy podziału sekretu ................................................................. 35
6.4
Schemat , .................................................................................... 35
6.5
Shamir’s secret sharing scheme ......................................................... 36
6.6
Zarządzanie fragmentami ................................................................... 38
6.6.1
Weryfikowalny podział sekretu ..................................................... 38
6.6.2
Verifiable Secret Sharing (VVS) ................................................... 39
6.6.3
Nieinteraktywna metoda weryfikacji fragmentów .......................... 41
6.6.4
Proaktywne metody zarządzania fragmentami ............................. 42
str. 3
6.6.5
Odnawianie fragmentów ............................................................... 43
6.6.6
Sprawdzanie fragmentów ............................................................. 43
6.6.7
Rekonstrukcja zniszczonych/ujawnionych fragmentów ................ 44
6.7
7
Opis systemu .............................................................................................. 46
7.1
ZałoŜenia projektu ............................................................................... 46
7.2
Narzędzia i technologie ....................................................................... 46
7.2.1
Technologie .................................................................................. 47
7.2.2
Narzędzia ..................................................................................... 48
7.3
Wymagania sprzętowe ........................................................................ 50
7.4
Opis implementacji .............................................................................. 50
7.4.1
Konfiguracja wstępna ................................................................... 53
7.4.2
Struktura bazy .............................................................................. 56
7.5
8
Podsumowanie ................................................................................... 45
Testy ................................................................................................... 59
Wnioski ....................................................................................................... 61
Wykaz rysunków ............................................................................................... 63
Bibliografia ........................................................................................................ 63
str. 4
Wykaz skrótów i akronimów
AA (Attribute authority) Podmiot wydający certyfikat atrybutowy.
AC (Attribute Certificate) Certyfikat atrybutowy jest dokumentem elektronicznym
pozwalającym na powiązanie między uŜytkownikiem a przyznanymi mu przez
AA prawami.
ASN.1 (Abstract Syntax Notation One) Notacja wykorzystywana do opisu
struktur danych wykorzystywana w telekomunikacji i sieciach komputerowych
CRL (Certificate revocation list) Lista odwołań certyfikatów to struktura danych
zawierająca listy numerów seryjnych certyfikatów, które zostały odwołane.
CSS (Cascading Style Sheets) zestaw znaczników pozwalających na
formatowanie wyglądu stron internetowych
ASN.1 DER (Distinguished Encoding Rules) Format opisujący strukturę na
podstawie wzorca znacznik – długość – wartość.
DN (Distinguished name) – unikalna nazwa. Jest to wpis uŜywany w serwerach
LDAP oraz certyfikatach X.509 pozwalający jednoznacznie zidentyfikować
zasób lub podmiot. Przykład dn: cn=Tomasz Witkowski,dc=2imagine,dc=pl
DNS (Domain name system) system serwerów oraz protokół pozwalający na
translację nazw kanonicznych na adresy IP.
Homomorfizm – definicja
HTML (HyperText Markup Language) język wykorzystywany do tworzenia stron
WWW
OID (Object Identifier) unikalny ciąg znaków identyfikujący obiekt danego typu.
PEM (Privacy Enhanced Mail) format wykorzystywany do przechowywania
certyfikatów X.509
PKC (Public Key Certificate) Document elektroniczny pozwalający na
powiązanie danych podmiotu z uŜywanym przez niego kluczem publicznym
str. 5
1 Wstęp
Rosnący nacisk ze strony instytucji takich jak Unia Europejska, propagujących
zachowania proekologiczne przyczynia się do szukania i wykorzystywania
sposobów, które umoŜliwią zmniejszenie zuŜycia papieru. Widoczny jest
ogólnoświatowy trend mający na celu zastąpienie tradycyjnych dokumentów
wykorzystywanych
w
administracji
publicznej
ich
elektronicznymi
odpowiednikami. Zmiany legislacyjne przeprowadzane w Polsce mają za
zadanie w coraz większym stopniu umoŜliwiać wykorzystanie kwalifikowanego
podpisu
elektronicznego
oraz
certyfikatów
klucza
publicznego
do
elektronicznego kontaktu z urzędami. Przykładem takiej zmiany jest poprawka
przyjęta przez Senat, która umoŜliwi od 1 października 2009 składanie
protestów oraz odwołań z wykorzystaniem e-podpisu [1]. Zastąpienie
tradycyjnych dokumentów elektronicznymi, poza ekologicznym ma równieŜ
wymiar finansowy i praktyczny - nakłady na archiwizację i przechowywanie
dokumentów mogą być znacznie niŜsze, a wyszukiwanie i dostęp do tak
składowanych danych łatwiejszy.
W dzisiejszym świecie konieczność szyfrowania lub podpisywania przesyłanych
danych
stała
się
codziennością.
Podczas
wykorzystywania
technologii
kryptograficznych bardzo często napotykany jest problem przechowywania
kluczy. MoŜliwość przechowywania ich we fragmentach w rozproszonych
lokalizacjach
pozwala
na
znaczne
zwiększenie
ich
bezpieczeństwa
i
dostępności. Schematy podziału , stają się niezwykle waŜnym narzędziem
archiwizacji i ochrony danych wraŜliwych.
Specyfika systemów takich jak systemy zarządza danymi w słuŜbie zdrowia,
korzystających z infrastruktury PKI, często opierają zakresy uprawnień nie o
toŜsamość danego uŜytkownika, lecz o jego przynaleŜność do pewnej grupy
bądź inne specyficzne cechy. Zastosowanie certyfikatów atrybutowych pozwala
na stworzenie wygodnego mechanizmu zarządzania przywilejami uŜytkownika
bez konieczności ingerencji w dane zawarte w jego certyfikacie PKC. Wraz z
rosnącą liczbą takich systemów odkrywane są coraz to nowe zastosowania tej
technologii.
str. 6
2 Cel i zakres pracy
Celem
pracy
jest
omówienie
zagadnień
związanych
z
certyfikatami
atrybutowymi X.509 – ich strukturą oraz zastosowaniami. Kolejnym z zagadnień
jest przedstawieniem metod bezpiecznego przechowywania kluczy prywatnych
przy uŜyciu schematów podziału, takich jak schemat Shamira. Część
praktyczna ma na celu stworzenie systemu zarządzania uprawnieniami
pracowników
pewnej
firmy,
w
oparciu
o
wykorzystanie
certyfikatów
atrybutowych.
Praca składa się z trzech części, z czego pierwsza – teoretyczna przedstawiona
została w rozdziałach do 3 do 6. Opis części praktycznej, został zamieszczony
w rozdziale 7, natomiast wnioski w rozdziale 8.
Zakres pracy obejmuje omówienie dwóch głównych zagadnień teoretycznych,
części praktyczniej oraz wniosków. Pierwsze z zagadnień dotyczy infrastruktury
klucza publicznego, ze zwróceniem szczególnej uwagi na przedstawienie
moŜliwości oferowanych przez certyfikaty klucza publicznego oraz certyfikaty
atrybutowe. Drugie z nich przedstawia polityki przechowywania danych
prywatnych, takie jak depozyty kluczy czy wykorzystanie schematów podziału
do przechowywania informacji niejawnej w rozproszeniu. W części praktycznej
przedstawiony zostanie projekt oraz opis implementacji systemu pozwalającego
na zarządzanie przywilejami pracowników firmy.
3 Infrastruktura klucza publicznego
Infrastruktura klucza publicznego PKI (ang. Public Key Infrastructure) jest
zestawem
procedur,
mechanizmów,
dokumentów
i
ról
uŜytkowników
pozwalających, w oparciu o kryptografie klucza publicznego PKC (ang. Public
Key Cryptography), na takie operacje jak: tworzenie cyfrowych podpisów
dokumentów, szyfrowanie danych, wydawanie certyfikatów oraz szeroko pojęte
zarządzanie nimi. Zawarty w pracy [2] przykład w bardzo przystępny sposób
obrazuje infrastrukturę PKI, porównując ją do sieci energetycznej. „Elektrownie,
linie przesyłowe wysokiego, średniego oraz niskiego napięcia oraz inne
str. 7
urządzenia składają się na całość infrastruktury energetycznej. Pozwala ona
odbiorcy w prosty sposób podłączyć urządzenie elektryczne, które korzystając z
energii dostarczonej przez sieć, będzie mogło wykonać określone zadanie.
Oznacza to, Ŝe infrastruktura udostępnia usługi, do których odbiorca moŜe
uzyskać dostęp i wykorzystać je we własnym celu.”
W przypadku PKI podstawowymi elementami – rolami wchodzącymi w skład
infrastruktury są:
•
Urząd rejestracji (RA) – jego zadaniem jest potwierdzenie autentyczności
danych jakie podaje podmiot ubiegający się o certyfikat.
•
Urząd certyfikacji (CA) – jest odpowiedzialny za wydawanie oraz
odwoływanie certyfikatów
•
Posiadacz certyfikatu – składa wniosek do RA, po wydaniu certyfikatu
moŜe go uŜywać do szyfrowania danych oraz podpisu cyfrowego
•
Podmiot weryfikujący certyfikat – jego zadaniem jest weryfikacja
poprawności certyfikatu
•
Repozytoria – słuŜą do publicznego przechowywania PKC oraz list
odwołań certyfikatów CRL (ang. Certificate Revocation List)
Poza elementami wymienionymi powyŜej, PKI opiera się takŜe na wyborze
pewnej liczby głównych urzędów certyfikacji (ang. Root CA), co do których
panuje powszechne przekonanie o ich uczciwości. Następnie urzędy te przy
pomocy własnych certyfikatów mogą wydawać certyfikaty niŜszego poziomu. W
ten sposób powstaje hierarchia certyfikatów.
str. 8
Rysunek 1 Przykład hierarchii certyfikatów
W protokole TCP/IP, z którego korzysta w dzisiejszych czasach znaczna
większość
uŜytkowników,
nie
zostały
zaimplementowane
mechanizmy
zabezpieczające przesyłane dane. Wykorzystanie moŜliwości oferowanych
przez
infrastrukturę
pozwala
na
uzyskania
bezpiecznych
metod
przechowywania oraz przesyłania danych przez publicznie dostępne sieci
komputerowe takie jak Internet.
Poufność
danych
zapewniona
jest
poprzez
szyfrowanie
wiadomości
wykorzystujące klucz publiczny odbiorcy – tylko on przy wykorzystaniu swojego
klucza prywatnego będzie w stanie otrzymane informacje odszyfrować.
Ochrona przed zagroŜeniem podmiany danych w trakcie przesyłania przez sieć
jest uzyskiwana poprzez wykorzystanie podpisu cyfrowego. Nadawca, przy
pomocy własnego klucza prywatnego, koduje tzw. skrót wiadomości ( ang.
str. 9
Message Digest lub hash), a następnie przesyła dane wraz ze skrótem do
odbiorcy. Ten po otrzymaniu wiadomości moŜe sprawdzić jej integralność,
samodzielnie tworząc jej skrót i porównując go z odkodowanym, przy
wykorzystaniu klucza publicznego nadawcy, skrótem, który otrzymał.
Niezaprzeczalność nadawcy wiadomości moŜe zostać potwierdzona poprzez
wykorzystanie certyfikatu klucza publicznego oraz opisanego powyŜej,
mechanizmu tworzenia podpisu cyfrowego.
3.1 Kryptografia klucza publicznego
PKC (ang. Public Key Cryptography) będące podstawą PKI, jest podejściem
kryptograficznym opartym na wykorzystywaniu pary kluczy – jeden z nich słuŜy
do szyfrowania, drugi do deszyfrowania. Rodzina algorytmów realizująca to
podejście korzysta z funkcji jednokierunkowych. Zaletą tych funkcji jest fakt, iŜ
w łatwy sposób moŜna uzyskać wartości funkcji - istnieje algorytm
wielomianowy, który ją oblicza, a bardzo kłopotliwe jest znalezienie jej
przeciwobrazu – Ŝaden wielomianowy algorytm probabilistyczny nie potrafi
odnaleźć
tego
elementu
w
prawdopodobieństwem
większym
niŜ
zaniedbywalne. Funkcję nazywamy zaniedbywalną gdy jej wartości dąŜą do
zera szybciej niŜ dla jakiegokolwiek wielomianu [3].
Więcej informacji na temat systemów kryptograficznych wykorzystujących
klucze publiczne moŜna znaleźć w pracach: [4], [5], [6], [7].
4 Certyfikaty X.509
Certyfikatem klucza publicznego PKC (ang. Public Key Certificate) nazywamy
zawarte w cyfrowo podpisanej strukturze, powiązanie pomiędzy toŜsamością
podmiotu z jego kluczem publicznym. Struktura podpisywana jest, po uprzedniej
weryfikacji danych podmiotu, przez centrum certyfikacji. W Polsce rolę
głównego CA pełni, prowadzony przez departament ochrony Narodowego
Banku Polskiego, Narodowe Centrum Certyfikacji.
str. 10
Standard X.509 do identyfikacji obiektów tego samego typu, takich jak na
przykład rodzaj atrybutu czy rozszerzenia, wykorzystuje identyfikatory OID (ang.
Object Identifier). OID jest unikalnym ciągiem
ci
znaków, w zaleŜności
zaleŜno
od przyjętej
notacji, złoŜonym ze znaków alfanumerycznych lub cyfr oraz kropek,
identyfikującym
dany
typ
obiektu
obiektu.
ZałoŜeniem
eniem
tego
mechanizmu
jest
dostarczenie globalnie unikalnych wartości dla kaŜdego
dego typu
typ
obiektu.
Identyfikatory są zorganizowane w strukturę
stru
drzewiastą,
ą, pozwalającą
pozwalaj
na
tworzenie podtypów poszczególnych gałęzi.
gał zi. Taka hierarchia pozwala na
logiczne usystematyzowanie zawartości
zawarto
drzewa.
Szczegółowy opis składni identyfikatorów OID moŜna
mo
znaleźć w [8].
Aktualne rekomendacje zalecają
zalecaj uŜycie certyfikatów PKC wersji 3.
3 Opis struktur
zawarty w poniŜszym
szym rozdziale został przygotowany w oparciu o dokumentację
dokumentacj
dotyczącą właśnie
nie tej wersji.
4.1 Struktura i opis pól
Pola w certyfikacie
ikacie zapisywane są
s w formacie ASN.1 DER [9]
Rysunek 2 Certyfikat klucza publicznego X.509 [10]
str. 11
Certificate ::= SEQUENCE {
tbsCertificate
TBSCertificate,
signatureAlgorithm
AlgorithmIdentifier,
signatureValue
BIT STRING }
TBSCertificate ::= SEQUENCE {
version
[0] EXPLICIT Version DEFAULT v1,
serialNumber
CertificateSerialNumber,
signature
AlgorithmIdentifier,
issuer
Name,
validity
Validity,
subject
Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
extensions
[3] EXPLICIT Extensions OPTIONAL
-- If present, version MUST be v3
}
Algorytm podpisu (ang. Signature Algorithm) – zawiera identyfikator
algorytmu uŜytego przez CA do wygenerowania podpisu certyfikatu.
AlgorithmIdentifier
algorithm
parameters
::=
SEQUENCE {
OBJECT IDENTIFIER,
ANY DEFINED BY algorithm OPTIONAL
}
Zawartość Podpis (ang. Signature Value) – Zawiera podpis cyfrowy wydawcy
certyfikatu, obliczony dla struktury TBSCertificate
Wersja (ang. Version) – zawiera wartość liczbową reprezentującą wersje
certyfikatu klucza publicznego.
Version
::=
INTEGER
{
v1(0), v2(1), v3(2)
}
Numer Seryjny (ang. Serial number) – Wartość liczbowa, unikalna dla
kaŜdego certyfikatu podpisywanego przez tego samego wydawcę. Wartość
tego pola w połączeniu z informacjami zawartymi w polu DN (distinguished
name) pozwala na jednoznaczną identyfikację certyfikatu.
CertificateSerialNumber
::=
INTEGER
str. 12
Podpis (ang. Signature) – Pole to musi zawierać tę samą wartość, co pole
Signature Algorithm.
Wydawca (ang. Issuer) – zawiera informacje pozwalające na zidentyfikowanie
wydawcy certyfikatu. Struktura ta zawiera zestaw atrybutów zawierających
informacje o podmiocie, takich jak: Kraj (ang. country), Nazwa organizacji (ang.
organization), Jednostka organizacyjna (ang. organizational unit), kwalifikator
nazwy (ang. distinguished name qualifier), stan (ang. state), nazwa prowincji
(ang. province name), nazwa potoczna (ang. common name), numer seryjny
(ang. serial number). [11] zaleca równieŜ, aby systemy komputerowe
implementujące obsługę certyfikatów były w stanie obsłuŜyć dodatkowe
atrybuty: społeczność (ang. locality), tytuł (ang. title), nazwisko (ang. surname),
inicjały (ang. initials), pseudonim (ang. pseudonym), pokolenie (ang. generation
qualifier)
Name ::= CHOICE { -- only one possibility for now -rdnSequence RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET SIZE (1..MAX) OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type
AttributeType,
value
AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY -- DEFINED BY AttributeType
DirectoryString ::= CHOICE {
teletexString
printableString
universalString
utf8String
bmpString
TeletexString (SIZE (1..MAX)),
PrintableString (SIZE (1..MAX)),
UniversalString (SIZE (1..MAX)),
UTF8String (SIZE (1..MAX)),
BMPString (SIZE (1..MAX)) }
Termin waŜności (ang. Validity Period) – okres waŜności certyfikatu. Jest to
okres, w którym CA gwarantuje, Ŝe będzie utrzymywał informacje na temat
statusu danego certyfikatu [11]. Struktura przechowywana w tym polu składa
się z dwóch podstruktur zawierających daty, notBefore oraz notAfter,
str. 13
oznaczających odpowiednio datę początku i końca okresu, w którym certyfikat
uwaŜany będzie za aktualny. Daty mogą być zapisywane w jednym z dwóch
formatów - UTCTime lub GeneralizedTime – jednak pierwszy z nich, ze
względu na postać zapisu YYMMDDHHMMSSZ, pozwala na oznaczenie czasu
tylko do roku 2049. Wynika to z faktu, Ŝe dwie pierwsze cyfry (YY), gdy ich
wartość jest wieksza bądź równa 50, są interpretowane jako rok 19YY. W celu
zapewnienia certyfikatowi nieograniczonego okresu waŜności polu notAfter,
korzystając
ze
struktury
GeneralizedTime,
naleŜy
nadać
wartość
99991231235959Z
Validity ::= SEQUENCE {
notBefore
Time,
notAfter
Time }
Time ::= CHOICE {
utcTime
generalTime
UTCTime,
GeneralizedTime }
Podmiot (ang. Subject) – zawiera informacje dotyczące podmiotu, dla którego
certyfikat został wystawiony. Do opisu uŜywana jest identyczna struktura jak w
przypadku pola Issuer. Dodatkowo, jeŜeli zawartości tych dwóch pól są równe,
będzie to oznaczało ze certyfikat jest wystawiony przez jego posiadacza (ang.
self-issued)
Informacje o kluczu podmiotu (ang. Subject Public Key Info) - przechowuje
dane na temat klucza publicznego podmiotu oraz identyfikatora algorytmu,
którego uŜywa klucz.
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm
AlgorithmIdentifier,
subjectPublicKey
BIT STRING }
Rozszerzenia (ang. Extensions) – lista rozszerzeń certyfikatu, Patrz 4.2
Extensions
::=
Extension ::=
extnID
critical
SEQUENCE SIZE (1..MAX) OF Extension
SEQUENCE {
OBJECT IDENTIFIER,
BOOLEAN DEFAULT FALSE,
str. 14
extnValue
OCTET STRING
-- contains the DER encoding of an ASN.1 value
-- corresponding to the extension type identified
-- by extnID
}
4.2 Rozszerzenia
Rozszerzenia zostały dodane do 3. wersji certyfikatu klucza publicznego.
Pozwalają
one
na
przypisywanie
dodatkowych
atrybutów
podmiotowi
posługującemu się certyfikatem, bądź jego kluczowi publicznemu. Format
umoŜliwia definiowanie własnych rozszerzeń, które pozwalają na dostosowanie
zawartości do unikalnych zastosowań. KaŜde z rozszerzeń zawiera pole
określające „krytyczność” rozszerzenia critical. W przypadku kiedy jego
wartość została ustawiona na TRUE system, który nie potrafi rozpoznać lub
obsłuŜyć danego rozszerzenia jest zobligowany do odrzucenia całości
certyfikatu. Poza polem określającym „krytyczność” rozszerzenie zawiera
równieŜ pole extnID przechowujące OID określające typ rozszerzenia oraz
przechowywaną w polu extnValue wartość. Certyfikat moŜe zawierać
wyłącznie jedną instancję rozszerzenia danego typu.
Do rozszerzeń, które muszą być obsługiwane, naleŜą:
4.2.1 UŜycie klucza (ang. Key usage)
Pozwala na określenie do jakich celów moŜe być wykorzystywany klucz
publiczny zamieszczony w certyfikacie zawierającym to rozszerzenie. Według
specyfikacji zawartej w [11] musi być ono dodane, jeŜeli klucz jest
wykorzystywany w celu podpisywania innych certyfikatów bądź list odwołań
certyfikatów CRL
id-ce-keyUsage OBJECT IDENTIFIER ::=
KeyUsage ::= BIT STRING {
digitalSignature
nonRepudiation
keyEncipherment
dataEncipherment
keyAgreement
keyCertSign
cRLSign
{ id-ce 15 }
(0),
(1), -- recent editions of X.509 have
-- renamed this bit to contentCommitment
(2),
(3),
(4),
(5),
(6),
str. 15
encipherOnly
decipherOnly
(7),
(8) }
4.2.2 Polityki certyfikacji (ang. Certificate Policies)
Definiuje warunki polityki, jakie zostały przypisane do certyfikatu. Określają one
zastosowania, do których moŜe być on uŜyty.
id-ce-certificatePolicies OBJECT IDENTIFIER ::=
{ id-ce 32 }
anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
PolicyInformation ::= SEQUENCE {
policyIdentifier
CertPolicyId,
policyQualifiers
SEQUENCE SIZE (1..MAX) OF
PolicyQualifierInfo OPTIONAL }
4.2.3 Alternatywna nazwa posiadacza (ang. Subject alternative
name)
Rozszerzenie to musi zostać uŜyte w sytuacji, kiedy pole Subject jest
pozostawione przez CA puste. Pozwala ono na dołączenie dodatkowych
danych pozwalających na identyfikację podmiotu, takich jak adres email, nazwa
DNS, adres IP
id-ce-subjectAltName OBJECT IDENTIFIER ::=
{ id-ce 17 }
SubjectAltName ::= GeneralNames
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
GeneralName ::= CHOICE {
otherName
rfc822Name
dNSName
x400Address
directoryName
ediPartyName
uniformResourceIdentifier
iPAddress
registeredID
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
OtherName,
IA5String,
IA5String,
ORAddress,
Name,
EDIPartyName,
IA5String,
OCTET STRING,
OBJECT IDENTIFIER }
OtherName ::= SEQUENCE {
str. 16
type-id
value
OBJECT IDENTIFIER,
[0] EXPLICIT ANY DEFINED BY type-id }
EDIPartyName ::= SEQUENCE {
nameAssigner
partyName
[0]
[1]
DirectoryString OPTIONAL,
DirectoryString }
4.2.4 Podstawowe ograniczenia (ang. Basic constraints)
Rozszerzenie podstawowych warunków ograniczeń pozwala na określenie czy
właściciel danego certyfikatu moŜe być wydawcą oraz czy istnieją ograniczenia
względem długości ścieŜki certyfikacji (ang. Validation Path). Ograniczenia
zawarte w polu pathLenConstraint definiują maksymalną liczbę zagłębień w
strukturze certyfikatów pośrednich, które zostały wydane przez właściciela
certyfikatu. Wartość tego pola brana jest pod uwagę tylko i wyłącznie w
przypadku ustawienia w polu cA wartości TRUE.
id-ce-basicConstraints OBJECT IDENTIFIER ::=
{ id-ce 19 }
BasicConstraints ::= SEQUENCE {
cA
BOOLEAN DEFAULT FALSE,
pathLenConstraint
INTEGER (0..MAX) OPTIONAL }
4.2.5 Ograniczenia nazw (ang. Name constraints)
Ograniczenia nazw określają przestrzeń nazw jaka musi być uŜywana przez
certyfikaty podpisane przy pomocy certyfikatu zawierającego to rozszerzenie.
Ograniczenia te dotyczą zawartości pola Subject oraz, jeŜeli jest uŜywane,
rozszerzenia subjectAlternativeNames.
id-ce-nameConstraints OBJECT IDENTIFIER ::=
NameConstraints ::= SEQUENCE {
permittedSubtrees
[0]
excludedSubtrees
[1]
{ id-ce 30 }
GeneralSubtrees OPTIONAL,
GeneralSubtrees OPTIONAL }
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
GeneralSubtree ::= SEQUENCE {
base
GeneralName,
str. 17
minimum
maximum
[0]
[1]
BaseDistance DEFAULT 0,
BaseDistance OPTIONAL }
BaseDistance ::= INTEGER (0..MAX)
4.2.6 Rozszerzone uŜycie klucza (ang. Extended key usage)
Podobnie jak Key usage umoŜliwia definiowanie celów, do których moŜe być
uŜywany zawarty w certyfikacie, klucz publiczny z tą róŜnicą, Ŝe pozwala na
definicje własnych zastosowań.
id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
KeyPurposeId ::= OBJECT IDENTIFIER
4.3 Odwoływanie certyfikatów
Kiedy certyfikat jest wydawany, ustawiana jest wartość pola Validity,
opisanego szczegółowo w punkcie 4.1 . Jednocześnie czynione jest załoŜenie,
Ŝe wydany dokument będzie mógł być uŜywany przez cały okres waŜności.
Zdarzają się jednak sytuacje, w których do odwołania certyfikatu musi dojść
przed wygaśnięciem jego natywnego okresu waŜności. Potrzeba taka moŜe być
spowodowana na przykład zmianą nazwy podmiotu, ujawnieniem lub
podejrzeniem ujawnienia odpowiadającego kluczowi publicznemu klucza
prywatnego.
Standard X.509 definiuje jedną metodę pozwalającą na odwołanie certyfikatu
[12]. Zakłada ona okresowe wydawanie przez CA, bądź podmiot autoryzowany
przez CA do tego celu,
podpisanych elektronicznie struktur danych
nazywanych Listami odwołań certyfikatów CRL (ang. Certificate revocation list).
Ta dostępna publicznie lista zawiera numery seryjne certyfikatów, które z
jakiegoś powodu utraciły waŜność. Systemy korzystające ze standardu X.509,
wraz ze sprawdzeniem pola Validity są zobligowane do sprawdzenia czy
certyfikat o danym numerze seryjnym nie został umieszczony na liście odwołań
publikowanej przez wydawcę certyfikatu lub podmiot uprawniony.
str. 18
Struktura CRL wersji 2.
CertificateList ::= SEQUENCE {
tbsCertList
TBSCertList,
signatureAlgorithm
AlgorithmIdentifier,
signatureValue
BIT STRING }
TBSCertList ::=
version
SEQUENCE
{
Version OPTIONAL,
-- if present, MUST be v2
signature
AlgorithmIdentifier,
issuer
Name,
thisUpdate
Time,
nextUpdate
Time OPTIONAL,
revokedCertificates
SEQUENCE OF SEQUENCE {
userCertificate
CertificateSerialNumber,
revocationDate
Time,
crlEntryExtensions
Extensions OPTIONAL
-- if present, version MUST be v2
} OPTIONAL,
crlExtensions
EXPLICIT Extensions OPTIONAL
-- if present, version MUST be v2
}
Szczegółowy opis wszystkich wymienionych pól i struktur został zawarty w [11]
oraz [13].
4.4 Weryfikacja certyfikatu
Walidacja jest procesem sprawdzania poprawności oraz wiarygodności danych
zawartych w certyfikacie cyfrowym. Pozwala on, uŜytkownikom weryfikującym
dany certyfikat, na uzyskanie potwierdzenia dotyczącego powiązania pomiędzy
posiadaczem certyfikatu, a uŜywanym przez niego kluczem publicznym.
Szczegółowy opis algorytmu zastał przedstawiony w [12].
4.4.1 Zawartość
Sprawdzenie poprawności zawartości składa się z następujących kroków:
•
Sprawdzenie poprawności podpisu wydawcy.
•
Porównanie pól zawartych w Validity Period z aktualną datą.
•
Upewnienie się czy numer certyfikatu nie znajduje się na liście odwołań
CRL.
str. 19
•
Sprawdzenie czy zawartość pola Issuer jest dokładnie taka sama jak
pola Subject w certyfikacie będącym jeden stopień wyŜej w hierarchii
ścieŜki certyfikacji.
•
Weryfikacja poprawności ograniczeń nazw, opisanych w 4.2.5, dla
wszystkich certyfikatów naleŜących do ścieŜki certyfikacji.
•
Sprawdzenie warunków rozszerzeń Polityki certyfikacji (ang. Certificate
Policie (4.2.2), Policy Constrains oraz Podstawowe ograniczenia (ang.
Basic constraints (4.2.4).
•
Sprawdzenie
czy
długości
ścieŜki
certyfikacji
nie
przekracza
maksymalnej ilości poziomów hierarchii określonej w sprawdzanym
certyfikacie lub PKC względem niego nadrzędnym.
•
Sprawdzenie rozszerzeń UŜycie klucza (ang. Key usage (4.2.1) oraz
Rozszerzone uŜycie klucza (ang. Extended key usage (4.2.6) ze
szczególnym uwzględnieniem moŜliwości uŜycia klucza do podpisywania
dokumentów.
•
Sprawdzenie przez system moŜliwości obsłuŜenia wszelkich rozszerzeń
określonych w certyfikacie jako krytyczne (ang. critical).
4.4.2 ŚcieŜka certyfikacji
Sprawdzanie ścieŜki certyfikacji rozpoczyna się od sprawdzenia certyfikatu,
zgodnie z procedurami opisanymi w punkcie 4.4.1. Kolejnym krokiem jest
sprawdzenie waŜności certyfikatów wydawców pośrednich, na kolejnych
poziomach zagłębienia hierarchii, aŜ do momentu dotarcia do zaufanego
centrum certyfikacji. JeŜeli podczas sprawdzania całej ścieŜki walidacji nie
dojdzie do błędu spowodowanego naruszeniem któregokolwiek z opisanych
powyŜej warunków, algorytm kończy się sukcesem. Oznacza on, Ŝe certyfikat
moŜe zostać uznany za poprawny i wiarygodny.
4.5 Podsumowanie
Przełom spowodowany publikacją [6], zaowocował powstaniem zupełnie
nowych metod w kryptografii. MoŜliwość wykorzystywania jednego klucza do
str. 20
szyfrowania, a innego do deszyfracji pozwoliła na przezwycięŜenie problemów
jakie stwarzało uŜycie kluczy symetrycznych – ten sam klucz uŜywany do
kodowania i dekodowania wiadomości – takich jak problem wstępnej wymiany
kluczy czy skalowalność ich liczby.
Certyfikaty PKC dzięki swoim właściwościom znalazły szerokie zastosowanie.
MoŜliwość szyfrowania danych oraz ich podpisu, przy jednoczesnej moŜliwości
weryfikacji stron stała się podstawą powstania między innymi takich protokołów
jak S/MIME, SSL, TLS, IPSEC.
Wykorzystanie
certyfikatów
klucza
publicznego
pozwala
na
budowę
elastycznych systemów autoryzujących, które nie wymagają pamiętania wielu
haseł. Niestety wykorzystanie ich do takiego celu w szerszej skali generuje
pewne problemy. W sytuacji kiedy podmiot jest uŜytkownikiem kilku systemów
wykorzystujących
PKC
do
przechowywania
danych
pozwalających
na
autoryzację w systemie, podczas wydawania certyfikatu CA musi zebrać
informacje ze wszystkich systemów w jakich podmiot uczestniczy. Takie
zadanie moŜe jednak w niektórych sytuacja być niemoŜliwe – na przykład jeśli
polityka bezpieczeństwa przyjęta w systemie nie pozwala na przekazanie takich
danych nawet zaufanej instytucji jaką jest CA. JeŜeli podmiot nie chce lub nie
moŜe mieć wszystkich danych w jednym certyfikacie zostaje zmuszony do
przechowywania ich w większej ilości. Takie podejście w znacznym stopniu
utrudnia korzystanie z infrastruktury. JeŜeli podmiot posługuje się kilkoma
certyfikatami
uŜytkownicy
mogą
napotkać
problemy
podczas
procesu
weryfikacji jego podpisu elektronicznego. Podmiot będzie zmuszony wraz z
wiadomością oraz podpisem wysyłać takŜe informacje pozwalające na
określenie
którego
certyfikatu
uŜył.
W
przeciwnym
wypadku
podmiot
weryfikujący będzie zmuszony znaleźć certyfikat który będzie odpowiadał
przesłanemu podpisowi cyfrowemu bądź po pierwszym wyborze złego
certyfikatu potraktować wiadomości jako niewiarygodna.
5 Certyfikaty Atrybutowe
Certyfikat atrybutowy jest podpisanym cyfrowo dokumentem elektronicznym,
podobnym do certyfikatu klucza publicznego. Pozwala on na przypisanie praw –
str. 21
atrybutów, określanych przez wydawcę certyfikatu, jego posiadaczowi. Główną
cechą róŜniącą oba typy certyfikatów jest fakt, iŜ certyfikat atrybutowy nie
zawiera klucza publicznego, co za tym idzie AC nie moŜe spełniać roli PKC –
wiązać toŜsamości podmiotu z jego kluczem. Jego zadaniem jest powiązanie,
dość szeroko rozumianej toŜsamości podmiotu z zestawem atrybutów. W
dokumencie RFC [14], będącym podstawą opisu tego rozdziału, pojawia się
przykład dobrze ilustrujący róŜnice pomiędzy wspomnianymi certyfikatami.
„Certyfikat PKC moŜe zostać porównany do paszportu - identyfikuje
posiadacza, jego termin waŜności jest dość długi oraz uzyskanie go nie jest
procedurą banalną. Certyfikat atrybutowy z kolei bardziej przypomina wizę,
która zazwyczaj wydawana jest przez inny organ władzy, na pewien okres
czasu. Okres ten jest zazwyczaj krótszy od terminu waŜności paszportu, a
procedura uzyskania prostsza. Do uzyskania wizy konieczne jest posiadanie
waŜnego paszportu.”
Certyfikat AC niekiedy określany jest mianem certyfikatu autoryzacyjnego.
Wynika to z faktu, iŜ przy jego pomocy, w dość prosty sposób, moŜna dokonać
delegacji takich uprawnień jak prawa dostępu do zasobów lub usług bądź
przynaleŜności do grupy uŜytkowników. Podobny efekt jest moŜliwy do
uzyskania przy wykorzystaniu standardowych certyfikatów PKC, poprzez
implementacje odpowiednich rozszerzeń. PrzewaŜnie jednak takie podejście
nie jest odpowiednie z dwóch powodów [14]. Pierwszym z nich jest czas, na
jaki podmiot otrzymuje uprawnienia. W przypadku umieszczenia np. danych
autoryzacyjnych w certyfikacie klucza publicznego, jego termin waŜności moŜe
być maksymalnie tak długi, jak długość okresu na który przyznano uprawnienia.
To zatem kłóci się z głównym przeznaczeniem PKC – tworzeniem powiązania
toŜsamości z kluczem publicznym. Drugim z powodów, tak jak w przytoczonym
powyŜej cytacie, jest sytuacja, kiedy wydawca PKC nie jest równocześnie
jednostką odpowiedzialną za autoryzację. Taki scenariusz wymaga od wydawcy
kontaktu z jednostka odpowiedzialną, w celu uzyskania danych potrzebnych do
uwierzytelnienia, tak by następnie móc je umieścić w certyfikacie.
5.1 Struktura i opis pól
Struktury wykorzystywane w tym punkcie pochodzą z dokumentu [14]
str. 22
AttributeCertificate ::= SEQUENCE {
acinfo
AttributeCertificateInfo,
signatureAlgorithm
AlgorithmIdentifier,
signatureValue
BIT STRING
}
AttributeCertificateInfo ::= SEQUENCE {
version
AttCertVersion -- version is v2,
holder
Holder,
issuer
AttCertIssuer,
signature
AlgorithmIdentifier,
serialNumber
CertificateSerialNumber,
attrCertValidityPeriod
AttCertValidityPeriod,
attributes
SEQUENCE OF Attribute,
issuerUniqueID
UniqueIdentifier OPTIONAL,
extensions
Extensions OPTIONAL
}
Wersja (ang. Version) Wartość tego pola musi zostać ustawiona na wartość
v2(1), poniewaŜ obecna struktura według standardu X.509-2000 nie jest
wstecznie kompatybilna ze struktura wersji v1 (X.509-1997)
AttCertVersion ::= INTEGER { v2(1) }
Posiadacz (ang. Holder) – Struktura ta pozwala na wykorzystanie jednego z
trzech równowaŜnych sposobów określenia podmiotu, dla którego AC został
wydany. Standard dopuszcza uŜywania więcej niŜ jednego z dopuszczalnych
sposobów, jednak w celu uniknięcia problemu z określeniem, który z nich jest
wiąŜący, a który jedynie wskazówką, rekomenduje się wybór tylko jednej z tych
opcji. JeŜeli AC jest uŜywany w celach autoryzacji w połączeniu z PKC zaleca
się wybór baseCertificateID . W takim przypadku pole Holder (Holder.
baseCertificateID.issuer)
umieszczonym
w
musi
zawierać
odpowiadającym
wartość
certyfikacie
identyczną
klucza
z
publicznego.
DN
W
przypadku uŜycia entityName wartość tego pola musi być identyczna z polem
Subject umieszczonym w PKC lub jedną z wartości rozszerzenia Subject
Alternative Name. W niektórych sytuacjach wymagane jest powiązane
certyfikatu z informacjami innymi niŜ dane podmiotu czy jego certyfikat PKC. W
takich przypadkach moŜliwe jest uŜycie opcji objectDigestInfo. Pozwala ona
na powiązanie certyfikatu AC ze skrótem ( ang. Hash ) obiektu dla którego
str. 23
zostaje wystawiony. Takie rozwiązanie umoŜliwia na przykład tworzenie AC
powiązanych wyłącznie z kluczem publicznym bądź przypisywanie uprawnień
plikom wykonywalnym.
Holder ::= SEQUENCE {
baseCertificateID
IssuerSerial OPTIONAL,
-- the issuer and serial number of
-- the holder's Public Key Certificate
entityName
GeneralNames OPTIONAL,
-- the name of the claimant or role
objectDigestInfo
ObjectDigestInfo OPTIONAL
-- used to directly authenticate the holder,
-- for example, an executable
}
IssuerSerial ::=
issuer
serial
issuerUID
}
SEQUENCE {
GeneralNames,
CertificateSerialNumber,
UniqueIdentifier OPTIONAL
ObjectDigestInfo ::= SEQUENCE {
digestedObjectType ENUMERATED {
publicKey
(0),
publicKeyCert
(1),
otherObjectTypes
(2) },
-- otherObjectTypes MUST NOT
-- be used in this profile
otherObjectTypeID
OBJECT IDENTIFIER OPTIONAL,
digestAlgorithm
AlgorithmIdentifier,
objectDigest
BIT STRING
}
Wydawca (ang. Issuer) – musi zawierać tylko i wyłącznie jedną pozycje w
liście GeneralNames, określającą DN wydawcy certyfikatu.
AttCertIssuer ::= CHOICE {
v1Form
GeneralNames,
v2Form
V2Form
}
V2Form ::= SEQUENCE {
issuerName
baseCertificateID
objectDigestInfo
-- issuerName MUST
-- MUST NOT be used in this
-- profile
-- v2 only
GeneralNames OPTIONAL,
IssuerSerial OPTIONAL,
ObjectDigestInfo OPTIONAL
be present in this profile
str. 24
-- baseCertificateID and objectDigestInfo MUST
-- NOT be present in this profile
}
Podpis (ang. Signature) – Struktura i znaczenie tego pola jest identyczne jak
w przypadku pola Signature Algorithm opisanego,
przy okazji PKC, w
punkcie 4.1
Numer seryjny (ang. Serial number) – Pole, jak w przypadku PKC, słuŜy do
stworzenia unikalnej pary wartości nazwa wydawcy – numer seryjny,
pozwalającej na jednoznaczną identyfikację certyfikatu AC.
Termin waŜności (ang. Attribute Certificate Validity Period) – W odróŜnieniu
od PKC wartości pola zawierającego termin waŜności certyfikatu mogą
korzystać wyłącznie ze struktury GeneralizedTime. Poza tą róŜnicą, znaczenie
i interpretacja tego pola jest identyczna jak opisana w punkcie 4.1
AttCertValidityPeriod ::= SEQUENCE {
notBeforeTime GeneralizedTime,
notAfterTime
GeneralizedTime
}
Atrybuty (ang. Attributes) – Patrz 5.2
Unikalny identyfikator wydawcy (ang. Issuer Unique ID) – Pole to moŜe
zawierać wartość tylko i wyłącznie w sytuacji, kiedy PKC wydawcy zawiera
powyŜszy parametr.
Rozszerzenia (ang. Extentions) – Patrz 5.3
5.2 Atrybuty i ich typy
Lista atrybutów słuŜy do przechowywania informacji, takich jak uprawnienia,
które przy pomocy AC są przypisywane jego posiadaczowi. KaŜda z pozycji
str. 25
figurujących na liście musi posiadać unikalny, w obrębie listy, identyfikator OID
(Object identifier), oraz przynajmniej jedną wartość.
Attribute ::= SEQUENCE {
type
AttributeType,
values
SET OF AttributeValue
-- at least one value is required
}
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType
IetfAttrSyntax ::= SEQUENCE {
policyAuthority GeneralNames
OPTIONAL,
values
SEQUENCE OF CHOICE {
octets
OCTET STRING,
oid
OBJECT IDENTIFIER,
string
UTF8String
}
}
Przykłady standardowych atrybutów, wraz z ich identyfikatorami i znaczeniem
opisano poniŜej. Opisy oraz struktury w nich opisane zostały przygotowane na
podstawie [14].
5.2.1 Informacje uwierzytelniające (ang. Service Authentication
Information)
Atrybut ten jest wykorzystywany do przekazywania systemom informacji
autentykujących posiadacza AC – na przykład pary wartości login-hasło. UŜycie
tego atrybutu pozwala na przechowywanie w polu authInfo zaszyfrowanych
wartości, o których mowa w sekcji 5.4
Name
OID
Syntax
values:
id-aca-authenticationInfo
{ id-aca 1 }
SvceAuthInfo
Multiple allowed
SvceAuthInfo ::=
SEQUENCE {
service
GeneralName,
ident
GeneralName,
authInfo OCTET STRING OPTIONAL
}
str. 26
5.2.2 ToŜsamość (ang. Access Identity)
Podobnie jak opisany powyŜej, ten atrybut słuŜy do autentykacji posiadacza w
systemie, z tą róŜnicą, Ŝe nie umoŜliwia przechowywania danych w postaci
niejawnej.
Name
OID
syntax
values:
id-aca-accessIdentity
{ id-aca 2 }
SvceAuthInfo
Multiple allowed
5.2.3 Podmiot odpowiedzialny (ang. Charging Identity)
W sytuacji, gdy AC pozwala na dostęp do zasobów czy usług podlegających
opłacie, ten atrybut moŜe być wykorzystywany do określenia podmiotu, który
ma zostać za niego obciąŜony.
name
id-aca-chargingIdentity
OID
{ id-aca 3 }
syntax
IetfAttrSyntax
values:
One Attribute value only; multiple values within the
IetfAttrSyntax
5.2.4 Grupa - (ang. Group)
Przechowuje informacje na temat przynaleŜności posiadacza do grup
uŜytkowników. Ich nazwy powinny być tworzone w sposób umoŜliwiający łatwą
identyfikację. [14] przedstawia sytuację, w której w firmach A i B istnieje grupa o
nazwie „administratorzy”. Zastosowanie wartości będącej wyłącznie nazwą
grupy moŜe prowadzić do wieloznaczności.
name
OID
syntax
values:
id-aca-group
{ id-aca 4 }
IetfAttrSyntax
One Attribute value only; multiple values within the
IetfAttrSyntax
5.2.5 Rola (ang. Role)
Pozwala na przypisanie ról pełnionych przez posiadacza certyfikatu. Podobnie
jak w przypadku grupy, nazwa roli powinna być tworzona w sposób pozwalający
na uniknięcie wieloznaczności.
str. 27
RoleSyntax ::= SEQUENCE {
roleAuthority
GeneralNames OPTIONAL,
roleName
GeneralName
}
name
OID
syntax
values:
id-at-role
{ id-at 72 }
RoleSyntax
Multiple allowed
5.2.6 Poziom Dostępu (ang. Clearance)
Struktura zawarta w atrybucie umoŜliwia określenie poziomu dostępu do
informacji poufnych.
Clearance ::= SEQUENCE {
policyId OBJECT IDENTIFIER,
classList ClassList DEFAULT {unclassified},
securityCategories
SET OF SecurityCategory OPTIONAL
}
ClassList ::= BIT
unmarked
unclassified
restricted
confidential
secret
topSecret
}
STRING {
(0),
(1),
(2)
(3),
(4),
(5)
SecurityCategory ::= SEQUENCE {
type
IMPLICIT OBJECT IDENTIFIER,
value
ANY DEFINED BY type
}
5.3 Rozszerzenia
Podobnie jak w przypadku certyfikatu klucza publicznego, rozszerzenia
pozwalają na przypisywanie dodatkowych atrybutów posiadaczowi AC. Poprzez
moŜliwość dodawania własnych rozszerzeń, mechanizm ten umoŜliwia
dostosowanie zawartości certyfikatu do specyficznych wymagań korzystających
z nich systemów komputerowych.
str. 28
5.3.1 ToŜsamość audytowa (ang. Audit Identity)
Ideą tego rozszerzenia jest dostarczenie mechanizmu pozwalającego na
identyfikację posiadacza bez konieczności ujawniania jego toŜsamości.
Pozwala to na zachowanie anonimowości podczas rutynowej pracy, jednak w
przypadku wykrycia podejrzanego zachowania daje moŜliwość jednoznacznego
zidentyfikowania posiadacza certyfikatu.
name
OID
syntax
criticality
id-pe-ac-auditIdentity
{ id-pe 4 }
OCTET STRING
MUST be TRUE
5.3.2 Odbiorcy certyfikatu (ang. AC Targeting)
AC Targeting pozwala na określenie listy serwerów lub systemów, które mogą
wykorzystywać dany certyfikat. Dopuszczalne jest takŜe definiowanie grup
odbiorców, jednak sposób definiowania przynaleŜności nie jest określony przez
standard X.509. Przyjmowane jest załoŜenie, Ŝe serwer wie do jakich grup
naleŜy.
Targets ::= SEQUENCE OF Target
Target ::= CHOICE {
targetName
GeneralName,
targetGroup
GeneralName,
targetCert
TargetCert
}
TargetCert ::= SEQUENCE {
targetCertificate
IssuerSerial,
targetName
GeneralName OPTIONAL,
certDigestInfo
ObjectDigestInfo OPTIONAL
}
name
id-ce-targetInformation
OID
{ id-ce 55 }
syntax
SEQUENCE OF Targets
criticality
MUST be TRUE
5.3.3 Identyfikator klucza autoryzacyjnego (ang. Authority Key
Identifier)
UŜycie
tego
rozszerzenia
ma
za
zadanie
ułatwienie
systemowi,
sprawdzającemu dany certyfikat, weryfikacji podpisu wydawcy [14].
str. 29
name
OID
syntax
criticality
id-ce-authorityKeyIdentifier
{ id-ce 35 }
AuthorityKeyIdentifier
MUST be FALSE
5.3.4 Dostęp do danych wydawcy (ang. Authority Information
Access) i miejsca dystrybucji list CRL (ang. CRL Distribution
Points)
Moduły pozwalają na dodanie informacji na temat miejsca oraz sposobu
publikacji list odwołań certyfikatów. Szczegółowy opis sposobu stosowania oraz
róŜnic między tymi rozszerzeniami moŜna znaleźć w [14].
5.3.5 Brak informacji o odwołaniach (ang. No Revocation Available)
Rozszerzenie pozwala wydawcy na oświadczenie, iŜ dla danego AC nie będą
wydawane Ŝadne informacje na temat odwołań.
name
OID
syntax
criticality
id-ce-noRevAvail
{ id-ce 56 }
NULL (i.e. '0500'H is the DER encoding)
MUST be FALSE
5.4 Szyfrowanie atrybutów
Ze względu na charakter danych jakie mogą być zawarte w AC, moŜe niekiedy
zachodzić konieczność przechowywania ich w formie niejawnej. Standard
przedstawiony w
[14] opisuje moŜliwość szyfrowania atrybutów oraz
przedstawia dokładny algorytm postępowania przy ich dodawaniu. Zakłada on
zakodowanie zestawu atrybutów przeznaczonych dla określonej grupy
odbiorców. Do opisania kaŜdego z takich zestawów wykorzystywana jest
struktura, która po wypełnieniu poddawana jest szyfrowaniu.
ACClearAttrs ::= SEQUENCE {
acIssuer GeneralName,
acSerial INTEGER,
attrs
SEQUENCE OF Attribute
}
str. 30
Zawarcie w ACClearAttrs pól acIssuer oraz acSerial pozwala na
sprawdzenie czy niejawny atrybut został przypisany przez wydawcę AC,
uniemoŜliwiając w ten sposób nieuczciwemu wydawcy certyfikatu atrybutowego
skopiowanie zaszyfrowanej wartości atrybutu i przypisania jej do innego
certyfikatu.
Wykorzystanie kodowania atrybutów ogranicza grupę odbiorców certyfikatu
wyłącznie do podmiotów, które będą w stanie odkodować jego zawartość. W
przypadku kiedy podmiot nie potrafi tego uczynić jest równocześnie
zobligowany do odrzucenia całości AC.
name
OID
Syntax
values
id-aca-encAttrs
{ id-aca 6}
ContentInfo
Multiple Allowed
5.5 Weryfikacja certyfikatu
Proces sprawdzenia poprawności certyfikatu atrybutowego składa się z
następujących kroków:
•
JeŜeli certyfikat AC jest powiązany z certyfikatem PKC, to PKC musi być
poprawny w rozumieniu algorytmu opisanego w 4.4
•
Podpis wydawcy AC oraz jego PKC muszą być poprawne.
•
PKC wydawcy, jeŜeli zawiera rozszerzenie Key usage, musi w nim
zawierać informacje potwierdzające moŜliwość wykorzystania klucza
publicznego do podpisywania dokumentów cyfrowych.
•
Moment, w którym certyfikat został uŜyty musi zawierać się w przedziale
zamkniętym ograniczonym chwilami czasowymi, określonymi w polu
attrCertValidityPeriod. Czas uŜyty do weryfikacji certyfikatu nie
musi być
równy aktualnemu
czasowi,
w którym
operacja
jest
przeprowadzana.
•
W
przypadku
uŜycia
rozszerzenia
Targeting sprawdzający
musi
znajdować się na liście podmiotów, które mogą wykorzystywać dany AC.
str. 31
•
Sprawdzający musi być w stanie zinterpretować i obsłuŜyć wszelkie
rozszerzenia oznaczone jako krytyczne (critical
przeciwnym
przypadku
jest zobowiązany do
=
TRUE), w
odrzucenia takiego
certyfikatu.
Dodatkowe warunki sprawdzania certyfikatów mogą być definiowane w
poszczególnych systemach implementujących obsługę AC. Pozwala to na
dostosowanie AC do potrzeb systemu. Przykładem takiego warunku moŜe
być
odrzucanie
certyfikatów
nie
zawierających
któregokolwiek
z
wymaganych przez serwis atrybutu.
5.6 Odwoływanie
Ze
względu na charakterystykę zastosowań certyfikatów atrybutowych ich
termin waŜności moŜe być bardzo krótki. Często jest on krótszy niŜ czas
potrzebny na odwołanie AC. Wymaga to udostępnienia specyficznych metod
zarządzania odwołaniami certyfikatów.
5.6.1 Brak odwołań (ang. Never revoke)
Podejście to polega na poinformowaniu sprawdzającego certyfikat, przy
pomocy rozszerzenia, o którym mowa w 5.3.5, iŜ AA (ang. Attribute Authority)
nie będzie utrzymywał ani publikował Ŝadnych informacji na temat odwołań tego
certyfikatu.
5.6.2 Wskaźnik na CRL w certyfikacie (ang. Pointer at AC)
Podejście zakłada okresowe udostępnianie przez AA list odwołań, tak jak ma to
miejsce w przypadku PKC (opis w 4.3). Dodatkowo w AC, przy wykorzystaniu
rozszerzeń Authority Information Access i CRL Distribution Points, moŜe zostać
opublikowana informacja na temat miejsc, w których listy odwołań są dostępne.
5.7 Podsumowanie
Wykorzystanie certyfikatów atrybutowych pozwala na rozwiązanie problemu,
opisywanego w 4.5, dotyczącego posiadania przez podmiot kilku certyfikatów.
MoŜliwość oddzielenia informacji o toŜsamości posiadacza od jego uprawnień
sprawia, Ŝe budowa systemów opierających autoryzacje o wykorzystanie PKC i
str. 32
AC staje się łatwiejsza, a takŜe umoŜliwia podmiotowi wydającemu certyfikat
atrybutowy AA na pełną niezaleŜność od urzędu certyfikacji CA.
Certyfikaty atrybutowe mogą znaleźć zastosowanie w aplikacjach tworzonych
dla systemów operacyjnych urządzeń mobilnych, takich jak telefony komórkowe
wyposaŜone w Symbian OS czy SmartPhone [15]. KaŜdy z twórców
oprogramowania jest zobowiązany do posiadania własnego certyfikaty PKC.
Certyfikaty te wydawane są przez komercyjne CA bądź przez samych
producentów urządzeń jak na przykład Nokia. W celu uzyskania moŜliwości
dostępu do wybranych komponentów czy funkcji systemu aplikacja musi zostać
podpisana przez jej autora przy pomocy waŜnego certyfikatu PKC [16].
Informacje na temat praw jakie zostały przypisane aplikacji mogą być zawierane
w certyfikacie atrybutowym. Tak przygotowana aplikacja przed uruchomieniem i
przyznaniem zasobów jest weryfikowana przez system operacyjny. UŜycie
certyfikatów atrybutowych pozwala uniknąć przechowywania w urządzeniu
duŜych ilości informacji zawierających dane o zaufanych dostawcach
oprogramowania, których aplikacje mogą w sposób bezpieczny być instalowane
i uruchamiane w systemie.
Omawiane w tym rozdziale certyfikaty znalazły takŜe zastosowanie w systemie
DIMEDAC będącym implementacją systemu zarządzania przywilejami PMI
(ang. Privilege Management Infrastructure) przygotowanym na potrzeba
zarządzania rozproszonymi bazami danych zawierającymi dane medyczne [17].
W zastosowaniach medycznych bardzo często występuje sytuacja, w której
dane personalne lekarza w Ŝaden sposób nie są w stanie określić jego
kompetencji. Niezbędna jest informacja, na przykład na temat specjalizacji,
uprawnień do przeprowadzania zabiegów itp. Takie dane pozwalają na
sklasyfikowanie przynaleŜności do grupy np. chirurgów o to one, z punktu
widzenia uprawnień, są waŜniejsze od danych personalnych lekarza. Z tego
powodu stosowanie certyfikatów PKC byłoby niewygodne, gdyŜ wiązało by się z
potrzebą budowy całej infrastruktury zarządzającej powiązaniem między
toŜsamością a uprawnieniami lekarza. W takiej sytuacji zalety z wykorzystania
certyfikatów AC są oczywiste.
str. 33
Zastosowanie
certyfikatów
atrybutowych
daje
twórcom
systemów
informatycznych, bardzo elastyczny i wygodny w uŜyciu, mechanizm autoryzacji
oraz określania praw do zasobów. Pozwala to, poprzez wykorzystanie
infrastruktury PKI, na tworzenie bardziej bezpiecznych i często łatwiejszych w
utrzymaniu aplikacji. MoŜliwości oferowane przez ten mechanizm będą
najprawdopodobniej coraz powszechniej wykorzystywane.
6 Przechowywanie kluczy.
W
dobie
Internetu
potrzeba
zachowania
poufności
oraz
integralności
przesyłanych danych, powoduje konieczność stosowania mechanizmów
kryptograficznych.
Wykorzystywanie szyfrowania, bez względu na to czy
uŜywana jest kryptografia klucza symetrycznego czy asymetrycznego, pozwala
na
realizację
tych
celów.
Rodzą
się
jednak
problemy
związane
z
przechowywaniem kluczy. W większości przypadków istnieje tylko jeden klucz
kryptograficzny pozwalający na uzyskanie dostępu do zaszyfrowanych danych.
W sytuacji kiedy dochodzi do jego utraty – awaria nośnika pamięci na którym
był przechowywany, nieobecność osoby znającej klucz itp. – równocześnie
tracony jest dostęp do wszelkich informacji, które zostały zaszyfrowane z jego
pomocą. Równie istotnym zagroŜeniem co utrata klucza jest jego ujawnienie
bądź pozyskanie przez osoby trzecie. Takie sytuacje wymagają zastosowania
mechanizmów,
pozwalających
na
bezpieczne
przechowywanie
kopii
zapasowych klucza, które w przypadku uszkodzenia lub utraty oryginału
zapobiegną sytuacji, w której poufne dane staną się bezuŜyteczne.
6.1 Depozyty kluczy
Najprostszym sposobem zabezpieczenia klucza przed utratą, jest wykonanie
jego kopii i przekazanie jej innej osobie czy teŜ instytucji. Takie rozwiązanie jest
dopuszczalne,
jednak
wymaga od posiadacza pełnego zaufania wobec
powiernika, gdyŜ w sytuacji kiedy klucz prywatny wykorzystywany jest do
tworzenia podpisu cyfrowego, podwaŜona zostaje niezaprzeczalność źródła
podpisu [18]. Zwiększenie szansy na dostępność kopii zapasowej moŜe zostać
uzyskana poprzez zwiększenie ich liczby, jednak to rozwiązanie, z kaŜdą
str. 34
kolejną kopią, zwiększa ryzyko, ujawnienia klucza poprzez ujawnienie
którejkolwiek z jego kopii.
6.2 Podział klucza
W celu uniknięcia problemu opisanego powyŜej moŜna wprowadzić zasadę
ograniczonego zaufania w taki sposób, Ŝe dokonujemy podziału klucza, a
powstałe w ten sposób fragmenty rozdystrybuować, w celu przechowania do
grupy powierników. W tej sytuacji powiernik posiada jedynie fragment sekretu,
którego nie będzie w stanie wykorzystać. Główną wadą tego rozwiązania jest
konieczność posiadania wszystkich fragmentów w celu odtworzenia klucza, co
za tym idzie utworzona kopia naraŜona jest na zniszczenie w momencie kiedy
zniszczeniu ulegnie choćby jedna z jej części.
6.3 Schematy podziału sekretu
Schematy te polegają na podziale sekretu przez dystrybutora D(osoba lub
organizacja odpowiedzialna za podział) i rozdystrybuowania fragmentów pośród
grupy powierników o liczebności . Fragmenty tworzone są w taki sposób, Ŝe
kaŜdy podzbiór fragmentów liczniejszy od minimalnej liczby fragmentów ,
pozwala na odzyskanie sekretu. Jednocześnie jakikolwiek podzbiór uniemoŜliwia odzyskanie sekretu. Schemat taki w literaturze oznaczany jest
jako schemat progowy , (ang. , -threshold scheme).
6.4 Schemat , Podział, w którym wszystkie fragmenty są niezbędne w celu odzyskania
sekretu, opisany we wcześniejszym punkcie, jest najprostszym ze schematów.
MoŜe być on zrealizowany na wiele sposobów – dwa z nich, oparte o
dodawanie oraz o operacje XOR – zostaną przedstawione poniŜej
Sposób 1:
NaleŜy zamienić sekret na reprezentację liczbową , a następnie grupie
1
powierników przydzielić
dowolną
losową
liczbę
, 1. . .
Ostatniemu z powierników przydzielana jest liczba będąca wynikiem
działania … . Suma tak powstałych fragmentów
pozwoli na odzyskanie sekretu .
str. 35
Sposób 2:
Sekret jest przedstawiony w postaci binarnej. Grupie 1 powierników
przydzielane są losowe liczby ( 1. . ) w postaci binarnej, których
długość jest równa długości sekretu . Fragment p0 obliczany jest za
pomocą wzoru … . W celu odzyskania sekretu
naleŜy przeprowadzić operacje XOR na wszystkich fragmentach.
6.5 Shamir’s secret sharing scheme
Schemat Shamira jest przykładem nietrywialnego schematu podziału
klucza/sekretu,
opartym
na
interpolacji
wielomianowej.
W
pracy
[19],
przedstawiającej ten schemat, cytowany jest przykład zagadnienia, które leŜy u
podstaw powstania tej metody: „Jedenastu naukowców pracuje nad tajnym
projektem. Pragną schować dokumentacje w sejfie, tak by tylko sześciu, lub
więcej z nich, jednocześnie było w stanie ów sejf otworzyć. Ile zamków i ile
kluczy jest potrzebnych w celu realizacji takiego rozwiązania?” Przy takich
danych odpowiedzią jest 462 zamków oraz 252 kluczy dla kaŜdego naukowca.
Liczby te rosną w sposób wykładniczy wraz z rosnącą liczbą naukowców
pracujących przy projekcie. Jak widać w realnym świecie zastosowanie takiego
rozwiązania jest co najmniej trudne. Jak kaŜdy schemat, takŜe i schemat
Shamira, składa się z dwóch etapów:
Etap 1: Tworzenie fragmentów
1. Dystrybutor D wybiera dowolny wielomian stopnia 1 gdzie
sekret jest wyrazem wolnym [19]
. . . Wszystkie współczynniki … !
! !
wybierane są w sposób losowy.
2. Dystrybutor D wybiera róŜnych niezerowych wartości ", # 1. . dla których oblicza wartości wielomianu $" %. Po przeprowadzeniu
obliczeń
powiernikom
przekazana
jest
wartość &'" (" , $" %) [20]
Etap 2: Rekonstrukcja sekretu
str. 36
1. W
celu
odtworzenia
sekretu
potrzebujemy
przynajmniej
fragmentów
&'" (" , $" %)
2. UŜywamy interpolacji Lagrange’a w celu odnalezienia unikalnego
wielomianu , takiego Ŝe *'+$" % ,- $" % &'" 3. Sekret otrzymamy obliczając wartość wyrazu wolnego wielomianu
0 W aplikacji będącej częścią praktyczną niniejszej pracy zastosowano
następujące rozwiązanie [19]:
Etap 1: Tworzenie fragmentów
1. Mając podaną reprezentację liczbową sekretu wybierana jest liczba
pierwsza , taka Ŝe / ,- / współczynniki wielomianu wybierane są w sposób losowy spośród liczb naturalnych z przedziału
00, 11 (0 traktujemy jako liczbę naturalną)
2. Obliczamy
&'" $" , $" %mod p%
Rekonstrukcja sekretu odbywa się w sposób analogiczny
Właściwości schematu Shamira [19]:
•
Rozmiar fragmentu nie przekracza rozmiaru sekretu .
•
Przy zachowaniu niezmienionej liczby niezbędnych fragmentów dodawanie kolejnych fragmentów polega na obliczeniu
wartości
wielomianu w kolejnym unikalnym punkcie " .
•
Schemat pozwala na przypisanie wag poszczególnym powiernikom,
poprzez przypisanie im odpowiedniej liczby fragmentów. ZałóŜmy, Ŝe
istnieje firma, w której prezes ma dostęp do tajnych dokumentów. W
str. 37
firmie działa równieŜ rada nadzorcza, w której skład wchodzi 10
członków. W celu zapewnienia bezpieczeństwa poufnym danym, dostęp
do nich poza prezesem, moŜe uzyskać grupa przynajmniej 4 członków
rady nadzorczej. W takiej sytuacji moŜna zastosować schemat Shamira
(4,14) przypisując prezesowi 4 fragmenty, tak by samodzielnie był w
stanie uzyskać dostęp do dokumentów, oraz po jednym dla kaŜdego z
członków rady.
•
Podział Shamira ma właściwość homomorficzną , . Dowód tej
właściwości został opisany w [21]. Oznacza to, Ŝe jeŜeli dane są dwa
sekrety 6 i 7 oraz odpowiadające im fragmenty (1… ) oraz
(+1 … +) i kaŜdy z powierników dokona sumy fragmentów & + (gdzie i 8 01, 9 jest numerem powiernika) otrzyma w ten
sposób fragment sekretu 6 7 [20] .
Reasumując: suma fragmentów sekretów 6 i 7 jest równa fragmentowi
sumy sekretów 6 7 [21].
6.6 Zarządzanie fragmentami
6.6.1 Weryfikowalny podział sekretu
Schemat Shamira zakłada, Ŝe dystrybutor D jest godny zaufania, a tworzone
przez niego fragmenty są poprawne i jako efekt ich połączenia otrzymany
zostanie prawidłowy sekret . Jednak w niektórych sytuacjach powiernicy mogą
wymagać potwierdzenia takiego stanu rzeczy. Rozwiązaniem najprostszym jest
zebranie fragmentów i sprawdzenie czy dla tych punktów istnieje wielomian
stopnia co najwyŜej
1. Jednak takie rozwiązanie jest niedopuszczalne,
pomimo uzyskania przez powierników pewności co do poprawności ich
fragmentów, ze względu na fakt, Ŝe ujawniony zostaje sekret . Przedstawione
rozwiązania oparte są o homomorficzną właściwość podziału Shamira, oraz
korzystają z własności wielomianów mówiącej, Ŝe „JeŜeli stopień sumy
wielomianów jest stopnia t-1 to oba są stopnia maksymalnie 1 lub oba są
stopnia większego niŜ 1” [21]
str. 38
6.6.2 Verifiable Secret Sharing (VVS)
Wersja 1.
ZałoŜeniem tej operacji jest udowodnienie powiernikowi, bez ujawniania
sekretu, Ŝe wielomian uŜyty do stworzenia fragmentu jest co najwyŜej
stopnia 1
Przebieg procedury [20], [21]:
1. Dystrybutor D przy pomocy schematu Shamira generuje fragmenty
&'" (" , $" %)
sekretu , a następnie przesyła je do
powierników.
2. Dystrybutor D wybiera pewną liczbę wielomianów ( np. 100) stopnia co
najwyŜej 1: : … : a następnie przesyła powiernikowi 100
fragmentów, po jednym dla kaŜdego wielomianu : … : , 8 01, 9.
3. Powiernik losowo wybiera podzbiór otrzymanych fragmentów (np. 50)
;# , … , #< =
a
następnie
prosi
o
ujawnienie
odpowiadającym
im
wielomianów :" … :"< .
4. Dystrybutor D ujawnia powiernikowi wspomniane wielomiany, który
upewnia się Ŝe przedstawione wielomiany są stopnia co najwyŜej 1.
W ten sposób, bez ujawniania współczynników wielomianu ,
dystrybutor
D
jest
w
stanie
udowodnić,
z
duŜą
dozą
prawdopodobieństwa, Ŝe wszystkie wielomiany : … : są
stopnia co najwyŜej 1.
5. Dystrybutor sumuje niewybrane, losowe wielomiany z wielomianem : :"< … :" ,
wynik tej sumy przesyła powiernikowi.
6. Powiernik sprawdza czy wielomian powstały z sumy niewybranych,
losowych wielomianów jest stopnia co najwyŜej 1. Jednocześnie jest
w stanie sprawdzić czy : : , +*-' " jest
str. 39
argumentem, dla którego policzony został fragment sekretu , dla
kaŜdego 8 ;#< , … , # =.
Wersja 2.
Kolejna z metod weryfikacji poprawności posiadanego fragmentu nie
zakłada, tak jak wcześniejsza, uczciwości dystrybutora D ani powierników
[20], [21]. Wymaga ona jednak przyjęcia dodatkowych załoŜeń: Algorytm
szyfrujący powinien mieć własność homomorfizmu1 > ? > · >?
(np. algorytm Diffie-Hellmana)
1. Dystrybutor D przy pomocy schematu Shamira tworzy fragmenty, które
następnie szyfruje i przesyła do powierników.
2. Dystrybutor D wybiera losowy zbiór wielomianów stopnia co najwyŜej
1
(np.
100),
a
następnie
przesyła
powiernikom
po
100
zaszyfrowanych fragmentów.
>: 1 … >: 1
…
>: … >: 3. Powiernik w sposób losowy wybiera podzbiór otrzymanych wartości
;# , … , #< =, a następnie prosi o ujawnienie odpowiadającym im
wielomianów :" … :"< .
4. Powiernik sprawdza czy dla ujawnionych wielomianów zachodzi
równość:
+AB >:C dla kaŜdego D 8 ;#, … , #< = oraz 8 01, 9
5. Dystrybutor sumuje niewybrane, losowe wielomiany z wielomianem .
1
Homomorfizm to funkcja odwzorowująca jedną algebrę ogólną w drugą.
Def: Niech A= i B= będą algebrami ogólnymi tego samego typu, zaś h : A → B funkcją
przekształcającą zbiór A w zbiór B. Dla i=1,...,n niech a(i) będzie arnością operacji f(i) oraz g(i)
(arności te muszą być równe, bo algebry A i B mają ten sam typ). Wtedy h jest
homomorfizmem algebry A w algebrę B, jeśli dla kaŜdego i=1,...,n oraz ciągu (x(1),...,x(a(i)))
elementów zbioru A zachodzi równość h(f(i)(x(1),...,x(a(i))))=g(i)(h(x(1)),...,h(x(a(i)))). Oznacza
to, Ŝe dla kaŜdego i=1,...,n odwzorowanie h przeprowadza operację f(i) w operację
g(i).Homomorfizm, który jest odwzorowaniem wzajemnie jednoznacznym nazywamy
izomorfizmem. [40]
str. 40
: :"< … :" ,
a wynik tej sumy przesyła powiernikowi.
6. KaŜdy powiernik sprawdza czy dla jego wartości i zachodzi równość:
+ EFGAHF > · >: dla kaŜdego 8 ;# , … , #< =
Przedstawione powyŜej metody weryfikowania poprawności fragmentów naleŜą
do metod interaktywnych. Oznacza to, Ŝe wymagają współpracy powierników i
tylko ci z nich, którzy będą brali udział w wyborze podzbioru wielomianów,
mogą uznać wyniki powyŜszych procedur za wiarygodne. Dla osób postronnych
metody
te
nie
dają
Ŝadnej
moŜliwości
zweryfikowania
poprawności
wygenerowanych fragmentów.
6.6.3 Nieinteraktywna metoda weryfikacji fragmentów
W tej procedurze dystrybutor D wraz z przygotowanymi fragmentami przesyła
równieŜ dodatkowe informacje, które pozwalają powiernikowi podjąć decyzję
czy powinien zaakceptować przekazany mu fragment.
Algorytm wymaga by funkcja szyfrujący posiadał następujące własności [20],
[22]:
•
> ? >I>?
•
> · ? >J>?
1. Dystrybutor D przy pomocy schematu Shamira tworzy fragmenty
(1… )
sekretu , następnie szyfruje współczynniki wielomianu
. . . > , > , … , >
! .
! !
, uŜytego do stworzenia fragmentów
Tak przygotowany zestaw danych przekazuje
powiernikom.
2. KaŜdy -ty powiernik sprawdza równość
>$% ? > I$> J> %I … I>
! J>
! str. 41
JeŜeli równość jest zachowana, powiernik ogłasza dystrybutorowi D oraz
pozostałym powiernikom, Ŝe jego fragment jest poprawny. W sytuacji, gdy
równość nie jest zachowana, ta informacja równieŜ jest rozgłaszana. W takim
przypadku pozostali powiernicy muszą podjąć decyzję, która ze stron próbuje
oszukiwać – dystrybutor D czy powiernik zgłaszający błąd.
6.6.4 Proaktywne metody zarządzania fragmentami
Ideą schematów podziału, takich jak schemat Shamira, jest przechowywanie
fragmentów sekretu w rozproszeniu, przez cały czas Ŝycia sekretu. Jednak
takie załoŜenie stwarza zagroŜenie, Ŝe przy dostatecznie długim czasie,
serwery przechowujące fragmenty mogą zostać zaatakowane w celu uzyskania
niezbędnej,
do
odtworzenia
sekretu,
ilości
fragmentów.
Dodatkowym
czynnikiem wpływającym na bezpieczeństwo sekretu są awarie systemów lub
nośników, w których fragmenty są przechowywane. Chęć uchronienia danych
wraŜliwych przed ujawnieniem lub zniszczeniem, w skutek jednego z
powyŜszych scenariuszy, stała się podstawą do prac nad kolejnymi metodami
zarządzania fragmentami sekretu .
ZałoŜenia metod proaktywnych
[20], [23]
•
W kaŜdym okresie czasu 7 musi być dostępne co najmniej prawidłowych fragmentów pozwalających na odtworzenie sekretu .
•
Istnieje, wymagający uwierzytelnienia, system rozgłaszania komunikatów
do wszystkich powierników.
•
Pomiędzy kaŜdymi dwoma powiernikami istnieje bezpieczny kanał
komunikacyjny.
•
Systemy przechowujące fragmenty muszą być w stanie dokonać
synchronizacji czasu.
•
Powiernik, w razie zagroŜenia uzyskania dostępu, moŜe usunąć swój
fragment .
str. 42
6.6.5 Odnawianie fragmentów
Metody proaktywne zakładaną cykliczne zmiany fragmentów, bez zmiany
sekretu , w celu zabezpieczenia przed ich zniszczeniem. Oznacza to, Ŝe w
danym okresie czasu 7 istnieje zestaw fragmentów, pozwalający na
odtworzenie danych, z chwilą nastania okresu 7 1 fragmenty te są
zastępowane nowymi - stają się przez to bezuŜyteczne. Taka zmiana
fragmentów moŜe odbywać się bez obecności dystrybutora D.
Procedura
wstępna
wymaga
przygotowania
fragmentów
dla
kaŜdego
powiernika oraz określenia przedziału czasu 7 po którym procedura odnowy
fragmentów zostaje uruchomiona. Przebiega ona w sposób następujący [20],
[23]:
1. KaŜdy
-ty
powiernik
: wybiera
wielomianu : . . . 1
! !
współczynników( … ! , 0.
2. KaŜdy -ty powiernik : rozsyła do pozostałych powierników :" fragmenty
: j uŜywając przy tym mechanizmu nieinteraktywnej weryfikacji
fragmentów.
3. Powiernik : otrzymuje fragmenty : … : , przy pomocy tworzy nowy
fragment sekretu przy pomocy wzoru & ∑NO :N , a
następnie usuwa starą wersje fragmentu .
6.6.6 Sprawdzanie fragmentów
Ten mechanizm pozwala powiernikowi na sprawdzenie czy fragmenty
posiadane przez pozostałych powierników są poprawne, bądź nie uległy
zniszczeniu. ZałoŜeniem jest umieszczenie we wszystkich fragmentach,
wspólnego znacznika, który pozwoli na kresowe porównywanie fragmentów.
Procedura wstępna wymaga zastosowania, opisanej powyŜej, procedury
odnawiania
fragmentów
przechowywania
wraz
zaszyfrowanych
z
nieinteraktywna
fragmentów.
weryfikacją
RóŜnica
polega
oraz
na
str. 43
zastosowaniu w punkcie 2. metody odnawiania fragmentów przesyłania
zaszyfrowanych fragmentów >: j
KaŜdy -ty powiernik uaktualnia swój zestaw otrzymanych fragmentów
korzystając ze wzoru >& > · ∏NO >:N Przy pomocy tej wartości powiernicy mogą dokonać sprawdzenia poprawności
fragmentów posiadanych przez pozostałych uczestników protokołu.
6.6.7 Rekonstrukcja zniszczonych/ujawnionych fragmentów
MoŜliwość dokonania rekonstrukcji zniszczonych fragmentów jest podstawową
własnością umoŜliwiającą schematowi poprawne działanie [23]. W sytuacji
braku takiego mechanizmu osoba atakująca system mogłaby stopniowo
uszkadzać kolejne serwery przechowujące dane, aŜ do momentu uszkodzenia z nich, co skutkowałoby zniszczeniem informacji wraŜliwej . ZałoŜeniem
takiego mechanizmu jest dostarczenie uczestnikowi protokołu Q informacji
pozwalających na odtworzenie fragmentu. Najprostszą metodą, która niestety
ujawni tajną informację , byłoby przesłanie przez wszystkich uczestników
protokołu ich fragmentów, przy pomocy których powiernik Q mógłby obliczyć
wartość wielomianu a następnie dla dowolnej, unikalnej wartości odtworzyć
swój fragment. W celu zachowania sekretu w tajemnicy, naleŜy uŜyć innego
mechanizmu.
PoniŜsza procedura zastała opisana w pracy [24]
1. KaŜdy -ty powiernik( 8 01, Q9 R 0Q, 9 ) w sposób losowy wybiera
wielomian : stopnia 1, dla którego : Q 0 oraz : 0 0.
2. KaŜdy -ty powiernik, poza m-tym, przesyła fragmenty do pozostałych
uczestników protokołu, wykorzystując przy tym VVS.
3. -ty powiernik otrzymuje wielomiany : … :S! , :SG … : , a
następnie oblicza nowy fragment dla uŜytkownika Q jako: & ∑NO,NTS :N . Wynik tego obliczenia przesyła w sposób bezpieczny do
powiernika Q.
str. 44
4. UŜytkownik
, wykorzystując
wykorzystuj c interpolacje uzyskuje wielomian
.
6.7 Podsumowanie
Wraz z rosnącym
cym upowszechnianiem się
si wykorzystania kryptografii w
zabezpieczaniu
eczaniu danych przed dostępem
dost pem osób niepowołanych, problem
bezpiecznego przechowywania klucz staje się
si coraz bardziej istotny. Poprzez
zastosowanie opisanych w tym rozdziale rozwiązań
rozwi
moŜna
na w znacznym stopniu
podnieść stopień bezpieczeństwa
bezpiecze
jak i dostępnościi danych kryptograficznych.
Poza przedstawionym schematem Shamira istnieje wiele innych schematów
podziału sekret
. W tym miejscu naleŜy
nale wspomnieć o schemacie Blakleya,
zaprezentowanym w pracy [25] opublikowanej w tym samym czasie co praca A.
Shamira, prezentującą
ącą alternatywne rozwiązanie
zanie zagadnienia.
Rysunek 3 Schemat Shamira (2, n) [18]
Rysunek 4 Schemat Blakleya (2,n) [18]
str. 45
Schematy podziału informacji poufnej znalazły zastosowanie przy projektowaniu
systemów pozwalających na przeprowadzanie głosowania. Więcej informacji na
ten temat moŜna odnaleźć w pracach [26], [27], [28]
7 Opis systemu
Jako część praktyczna niniejszej pracy została stworzona aplikacja o nazwie
CMS (ang. Certificates Management System)
7.1 ZałoŜenia projektu
Projekt
zakłada
stworzenie
rozproszonego
systemu
pozwalającego
na
przyznawanie uprawnień pracownikom pewnej firmy. Przyznanie uprawnienia
uŜytkownikowi polega na wydaniu certyfikatu atrybutowego określającego
zakres uprawnień. Certyfikat podpisywany jest przez grupę uprawnioną do
podejmowania takiej decyzji – rada nadzorcza, prezes itp. MoŜe on zostać
wydany wyłącznie po uzyskaniu określonej liczby potwierdzonych decyzji
aprobujących
przyznanie
uprawnienia.
Klucz
prywatny
odpowiadający
certyfikatowi PKC grupy, dzielony jest przy wykorzystaniu schematu Shamira i
przechowywany w rozproszeniu na róŜnych serwerach. Komunikacja między
systemami odbywa się poprzez przesyłanie, zaszyfrowanych przy pomocy
kluczy uzyskanych z certyfikatów serwerów, wiadomości przy pomocy protokołu
http. Kiedy ilość decyzji akceptujących osiągnie wymaganą liczbę, system
pobiera z repozytoriów fragmenty klucza grupy, a następnie rekonstruuje go w
celu wykorzystania do podpisania certyfikatu AC. Po wydaniu certyfikatu
tymczasowa kopia klucza jest niszczona.
7.2 Narzędzia i technologie
Do realizacji głównej, z punktu widzenia uŜytkownika, części systemu został
wykorzystany, napisany w języku PHP, framework CakePHP wraz z bazą
danych MySQL. Zastosowanie tej technologii wiąŜe się z charakterem
wykonywanej przez autora pracy. Z powodu braku
dostępnych dla PHP
bibliotek pozwalających na przeprowadzania obliczeń na duŜych liczbach
naturalnych konieczne było zbudowanie aplikacji hybrydowej
str. 46
W Internecie moŜna odnaleźć kilka bibliotek kryptograficznych pozwalających
na
realizację poszczególnych części funkcjonalności systemu opisanego
powyŜej. Wśród nich naleŜy wymienić uŜywane Bouncy Castle, OpenSSL,
Crypto++®, Java Cryptography Extension (JCE – oficjalna biblioteka dołączana
do dystrybucji SDK). Języki takie jak C# czy Python równieŜ posiadają
wbudowane
biblioteki
pozwalające
na
przeprowadzanie
operacji
kryptograficznych, jednak z powodu preferencji autora do języka JAVA nie
zostały one wybrane. Spośród pozostałych, ze względu na bardzo dobrą
dokumentację oraz oferowane moŜliwości do generowania certyfikatów
atrybutowych wybrana została biblioteka BouncyCastle. Spośród pakietów
implementujących podział klucza przy uŜyciu schematu Shamira, we względu
na przyzwoitą dokumentację oraz dostarczone wraz z dystrybucją przykłady,
wybrano Logi.crypto. Inne biblioteki realizujące powyŜszy cel to Tontine, JSS,
jSecretSharing, Crypto++®, Sass.
7.2.1 Technologie
Niniejszy punkt opisuje technologie, jakie zostały uŜyte do budowy systemu
CMS.
7.2.1.1 PHP
PHP jest popularnym językiem programowania. Jego głównym przeznaczeniem
jest tworzenie dynamicznych stron internetowych. Skrypty napisane w tym
języku maja składnie podobną jak w Perl-u i podobnie jak on są interpretowane
przez parser.
Więcej informacji moŜna odnaleźć tutaj: [29]
7.2.1.2 MySQL
Do realizacji zadań związanych z przechowywaniem danych zastosowany
został serwer MySQL w wersji 5. Jest to bardzo popularny, darmowy serwer
relacyjnych baz danych. MySQL posiada wersje dla większości, obecnych na
rynku, systemów operacyjnych.
Więcej informacji moŜna odnaleźć tutaj: [30]
str. 47
7.2.1.3 OpenSSL
OpenSSL jest otwartą implementacją protokołów SSL oraz TLS, zawierającą
wiele bibliotek oraz narzędzi kryptograficznych. Pozwala na tworzenie oraz
zarządzanie certyfikatami PKC.
Więcej informacji moŜna odnaleźć tutaj: [31]
7.2.1.4 Java
Bardzo popularny, obiektowy język programowania stworzony przez firmę Sun
Microsystems. Kod napisany w tym języku jest
kompilowany a następnie
uruchamiany w maszynie wirtualnej. Zastosowanie takiego mechanizmu
pozwala na oddzielenie kodu od jądra systemu, w którym jest on uruchamiany.
Pozwala to na uzyskanie niezaleŜności od sprzętu, co w znacznym stopniu
zwiększa moŜliwości przenoszenia programów miedzy systemami.
Więcej informacji moŜna odnaleźć tutaj: [32]
7.2.2 Narzędzia
Opisane poniŜej środowiska programistyczne zostały wybrane ze względu na
bardzo duŜe moŜliwości konfiguracyjne oraz przyzwyczajenia autora.
7.2.2.1 Eclipse
Eclipse jest środowiskiem programistycznym IDE (ang. integrated development
environments) stworzonym przez firmę IBM, którego kod następnie został
udostępniony publicznie. Pozwoliło to na dynamiczny rozwój tej platformy.
Zdaniem autora jest to jedno z najbardziej przyjaznych środowisk wspierających
tworzenie
aplikacji
w
języku
JAVA.
Opublikowanie
źródeł
programu
zaowocowało powstaniem wielu dodatków pozwalających na obsługę róŜnych
języków programowania, przyczyniając się do jeszcze większego wzrostu
popularności tej platformy.
Więcej informacji moŜna odnaleźć tutaj: [33]
7.2.2.2 Zend Studio
Jest to komercyjne środowisko programistyczne przeznaczone do tworzenia
skryptów w języku PHP. Oprogramowanie to w znacznym stopniu ułatwia
tworzenie oraz testowanie aplikacji, poprzez zastosowanie kolorowania oraz
str. 48
automatycznego uzupełniania składni, moŜliwość przeprowadzania testów we
wbudowanym serwerze www oraz dość rozbudowaną bibliotekę gotowych
fragmentów kodu. Nowsze wersje środowiska, od wersji 5.5, zostały
zbudowane na bazie silnika Eclipse, przez co wcześniejsza funkcjonalność
aplikacji została wzbogacona w moŜliwości dołączenia wszelkich wtyczek
stworzonych dla tego silnika.
Więcej informacji moŜna odnaleźć tutaj: [34]
7.2.2.3 Logi
Pakiet Logi.crypto jest biblioteką kryptograficzną przeznaczoną dla języka
JAVA. Biblioteka ta jest dla celów niekomercyjnych dystrybuowana na
zasadach licencji GPL.
Więcej informacji moŜna odnaleźć tutaj: [35]
7.2.2.4 Bouncy Castle
Bouncy Castle jest aktywnie rozwijanym, zestawem bibliotek kryptograficznych
przeznaczonych dla języków JAVA oraz C#. Udostępnia API do tworzenia i
zarządzania protokołami/standardami, takimi jak: Certyfikaty X.509 w wersjach
v1 oraz v3, certyfikaty atrybutowe, listy odwołań CRL, S/MIME, TLS, OpenPGP
i inne.
Więcej informacji moŜna odnaleźć tutaj: [36]
7.2.2.5 CakePHP
Więcej informacji moŜna odnaleźć tutaj: [37]
CakePHP jest zestawem skryptów ( Framework ) przeznaczonym do tworzenia
dynamicznych stron internetowych. Został on w całości napisany w PHP w
oparciu i model MVC (Model View Controller). Zastosowana architektura
pozwala na bardzo wygodne rozdzielenie poszczególnych warstw aplikacji,
pozwalając przez to na ich niezaleŜne tworzenie. W CakePHP został
wbudowany mechanizm automatycznego tworzenia szkieletu aplikacji (ang.
scaffolding), który w znaczący sposób przyspiesza proces budowania aplikacji.
Pozwala on na wygenerowanie podstawowych metod manipulacji danymi,
takimi jak dodawanie, edycja, usuwanie, tworzenie listy oraz wyświetlanie.
str. 49
Framework posiada wbudowaną obsługę ACL (Access Control List) jak i wielu
innych komponentów odpowiedzialnych za takie aspekty jak autoryzacja,
bezpieczeństwo czy obsługę wielojęzyczności aplikacji. Wykorzystanie modelu
MVC pozwala na prostą i intuicyjną rozbudowę funkcjonalności poprzez
tworzenie własnych, integralnych komponentów, które mogą być wielokrotnie
uŜywane. Wiele z gotowych rozwiązań jest udostępnianych przez członków
społeczności współtworzącej Cake, czyniąc tworzenie aplikacji internetowych
szybszym i wygodniejszym.
7.3 Wymagania sprzętowe
Aplikacja będąca załącznikiem
niniejszej pracy jest
przeznaczona
do
uruchomienia w systemie Linux. Wymaga instalacji serwera WWW (np.
APACHE) obsługującego PHP i mod_rewrite oraz serwera baz danych MySQL.
Dodatkowo konieczna jest obecność w systemie biblioteki OpenSSL oraz
maszyny wirtualnej JAVA. Konfiguracja PHP musi umoŜliwiać wywoływanie
poleceń z poziomu linii komend systemu Linux.
7.4 Opis implementacji
System CMS (ang. Certificates Management System) implementuje realizację
następującego scenariusza. Zakładamy istnienie Grupy A której członkami są
osoby składające wnioski oraz Grupy B, której członkowie owe wnioski
rozpatrują. W aplikacji przyjęto następujące nazewnictwo: Grupa A – Sekretarki
(ang. Secretaries), Grupa B – Rada nadzorcza ( ang. Chairmans).
1. Członek grupy A składa wniosek o wydanie pełnomocnictwa do realizacji
zadania, którego opis dołącza do wniosku.
2. KaŜdy z członków grypy B moŜe zaaprobować prośbę zawartą w
zgłoszeniu.
3. Procedura z punktu 2 trwa do momentu uzyskania wymaganej ilości
podpisów. Wraz z chwilą osiągnięcia tej liczby, z fragmentów klucza
grupy B, będących w posiadaniu kaŜdego z jej członków, odtwarzany jest
klucz prywatny.
str. 50
4. Przy pomocy klucza prywatnego tworzony jest podpis cyfrowy pod
certyfikatem atrybutowym wydawanym wnioskodawcy z grupy A.
Aplikacja została zrealizowana jako serwis WWW implementowany przy
wykorzystaniu frameworka CakePHP. Przygotowany projekt został zbudowany
poprzez stworzenie kilku kontrolerów (ang. controllers) realizujących logikę
biznesową aplikacji. Wygląd panelu uŜytkownika (kod HTML wraz z CSS oraz
danymi przekazywanymi z kontrolera) przechowywany jest w widokach (ang.
view), natomiast informacje dotyczące struktur danych, takich jak relacje
pomiędzy poszczególnymi tabelami bazy danych, określane są w modelach.
W implementacji wykorzystywane są, wraz z odpowiadającymi im widokami
oraz kontrolerami, następujące modele:
•
Atrybuty
•
Grupy
•
Zgłoszenia
•
Podpisy
•
UŜytkownicy
KaŜdemu z tych modeli odpowiada w bazie danych, tabela o tej samej nazwie.
Opis tabel wraz z zastosowaniem zawartych w nich pól został umieszczony w
punkcie 7.4.2.
KaŜdej grupie oraz uŜytkownikowi, podczas dodawania go do systemu
wydawany jest osobisty certyfikat PKC, do którego podpisu wykorzystywany
jest główny certyfikat aplikacji. Realizacja tego zadania została wykonana przy
wykorzystaniu wbudowanych w PHP funkcji obsługi biblioteki OpenSSL.
Interfejs do realizacji wszystkich operacji związanych z tą biblioteką został
zawarty
w
niezaleŜnym
komponencie
Cert
(cms/controllers/components/cert.php). W przypadku grup klucz prywatny,
odpowiadający kluczowi publicznemu zawartemu w jej certyfikacie, poddawany
jest procedurze podziału przy wykorzystaniu schematu Shamira , . Dla
str. 51
potrzeb aplikacji przyjęto, iŜ U/12X1, gdzie U1·X1 jest funkcją sufit. Z tego wzoru
wynika, iŜ kaŜda zmiana liczebności grupy wiąŜe się z koniecznością
przeprowadzenia procedury podziału na podstawie nowej liczby fragmentów,
niezbędnych w trakcie operacji odzyskiwania klucza. Z powodu braku
dostępnych bibliotek realizujących wymagane obliczenia na duŜych liczbach
naturalnych dla języka PHP, system korzysta z niezaleŜnych aplikacji
napisanych w języku JAVA. Obliczenia wartości fragmentów klucza zostały
zaimplementowane,
przy
wykorzystaniu
biblioteki
Logi.crypto,
w
pliku
ShareSecret.java. Funkcje systemu odpowiedzialne za tworzenie interfejsu do
realizacji funkcjonalności związanych z wydawaniem certyfikatów atrybutowych
zawiera komponent Cert. Z tego samego powodu co w przypadku
ShareSecret.java,
Certificates.java
JAVA
została
napisanej
w
wykorzystywana
oparciu
o
do
bibliotekę
stworzenia
Bouncy
klasy
Castle,
implementującej proces wydawania AC.
W celu uruchomienia programu SecretShare.java naleŜy go skompilować:
/cms/webroot$ javac org/logi/crypto/demo/ShareSecret.java
A następnie uruchomić
/cms/webroot$ java org.logi.crypto.demo.ShareSecret T N
Program przyjmuje dwa parametry uruchomieniowe
T – ilość fragmentów niezbędnych do odtworzenia klucza
N – ilość wszystkich fragmentów
W celu kompilacji i uruchomienia Certificates.java, w ścieŜce klasy (ang.
classpath) konieczne jest zawarcie providera BouncyCastle.
/cms/webroot$
javac
–cp
.:./bcprov-jdk16-143.jar
Certificates.java
/cms/webroot$ java –cp .:./bcprov-jdk16-143.jar Certificates
<file1> <file2> <file3> <file4> <attribs>
str. 52
Aplikacja wymaga pięciu parametrów
1. File1 – certyfikat PKC wydawcy
2. File2 – klucz prywatny wydawcy ( w standardzie PEM)
3. File3 – certyfikat PKC przyszłego posiadacza certyfikatu
4. File4 – nazwa pliku pod jaką zapisany zostanie wygenerowany AC
5. Attribs – Zestaw atrybutów do zamieszczenia w AC, przekazywane w
postaci ciągu znaków oid1-wartość,oid2-wartość…
7.4.1 Konfiguracja wstępna
W celu wdroŜenia aplikacji na serwerze wymagane jest podjęcie kroków, które
maja
na
celu
konfigurację
poszczególnych
komponentów.
PoniŜej
zamieszczono punkty zawierające opis, koniecznych do przeprowadzenia
czynności.
7.4.1.1 Struktura katalogów
Aplikacja korzysta z następującej struktury katalogów.
Katalog główny
drwxrwxr-x 5 4096 2009-09-10 14:09 cake_core
--przechowuje aktualną wersje jądra CakePHP
drwxrwxr-x 13 4096 2009-09-10 14:09 cms
--główny katalog aplikacji, będący jednocześnie korzeniem systemu
wyświetlania domeny serwera WWW
drwxrwxr-x 5 4096 2009-09-10 14:10 cmspkeys
--katalog przechowujący klucze prywatne użytkowników aplikacji
Ze względów bezpieczeństwa katalog cmspkeys został utworzony poniŜej
korzenia (ang. Root) struktury katalogowej serwera WWW. Korzeń powinien
wskazywać na zawartość katalogu cms.
Katalog cmspkeys
drwxrwxr-x 2 4096 2009-09-10 14:10 groups
drwxrwxr-x 2 4096 2009-09-10 14:10 root
str. 53
drwxrwxr-x 2 4096 2009-09-10 14:10 users
Katalog cms
-rwxr-xr-x 1 141 2009-09-10 14:09 .htaccess
--plik odpowiedzialny za konfiguracje modulu mod_rewrite – przy
wykorzystywanej konfiguracji niezbędny do poprawnego jej działania
-rwxr-xr-x 1 2453 2009-09-10 14:09 app_controller.php
-rwxr-xr-x 1 1357 2009-09-10 14:09 app_helper.php
-rwxr-xr-x 1 1273 2009-09-10 14:09 app_model.php
--Trzy powyższe pliki są klasami po których dziedziczą wszystkie,
odpowiednio, kontrolery, komponenty wspierające widoki oraz modele
drwxr-xr-x 4 4096 2009-09-10 14:09 config
--Zawiera pliki konfiguracyjne CakePHP, w tym plik w którym
definiowane jest połączenie z bazą danych
drwxr-xr-x 4 4096 2009-09-10 14:09 controllers
--Kontorolery
-rwxr-xr-x 1 963 2009-09-10 14:09 index.php
drwxr-xr-x 4 4096 2009-09-10 14:09 locale
drwxr-xr-x 5 4096 2009-09-10 14:09 models
--Modele
drwxr-xr-x 3 4096 2009-09-10 14:09 plugins
drwxr-xr-x 6 4096 2009-09-10 14:09 tests
drwxrwxr-x 7 4096 2009-09-10 14:09 tmp
--Pliki tymczasowe (katalog musi dawać prawo do zapisu użytkownikowi
uruchamiającemu serwer www)
drwxr-xr-x 6 4096 2009-09-10 14:09 vendors
--Katalog dodatkowych rozszerzeń
drwxr-xr-x 17 4096 2009-09-10 14:09 views
--Widoki
drwxr-xr-x 12 4096 2009-09-10 14:09 webroot
--główny katalog aplikacji z punktu widzenia serwera WWW
Katalog cms/controllers/
-rw-rw-r-drwxr-xr-x
-rw-rw-r--rw-rw-r--rw-rw-r--rw-rw-r--
1 2369
3 4096
1 3103
1 2626
1 6538
1 10201
2009-09-10
2009-09-10
2009-09-10
2009-09-10
2009-09-10
2009-09-10
14:09
14:09
14:09
14:09
14:09
14:09
attributes_controller.php
components
groups_controller.php
requests_controller.php
signatures_controller.php
users_controller.php
Katalog cms/controllers/components
-rw-r--r-- 1 10069 2009-09-10 14:09 cert.php
-rw-r--r-- 1 2397 2009-09-10 14:09 curl.php
-rw-r--r-- 1 4947 2009-09-10 14:09 shamir.php
str. 54
Katalog cms/webroot
-rwxr-xr-x 1
185 2009-09-10 14:09 .htaccess
-- konfiguracja mod_rewrite
-rw-rw-r-- 1
12476 2009-09-10 14:09 Certificates.class
-rw-r--r-- 1
16519 2009-09-10 14:09 Certificates.java
--kod
aplikacji
odpowiedzialnej
za
wydawanie
certyfikatów
wtrybutowych
-rw-rw-r-- 1
6337 2009-09-10 14:09 ValidateCertificate.class
-rw-r--r-- 1
7374 2009-09-10 14:09 ValidateCertificate.java
--kod aplikacji wyświetlającej właściwości AC
-rw-r--r-- 1 1688340 2009-09-10 14:09 bcprov-jdk16-143.jar
--Bouncy Castle crtyptographic provider
drwxr-xr-x 7
4096 2009-09-10 14:09 certs
--Katalog odpowiedzialny za przechowywanie certykifatów
drwxr-xr-x 3
4096 2009-09-10 14:09 css
-rwxr-xr-x 1
2984 2009-09-10 14:09 css.php
drwxr-xr-x 3
4096 2009-09-10 14:09 img
-rwxr-xr-x 1
3043 2009-09-10 14:09 index.php
drwxr-xr-x 4
4096 2009-09-10 14:09 js
drwxr-xr-x 4
4096 2009-09-10 14:09 org
--katalog zawiera pakiet Logi.crypto implementujący schemat Shamira
Katalog cms/webroot/certs
drwxrwxr-x
drwxrwxr-x
drwxrwxr-x
drwxrwxr-x
2
3
3
3
4096
4096
4096
4096
2009-09-10
2009-09-10
2009-09-10
2009-09-10
14:09
14:09
14:09
14:09
attrCerts
groups
root
users
7.4.1.2 Baza danych
Zrzut danych oraz struktur tabel, opisanych w punkcie 7.4.2, został
umieszczony w pliku: cms/config/database.sql
7.4.1.3 CakePHP
W celu konfiguracji Cake konieczna jest modyfikacja dwóch plików.
W pliku cms/webroot/index.php w linii 58 naleŜy zdefiniować lokalizację źródeł
jądra
frameworka,
CAKE_CORE_INCLUDE_PATH
poprzez
wartości
przypisanie
będącej
absolutną
zmiennej
ścieŜką
do
katalogu jądra. W przypadku zmiany w hierarchii katalogów naleŜy równieŜ
zmodyfikować wartości zmiennych ROOT oraz APP_DIR.
str. 55
W pliku cms/config/database.php naleŜy wypełnić pola pozwalające na
uzyskanie połączenia z bazą danych. Dokładny opis znaczenia poszczególnych
pól znajduje się w komentarzu zamieszczonym w tym pliku.
7.4.1.4 Component OpenSSL
W pliku cms/vendors/OpenSSL.php w linii 171 naleŜy podać poprawną ścieŜkę
dostępu do pliku konfiguracyjnego biblioteki OpenSSL.
7.4.2 Struktura bazy
Baza danych została stworzona przy uŜyciu serwera MySQL. Tabele w bazie
zostały zoptymalizowane do trzeciej postaci normalnej.
Pola created oraz modified, występujące w kaŜdej z tabel, są automatycznie
uzupełniane przez mechanizm obsługi pochodzący z CakePHP. Do działania
systemu
wymagane
są
równieŜ
tabele
odpowiedzialne
za
realizację
mechanizmu ACL – aros, acos, oraz aros_acos. Ich struktura oraz znaczenia
poszczególnych pól zostały opisane w dokumentacji projektu [38].
7.4.2.1 Relacje między tabelami
Rysunek 5 Relacje między tabelami uŜywanymi przez komponent ACL w CakePHP
str. 56
Rysunek 6 Relacje między tabelami systemu
7.4.2.2 UŜytkownicy
Tabela słuŜy do przechowywania informacji na temat uŜytkowników systemu.
Pola username i password wykorzystywane są do autentykacji.
Group_id definiuje przynaleŜność do grupy uŜytkowników.
Share słuŜy do przechowywania fragmentów klucza prywatnego grupy, do
której naleŜy dany uŜytkownik.
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
username varchar(255) NOT NULL,
`password` char(40) NOT NULL,
group_id int(11) NOT NULL,
`share` blob NOT NULL,
created datetime default NULL,
modified datetime default NULL,
PRIMARY KEY (id),
UNIQUE KEY username (username)
)
str. 57
7.4.2.3 Grupy uŜytkowników
Tabela ta słuŜy do przechowywania informacji, na temat istniejących w
systemie grup, których nazwy zawarte są w polu name.
CREATE TABLE groups (
id int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
created datetime default NULL,
modified datetime default NULL,
PRIMARY KEY (id)
)
7.4.2.4 Zgłoszenia
Tabela przechowuje dane dotyczące próśb wydania certyfikatu atrybutowego
składanych przez uŜytkownika, którego id znajdzie się w polu user_id. Opis
zamieszczonego zgłoszenia umieszczany jest w polu desc, a grupa, której
członkowie je zaakceptują, identyfikowana jest przez klucz obcy group_id. W
momencie zatwierdzenia zgłoszenia przez wymaganą liczbę uŜytkowników
wartość pola complete zostaje ustawiona na 1.
CREATE TABLE requests (
id int(11) NOT NULL auto_increment,
user_id int(11) NOT NULL,
group_id int(11) NOT NULL,
`desc` text NOT NULL,
complete tinyint(4) default '0' COMMENT '1=complete',
created timestamp NOT NULL default CURRENT_TIMESTAMP,
modified timestamp NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
)
7.4.2.5 Podpisy
Struktura przechowuje informacje na temat akceptacji przez uŜytkownika
user_id zgłoszenia request_id. W czasie akceptacji, generowany jest losowa
wartość umieszczana w text, która uŜytkownik, przy pomocy swojego klucza
prywatnego szyfruje (signature).
CREATE TABLE signatures (
id int(11) NOT NULL auto_increment,
user_id int(11) NOT NULL,
request_id int(11) NOT NULL,
`text` text NOT NULL,
str. 58
signature text NOT NULL,
created timestamp NOT NULL default CURRENT_TIMESTAMP,
modified timestamp NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
)
7.4.2.6 Atrybuty certyfikatu
UŜytkownik user_id moŜe przed akceptacja request_id dodać ograniczenia
określane przy uŜyciu oid oraz name nadając mu wartość value
CREATE TABLE attributes (
id int(11) unsigned NOT NULL auto_increment,
request_id int(11) NOT NULL,
user_id int(11) NOT NULL,
`name` varchar(255) NOT NULL,
oid varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
created timestamp NULL default CURRENT_TIMESTAMP,
modified timestamp NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
)
7.5 Testy
Dla stworzonej aplikacji CMS przeprowadzono testy mające na celu
sprawdzenie działania poszczególnych modułów systemu oraz interakcji między
nimi.
Wystawianie certyfikatów.
Sprawdzenie tego modułu polegało na wielokrotnym dodawaniu do systemu
nowych uŜytkowników oraz grup, a następnie weryfikacji danych zawartych w
certyfikacie ( pola Subject, Validity Period, Issuer ) poprzez wykorzystanie
biblioteki OpenSSL (openssl
x509
-text
-in
cert.pem).
Kolejnym
krokiem było sprawdzenie czy wygenerowany klucz publiczny odpowiada
prywatnemu poprzez zakodowanie i odkodowanie pewnego losowego tekstu.
Wyniki sprawdzenia nie wykazywały jakichkolwiek błędów występujących w tej
procedurze.
str. 59
Dzielenie kluczy.
Procedura polega na zachowaniu oryginalnego klucza, następnie poddaniu go
procedurze podziału, odtworzeniu za pomocą podzbioru fragmentów, a
następnie porównaniu z wartością sprzed operacji. Ze względu na czas trwania
operacji zostało wykonanych jedynie kilkanaście testów, z których większość
zakończyła
się
otrzymaniem
oczekiwanych
wyników.
W
pozostałych
przypadkach błędy związane były ze złym przekazaniem argumentów do
procedury podziału i nie wynikały z jej błędnego działania.
Generowanie certyfikatu atrybutowego.
Testy polegały na sprawdzeniu wygenerowanego certyfikatu poprzez audyt
zawartości poszczególnych pól oraz poprawności podpisu pod certyfikatem.
Procedura sprawdzała zachowanie mechanizmu pozwalającego na przypisanie
dowolnego atrybutu poprzez podanie go jako argumentu procedury.
Otrzymane rezultaty, po naprawie początkowych błędów implementacyjnych,
wypadły pozytywnie.
Test Systemu
Testy systemu jako całości zostały kilkukrotnie przeprowadzone zgodnie ze
scenariuszem opisanym w punkcie 7.4. Otrzymane rezultaty wskazują na
poprawną realizacje przez system załoŜeń implementacji.
System poprawnie realizował funkcjonalności:
•
Dodawanie uŜytkownika do systemu – bazy danych
•
Generowanie osobistego certyfikatu uŜytkownika
•
Obliczania fragmenu klucza grupy, gdy uŜytkownik został dodany do
grupy Chairmans
•
Dodawanie zgłoszenia przez uŜytkownika grupy Secretaries
•
Akceptacja zgłoszenia przez uŜytkownika z grupy Chairams
•
Odtwarzanie klucza i generowanie certyfikatu atrybutowego.
str. 60
8 Wnioski
Z powodu braku bibliotek dla języka PHP system musiał zostać zbudowany w
technologii hybrydowej – korzystającej z PHP oraz JAVA. Generowało to pewne
trudności w trakcie testowania aplikacji wynikające z konieczności określenia w
pierwszej kolejności modułu generującego błędne wyniki, a dopiero kolejnym
krokiem było jego naprawienie.
Ilość
bibliotek
pozwalających
na
implementację
mechanizmów obsługi
certyfikatów atrybutowych jest dość niewielka. Co więcej, Ŝadna ze znanych i
dostępnych autorowi nie obsługuje w pełni standardu opisanego w dokumencie
[14]. Wybrana do realizacji aplikacji CMS biblioteka Bouncy Castle pozwala na
generowanie
AC zawierających
jedynie
wybrane
typy atrybutów oraz
rozszerzeń, a obsługa OID ogranicza się tylko do notacji liczbowo-kropkowej.
Ze względu na brak centralnego repozytorium zawierającego numery OID oraz
niepowodzenia podczas próby rejestracji gałęzi na stronie http://www.oidinfo.com/ w systemie zastosowano gałąź 2.25 przeznaczoną dla uniwersalnych
unikatowych identyfikatorów (UUID - Universally Unique Identifiers). Brak
bibliotek moŜe wynikać z faktu stosunkowo niewielkiej popularności uŜycia
takiego typu certyfikatów. Według autora mogłaby ona ulec zmianie w
momencie dołączenia tego standardu do biblioteki OpenSSL.
W przypadku schematu Shamira zasób bibliotek był szerszy co pozwalało na
wygodną implementację. Problemem okazał się czas obliczeń fragmentów
klucza, który w najgorszym przypadku osiągnął wynik prawie 40 minut. Fakt ten
moŜe być spowodowany ograniczonym dostępem do pamięci i zasobów dla
procesów uruchamianych przez funkcję system() języka PHP, na serwerze, na
którym aplikacja była tworzona i testowana. Na szczęście taka procedura
wykonywana
jest
w
systemie
stosunkowo
rzadko,
co
pozwoliło
na
zaakceptowanie takiego wyniku.
Ze względu na swoją popularność i ilość dostępnych interfejsów implementacja
mechanizmów zarządzania certyfikatami PKC okazała się bardzo przyjemna i
wygodna. Wbudowana obsługa biblioteki OpenSSL dla języka PHP pozwoliła
uniknąć konieczności korzystania z zewnętrznych modułów.
str. 61
Bardzo wygodne okazało się wykorzystanie modułu ACL dla CakePHP
odpowiedzialnego za zarządzanie prawami dostępu grup do zasobów na
poziomie aplikacji.
W
stworzonym
systemie
zbudowano
jedynie
fragment
funkcjonalności
przedstawionej w załoŜeniach systemu - nie udało się zrealizować rozproszenia
repozytoriów
przechowujących
fragmenty
klucza,
ani
mechanizmów
komunikacji między nimi. Niemniej jednak w obecnej postaci system stanowi
integralną całość będącą podstawą do dalszego rozwoju aplikacji.
str. 62
Wykaz rysunków
Rysunek 1 Przykład hierarchii certyfikatów ........................................................ 9
Rysunek 2 Certyfikat klucza publicznego X.509 [10]........................................ 11
Rysunek 3 Schemat Shamira (2, n) [18] .......................................................... 45
Rysunek 4 Schemat Blakleya (2,n) [18] ........................................................... 45
Rysunek 5 Relacje między tabelami uŜywanymi przez komponent ACL w
CakePHP ......................................................................................................... 56
Rysunek 6 Relacje między tabelami systemu .................................................. 57
Bibliografia
[1] Wkrotce protesty i odwolania z e-podpisem. [Online]
http://www.podpis.infor.pl/inne-zastosowania/81408,Wkrotce-protesty-i-odwolania-z-epodpisem.html.
[2] Sinn, Richard. Understanding the Public Key Infrastructure. : Oblix Inc., 2001.
[3] Funkcja jednokierunkowa. [Online]
http://pl.wikipedia.org/wiki/Funkcja_jednokierunkowa.
[4] ElGamal, T. A public key cryptosystem and a signature scheme based on discrete
logarithms. IEEE Transactions on Information Theory, 1985.
5] Ford, W. Advances in Public-Key Certificate Standards. ACM SIGSAC Security
Audit & Control Review. 1995, Tom 13, 3.
[6] Diffie, W. Hellman, M. E. New directions in cryptography. IEEE Transactions on
Information Theory, 1976.
[7] Ford, W. and Baum, M. Secure Electronic Commerce: Building the Infrastructure
for Digital Signatures and Encryption. Prentice Hall : 1997.
[8] Howes T., Kille S., Yeong W., Robbins C. The String Representation of Standard
Attribute Syntaxes.: rfc-editor.org, 1995.
[9] Telecommunication Standarization Sector of ITU. ITU-T Recommendation
X.690. : Intenational Telecommunication Union.
str. 63
[10]
Public-key
certificates.
[Online]
www.x500standard.com/index.php?n=X509.X509PKC.
[11] Cooper D., Santesson S., Farrell S., Boeyen S., Housley R., Polk W. RFC5280
Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List
(CRL) Profile. : rfc-editor.org, 2008.
[12] Housley R., Polk W., Ford W., Solo D. RFC 3280 Internet X.509 Public Key
Infrastructure Certificate. rfc-editor.org, 2002.
[13] R. Housley, W. Polk, W. Ford, D. Solo. RFC3280 Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation List (CRL) Profile, 2002.
[14] Farrell S., Housley R. RFC3281 An Internet Attribute Certificate Profile for
Authorization. : RFC-editor.org, 2002.
[15]
Authorization
certificate.
[Online]
http://en.wikipedia.org/wiki/Authorization_certificate.
[16] Vinti Doshi, Amgad Fayad, Sushil Jajodia, Roswitha MacLean. Using Attribute
Certificates with Mobile Policies in Electronic Commerce Applications. McLean, Virginia
22102 : The MITRE Corporation.
[17] Ioannis, Mavridis, i inni. Access Control based on Attribute Certificates for
Medical
Intranet
Applications.
Thessaloniki,
Greece :
Informatics
Laboratory,
Computers Division, Faculty of Technology, Aristotle University of Thessaloniki, 2001.
[18]
Arendt
D.,
Krasiukianis
R.,
Lichy
R.
ARCHIWIZACJA
KLUCZY
SZYFRUJĄCYCH I ODMIANA METODY DZIELENIA SEKETU. XVI Konferencja „Sieci
i Systemy Informatyczne”. 2008.
[19] Shamir, A. How to share a sceret. 1979.
[20] Malkhi, Dahli. Secret Sharing. 2002.
[21] Benaloh, J.C. Secret Sharing homomorphism: Keeping shares of a secret secret.
1986.
[22] Blum M., Feldman P., Mical S. Proceedings of the Twentieth Annual ACM
Symposium on Theory of Computing. 1988.
[23] Nikova, V. Nikov S. On Proactive Secret Sharing Schemes.
str. 64
[24] Yung, A. Herzberg S.Jarecki H. Krawczyk M. Proactive Secret Sharing Or: How
to cope with perpetual leakage. IBM T.J. Watson Research Center, 1995.
[25] Blakley, G. R. Safeguarding cryptographic keys. 1979.
[26] J., Cohen. Improving Privacy in Cryptographic Elections. Technical Report. Yale
University Department of Computer Science, 1985. 372.
[27] Killian, K. Sako J. Receipt-free mix-type voting scheme: A practical solution to the
implementation of a voting booth. Advances in Cryptology -- EUROCRYPT '95. 1995.
[28] DuRette, Brandon William. Multiple Administrators for Electronic Voting.
Massachusetts Institute of Technology, 1999. .
[29] What is PHP? [Online] www.php.net.
[30]
What-is-MySQL.
http://dev.mysql.com/doc/refman/5.0/en/what-is-mysql.html.
[Online]
[31] About the OpenSSL Project. [Online] http://openssl.org/about/.
[32]
Java
SE
Technologies
at
a
Glance.
[Online]
http://java.sun.com/javase/technologies/.
[33] FAQ What is Eclipse. [Online] http://wiki.eclipse.org/FAQ_What_is_Eclipse%3F.
[34] Zend Studio. [Online] http://www.zend.com/en/products/studio/.
[35] The logi.crypto Java Package, version 1.1.2. [Online]
http://logi.org/logi.crypto/devel/.
[36] Bouncy Castle Homepage. [Online] http://www.bouncycastle.org/index.html.
[37] What is CakePHP? Why Use it. [Online] http://book.cakephp.org/view/8/What-isCakePHP-Why-Use-it.
[38] Access Control Lists. [Online] http://book.cakephp.org/view/171/Access-ControlLists.
[39] Francis C., Pinkas D. RFC4476 - Attribute Certificate (AC) Policies Extension.
2006.
str. 65

Podobne dokumenty