Serwer kryptograficzny
PKCS#11 R2
Podręcznik dla programistów
Odcisk
Prawa autorskie 2018 Utimaco IS GmbH
Niemiecki Str. 4
D-52080 Akwizgran
Niemcy
Telefon
Faks
Internet
E-mail
Wersja dokumentu
Data
Status
Numer dokumentu
Wszelkie prawa zastrzeżone
+49 (0)241 / 1696-200
+49 (0)241 / 1696-199
http://hsm.utimaco.com
[email protected]
1.2.13
2018-06-29
Finał
2012-0007
Żadna część niniejszej dokumentacji nie może być powielana w jakiejkolwiek formie (drukowanie,
kserowanie lub w inny sposób) bez pisemnej zgody Utimaco IS GmbH ani przetwarzana, powielana lub
rozpowszechniana przy użyciu systemów elektronicznych.
Utimaco IS GmbH zastrzega sobie prawo do modyfikowania lub poprawiania dokumentacji w dowolnym
momencie bez wcześniejszego powiadomienia. Utimaco IS GmbH nie ponosi odpowiedzialności za błędy
typograficzne i szkody powstałe z ich powodu.
Wszystkie znaki towarowe i zarejestrowane znaki towarowe są własnością ich odpowiednich właścicieli.
Spis treści
Spis treści
1 Wstęp ................................................................................................................................5
1.1 O tym dokumencie.................................................................................................................................5
1.1.1 Grupa docelowa niniejszego podręcznika .................................................................................5
1.1.2 Zawartość niniejszego podręcznika.................................................................................................5
1.1.3 Konwencje dokumentu ................................................................................................................6
1.2 Zalecana lektura .................................................................................................................6
Interfejs PKCS#11 R2 — przegląd.................................................................................................................7
Wymagania ..............................................................................................................................8
3.1 Wymagany pakiet oprogramowania sprzętowego .................................................................................................8
3.2 Lokalizacja pliku konfiguracyjnego cs_pkcs11_R2.cfg..........................................................................9
Konfiguracja ................................................................................................................................................11
4.1 Urządzenie parametryczne .................................................................................................................13
4.2 Rejestrowanie.................................................................................................................................15
Tryby pracy ................................................................................................................................................17
5.1 Tryb równoważenia obciążenia .................................................................................................................17
5.2 Tryb przełączania awaryjnego .................................................................................................................19
5.3 Inicjalizacja gniazda i kodu PIN użytkownika w trybie failover/równoważenia obciążenia ......................................20
Wewnętrzne i zewnętrzne przechowywanie kluczy .................................................................................................22
Rozwój aplikacji PKCS#11 .................................................................................................................23
7.1 Biblioteki.................................................................................................................................................23
Czas wykonania ................................................................................................................................................24
8.1 Inicjalizacja................................................................................................................................24
8.2 Ograniczona długość danych .................................................................................................................24
8.2.1 Zawijanie kluczy za pomocą AES GCM/CCM.................................................................................24
8.2.2 Długość wektora inicjalizacyjnego dla AES GCM.................................................................................25
8.2.3 Długość danych dla opakowywania klucza za pomocą AES GCM/CCM..........................................................25
8.3 Wielowątkowość .................................................................................................................................25
Koncepcja uwierzytelniania ................................................................................................................27
9.1 Koncepcja uwierzytelniania standardowego .................................................................................27
9.2 Koncepcja ulepszonego uwierzytelniania ...........................................................................................28
9.2.1 Tworzenie użytkowników z innymi mechanizmami uwierzytelniania..........................................................28
9.2.2 Logowanie użytkownika za pomocą innych mechanizmów uwierzytelniania .........................................................30
9.2.3 Zmiana kodu PIN dla innych mechanizmów uwierzytelniania.................................................................32
9.2.4 Uwierzytelnianie za pomocą pliku konfiguracyjnego....................................................................................33
9.2.5 Automatyczne logowanie administratora za pomocą pliku konfiguracyjnego....................................................36
9.2.6 Uwierzytelnianie według reguły dwóch osób .................................................................36
2
3
4
5
6
7
8
9
Strona 3 z 76
Spis treści
9.2.7 Rozszerzone logowanie .................................................................................................................37
9.2.8 Rola menedżera kluczy i użytkownika kluczowego.................................................................................38
9.2.9 Tworzenie i logowanie do Menedżera kluczy.................................................................................38
Funkcje zarządzania kluczami w PKCS#11 ....................................................................................................40
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę ..............................................................................................43
11.1 Mechanizmy zdefiniowane w CryptoServer ..........................................................................................43
11.2 Szyfrowanie przy użyciu „Elliptic Curve Integrated Encryption Scheme” (ECIES) ..................................44
11.3 Podpisz i zweryfikuj za pomocą DES Retail-MAC..................................................................................45
11.4 Mechanizmy wielokrotnych podpisów....................................................................................................45
11.5 Obiekty konfiguracji...........................................................................................................................46
11.5.1 Obiekt konfiguracji lokalnej .................................................................................................47
11.5.2 Globalny obiekt konfiguracji CryptoServer .................................................................................47
11.5.3 Obiekty konfiguracji gniazda CryptoServer .................................................................................54
Obsługiwane mechanizmy i mapowanie funkcji.................................................................................56
12.1 Mechanizmy zdefiniowane w standardzie PKCS#11....................................................................................................56
12.2 Mechanizmy zdefiniowane przez dostawcę....................................................................................................61
12.3 Obsługa obiektów publicznych.................................................................................................................62
Interfejs API PKCS#11 w trybie FIPS .................................................................................................................64
13.1 Mechanizmy wypełniania w trybie FIPS....................................................................................................64
13.2 Użycie kluczy w trybie FIPS....................................................................................................................67
13.3 Mechanizmy obsługiwane w trybie FIPS dla CryptoServer Se ..........................................................69
13.4 Mechanizmy obsługiwane w trybie FIPS dla CryptoServer CSe i Se Gen2 ...............................71
Odniesienia .............................................................................................................................................75
10
11
12
13
Strona 4 z 76
Wstęp
1 Wprowadzenie
Dziękujemy za zakup naszego systemu bezpieczeństwa CryptoServer. Mamy nadzieję, że jesteś zadowolony z
naszego produktu. Nie wahaj się skontaktować z nami, jeśli masz jakiekolwiek skargi lub uwagi.
1.1 O niniejszym dokumencie
W niniejszym dokumencie opisano interfejs tokena kryptograficznego PKCS#11 Release 2, dostarczany przez
sprzętowy moduł bezpieczeństwa CryptoServer firmy Utimaco z SecurityServer w wersji 3.00 lub nowszej.
1.1.1 Grupa docelowa niniejszego podręcznika
Niniejszy przewodnik ma na celu pomóc twórcom oprogramowania w tworzeniu własnych aplikacji
PKCS#11 z wykorzystaniem biblioteki CryptoServer PKCS#11.
1.1.2 Zawartość niniejszego podręcznika
Po wstępie podręcznik ten dzieli się następująco:
Rozdział 2
zawiera przegląd interfejsu PKCS#11 serwera CryptoServer.
Rozdział 3
zawiera niezbędne wymagania wstępne dotyczące wykorzystania interfejsu PKCS#11
CryptoServer.
Rozdział 4
opisuje opcje konfiguracji biblioteki CryptoServer PKCS#11 w pliku
konfiguracyjnymPlik cs_pkcs11_R2.cfg.
Rozdział 5
wyjaśnia tryby działania biblioteki CryptoServer PKCS#11.
Rozdział 6
krótko wyjaśnia różnicę pomiędzy wewnętrznym i zewnętrznym magazynem kluczy dla
obiektów PKCS#11 (kluczy).
Rozdział 7
zawiera informacje o plikach nagłówkowych i bibliotekach wymaganych
do opracowania aplikacji PKCS#11.
Rozdział 8
zawiera szczegóły dotyczące implementacji PKCS#11 przez Utimaco dla CryptoServer.
Rozdział 9
opisuje koncepcję uwierzytelniania i zarządzania użytkownikami biblioteki CryptoServer
PKCS#11 R2.
Rozdział 10
zawiera przegląd funkcji, które mogą być wykonywane przez użytkowników posiadających rolę Menedżera
Kluczy (KM) lub Użytkownika Kluczowego (KU).
Rozdział 11
zawiera szczegóły dotyczące rozszerzeń PKCS#11 zdefiniowanych przez dostawcę.
Rozdział 12
jest przeglądem mechanizmów obecnie obsługiwanych przez bibliotekę CryptoServer
PKCS#11 - zarówno zdefiniowanych przez standard PKCS#11, jak i zdefiniowanych przez dostawcę - oraz
funkcji obsługujących te mechanizmy.
Strona 5 z 76
Wstęp
Rozdział 13
zawiera informacje o ważnych ograniczeniach dotyczących CryptoServera
działającego w trybie FIPS i wymienia mechanizmy obsługiwane przez CryptoServer w
trybie FIPS.
1.1.3 Konwencje dokumentów
W niniejszym podręczniku stosujemy następujące konwencje:
Konwencja Stosowanie Przykład
Elementy graficznego interfejsu
użytkownika (GUI), np. opcje menu
Pogrubiony Naciśnij przycisk OK.
Nazwy plików, nazwy folderów i
katalogów, polecenia, wyniki plików,
przykłady kodu programistycznego
Znajdziesz plikprzykład.confw /
przykład/demo/informator.
Stała szerokość
Zobacz rozdział 3, „Przykładowy rozdział” w
Narzędzie administracyjne wiersza poleceń
CryptoServer LAN/CryptoServer CryptoServer
-csadm -Manual for System
Administratorzy lub
[[SADMIN]
italski
Odniesienia i ważne terminy
Tabela 1: Konwencje dotyczące dokumentów
Użyliśmy ikon, aby wyróżnić najważniejsze notatki i informacje.
Tutaj znajdziesz ważne informacje dotyczące bezpieczeństwa, których należy przestrzegać.
Tutaj znajdziesz dodatkowe uwagi i informacje uzupełniające.
1.2 Zalecana lektura
Gorąco polecamy zapoznać się również z dokumentem
Nauka PKCS#11 w pół dnia
(PKCS11_HandsOn.pdf)
znajduje się na płycie CD z produktem SecurityServer w tym samym folderze co ten
instrukcja: \Dokumentacja\Crypto_API\PKCS11_R2.Tam możesz nauczyć się, jak się rozwijać
Aplikacje PKCS#11.
Strona 6 z 76
Interfejs PKCS#11 R2 — przegląd
2 Interfejs PKCS#11 R2 — przegląd
PKCS#11 to uniwersalny standard kryptografii klucza publicznego, pierwotnie opracowany przez
RSA Security [PKCS11] i obecnie utrzymywany przez Komitet Techniczny OASIS PKCS11. Definiuje
interfejs między aplikacją a urządzeniem kryptograficznym.
CryptoServer udostępnia interfejs PKCS#11. Aby użyć tego interfejsu, należy załadować do CryptoServer
dedykowany pakiet oprogramowania układowego, w tym moduł oprogramowania układowego CXI. Ponadto
wymagane jest, aby aplikacja PKCS#11 była połączona z biblioteką CryptoServer PKCS#11 lub aby mogła
załadować określoną bibliotekę współdzieloną (DLL/tak).Dzięki tej koncepcji nie są potrzebne żadne konkretne
sterowniki, aby aplikacja mogła uzyskać bezpośredni dostęp do CryptoServer.
Biblioteka CryptoServer PKCS#11 obsługuje więcej niż jedno urządzenie CryptoServer dla każdej
aplikacji.
CryptoServer może obsługiwać równolegle do 256 sesji lub aplikacji PKCS#11 na jeden
CryptoServer.
Biblioteka CryptoServer PKCS#11 zapewnia interfejs między aplikacją hosta a jednym lub większą liczbą
CryptoServer. Komunikuje się bezpośrednio ze skonfigurowanym CryptoServer lub klastrem CryptoServer.
Każdy CryptoServer może być lokalną kartą wtyczką PCI/PCIe lub urządzeniem sieciowym CryptoServer
LAN.
Kilka aplikacji na jednym komputerze hosta może uzyskać dostęp do biblioteki CryptoServer PKCS#11 równolegle.
Biblioteka CryptoServer PKCS#11 zapewnia również mechanizm konfiguracji kilku CryptoServer. Można uzyskać do nich
dostęp za pomocą tej samej biblioteki. Każdy slot PKCS#11 z każdego skonfigurowanego CryptoServer może być
adresowany bezpośrednio. Biblioteka CryptoServer PKCS#11 mapuje wszystkie istniejące sloty na unikalny identyfikator
slotu.
Komputer hosta
Aplikacja 1 Aplikacja 2
. . .
Aplikacja n
API CryptoServer PKCS#11
Miejsce 1...Gniazdo i Miejsce 1...Gniazdo j Miejsce 1...Gniazdo k
CryptoServer #1 (Token) CryptoServer #2 (Token) CryptoServer #n (Token)
Strona 7 z 76
Wymagania
3 Wymagania
Aby móc korzystać z interfejsu CryptoServer PKCS#11, należy upewnić się, że spełnione są
następujące wymagania wstępne.
Zainstalowano jeden lub więcej serwerów CryptoServer – lokalnie (karta PCIe CryptoServer) lub zdalnie (sieć
LAN CryptoServer).
Jeśli używana jest karta CryptoServer PCIe - sterownik CryptoServer został zainstalowany
zgodnie z opisem w odpowiedniej instrukcji obsługi CryptoServer.
Zaimportowano prawidłowy klucz główny zapasowy do CryptoServer.
Pakiet oprogramowania sprzętowego spełniający minimalne wymagania został załadowany do CryptoServer
(patrz Rozdział 3.1, „Wymagany pakiet oprogramowania sprzętowego”).
Aplikacja wykorzystująca interfejs CryptoServer PKCS#11 może załadować współdzieloną
bibliotekę CryptoServer PKCS#11 lub jest linkowana ze statyczną wersją tej biblioteki.
Plik konfiguracyjnycs_pkcs11_R2.cfgjest poprawnie skonfigurowany (patrz Rozdział 4, „Konfiguracja”) i
biblioteka CryptoServer PKCS#11 jest w stanie go odnaleźć i uzyskać do niego dostęp (patrz
Rozdział 3.2, „Lokalizacja pliku konfiguracyjnego cs_pkcs11_R2.cfg”).
Do ogólnej administracji CryptoServer możesz użyć jednego z narzędzi administracyjnych CryptoServer: CAT
(interfejs użytkownika Java) lub csadm (narzędzie wiersza poleceń). Zobacz [CSMSADM] lub [CSADMIN], aby
uzyskać pomoc. Ponadto Utimaco udostępnia dedykowane narzędzia do administracji interfejsem PKCS#11
na płycie CD produktu Security Server, względnie CryptoServer
Płyta CD z produktem SDK w folderze…\Utimaco\CryptoServer\Administracja:p11CAT – Java
graficzny interfejs użytkownika i narzędzie wiersza poleceń p11tool2.
3.1 Wymagany pakiet oprogramowania sprzętowego
Wszystkie moduły oprogramowania sprzętowego znajdują się w pakiecie oprogramowania sprzętowego
CryptoServerSecurityServer-<Typ>-<Wersja>.mpkg,gdzie <Typ>opisuje typ CryptoServer-Series (CS-
Seria, seria CSe, seria Se2Lub(Seria Se)i <Wersja>opisuje wersję
pakiet. Aby załadować odpowiedni pakiet oprogramowania sprzętowego do CryptoServer, zobacz [CSMSADM], aby uzyskać
szczegółowe informacje.
Aby mieć pewność, że interfejs PKCS#11 będzie działał prawidłowo, wymagany jest specjalny pakiet oprogramowania sprzętowego:
Proszę użyć pakietu oprogramowania sprzętowego w wersji 3.00 lub nowszej dostarczonego na płycie CD z produktem SecurityServer.
Strona 8 z 76
Wymagania
3.2 Lokalizacja pliku konfiguracyjnego cs_pkcs11_R2.cfg
Po utworzeniu pliku konfiguracyjnego biblioteka CryptoServer PKCS#11 powinna być w stanie go
zlokalizować i załadować. Istnieje kilka możliwości wskazania bibliotece CryptoServer PKCS#11, gdzie
znajduje się plik konfiguracyjny.
UstawCS_PKCS11_R2_CFGzmienną środowiskową na poprawną ścieżkę i lokalizację pliku
konfiguracyjnego.
Przykład dla systemu Windows:
# > ustaw CS_PKCS11_R2_CFG="C:\Moje dokumenty\utimaco\cs_pkcs11_R2.cfg"
Przykład dla systemu Linux:
# >
# >
CS_PKCS11_R2_CFG=~/.utimaco/cs_pkcs11_R2.cfg
eksportuj CS_PKCS11_R2_CFG
Umieść plik konfiguracyjny w bieżącym katalogu roboczym (przydatne w procesie rozwoju).
Umieść plik konfiguracyjny w tym samym katalogu, w którym znajduje się aplikacja (dotyczy tylko
systemów Windows i Linux).
Plik konfiguracyjny w katalogu specyficznym dla systemu (patrz poniżej).
Biblioteka CryptoServer PKCS#11 wyszukujecs_pkcs11_R2.cfgplik konfiguracyjny w następującej
kolejności:
W systemach operacyjnych Windows:
1.Najpierw sprawdza, czyCS_PKCS11_R2_CFGzmienna środowiskowa jest ustawiona i zawiera
nazwę i lokalizację pliku konfiguracyjnego.
TenCS_PKCS11_R2_CFGzmienna środowiskowa jest domyślnie ustawiana na poprawną nazwę i
lokalizację pliku konfiguracyjnego podczas instalacji płyty CD produktu:
W przypadku płyty CD z produktem SecurityServer:
- Od wersji 4.20: C:\ProgramData\cs_pkcs11_R2.cfg.
- Wersja starsza niż 4.20: C:\Program Files\Utimaco\CryptoServer\Lib\cs_pkcs11_R2.cfg. W przypadku płyty
CD z produktem CryptoServer SDK:
C:\Utimaco\CryptoServer\Lib\cs_pkcs11_R2.cfg
2.Jeśli nie, sprawdza, czy plik konfiguracyjny znajduje się w katalogu domowym użytkownika
(%USERPROFILE%).
3.Jeśli nie, sprawdza, czy plik konfiguracyjny znajduje się w bieżącym katalogu roboczym.
4.Jeśli nie, sprawdza, czy plik konfiguracyjny znajduje się w tym samym katalogu, w którym
znajduje się aplikacja.
Strona 9 z 76
Wymagania
5.Jeśli nie, sprawdza, czy plik konfiguracyjny znajduje się gdzieś w %ŚCIEŻKA%.
6.Jeżeli nie, sprawdza, czy plik konfiguracyjny znajduje się w katalogu WINDOWS (np.
c:\WINDOWS).
W systemach operacyjnych Linux:
1.Najpierw zostanie sprawdzone, czyCS_PKCS11_R2_CFGzmienna środowiskowa jest ustawiona i
zawiera nazwę i lokalizację pliku konfiguracyjnego.
2.Jeśli nie, zostanie sprawdzone, czy plik konfiguracyjny znajduje się w katalogu domowym użytkownika
(~/.utimaco/cs_pkcs11_R2.cfg).
3.W przeciwnym razie zostanie sprawdzone, czy plik konfiguracyjny znajduje się w bieżącym katalogu roboczym.
4.W przeciwnym razie sprawdzane jest, czy plik znajduje się w tym samym katalogu, co plik
wykonywalny.
5.Jeżeli nie, sprawdzane są następujące ścieżki dostępu do pliku konfiguracyjnego w następującej kolejności:
/usr/local/etc/utimaco
/usr/local/etc
/etc/utimaco
/itp
Kolejność wyszukiwania w innych systemach Unix:
1.Najpierw sprawdza, czyCS_PKCS11_R2_CFGzmienna środowiskowa jest ustawiona i zawiera
nazwę i lokalizację pliku konfiguracyjnego.
2.Jeśli nie, sprawdza, czy plik konfiguracyjny znajduje się w katalogu domowym użytkownika
(~/.utimaco/cs_pkcs11_R2.cfg).
3.Jeśli nie, sprawdza, czy plik konfiguracyjny znajduje się w bieżącym katalogu roboczym.
4.W przeciwnym razie sprawdzane są następujące ścieżki dostępu do pliku konfiguracyjnego w podanej kolejności:
/usr/local/etc/utimaco
/usr/local/etc
/etc/utimaco
/itp
Strona 10 z 76
Konfiguracja
4 Konfiguracja
Konfigurację biblioteki CryptoServer PKCS#11 wykonuje się w ramachcs_pkcs11_R2.cfg
plik konfiguracyjny. Szczegóły dotyczące lokalizacji pliku konfiguracyjnego znajdują się w rozdziale 3.2,
„Lokalizacja pliku konfiguracyjnego cs_pkcs11_R2.cfg”. Ten plik może zawierać kilka sekcji:
[Światowy]-sekcja konfiguracji ogólnej
[Serwer kryptograficzny] -sekcja dla każdego urządzenia CryptoServer, które powinno być adresowane przez
aplikację
[[Gniazdo] – ((opcjonalna) sekcja dla każdego używanego slotu.
Poniższa tabela przedstawia przegląd wszystkich parametrów, które można skonfigurować w
cs_pkcs11_R2.cfgplik konfiguracyjny.
Parametr Opis
Wycięcie lasu
Określa poziom rejestrowania 0, 1, 2, 3 lub 4 (szczegóły w rozdziale 4.2).
Ścieżka dziennika
Określa ścieżkę, w której ma zostać utworzony plik dziennika. W przypadku
katalogu /tmp, np. gdzie ustawiony jest bit sticky, usunięcie pliku, a zatem rotacja
dziennika nie jest możliwa. Plik dziennika może przekroczyć limit podany w
parametrze „Logsize”.
Rozmiar logu
Definiuje maksymalny rozmiar pliku dziennika. Jeśli zostanie osiągnięty maksymalny
rozmiar, wykonywana jest rotacja dziennika nadpisująca wcześniej utworzony plik dziennika.
Może być zdefiniowany jako wartość w bajtach lub jako sformatowany tekst. Np. wartość
„1000” oznacza, że rozmiar dziennika wynosi 1000 bajtów, podczas gdy wartość „1000 kb”
oznacza 1000 kilobajtów. Dozwolone formaty to „kb”, „mb” i „gb”.
KlawiszeZewnętrzne
Określa domyślne zachowanie dla tworzenia i generowania obiektów. Jeśli „true”,
nowo utworzone lub wygenerowane obiekty będą przechowywane w zewnętrznym
magazynie kluczy, tj. bazie danych kluczy poza CryptoServer.
Magazyn kluczy
Określa ścieżkę do zewnętrznego magazynu kluczy (np. C:/
utimaco/P11.sdb).Ten parametr musi zostać ustawiony, jeśli
KeysExternal = prawda.
SlotMultiSession
Określa zachowanie połączenia sesji. Jeśli „true”, każda sesja
ustanawia własne połączenie z CryptoServer.
Liczba gniazd
Maksymalna liczba slotów, które można wykorzystać. Domyślnie CryptoServer ma
10 skonfigurowanych slotów. Aby uniknąć skanowania przez aplikację wszystkich
skonfigurowanych slotów, maksymalną liczbę można zmniejszyć za pomocą
elementu konfiguracji.
Strona 11 z 76
Konfiguracja
Parametr Opis
Utrzymaj LeadZeros
Określa, czy wiodące zera operacji deszyfrowania zostaną zachowane (PRAWDALub
FAŁSZ)
Odstęp awaryjny
Konfiguruje tryb równoważenia obciążenia (FallbackInterval = 0,domyślny)
lub tryb failover (Odstęp czasu powrotu > 0)
Utrzymać przy życiu
Utrzymuj sesje aktywne i zapobiegaj ich wygasaniu po 15 minutach
bezczynności (PRAWDALubFAŁSZ)
Urządzenie
Adres urządzenia do podłączenia urządzenia CryptoServer (patrz rozdział 4.1)
Przekroczono limit czasu połączenia
Określa maksymalny czas oczekiwania w milisekundach, zanim nawiązanie
połączenia zostanie przerwane, jeśli urządzenie nie odpowiada.
PrzekroczenieCzasuPolecenia
Określa maksymalny czas (w milisekundach) oczekiwania na
odpowiedź od CryptoServer po wysłaniu polecenia.
Numer gniazda
Numer slotu, który ma zostać skonfigurowany
<nazwa użytkownika>
Definiuje mechanizm uwierzytelniania użytkownika o nazwie <username> (patrz
rozdział 11.2, „Uwierzytelnianie za pomocą pliku konfiguracyjnego”)
Rozszerzone logowanieSO
Rozszerzony loginUŻYTKOWNIK
Niestandardowe mechanizmy
Aktywuje rozszerzone logowanie dla SO
Aktywuje rozszerzone logowanie dla UŻYTKOWNIKA
Lista oficjalnych mechanizmów PKCS#11, które należy dostosować
Tabela 2: Parametry konfiguracji w pliku konfiguracyjnym cs_pkcs11_R2.cfg
Niektóre parametry można zdefiniować w więcej niż jednej sekcji. Na przykład parametr
KlawiszeZewnętrznejest oceniany w [Światowy]sekcja, [Serwer kryptograficzny]Sekcja i
[Szczelina]sekcja. W ten sposób parametr w sekcji o najwyższym priorytecie jest oceniany jako pierwszy. Jeśli
parametr nie jest ustawiony, oceniany jest parametr w kolejnej niższej sekcji. Jeśli parametr nie jest
ustawiony w żadnym miejscu, używana jest wartość domyślna. Ocena rozpoczyna się odSzczelina
sekcja (najwyższy priorytet) i kończy się wartościami domyślnymi (najniższy priorytet):
[Szczelina]
[Serwer kryptograficzny]
[Światowy]
Domyślny
Poniższa tabela przedstawia wartości domyślne wszystkich parametrów i sekcję, w której można je
zdefiniować.
Parametr Dozwolone sekcje Wartość domyślna
Strona 12 z 76
Konfiguracja
Parametr Dozwolone sekcje Wartość domyślna
Wycięcie lasu
[Światowy] 0 (ŻADEN)
Ścieżka dziennika
[Światowy] Brak wartości domyślnej (domyślnie nie jest
tworzony żaden plik dziennika).
Rozmiar logu
[Światowy] 1 000 000
KlawiszeZewnętrzne
[Globalny], [Serwer Kryptograficzny], [Slot] FAŁSZ
Magazyn kluczy
[Światowy] Brak domyślnej ścieżki (domyślnie nie jest
tworzony żaden zewnętrzny magazyn kluczy)
SlotMultiSession
[Globalny], [Serwer Kryptograficzny], [Slot] PRAWDA
Liczba gniazd
[Globalny], [CryptoServer] 10
Utrzymaj LeadZeros
[Światowy] FAŁSZ
Odstęp awaryjny
[Światowy] 0
Utrzymać przy życiu
[Globalny], [Serwer Kryptograficzny], [Slot] FAŁSZ
Urządzenie
[Serwer kryptograficzny] Brak wartości domyślnej (wartość musi być
zdefiniowana)
Przekroczono limit czasu połączenia
[Globalny], [CryptoServer] 5000
PrzekroczenieCzasuPolecenia
[Globalny], [CryptoServer] 60000
Numer gniazda
[Szczelina] Brak wartości domyślnej (adres urządzenia
musi być zdefiniowany)
<nazwa użytkownika>
Rozszerzone logowanieSO
Rozszerzony loginUŻYTKOWNIK
Niestandardowe mechanizmy
[Szczelina] Brak wartości domyślnej
[Szczelina] Brak wartości domyślnej
[Szczelina] Brak wartości domyślnej
[Światowy] Brak wartości domyślnej
Tabela 3: Domyślne ustawienia parametrów w pliku konfiguracyjnym cs_pkcs11_R2.cfg
4.1 Urządzenie parametryczne
Istnieje kilka możliwości adresowania CryptoServer za pomocąUrządzenieparametr
konfiguracji.
Oto kilka przykładów:
Strona 13 z 76
Konfiguracja
Adres Opis
/dev/cs2.n
gdzie n = {0, 1, 2, …, 7}
Lokalny serwer kryptograficzny nr n+1 w systemie UNIX.
Maksymalną liczbę ośmiu kart CryptoServer PCIe można
zmienić w źródle sterownika Linux.
PIC:n
gdzie n = {0, 1, 2, …, 31}
Lokalny serwer kryptograficzny nr n+1 w systemie Windows
TCP: [email protected]
Adres IP i numer portu sieci LAN CryptoServer
W poleceniach zawsze używaj adresów IP bez początkowych zer, mimo
że są one wyświetlane na wyświetlaczu CryptoServer LAN, np.
194.168.004.107.
TCP:194.168.4.107
Adres IP sieci LAN CryptoServer (domyślnie: port=288)
W poleceniach zawsze używaj adresów IP bez początkowych zer, mimo
że są one wyświetlane na wyświetlaczu CryptoServer LAN, np.
194.168.004.107.
194.168.4.107
Adres IP sieci LAN CryptoServer (domyślnie: protokół=TCP,
port=288)
W poleceniach zawsze używaj adresów IP bez początkowych zer, mimo
że są one wyświetlane na wyświetlaczu CryptoServer LAN, np.
194.168.004.107.
TCP:288@cslan01
Nazwa hosta i numer portu sieci LAN CryptoServer (używając żądania
DNS do rozwiązania nazwy hosta)
TCP:cslan01
Nazwa hosta sieci LAN CryptoServer (używając żądania DNS do rozwiązania
nazwy hosta, domyślnie: port=288)
cslan01
Nazwa hosta sieci LAN CryptoServer (używając żądania DNS do rozwiązania
nazwy hosta, domyślnie: protokół=TCP, port=288)
TCP: [email protected] Lub
TCP:3001@localhost
Protokół, adres IP i numer portu lokalnego symulatora CryptoServer dla
Windows/Linux (SDK). Symulator może być używany do celów testowych i
ewaluacyjnych; zobacz [CSMSADM], aby uzyskać więcej szczegółów.
[email protected] Lub
3001@localhost
Adres IP i numer portu lokalnego CryptoServer Simulator dla Windows/
Linux (SDK) z domyślnym protokołem TCP. Symulator może być używany
do celów testowych i ewaluacyjnych; zobacz [CSMSADM], aby uzyskać
więcej szczegółów.
Tabela 4: Przykłady ustawiania parametru Urządzenie
Przykład pliku konfiguracyjnegocs_pkcs11_R2.cfg:
[Światowy]
Strona 14 z 76
Konfiguracja
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
KeysExternal = prawda
Magazyn kluczy = c:/global/P11.sdb
KeepLeadZeros = prawda
KeepAlive = prawda
Przekroczono limit czasu połączenia
CzasPolecenia =
= 7000
70000
# CryptoServer jest siecią LAN CryptoServer
[CryptoServer]
Urządzenie = 192.168.4.137
CzasPolecenia =
Liczba gniazd = 3
SlotMultiSession
80000
= prawda
# pierwszy slot
[Szczelina]
NumerSlotu =
KlawiszeZewnętrzne
0
= PRAWDA
4.2 Rejestrowanie
Interfejs rejestrowania biblioteki CryptoServer PKCS#11 powinien być używany tylko wtedy, gdy wystąpiły
problemy. W zależności od konfiguracji rejestrowane są informacje takie jak zwrócone kody błędów, wywołane
funkcje itp. Domyślnie poziom rejestrowania (parametrWycięcie lasu)jest ustawiony naNIC.
Nazwa Poziom Opis
NIC
0 Nie będzie generowany żaden wynik logowania (domyślnie).
BŁĄD
1 Rejestruj błędy biblioteki CryptoServer PKCS#11 i modułów oprogramowania sprzętowego
CryptoServer
OSTRZEŻENIE
2 Rejestruj błędy i ostrzeżenia biblioteki CryptoServer PKCS#11 i modułów
CryptoServer
INFORMACJE
3 Rejestruj błędy i ostrzeżenia biblioteki CryptoServer PKCS#11 i modułów oprogramowania
układowego CryptoServer. Ponadto rejestrowane będą informacje o bibliotece CryptoServer
PKCS#11.
Strona 15 z 76
Konfiguracja
NAMIERZAĆ
4 Rejestruj błędy, ostrzeżenia i informacje biblioteki CryptoServer PKCS#11 i modułów oprogramowania
układowego CryptoServer. Ponadto, śledzenie wyników, takich jak wywołania funkcji, będzie rejestrowane.
Tabela 5: Poziomy rejestrowania
Nie zaleca się podnoszenia poziomu rejestrowania powyżejOSTRZEŻENIEw systemach
produkcyjnych. Spowalnia aplikację i zapisuje się trwale w pliku dziennika.
Strona 16 z 76
Tryby pracy
5 trybów pracy
W tym rozdziale opisano tryby działania biblioteki CryptoServer PKCS#11.
Bibliotekę CryptoServer PKCS#11 można stosować w trybie równoważenia obciążenia lub trybie przełączania awaryjnego.
Warunki wstępne
Zanim zaczniesz konfigurować i używać biblioteki CryptoServer PKCS#11 w dowolnym trybie, upewnij się,
że spełnione są następujące warunki wstępne:
Przed rozpoczęciem konfigurowania i korzystania z biblioteki CryptoServer PKCS#11 w trybie równoważenia obciążenia lub
przełączania awaryjnego zalecamy przeczytanie rozdziału „Klastrowanie w celu równoważenia obciążenia i przełączania awaryjnego” w
podręczniku [CSMSADM].
Zainicjowałeś ten sam slot PKCS#11 na każdym serwerze CryptoServer należącym do
klastra CryptoServer.
Utworzyłeś tego samego użytkownika o nazwie Security Officer (SO) na każdym serwerze CryptoServer należącym
do klastra CryptoServer.
Utworzyłeś tego samego użytkownika na każdym serwerze CryptoServer należącym do
klastra CryptoServer.
Upewnij się, że spełnione są warunki wstępne wymienione w rozdziale „Klastrowanie w celu równoważenia obciążenia i przełączania awaryjnego”
w dokumencie [CSMSADM] (znajdującym się na dostarczonej płycie CD z produktem w folderze
…\Dokumentacja\Instrukcje administracyjne) są również spełnione.
5.1 Tryb równoważenia obciążenia
W trybie równoważenia obciążenia wiele urządzeń CryptoServer jest połączonych ze sobą w jedno logiczne urządzenie, znane
również jako klaster. Odbywa się to poprzez ustawienie listy wszystkich (fizycznych) urządzeń CryptoServer jako
Urządzenieparametr wcs_pkcs11_R2.cfgplik konfiguracyjny, ujęty w nawiasach „{}” i zachowujący ustawienia
domyślneFallbackInterval = 0niezmienione. W tym przypadku urządzenia mogą być jednocześnie używane do
rozprowadzania przetwarzania połączenia pomiędzy urządzeniami klastrowymi.
Acs_pkcs11_R2.cfgplik konfiguracyjny w trybie równoważenia obciążenia może wyglądać na przykład
następująco:
[Światowy]
Strona 17 z 76
Tryby pracy
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
KeysExternal = prawda
Magazyn kluczy = c:/global/P11.sdb
# Konfiguruje tryb równoważenia obciążenia (== 0) lub tryb przełączania awaryjnego (>
0) FallbackInterval = 0
Liczba gniazd = 5
# logiczne urządzenie CryptoServer składające się z trzech sieci LAN CryptoServer
# urządzenia
[Serwer kryptograficzny]
Urządzenie = { 192.168.0.136 192.168.0.137 192.168.0.138} Limit czasu
połączenia = 70000
Wynikowe identyfikatory slotów CryptoServer w powyższym przykładzie to:
Urządzenie CryptoServer (logiczne) ID gniazda (ID urządzenia ID gniazda)
0x 0000 0000
0x 0000 0001
0x 0000 0002
0x 0000 0003
0x 0000 0004
192.168.0.136 192.168.0.137 192.168.0.138
Tabela 6: Przykład identyfikatorów gniazd w trybie równoważenia obciążenia
Aby uzyskać dostęp, np. do drugiego slotu na urządzeniu logicznym, należy użyć identyfikatora slotu
0x00000001. Biblioteka CryptoServer PKCS#11 decyduje następnie, który CryptoServer jest używany dla tego
żądania połączenia i nawiązuje połączenie z CryptoServerem z najmniejszą liczbą połączeń.
Na przykład, jeśli aplikacja żądająca ma jedno otwarte połączenie z każdym z urządzeń
192.168.4.136I192.168.4.138,biblioteka CryptoServer PKCS#11 otworzy następne połączenie
z urządzeniem192.168.4.137.
W trybie równoważenia obciążenia zawsze używaj kluczy zewnętrznych. Jeśli chcesz użyć kluczy wewnętrznych,
skontaktuj się najpierw z działem wsparcia Utimaco IS GmbH, aby wyjaśnić, jakie kroki należy wykonać.
Strona 18 z 76
Tryby pracy
5.2 Tryb przełączania awaryjnego
W trybie failover wiele urządzeń jest połączonych ze sobą w jedno logiczne urządzenie, znane również jako klaster.
Odbywa się to poprzez ustawienie listy wszystkich (fizycznych) urządzeń CryptoServer jakoUrządzenie
parametr, ujęty w nawiasach „{}” i ustawiającyOdstęp awaryjnyparametr do przedziału czasu [s], po
którym powinna zostać podjęta próba ponownego połączenia z podstawowym serwerem
kryptograficznym.
Acs_pkcs11_R2.cfgplik konfiguracyjny w trybie failover może wyglądać na przykład następująco:
[Światowy]
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
KeysExternal = prawda
Magazyn kluczy = c:/global/P11.sdb
# Konfiguruje tryb równoważenia obciążenia ( == 0 ) lub tryb przełączania awaryjnego ( >
0 ) FallbackInterval = 3600
Liczba gniazd = 3
# logiczne urządzenie CryptoServer składające się z dwóch urządzeń CryptoServer LAN
# 192.168.4.136 i 192.168.4.137 [Serwer
kryptograficzny]
Urządzenie = { 192.168.4.136 192.168.0.137 } Limit czasu
połączenia = 70000
Wynikowe identyfikatory slotów CryptoServer dla powyższego przykładu to:
Urządzenie CryptoServer (logiczne) ID gniazda (ID urządzenia ID gniazda)
0x 0000 0000
0x 0000 0001
0x 0000 0002
192.168.4.136 192.168.0.137
Tabela 7: Przykład identyfikatorów gniazd w trybie Failover
Aby uzyskać dostęp, np. do drugiego slotu na urządzeniu logicznym, użyj identyfikatora slotu 0x00000001. W
tym trybie biblioteka CryptoServer PKCS#11 decyduje, który CryptoServer jest używany. Jeśli biblioteka
CryptoServer PKCS#11 wykryje błąd na bieżącym urządzeniu, przełącza się na „następne” urządzenie w klastrze.
Na przykład urządzenie192.168.4.136ma błąd, biblioteka CryptoServer PKCS#11
automatycznie przełącza się na urządzenie192.168.4.137.
Strona 19 z 76
Tryby pracy
Trybu failover nie należy używać w przypadku funkcji manipulujących użytkownikami lub
kluczami wewnętrznymi, takich jak Przykłady: C_InitToken, C_InitPIN, C_SetPIN,
C_CreateObject, C_CopyObject, C_DestroyObject, C_SetAttributeValue, C_UnwrapKey,
C_DeriveKey. Dlatego jeśli obsługujesz klaster failover CryptoServer, nie używaj p11tool2 ani
narzędzia PKCS#11 CryptoServer Administration Tool (P11CAT) do zarządzania kluczami.
5.3 Inicjalizacja gniazda i kodu PIN użytkownika w trybie Failover/równoważenia
obciążenia
FunkcjeC_InitToken, C_InitPINIC_UstawPINodpowiednio utwórz i zmodyfikuj konta użytkowników dla PKCS#11 Security
Officer i PKCS#11 User w CryptoServer. Podczas wykonywania któregokolwiek z tych poleceń na urządzeniu logicznym
polecenie zostanie wykonane tylko na jednym z urządzeń fizycznych, niezależnie od tego, czy urządzenie logiczne
reprezentuje klaster do przełączania awaryjnego, czy klaster do równoważenia obciążenia. Konta użytkowników PKCS#11
nie zostaną utworzone ani zmodyfikowane na żadnym innym urządzeniu poza tym pojedynczym urządzeniem fizycznym,
powodując, że kolejne połączenia PKCS#11 zakończą się niepowodzeniem, jeśli nie zostaną „przypadkowo” otwarte na
urządzeniu fizycznym, na którym konta użytkowników PKCS#11 zostały faktycznie utworzone lub zmodyfikowane.
Dlatego w celu zainicjowania slotu i kodu PIN użytkownika, logiczne urządzenie CryptoServer (składające się z
N urządzeń fizycznych) powinno zostać rozbite i zastąpione N pojedynczymi urządzeniami w pliku
konfiguracyjnym PKCS#11.
W powyższym przykładzie musimy utworzyć nowy plik konfiguracji klastra:
[Światowy]
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
KeysExternal = prawda
Magazyn kluczy = c:/global/P11.sdb
Liczba gniazd = 3
# pierwsze urządzenie CryptoServer LAN klastra failover [CryptoServer]
Urządzenie = 192.168.0.136
Czas połączenia = 70000
# drugie urządzenie CryptoServer LAN klastra failover [CryptoServer]
Urządzenie = 192.168.0.137
Czas połączenia = 70000
Strona 20 z 76
Tryby pracy
Teraz inicjujemy urządzenia oddzielnie, wykonującToken initowyna slocie 0x00000000,
0x00000001 i 0x00000002 dla pierwszego urządzenia (192.168.0.136) oraz 0x00010000,
0x00010001 i 0x00010002 dla drugiego urządzenia (192.168.0.137):
Nazwa pliku: CK_UTF8CHAR_PTR ...
CK_ULONG
CK_ULONG
ulPinLenSlot0
ulPinLenSlot1
ulPinLenSlot2
=
=
=
strlen(pPinSlot0);
strlen(pPinSlot1);
strlen(pPinSlot2);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
Token_inicjalny(0x00000000,
Token_inicjalny(0x00000001,
Token_inicjalny(0x00000002,
Gniazdo pinu 0,
Gniazdo pinów 1,
Gniazdo pinów 2,
ulPinLenSlot0,
ulPinLenSlot1,
ulPinLenSlot2,
pEtykieta);
pEtykieta);
pEtykieta);
C_InitToken(0x00010000,
C_InitToken(0x00010001,
C_InitToken(0x00010002,
Gniazdo pinu 0,
Gniazdo pinów 1,
Gniazdo pinów 2,
ulPinLenSlot0,
ulPinLenSlot1,
ulPinLenSlot2,
pEtykieta);
pEtykieta);
pEtykieta);
Polecenie C_InitPIN należy wykonać urządzenie po urządzeniu i gniazdo po gnieździe w podobny sposób:
Nazwa pliku: CK_UTF8CHAR_PTR pPin0 =
"654321"; CK_UTF8CHAR_PTR pPin1 =
"7654321"; CK_UTF8CHAR_PTR pPin2 =
"87654321";
CK_ULONG
CK_ULONG
ulPinLen0
ulPinLen1
ulPinLen2
=
=
=
strlen(pPin0);
strlen(pPin1);
strlen(pPin2);
C_InitPIN(hSessionSlot00000000,
C_InitPIN(hSessionSlot00000001,
C_InitPIN(hSessionSlot00000002,
pPin0,
pPin1,
pPin2,
ulPinLen0);
ulPinLen1);
ulPinLen2);
C_InitPIN(hSessionSlot00010000,
C_InitPIN(hSessionSlot00010001,
C_InitPIN(hSessionSlot00010002,
pPin0,
pPin1,
pPin2,
ulPinLen0);
ulPinLen1);
ulPinLen2);
Sloty i kody PIN są teraz inicjowane i można ich używać, zastępując plik konfiguracji klastra plikiem
konfiguracji trybu failover.
Kody PIN SO i USER dla określonego gniazda muszą być takie same na każdym urządzeniu failover.
Przykład: Jeśli kod PIN SO dla gniazda 0 na urządzeniu PCI:0 to „123456”, to kod PIN SO dla gniazda 0 na
urządzeniu 192.168.0.137 musi również wynosić „123456”.
Strona 21 z 76
Wewnętrzne i zewnętrzne przechowywanie kluczy
6 Wewnętrzne i zewnętrzne przechowywanie kluczy
Klucze PKCS#11 (obiekty) można przechowywać w dwóch lokalizacjach:
Wewnętrzne: Klucze są przechowywane w sprzętowym module bezpieczeństwa CryptoServer.
Zewnętrzna: Klucze są przechowywane w zewnętrznej bazie danych.
Domyślne zachowanie generowania lub tworzenia obiektów PKCS#11 można kontrolować za pomocą
parametru konfiguracjiKlawiszeZewnętrznewartość konfiguracji.
Strona 22 z 76
Rozwój aplikacji PKCS#11
7 Rozwój aplikacji PKCS#11
Interfejs PKCS#11 jest czystym interfejsem C. Szczegółowa specyfikacja prototypów funkcji,
mechanizmów kryptograficznych itp. jest opisana w specyfikacjach PKCS#11 [PKCS11BS] i
[PKCS11ICMS].
Do opracowania aplikacji PKCS#11 potrzebne są następujące pliki nagłówkowe:
cryptoki.h
pkcs11.h
pkcs11f.h
pkcs11t.h
pkcs-11v2-20a3.h
pkcs11t_cs.h
Pliki te można pobrać ze standardu [PKCS11], z wyjątkiem ostatniego, który jest dostarczany wraz z serwerem
CryptoServer i zawiera definicje specyficzne dla serwera CryptoServer.
Aby opracować aplikację PKCS#11 przy użyciu biblioteki CryptoServer PKCS#11, muszą być
spełnione następujące warunki wstępne:
Aplikacja powinna zawierać plik nagłówkowykryptoki.h.
Plik konfiguracyjnycs_pkcs11_R2.cfgmusi zawierać informacje niezbędne do dostępu do
CryptoServer (patrz rozdział 4).
Musi być załadowany pakiet oprogramowania sprzętowego SecurityServer (wersja 3.00 lub nowsza).
Muszą być spełnione wszystkie dodatkowe wymagania rozdziału 3.
7.1 Biblioteki
Do celów programistycznych dostępne są następujące biblioteki:
Dla systemów operacyjnych Microsoft Windows: Biblioteka dołączana dynamicznie (DLL)
Plik cs_pkcs11_R2.dll.Biblioteka została zbudowana przy użyciu komponentów Microsoft Visual Studio.
Dla systemów Linux i innych systemów UNIX: biblioteka współdzielonalibcs_pkcs11_R2.soi biblioteka statyczna
libcs_pkcs11_R2_m.a.Oba zostały stworzone przy użyciu kolekcji kompilatorów GNU.
Biblioteki zawierają wszystko, co jest potrzebne do komunikacji pomiędzy aplikacją
PKCS#11 a CryptoServer.
Biblioteki dla Windows są pakowane przy użyciu wyrównania 1-bajtowego. Wszystkie inne biblioteki (Linux itp.) są
kompilowane z wyrównaniem do granic słów specyficznych dla procesora.
Strona 23 z 76
Czas wykonania
8 Czas wykonania
W tym rozdziale opisano szczegółowo implementację PKCS#11 firmy Utimaco dla
CryptoServer.
8.1 Inicjalizacja
Gdy funkcja PKCS#11C_Initialize()jest wywoływany wewnątrz aplikacji PKCS#11 plik konfiguracyjny
cs_pkcs11_R2.cfgzostanie przeanalizowany. W przypadku błęduC_Initialize()zwraca standardowy kod
błędu PKCS#11. Mechanizm rejestrowania może być użyty do określenia, który błąd wystąpił.
JeśliŚwiatowysekcja jest częścią problemu, plik dziennika może nie zostać utworzony. NaprawŚwiatowy najpierw
przejrzyj sekcję i kontynuuj.
PolecenieC_GetSlotList()zwraca listę wszystkich dostępnych slotów. Jeśli skonfigurowano więcej
niż jeden CryptoServer, sloty są już zamapowane na konkretny schemat opisany w rozdziale
5
,
„Tryby pracy”.
8.2 Ograniczona długość danych
Długość danych przesyłanych między biblioteką CryptoServer PKCS#11 a CryptoServer jest
ograniczona do maksymalnie 250 kByte (256000 bajtów). Dotyczy to wszystkich funkcji, które mogą
obsługiwać duże rozmiary danych, np.C_Digest(), C_Crypt(),itp.
Maksymalny rozmiar polecenia obejmuje również mały nagłówek polecenia, który jest dodawany do
każdego bloku danych wysyłanego do CryptoServer. Rozmiar nagłówka polecenia zmienia się w zależności
od wykonywanej funkcji. Dlatego maksymalny rozmiar danych wejściowych jest zawsze trochę mniejszy od
tego limitu (około 25 bajtów lub więcej).
Jeżeli aplikacja ma obsługiwać bloki danych przekraczające ten limit, należy rozważyć
podzielenie danych na mniejsze części i zawsze używać potrójnego zestawu funkcji (C_xxx_init,
(Aktualizacja C_xxx, finalizacja C_xxx)aby uniknąć problemów.
8.2.1 Owijanie kluczy za pomocą AES GCM/CCM
MechanizmyCKM_AES_GCMICKM_AES_CCMwymagają między innymi parametru mechanizmuulAADLen,
który podaje długość dodatkowych danych uwierzytelniających (AAD). W przypadkuZawijanieIC_Rozpakuj,
jest on ograniczony do 64 kByte – 1 (0xFFFF), ponieważ w przypadku tych funkcji nie jest obsługiwane
automatyczne dzielenie AAD na fragmenty.
Strona 24 z 76
Czas wykonania
8.2.2 Długość wektora inicjalizacji dla AES GCM
W przypadku AES GCM wektor inicjalizacji musi zostać podany jako parametr mechanizmupIv.
Długość tego wektora inicjalizacyjnego musi być również ustawiona za pomocą parametru
mechanizmuulIvLen. NIST zaleca długość 12 bajtów.
8.2.3 Długość danych do owijania kluczy za pomocą AES GCM/CCM
W przypadku AES CCM zwykle wymagane jest jawne wprowadzenie długości danych za pomocą
parametru mechanizmuulDataLen.Ale w przypadku funkcjiZawijanieIC_Rozpakuj,prawidłowy rozmiar danych,
który jest rozmiarem klucza plus narzut, jest automatycznie dostarczany przez moduł CXI. Dlatego ten
parametr mechanizmu jest ignorowany.
8.3 Wielowątkowość
Jeśli program uzyskuje dostęp do biblioteki CryptoServer PKCS#11 z poziomu aplikacji
wielowątkowej, w której kilka wątków jednocześnie wywołuje funkcje PKCS#11, należy zastosować
następujące podejście.
Główny wątek powinien wywołaćC_Initialize()funkcja i tworzenie wszystkich sesji poprzez wykonanie
C_OpenSession()funkcja. Pojedyncze logowanie (Zaloguj się)powinno być wykonywane dla wszystkich
otwartych sesji. Uchwyty sesji muszą być dostarczone do wątków, aby każdy wątek mógł wykonywać
swoje operacje.
Strona 25 z 76
Czas wykonania
Na przykład, jeśli jedna sesja jest współdzielona przez dwa wątki, występuje następujący
problem: Pierwszy wątek wykonujeC_SignInit()a następnie wykonuje kilkaAktualizacja
C_SignUpdate()kroki. Jeśli drugi wątek wykonuje równieżC_SignInit()IAktualizacja C_SignUpdate()
jednocześnie wynik jest nieokreślony. CryptoServer nie może rozróżnić tych dwóch wątków,
ponieważ zna tylko sesję i obsługuje oba wątki tak, jakby były tylko jednym wątkiem.
Strona 26 z 76
Koncepcja uwierzytelniania
9 Koncepcja uwierzytelniania
W tym rozdziale opisano koncepcję uwierzytelniania i zarządzania użytkownikami w
bibliotece CryptoServer PKCS#11 R2.
Do standardowego użycia PKCS#11 wystarczy użyć standardowej koncepcji uwierzytelniania, jak zapewnia
biblioteka CryptoServer PKCS#11. Łączy ona standardową koncepcję PKCS#11 Security Officer i normalną
rolę User z bezpieczną koncepcją użytkownika i uwierzytelniania CryptoServer. Więcej szczegółów można
znaleźć w rozdziale 9.1 „Standardowa koncepcja uwierzytelniania”.
W przypadku wymagań niestandardowych, takich jak specjalne mechanizmy uwierzytelniania, uwierzytelnianie
według reguły dwóch osób lub dedykowana rola menedżera kluczy, patrz rozdział 9.2 „Koncepcja rozszerzonego
uwierzytelniania”.
9.1 Koncepcja uwierzytelniania standardowego
PKCS#11 rozpoznaje dwa typy użytkowników: Security Officer (SO) i User (USER). Ci użytkownicy są
mapowani na użytkowników na CryptoServer: Na przykład SO slotu numer 0 jest mapowany na użytkownika
CryptoServer 'SO_0000'. Gdy użytkownik PKCS#11 jest zalogowany do biblioteki CryptoServer PKCS#11,
również odpowiadający mu użytkownik CryptoServer jest zalogowany do CryptoServer.
Ponadto implementacja PKCS#11 R2 firmy Utimaco wprowadza kolejnego użytkownika:
administratora. Administrator odpowiada również użytkownikowi CryptoServer z minimalnym
uprawnieniem „20000000”. Aby utworzyć SO przy użyciuToken initowypolecenie, administrator
musi być najpierw zalogowany. Aby zainicjować slot, utwórz SO i USER, wymagane są następujące
kroki:
1.Zaloguj się jako użytkownik CryptoServer z uprawnieniami co najmniej 20000000. Na przykład zaloguj
się jako domyślny użytkownik CryptoServer ADMIN zC_Loginrozkaz.
2.Utwórz SO wykonującyToken initowyrozkaz.
3.Wyloguj administratora CryptoServer za pomocąWylogujrozkaz.
4.Zaloguj się do SO za pomocąC_Loginrozkaz.
5.Utwórz UŻYTKOWNIKA wykonującegoC_InitPINrozkaz.
6.Wyloguj się z SO za pomocąWylogujrozkaz.
Przykład uwierzytelniania:
//1.
CK_UTF8CHAR_PTR pPin = "ADMIN,C:\\tmp\\ADMIN.key";
CK_ULONG ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_CS_GENERIC, pPin, ulPinLen);
Strona 27 z 76
Koncepcja uwierzytelniania
// 2.
CK_SLOT_ID slotID = 0; CK_UTF8CHAR_PTR pPin =
"123456"; CK_ULONG ulPinLen = strlen(pPin);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
err = C_InitToken(slotID, pPin, ulPinLen, pLabel);
//3.
Błąd = C_Logout(hSession);
//4.
CK_UTF8CHAR_PTR pPin = "123456"; CK_ULONG
ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_SO, pPin, ulPinLen);
//5.
CK_UTF8CHAR_PTR pPin = "654321"; CK_ULONG
ulPinLen = strlen(pPin);
err = C_InitPIN(hSession, pPin, ulPinLen);
//6.
Błąd = C_Logout(hSession);
Po wykonaniu sześciu kroków poleceniecsadm Lista użytkownikówpokazuje następujący wynik
(przykładowa lista dla slotu 0):
Nazwa
ADMINISTRATOR
SO_0000
USR_0000
Pozwolenie
22000000
00000200
00000002
Mechanizm
RSA
HMAC
HMAC
Atrybuty
podpisać
hasło
hasło
A[CXI_GROUP=SLOT_0000]
A[CXI_GROUP=SLOT_0000]
9.2 Koncepcja ulepszonego uwierzytelniania
9.2.1 Utwórz użytkowników z innymi mechanizmami uwierzytelniania
Domyślnym mechanizmem uwierzytelniania używanym z użytkownikami PCKS#11 (SO i USER) jest
hasło HMAC. Aby utworzyć użytkowników przy użyciu innych mechanizmów uwierzytelniania,
należy podać informacje o poświadczeniach użytkownika (hasło, ścieżka do pliku klucza lub karta
inteligentna z kluczem podpisu)PrzypnijparametrToken initowyiC_InitPINfunkcje w następującej
składni z prefiksemDostawca CKU:.
Strona 28 z 76
Koncepcja uwierzytelniania
Mechanizm uwierzytelniania Składnia (parametr pPin C_InitToken lub C_InitPIN)
Podpis RSA z plikiem klucza
CKU_VENDOR:RSASign={Hash}<nazwapliku>
CKU_VENDOR:RSASign={Hash}<nazwapliku>#<hasło>
<nazwapliku> -Nazwa pliku zawierającego klucz RSA dla użytkownika,
łącznie ze ścieżką do pliku
<hasło> -Hasło pliku klucza, jeśli jest zaszyfrowany
Podpis RSA z
karta inteligentna podłączona
bezpośrednio do hosta
CKU_VENDOR:RSASign={Hash}<specyfikator-klucza>
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego serwera
kryptograficznego” w podręczniku [CSADMIN].
Podpis RSA z
karta inteligentna podłączona do
CryptoServer
CKU_VENDOR:RSASC={Hash}<specyfikator-klucza>
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego serwera
kryptograficznego” w podręczniku [CSADMIN].
Hasło HMAC
CKU_VENDOR:HMACPwd={Hash}<password>
<hasło> -Hasło użytkownika
Podpis ECDSA z plikiem klucza
CKU_VENDOR:ECDSA={Hash}<nazwapliku>
CKU_VENDOR:ECDSA={Hash}<nazwapliku>#<hasło>
<nazwapliku> -Nazwa pliku zawierającego klucz RSA użytkownika, w
tym ścieżka do pliku
<hasło> -Hasło pliku klucza, jeśli jest zaszyfrowany
Podpis ECDSA z
karta inteligentna podłączona do
hosta
CKU_VENDOR:ECDSA={Hash}<specyfikator-klucza>
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego serwera
kryptograficznego” w podręczniku [CSADMIN].
Tabela 8: Mechanizmy uwierzytelniania i ich składnia
W trybie pracy awaryjnej użytkownicy są tworzeni za pomocą narzędzi administracyjnych
CryptoServer csadm lub CAT.
Przykład (SO wykorzystujące podpis RSA z kartą inteligentną podłączoną bezpośrednio do hosta):
CK_SLOT_ID identyfikator slotu = 0;
Strona 29 z 76
Koncepcja uwierzytelniania
CK_UTF8CHAR_PTR pPin = "CKU_VENDOR:RSASign=:cs2:auto:USB0"; CK_ULONG
ulPinLen = strlen(pPin);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
err = C_InitToken(slotID, pPin, ulPinLen, pLabel);
Przykład (SO używające podpisu RSA z plikiem klucza):
CK_SLOT_ID identyfikator slotu = 0;
CK_UTF8CHAR_PTR pPin = "CKU_VENDOR:RSASign=C:\\tmp\\RSA.key#1234"; CK_ULONG
ulPinLen = strlen(pPin);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
err = C_InitToken(slotID, pPin, ulPinLen, pLabel);
Przykład (SO używając hasła HMAC):
CK_SLOT_ID identyfikator slotu = 0;
CK_UTF8CHAR_PTR pPin = "CKU_VENDOR:HMACPwd=123456";
CK_ULONG ulPinLen = strlen(pPin);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
err = C_InitToken(slotID, pPin, ulPinLen, pLabel);
Przykład (SO wykorzystujące podpis ECDSA z kartą inteligentną podłączoną bezpośrednio do hosta):
CK_SLOT_ID identyfikator slotu = 0;
CK_UTF8CHAR_PTR pPin = "CKU_VENDOR:ECDSA=:cs2:auto:USB0";
CK_ULONG ulPinLen = strlen(pPin);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
err = C_InitToken(slotID, pPin, ulPinLen, pLabel);
Przykład (SO używające podpisu ECDSA z plikiem klucza):
CK_SLOT_ID identyfikator slotu = 0;
CK_UTF8CHAR_PTR pPin = "CKU_VENDOR:ECDSA=C:\\tmp\\ECDSA.key#4321"; CK_ULONG
ulPinLen = strlen(pPin);
CK_UTF8CHAR_PTR pLabel = "Etykieta testowa";
err = C_InitToken(slotID, pPin, ulPinLen, pLabel);
9.2.2 Zaloguj użytkownika za pomocą innych mechanizmów uwierzytelniania
Logowanie użytkownika przy użyciu innych mechanizmów uwierzytelniania niż domyślny jest podobne do
tworzenia użytkownika.Typ użytkownikadostarczone doC_Loginmusi byćCKU_CS_GENERIC.Ten
PrzypnijparametrC_Loginpodaje informacje o poświadczeniach użytkownika (hasło, ścieżka do pliku
klucza lub karty inteligentnej), które należy podać w następującej składni:
Strona 30 z 76
Koncepcja uwierzytelniania
Mechanizm uwierzytelniania Składnia (parametr pPin C_Login)
Podpis RSA z plikiem klucza
<nazwa użytkownika>,<nazwa pliku>
<nazwa użytkownika>,<nazwa pliku>#<hasło>
<nazwa pliku> -Nazwa pliku zawierającego klucz RSA użytkownika, łącznie ze
ścieżką
<hasło> -Hasło pliku klucza, jeśli jest zaszyfrowany
Podpis RSA z kartą inteligentną
podłączoną bezpośrednio do hosta
<nazwa użytkownika>,<specyfikator-klucza>
PIN jest odczytywany za pomocą klawiatury PIN
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego serwera
kryptograficznego” w podręczniku [CSADMIN].
Podpis RSA z kartą inteligentną
podłączoną do CryptoServer
<nazwa użytkownika>
PIN jest odczytywany za pomocą klawiatury PIN.
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego serwera
kryptograficznego” w podręczniku [CSADMIN].
Hasło HMAC
<nazwa użytkownika>,<hasło>
<hasło> -Hasło użytkownika
Podpis ECDSA z plikiem klucza
<nazwa użytkownika>,<nazwa pliku>
<nazwa użytkownika>,<nazwa pliku>#<hasło>
<nazwa pliku> -Nazwa pliku zawierającego ECDSA użytkownika, w tym
ścieżka do pliku
<hasło> -Hasło pliku klucza, jeśli jest zaszyfrowany
Podpis ECDSA z
karta inteligentna podłączona do
hosta
<nazwa użytkownika>,<specyfikator-klucza>
PIN jest odczytywany za pomocą klawiatury PIN
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego serwera
kryptograficznego” w podręczniku [CSADMIN].
Tabela 9: Mechanizmy uwierzytelniania i odpowiadająca im składnia
Przykład (logowanie SO na slocie 0) przy użyciu hasła HMAC):
CK_UTF8CHAR_PTR pPin = "SO_0000,123456";
Strona 31 z 76
Koncepcja uwierzytelniania
CK_ULONG ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_CS_GENERIC, pPin, ulPinLen);
Przykład (logowanie SO na slocie 0) przy użyciu podpisu RSA z plikiem klucza):
CK_UTF8CHAR_PTR pPin = "SO_0000,C:\\tmp\\RSA.key#1234"; CK_ULONG
ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_CS_GENERIC, pPin, ulPinLen);
Przykład (logowanie SO na slocie 0) przy użyciu podpisu RSA z kartą inteligentną podłączoną bezpośrednio
do hosta):
CK_UTF8CHAR_PTR pPin = "SO_0000,:cs2:auto:USB0"; CK_ULONG
ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_CS_GENERIC, pPin, ulPinLen);
Przykład (logowanie UŻYTKOWNIKA na slocie 0) przy użyciu podpisu ECDSA z plikiem klucza):
CK_UTF8CHAR_PTR pPin = "USR_0000,C:\\tmp\\ECDSA.key"; CK_ULONG
ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_CS_GENERIC, pPin, ulPinLen);
Przykład (logowanie UŻYTKOWNIKA na slocie 0) przy użyciu podpisu ECDSA z kartą inteligentną
podłączoną bezpośrednio do hosta):
CK_UTF8CHAR_PTR pPin = "USR_0000,:cs2:auto:USB0"; CK_ULONG
ulPinLen = strlen(pPin);
err = C_Login(hSession, CKU_CS_GENERIC, pPin, ulPinLen);
9.2.3 Zmień PIN dla innych mechanizmów uwierzytelniania
Aby zmienić kod PIN użytkownika z hasłem uwierzytelniającym HMAC (zmiana kodu PIN
dla innych mechanizmów nie jest możliwa),polska szpilkaIpNowyPinparametr
C_UstawPinfunkcja musi być podana w następującej składni z prefiksemDostawca CKU:.
Mechanizm Składnia (parametr pPin C_SetPIN)
Hasło HMAC
CKU_VENDOR:<hasło>
<hasło> -Hasło użytkownika
Tabela 10: Składnia zmiany hasła użytkownika
Strona 32 z 76
Koncepcja uwierzytelniania
Przykład (zmiana PIN-u UŻYTKOWNIKA przy użyciu hasła HMAC):
CK_UTF8CHAR_PTR pOldPin = "Dostawca_CKU:123456";
CK_ULONG ulOldLen = strlen(pOldPin); CK_UTF8CHAR_PTR
pNewPin = "Dostawca_CKU:654321"; CK_ULONG ulNewLen =
strlen(pNewPin);
err = C_SetPIN(hSession, pOldPin, ulOldLen , pNewPin, ulNewLen);
Przykład (plik klucza RSA):
CK_UTF8CHAR_PTR pOldPin = "Dostawca_CKU:12345678";
CK_ULONG ulOldLen = strlen(pOldPin); CK_UTF8CHAR_PTR
pNewPin = "Dostawca_CKU:87654321"; CK_ULONG ulNewLen =
strlen(pNewPin);
err = C_SetPIN(hSession, pOldPin, ulOldLen , pNewPin, ulNewLen);
9.2.4 Uwierzytelnianie za pomocą pliku konfiguracyjnego
Czasami może być konieczne użycie mechanizmu uwierzytelniania innego niż domyślny
mechanizm hasła HMAC, ale nie jest możliwe podanie informacji o mechanizmie z parametrami
za pośrednictwem biblioteki CryptoServer PKCS#11, jak opisano w poprzednich sekcjach. W
takim przypadku informacje dla użytkownika, którego mechanizm uwierzytelniania różni się od
domyślnego, można zapisać w pliku konfiguracyjnym.cs_pkcs11_R2.cfg
Zamiast tego element konfiguracji musi określać nazwę użytkownika jako parametr <klucz>, a
szczegóły mechanizmu uwierzytelniania jako <wartość> parametru podanego w cudzysłowie.
Mechanizm uwierzytelniania Składnia w pliku konfiguracyjnym ("<klucz> = <wartość>")
Podpis RSA z plikiem klucza <username> = "RSASign={Hash}<filename>"
<nazwa pliku> -Nazwa pliku zawierającego klucz RSA użytkownika, w
tym ścieżka do pliku
Podpis RSA z kartą inteligentną
podłączoną do hosta
<username> = "RSASign={Hash}<specyfikator-klucza>"
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego
serwera kryptograficznego” w podręczniku [CSADMIN].
Podpis RSA z kartą inteligentną
bezpośrednio podłączoną do
CryptoServer
<username> = "RSASC ={Hash}<specyfikator-klucza>"
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego
serwera kryptograficznego” w podręczniku [CSADMIN].
Strona 33 z 76
Koncepcja uwierzytelniania
Mechanizm uwierzytelniania Składnia w pliku konfiguracyjnym ("<klucz> = <wartość>")
Hasło HMAC
<nazwa użytkownika> = "HMACPwd={Hash}"
Podpis ECDSA z plikiem klucza
<nazwa użytkownika> = "ECDSA ={Hash}<nazwa pliku>"
<nazwa pliku> -Nazwa pliku zawierającego ECDSA użytkownika, w tym
ścieżka do pliku
Podpis ECDSA z kartą inteligentną
podłączoną do hosta
<username> = "ECDSA ={Hash}<specyfikator-klucza>"
<specyfikator-klucza> -Opis karty inteligentnej, klawiatury PIN i interfejsu (przykład: :
cs2:auto:USB0).Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w
rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla zdalnego
serwera kryptograficznego” w podręczniku [CSADMIN].
Tabela 11: Składnia definiowania mechanizmu uwierzytelniania użytkownika w pliku cs_pkcs11_R2.cfg
Przykładowy plik konfiguracyjny (domyślny SO slotu 0, który używa mechanizmu uwierzytelniania
podpisu RSA z plikiem klucza):
[Światowy]
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
[Serwer kryptograficzny]
Urządzenie = PCI:0
[Szczelina]
NumerSlotu = 0
# Użytkownik CryptoServer 'SO_0000'
# używając mechanizmu RSASign (SO slotu 0)
# z kluczem znajdującym się w 'C:\tmp\RSA.key' SO_0000
= "RSASign=C:\tmp\RSA.key"
Przykładowy plik konfiguracyjny (użytkownik inny niż domyślny CryptoServer, który używa
mechanizmu uwierzytelniania podpisu RSA z kartą inteligentną podłączoną do hosta):
[Światowy]
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
[Serwer kryptograficzny]
Urządzenie = PCI:0
[Szczelina]
NumerSlotu = 2
Strona 34 z 76
Koncepcja uwierzytelniania
# Użytkownik CryptoServer 'CSuser'
# korzystanie z mechanizmu RSASign z uwierzytelnianiem za pomocą karty inteligentnej
# (w slocie 2)
# z klawiaturą PIN podłączoną do interfejsu USB CSuser =
"RSASign=:cs2:auto:USB0"
Szczegółowe informacje na temat specyfikatorów kluczy można znaleźć w rozdziałach „Specyfikatory kluczy” i „Używanie lokalnej klawiatury PIN dla
zdalnego serwera kryptograficznego” w podręczniku [CSADMIN].
Użycie cudzysłowu na początku i na końcu wartości mechanizmu uwierzytelniania jest
obowiązkowe.
W przypadku gdy w pliku konfiguracyjnym podano informacje o mechanizmie uwierzytelniania
konkretnego użytkownika w sposób opisany powyżej,Przypnijparametr w funkcjachC_InitToken, C_InitPIN,
C_LoginIC_UstawPinmuszą zostać dostarczone w następujący sposób:
Mechanizm C_InitToken,
C_InitPIN
C_Login C_UstawPin
Podpis RSA z plikiem klucza NULL_PTRLub
hasło
plik klucza
NULL_PTRLub
hasło
plik klucza
NIEDOZWOLONY
Podpis RSA z kartą inteligentną
podłączoną do hosta
NULL_PTR NULL_PTR
NIEDOZWOLONY
Podpis RSA z kartą inteligentną
podłączoną do CryptoServer
NULL_PTR NULL_PTR
NIEDOZWOLONY
Hasło HMAC hasło hasło hasło
Podpis ECDSA z plikiem klucza NULL_PTRLub
hasło
plik klucza
NULL_PTRLub
hasło
plik klucza
NIEDOZWOLONY
Podpis ECDSA z
karta inteligentna podłączona do
CryptoServer
NULL_PTR NULL_PTR
NIEDOZWOLONY
Tabela 12: Definicja parametru pPin, jeśli mechanizm uwierzytelniania użytkownika jest określony w pliku cs_pkcs11_R2.cfg
Strona 35 z 76
Koncepcja uwierzytelniania
9.2.5 Automatyczne logowanie administratora za pomocą pliku konfiguracyjnego
Czasami może się zdarzyć, że nie będzie można zalogować się jako administrator (funkcjaC_Logindla
użytkownika z uprawnieniami administratora) przed wykonaniem inicjalizacji gniazda (funkcja
(Wpisz nazwę pliku C_InitToken).Dlatego specjalny użytkownik z uprawnieniami administratora, który jest automatycznie
logowany przed inicjalizacją, może zostać skonfigurowany za pomocą pliku konfiguracyjnego. Nazwa użytkownika to
„AD” i używa on mechanizmu uwierzytelniania HMAC z minimalnym uprawnieniem „20000000”. Najpierw należy utworzyć
użytkownika za pomocą narzędzi administracyjnych csadm lub CAT.
Po utworzeniu specjalnego użytkownika, wynik poleceniacsadm Lista użytkownikówpowinno
wyglądać na przykład tak:
Nazwa
ADMINISTRATOR
OGŁOSZENIE
Pozwolenie
22000000
20000000
Mechanizm
RSA
HMAC
Atrybuty
podpisać
hasło
Aby umożliwić automatyczne logowanie użytkownika AD do slotu, dane uwierzytelniające użytkownika muszą zostać zapisane
w pliku konfiguracyjnym zgodnie z następującą składnią:
AD = "HMACPwd=[{Hash}]#<hasło>"
Przykładowy plik konfiguracyjny (użytkownik administratora AD jest automatycznie logowany po
pierwszym uruchomieniu)Token initowyna slocie 0):
[Światowy]
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
[Serwer kryptograficzny]
Urządzenie = PCI:0
[Szczelina]
NumerSlotu = 0
# użytkownik administratora „AD” jest zalogowany podczas C_InitToken
# proces z mechanizmem uwierzytelniania HMAC
# I
REKLAMA =
hasło '123456'
"HMACPwd=#123456"
9.2.6 Uwierzytelnianie według reguły dwóch osób
Interfejs CryptoServer PKCS#11 umożliwia realizację koncepcji uwierzytelniania
zgodnie z regułą dwóch osób.
Jeśli wymagane jest uwierzytelnianie zgodnie z regułą dwóch osób (np. ze względu na politykę bezpieczeństwa),
konkretni użytkownicy podlegający tej regule muszą zostać utworzeni ręcznie za pomocą narzędzi
administracyjnych CryptoServer, CAT lub csadm.
Strona 36 z 76
Koncepcja uwierzytelniania
Dla każdej roli użytkownika (SO, USER lub menedżer kluczy KM (jeśli skonfigurowano opcjonalnie)), która musi spełniać
regułę dwóch osób w celu uwierzytelnienia, należy utworzyć co najmniej dwóch użytkowników z uprawnieniem 1 w
odpowiedniej grupie użytkowników.
Przykłady tworzenia użytkowników zgodnie z regułą dwóch osób (slot 0):
Aby wdrożyć zasadę dwóch osób dla SO w slocie 0, należy utworzyć co najmniej dwóch użytkowników
SO1_0000ISO2_0000,z uprawnieniami użytkownika 00000100 i atrybutem
CXI_GROUP=SLOT_0000.
Aby wdrożyć zasadę dwóch osób dla UŻYTKOWNIKA w slocie 0, należy utworzyć co najmniej dwóch
użytkownikówUSR1_0000IUSR2_0000,z uprawnieniami użytkownika 00000001 i atrybutem
CXI_GROUP=SLOT_0000.
Aby wdrożyć zasadę dwóch osób dla KM w slocie 0, należy utworzyć co najmniej dwóch użytkowników
KM1_0000IKM2_0000,z uprawnieniami użytkownika 00000010 i atrybutem
CXI_GROUP=SLOT_0000.
Aby zalogować dwóch użytkowników w celu wykonania polecenia PKCS#11 zgodnie z regułą dwóch osób,
C_Loginfunkcja z typem użytkownikaCKU_CS_GENERICmusi być użyty dwa razy (raz dla każdego użytkownika).
Przykładowe logowanie (dwa SO z mechanizmem uwierzytelniania HMAC dla slotu 0):
Nazwa pliku: CK_UTF8CHAR_PTR pPinSO1 = "SO1_0000,123456";
CK_ULONG ulPinLenSO1 = strlen(pPinSO1); CK_UTF8CHAR_PTR
pPinSO2 = "SO2_0000,654321"; CK_ULONG ulPinLenSO2 =
strlen(pPinSO2);
błąd = C_Login(hSession, CKU_CS_GENERIC, pPinSO1, błąd =
C_Login(hSession, CKU_CS_GENERIC, pPinSO2,
ulPinLenSO1);
ulPinLenSO2);
9.2.7 Rozszerzone logowanie
Rozszerzony mechanizm logowania umożliwia wykonywanie wielu logowań w ciągu jednego dnia.C_Login
wywołanie funkcji. Często jest przydatne w sytuacjach, gdy biblioteka CryptoServer PKCS#11 jest zintegrowana z innym
oprogramowaniem, ale wymaganie wymaga logowania przy użyciu reguły dwóch osób z uwierzytelnianiem za pomocą
klawiatury PIN.
Najpierw należy utworzyć dwóch użytkowników dla reguły dwóch osób, jak wyjaśniono w rozdziale 9.2.6.
Aby aktywować rozszerzone logowanie dla slotu, należy ustawić wpis w odpowiedniej sekcji slotu pliku
konfiguracyjnego.cs_pkcs11_R2.cfg:
Wpis konfiguracjiRozszerzone logowanieSOumożliwia rozszerzone logowanie dla SO.
Wpis konfiguracjiRozszerzony loginUŻYTKOWNIKumożliwia rozszerzone logowanie dla UŻYTKOWNIKA.
Wartością wpisu konfiguracji jest lista danych logowania sformatowana w taki sam sposób jak
Przypnijparametr w rozdziale 9.2.2.
Strona 37 z 76
Koncepcja uwierzytelniania
Przykładowy plik konfiguracyjny (konfiguracja SO dla dwóch osób z uwierzytelnianiem za pomocą klawiatury
PIN na slocie 0):
[Światowy]
Wycięcie lasu
Ścieżka dziennika
Rozmiar logu
=
=
=
3
c:/tmp
10mb
[Serwer kryptograficzny]
Urządzenie = PCI:0
[Szczelina]
NumerSlotu = 0
# po wywołaniu C_Login użytkownik SO1_0000 musi uwierzytelnić się za pomocą
# Podłączony do interfejsu USB PIN pad; następnie użytkownik SO2_0000 musi
# uwierzytelnij się za pomocą tej samej klawiatury
PIN ExtendedLoginSO = {
SO1_0000,:cs2:auto:USB0
SO2_0000,:cs2:auto:USB0 }
9.2.8 Rola menedżera kluczy i użytkownika kluczowego
W PKCS#11 UŻYTKOWNIK ma domyślnie uprawnienia/zadania do zarządzania kluczami (tworzenie, usuwanie,
importowanie, eksportowanie itd.) i do używania ich w operacjach kryptograficznych. Zadania te można również
podzielić na dwie grupy i przypisać różnym użytkownikom PKCS#11. Wymaga to odpowiedniej konfiguracji
biblioteki CryptoServer PKCS#11, aby mogła obsługiwać dwie wynikające z tego role użytkownika:
Menedżer kluczy (KM) z uprawnieniami do zarządzania kluczami kryptograficznymi
Kluczowy użytkownik (KU) mający uprawnienia do używania kluczy kryptograficznych.
9.2.9 Utwórz i zaloguj się do Menedżera kluczy
KM musi zostać utworzony poza zakresem biblioteki CryptoServer PKCS#11 za pomocą narzędzi
administracyjnych CryptoServer csadm lub CAT. Po utworzeniu wartość konfiguracji
Maska klucza autoryzacji CKA_CFGmusi być ustawione na wymagane uprawnienia. Aby uzyskać
instrukcje krok po kroku dotyczące tworzenia nowego użytkownika z rolą menedżera kluczy z CAT i
P11CAT, przeczytaj rozdział „Tworzenie nowego użytkownika” w [CSMSADM] i rozdział „Zmiana
konfiguracji globalnej” w [CS_PKCS11CAT]. Przykład tworzenia użytkownika w roli menedżera kluczy
z csadm podano w rozdziale „AddUser” w [CSADMIN].
Strona 38 z 76
Koncepcja uwierzytelniania
Przykład (KM dla slotu 1):
Utwórz użytkownika KM_0001 z maską uprawnień 0000020 i atrybutem
CXI_GROUP=SLOT_0001.To polecenie wymaga uwierzytelnienia przez użytkownika z rolą administratora
użytkowników (min. uprawnienia 20000000) lub przez domyślnego użytkownika CryptoServer ADMIN.
1.Zaloguj się jako użytkownik z rolą administratora użytkowników, jako ADMIN lub jako
SO dla odpowiedniego slotuSO_0001za pomocąC_Loginfunkcja. WAŻNE: Ostatnia
wymaga obiektu konfiguracji gniazdaCKA_CFG_ALLOW_SLOTS
być wcześniej ustawionym naCK_TRUE.
2.Zmień atrybutMaska klucza autoryzacji CKA_CFGz funkcjąC_SetAttributeValuedo wartości
0x00000020.
3.Zaloguj się jako użytkownikKM_0001zC_Loginfunkcja i typ użytkownikaCKU_CS_GENERIC. Użytkownik KM
jest teraz zalogowany i może wykonywać funkcje zarządzania kluczami.
Strona 39 z 76
Funkcje zarządzania kluczami w PKCS#11
10 funkcji zarządzania kluczami w PKCS#11
Poniższe listy pokazują przegląd funkcji, które mogą być wykonywane przez KM lub KU. Jeśli
KM próbuje wykonać funkcje z KU (i odwrotnie), błąd
CKR_USER_NIE_ZALOGOWANYwystępuje. Szczegółowy opis funkcji wymienionych poniżej można
znaleźć w [PKCS11BS].
Funkcja PKCS#11 Opis Dozwolony
użytkownik
KM KU
C_UtwórzObiekt
Obiekt C_CopyObject
C_ZniszczObiekt
C_SetAttributeValue
C_GenerateKey
C_GenerateKeyPair
Klucz C_Wrap
C_Klucz rozpakowywania
C_Klucz pochodny
C_EncryptInit
C_Szyfrowanie
Aktualizacja C_Encrypt
Tworzy nowy obiekt
-
-
-
-
-
-
-
-
-
-
-
-
-
Tworzy kopię obiektu
-
Niszczy obiekt
-
Modyfikuje wartość atrybutu obiektu
-
Generuje klucz tajny
-
Generuje parę kluczy publicznych i prywatnych
-
Owija (szyfruje) klucz
-
Odszyfrowuje (odszyfrowuje) klucz
-
Wywodzi klucz z klucza bazowego
-
Inicjuje operację szyfrowania
-
Szyfruje dane jednoczęściowe
-
Kontynuuje operację szyfrowania
wieloczęściowego
-
C_EncryptFinal
Kończy operację szyfrowania wieloczęściowego
-
-
C_DecryptInit
Inicjuje operację deszyfrowania
-
-
C_Deszyfruj
Odszyfrowuje zaszyfrowane dane w jednej części
-
-
Aktualizacja C_Decrypt
Kontynuuje wieloetapową operację
odszyfrowywania
-
-
C_DecryptFinal
Kończy wieloczęściową operację odszyfrowywania
-
-
Strona 40 z 76
Funkcje zarządzania kluczami w PKCS#11
Funkcja PKCS#11 Opis Dozwolony
użytkownik
KM KU
C_DigestInit
C_Skrót
Aktualizacja C_DigestUpdate
Klucz skrótu C_Digest
C_DigestFinal
C_SignInit
Znak C
Aktualizacja C_SignUpdate
C_SignFinal
C_SignRecoverInit
Inicjuje operację przetwarzania wiadomości
-
-
Streszcza dane jednoczęściowe
-
-
Kontynuuje wieloetapową operację trawienia
-
-
Streszcza klucz
-
-
Kończy wieloczęściową operację trawienia
-
-
Inicjuje operację podpisu
-
-
Podpisuje dane jednoczęściowe
-
-
Kontynuuje wieloczęściową operację podpisu
-
-
Kończy operację podpisu wieloczęściowego
-
-
Inicjuje operację podpisu, w której dane
mogą zostać odzyskane z podpisu
-
-
Odzyskaj znak
Podpisuje dane jednoczęściowe, z których dane
można odzyskać z podpisu
-
-
C_WeryfikacjaInit
Inicjuje operację weryfikacji
-
-
C_Weryfikuj
Weryfikuje podpis w przypadku danych jednoczęściowych
-
-
C_Weryfikacja aktualizacji
Kontynuuje wieloetapową operację
weryfikacji
-
-
C_Weryfikacja końcowa
Kończy operację weryfikacji wieloczęściowej
-
-
C_WeryfikacjaOdzyskajInit
Inicjuje operację weryfikacji, w której dane
są odzyskiwane z podpisu
-
-
C_WeryfikacjaOdzyskaj
Weryfikuje podpis na danych jednoczęściowych, w
których dane są odzyskiwane z podpisu
-
-
Aktualizacja C_DigestEncryptUpdate
Kontynuuje jednoczesne operacje
trawienia i szyfrowania wielu części
-
-
Aktualizacja C_DecryptDigest
Kontynuuje jednoczesne operacje
odszyfrowywania i trawienia wielu części
-
-
Strona 41 z 76
Funkcje zarządzania kluczami w PKCS#11
Funkcja PKCS#11 Opis Dozwolony
użytkownik
KM KU
Aktualizacja C_SignEncrypt
Kontynuuje jednoczesne operacje
podpisywania i szyfrowania w wielu częściach
-
-
C_DecryptVerifyUpdate
Kontynuuje jednoczesne operacje odszyfrowywania
i weryfikacji składające się z wielu części
-
-
Tabela 13: Lista standardowych funkcji PKCS#11 dla KM i KU
Strona 42 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
11 rozszerzeń PKCS#11 zdefiniowanych przez dostawcę
Definicje wszystkich rozszerzeń zdefiniowanych przez dostawcę są zawarte w pakieciepkcs11t_cs.hplik.
11.1 Mechanizmy zdefiniowane w CryptoServer
CryptoServer implementuje następujące mechanizmy, które nie są uwzględnione w
standardzie PKCS#11 (patrz [PKCS11ICMS]).
Nazwa Opis
CKM_ECDSA_SHA3_224
Generowanie podpisu ECDSA przy użyciu algorytmu skrótu SHA3-224.
CKM_ECDSA_SHA3_256
Generowanie podpisu ECDSA przy użyciu algorytmu skrótu SHA3-256.
CKM_ECDSA_SHA3_384
Generowanie podpisu ECDSA przy użyciu algorytmu skrótu SHA3-384.
CKM_ECDSA_SHA3_512
Generowanie podpisu ECDSA przy użyciu algorytmu skrótu SHA3-512.
CKM_ECDSA_RIPEMD160
Generowanie podpisu ECDSA przy użyciu algorytmu skrótu RIPEMD-160.
CKM_DSA_RIPEMD160
Generowanie podpisu DSA przy użyciu algorytmu skrótu RIPEMD-160.
CKM_DES3_RETAIL_MAC
Triple DES Retail-MAC z uzupełnieniem 0-Padding (patrz rozdział 11.3).
CKM_RSA_PKCS_MULTI
Generuj wiele podpisów za pomocąCKM_RSA_PKCSmechanizm (patrz
rozdział 11.4).
CKM_RSA_X_509_MULTI
Generuj wiele podpisów za pomocąCKM_RSA_X_509mechanizm (patrz
rozdział 11.4).
CKM_ECDSA_MULTI
Wygeneruj do 16 podpisów za pomocąCKM_ECDSAmechanizm (patrz
rozdział 11.4).
CKM_DES_CBC_WRAP
Ulepszony mechanizm owijania kluczy DES (zobacz definicję struktury)
(CK_WRAP_PARAMS).
Zawijanie CKM_AES_CBC
Ulepszony mechanizm owijania kluczy AES (zobacz definicję struktury)
(CK_WRAP_PARAMS).
CKM_ECKA
Tajne porozumienie WE zgodnie z BSI-TR-03111 (zwraca tajny punkt bez
hashowania).
CKM_ECDSA_ECIES
Algorytm kryptograficzny ECDSA (patrz rozdział 11.2).
Tabela 14: Opis mechanizmów specyficznych dla CryptoServer
Strona 43 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
11.2 Szyfrowanie przy użyciu „Elliptic Curve Integrated Encryption
Scheme” (ECIES)
MechanizmCKM_ECDSA_ECIESmożna używać pojedynczoC_Szyfruj()LubC_Deszyfruj()
wywołania funkcji szyfrujących dane zgodnie ze „Schematem szyfrowania krzywych eliptycznych
(rozszerzonych)” [ANSI-X9.63] lub „Schematem szyfrowania krzywych eliptycznych (ECIES)” [SEC1].
Przykład mechanizmu CKM_ECDSA_ECIES:
Uchwyt sesji CK
Uchwyt obiektu CK
Uchwyt obiektu CK
CK_BYTE
CK_ULONG
CK_BYTE
CK_BYTE
CK_ULONG
CK_ULONG
sid;
hKlucz publiczny;
hKlucz prywatny;
zwykły[BUFOR];
l_plain = sizeof(plain);
szyfrowanie[BUFORROZMIAR];
odszyfruj[BUFOR];
l_szyfruj
l_odszyfruj
//
//
CKK_ECDSA
CKK_ECDSA
=
=
sizeof(szyfrowanie);
sizeof(odszyfruj);
CK_ECDSA_ECIES_PARAMS ecies_para;
mechanizm CK_MECHANISM = {
CKM_ECDSA_ECIES, &ecies_para, rozmiar(ecies_para)
};
. . .
ecies_para.hashAlg
ecies_para.cryptAlg
ecies_para.cryptOpt
ecies_para.macAlg
ecies_para.macOpt
cies_para.pSharedSecret1
cies_para.ulSharetSecret1
cies_para.pSharedSecret2
cies_para.ulSharetSecret2
=
=
=
=
=
=
=
=
=
CKM_SHA_1;
CKM_AES_CBC;
16;
CKM_SHA_1_HMAC;
0;
"szczyt";
3;
"sekret";
6;
err = C_EncryptInit(sid, &mechanizm, hPublicKey);
err = C_Encrypt(sid, zwykły, l_zwykły, szyfruj, &l_szyfrowanie); err =
C_DecryptInit(sid, &mechanizm, hPrivateKey);
err = C_Decrypt(sid, szyfrowanie, l_szyfrowanie, odszyfrowywanie, &l_deszyfrowanie);
Można użyć następujących parametrów:
algorytm haszujący: CKM_SHA_1, CKM_SHA224, CKM_SHA256, CKM_SHA384,
CKM_SHA512, CKM_RIPEMD160, CKM_MD5
algorytm kryptograficzny: CKM_AES_ECB, CKM_AES_ECB, CKM_AES_ECB, CKM_AES_CBC,
Strona 44 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
CKM_AES_CBC, CKM_AES_CBC, CKM_ECDSA_ECIES_XOR
cryptOpt:Długość kluczaalgorytm kryptograficzny (0 dla(CKM_ECDSA_ECIES_XOR)
macAlg: CKM_SHA_1_HMAC,
CKM_SHA384_HMAC,
CKM_RIPEMD160_HMAC
CKM_SHA224_HMAC,
CKM_SHA512_HMAC,
CKM_SHA256_HMAC,
CKM_MD5_HMAC,
macOpt: obecnie ignorowane
11.3 Podpisz i zweryfikuj za pomocą DES Retail-MAC
MechanizmCKM_DES3_RETAIL_MACmożna używać wZnak C()ISprawdź()Do
obliczyć CBC Retail-MAC zgodnie z normami [ISO-9797] i [ANSI-X9.19].
Przykład mechanizmu CKM_DES3_RETAIL_MAC:
Uchwyt sesji CK
Uchwyt obiektu CK
MECHANIZM CK
CK_BYTE
CK_ULONG
CK_BYTE
CK_ULONG
sid;
hSecretKey; //CKK_DES3
znakMechanizm;
dane[ROZMIARBUFA];
l_data = sizeof(dane);
podpis[BUFOR];
l_signature = sizeof(podpis);
uchwyt
signMechanism.mechanism =
signMechanism.pParameter =
signMechanism.ulParameterLen
CKM_DES3_RETAIL_MAC;
NIEWAŻNY;
= 0;
. . .
err = C_SignInit(sid, &signMechanism, hSecretKey); err = C_Sign(sid, data,
l_data, signature, &l_signatur);
JeślipParametrstruktura mechanizmu jest ustawiona naNULL (Lub8),wynik ma
długość 8 bajtów zgodnie ze specyfikacją [ISO-9797].
JeślipParametrjest ustawiony na4,wynik ma długość 4 bajtów zgodnie ze specyfikacją
[ANSI-X9.19].
11.4 Mechanizmy wielokrotnych podpisów
Aby osiągnąć maksymalną wydajność generowania podpisów, możliwe jest generowanie wielu podpisów przy użyciu
tego samego klucza za pomocą mechanizmów zdefiniowanych przez dostawcęCKM_RSA_PKCS_MULTI,
CKM_RSA_X_509_MULTIICKM_ECDSA_MULTI.Mechanizmy te zachowują się jak
CKM_RSA_PKCS, CKM_RSA_X_509ICKM_ECDSAodpowiednio, z wyjątkiem tego, że tablica danych jest
Strona 45 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
podane jako dane wejściowe doZnak C()funkcja i że zwrócone dane są tablicą sygnatur. Tylko operacje na
pojedynczych częściach są dozwolone w przypadku tych mechanizmów.
Format danych wejściowych
Dane wejściowe podane doZnak C()Funkcja ma następujący format:
k dane_1 dane_2 dane_k
2 bajty n bajt n bajt n bajt
Format danych wyjściowych
W przypadku powodzenia funkcja zwraca tablicę sygnatur o równej długości:
podpis_1 podpis_2 podpis_k
bajt m bajt m bajt m
Poniższa tabela wyjaśnia znaczenie poszczególnych pól w strukturach danych wejściowych i
wyjściowych.
Pole Opis
k
Liczba sygnatur do obliczenia (k 50). Musi być w formacie big-endian.
dane_1
Pierwsze dane wejściowe do podpisania. Wszystkie części danych muszą mieć tę samą długość.
dane_k
Ostatnie dane wejściowe do podpisania. Wszystkie części danych muszą mieć tę samą długość.
podpis_1
Pierwszy podpis wygenerowany przez funkcję obliczoną na podstawiedane_1.Wszystkie podpisy
mają taką samą długość.
podpis_k
Ostatni podpis wygenerowany przez funkcję, obliczony na podstawiedane_k.Wszystkie podpisy mają
taką samą długość.
Tabela 15: Pola struktur danych wejściowych i wyjściowych
11.5 Obiekty konfiguracji
Zachowanie biblioteki CryptoServer PKCS#11 można skonfigurować za pomocą specjalnych obiektów,
nazywanych obiektami konfiguracji. Nie można ich tworzyć ani usuwać i są one odwoływane przez unikalne
uchwyty obiektów. Jedynymi prawidłowymi operacjami są funkcje odczytu lub zmiany wartości atrybutu
obiektu konfiguracji:
C_GetAttributeValue
C_SetAttributeValue
Strona 46 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
11.5.1 Obiekt konfiguracji lokalnej
Lokalne obiekty konfiguracji służą do konfigurowania instancji biblioteki CryptoServer
PKCS#11. Działają one w aktualnie uruchomionej instancji biblioteki CryptoServer PKCS#11
i są odwoływane przez uchwytP11_CFG_LOCAL_HDL.
Atrybut Opis
Ścieżka_konfiguracji_CKA_UTIMACO
Typ:CK_BYTE_PTR
Wartość: Ścieżka do pliku konfiguracyjnego
Domyślny:
W przypadku płyty CD z produktem SecurityServer:
Od wersji 4.20: C:\Dane
programu\cs_pkcs11_R2.cfg
Wcześniej niż wersja 4.20:
C:\Program
Pliki\Utimaco\CryptoServer\Lib\cs_pkcs11_R2.cf g
W przypadku produktu CD CryptoServer SDK: C:
\Utimaco\CryptoServer\Lib\cs_pkcs11_R2.cfg
tylko do odczytu
Tabela 16: Atrybut CKA_UTIMACO_CFG_PATH – szczegóły
11.5.2 Globalny obiekt konfiguracji CryptoServer
Globalne obiekty konfiguracji CryptoServer służą do konfigurowania ustawień, które mają wpływ na
cały CryptoServer. Działają one dla wszystkich wystąpień biblioteki CryptoServer PKCS#11, które
używają CryptoServer, gdzie obiekt jest skonfigurowany. Są one odwoływane przez uchwyt
P11_CFG_GLOBAL_HDL.
Atrybuty mogą być odczytywane przez użytkowników ADMIN (lub administratorów CryptoServer z uprawnieniami
min. 2 w grupie użytkowników 7, 20000000), SO, USER, menedżera kluczy i użytkownika klucza.
Dostęp do zapisu obiektów konfiguracji globalnej jest przyznawany wyłącznie domyślnemu administratorowi
CryptoServer ADMIN lub użytkownikom z rolą administratora użytkownika CryptoServer (min. uprawnienie 2 w grupie
użytkowników 7, 20000000).
Zmiany atrybutów obiektu konfiguracji globalnej są przechowywane w bazie danych
CXIKEY.db,który jest usuwany w momencie wystąpienia alarmu i kiedyJasnepolecenie (patrz
rozdział „The Clear Functionality” w [CSADMIN]). Zdecydowanie zalecamy utworzenie kopii
zapasowej Global CryptoServer Configuration Object resp.CXIKEY.dbza pomocą polecenia csadm
Kopia zapasowa bazy danychopisano w rozdziale „BackupDatabase” w [CSADMIN]
Strona 47 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
lub za pomocą narzędzia CAT, jak opisano w rozdziale „Tworzenie kopii zapasowej bazy danych” w dokumencie [CSMSADM],
dzięki czemu można łatwo przywrócić globalną konfigurację PKCS#11.
Na serwerze CryptoServer dostępne są następujące atrybuty konfiguracji globalnej:
CKA_CFG_ALLOW_SLOTS
Atrybut ten umożliwia oficerowi bezpieczeństwa (SO) konfigurowanie slotów.
Możliwe wartości:
CK_TRUE -SO ma prawo konfigurować sloty.
CK_FAŁSZ ((domyślnie) — SO nie ma uprawnień do konfigurowania slotów.
Okres_ważności_kontroli_CKA
Ten atrybut sprawdza okres ważności klucza.
Okres ważności klucza sprawdzany jest wyłącznie w przypadku wykonywania następujących funkcji
używając klucza:C_SignInit (), C_EncryptInit (), C_DecryptInit (), C_DeriveInit (),
C_WrapKey (), C_UnwrapKey ()
Możliwe wartości:
CK_TRUE -sprawdza się okres ważności klucza, jeżeli klucz posiada atrybuty
Data rozpoczęcia CKAIData zakończenia CKA.
CK_FAŁSZ ((domyślnie) - okres ważności klucza nie jest sprawdzany.
CKA_CFG_AUTH_PLAIN_MASK
Ten atrybut określa uprawnienia wymagane do importowania i eksportowania klucza w postaci zwykłego tekstu.
Wartość domyślna: 0x00000002 – odpowiada uprawnieniom użytkownika kryptograficznego, który jest już
skonfigurowany na serwerze CryptoServer.
WAŻNY:
Jeśli zmienisz ustawienie domyślne, musisz również użyć narzędzi administracyjnych CAT lub csadm, aby
skonfigurować odpowiedniego użytkownika w swoim CryptoServer. Użytkownikowi temu muszą zostać przypisane
uprawnienia określone tutaj. Aby uzyskać instrukcje krok po kroku dotyczące tworzenia nowego użytkownika za
pomocą CAT, przeczytaj rozdział „Tworzenie nowego użytkownika” w [CSMSADM]. Przykłady tworzenia różnych
użytkowników za pomocą csadm podano w rozdziale „AddUser” w [CSADMIN].
Zasady CKA_CFG_WRAP
Ten atrybut stosuje zasady opakowywania kluczy, określając sposób szyfrowania kluczy, aby można je było
bezpiecznie eksportować poza serwer CryptoServer.
Możliwe wartości:
CK_TRUE -Silnego klucza (na przykład 256-bitowego AES) nie można zaszyfrować słabym kluczem (na
przykład 1024-bitowym RSA).
CK_FAŁSZ ((domyślny) - silny klucz można zaszyfrować słabym kluczem.
Strona 48 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
Maska klucza autoryzacji CKA_CFG
Ten atrybut określa status uwierzytelnienia menedżera kluczy, który domyślnie ma takie
same uprawnienia jak użytkownik (00000002).
Wartość domyślna: 0x00000002 – odpowiada uprawnieniom użytkownika kryptograficznego, który jest
już skonfigurowany na serwerze CryptoServer.
Możesz tutaj zmienić to uprawnienie dla menedżera kluczy na 00000020 i podzielić rolę użytkownika na dwie
role: użytkownika kluczowego i menedżera kluczy.
WAŻNY:
Jeśli zmienisz wartość domyślną, musisz użyć funkcji zarządzania użytkownikami w narzędziach
administracyjnych CAT lub csadm, aby skonfigurować menedżera kluczy w CryptoServer, któremu
przypisano uprawnienie 2 w grupie użytkowników 1 odpowiadające statusowi uwierzytelniania
00000020 określonemu tutaj. Aby uzyskać instrukcje krok po kroku dotyczące tworzenia nowego
użytkownika z rolą menedżera kluczy w CAT i P11CAT, przeczytaj rozdział „Tworzenie nowego
użytkownika” w [CSMSADM] i rozdział „Zmiana konfiguracji globalnej” w [CS_PKCS11CAT]. Przykład
tworzenia użytkownika z rolą menedżera kluczy w csadm podano w rozdziale „AddUser” w
[CSADMIN].
CKA_CFG_SECURE_DERIVATION
Ten atrybut bezpieczeństwa jest dostępny dopiero od SecurityServer 4.01 (wersja modułu oprogramowania
układowego CXI 2.1.11.1).
Ten atrybut zabrania korzystania z następujących mechanizmów pozyskiwania kluczy i
zapobiega atakom typu Reduced Key Space:
CKM_XOR_BAZA_I_DANE
CKM_POŁĄCZ_TEKSTY_DANE_I_BAZĘ
CKM_POŁĄCZENIE_TEKSTÓW_Z_DANYMI
CKM_POŁĄCZ_TEKSTY_PODSTAWY_I_KLUCZ
CKM_EKSTRAKCJA_KLUCZA_Z_KLUCZA
Szczegółowy opis mechanizmów można znaleźć w [PKCS11ICMS].
Możliwe wartości:
CK_TRUE –żaden z wymienionych powyżej kluczowych mechanizmów pochodnych nie może być wykorzystany przez
funkcjonowaćC_Pochodne ().
Strona 49 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
CK_FAŁSZ ((domyślnie) – wymienione powyżej mechanizmy wyprowadzania kluczy mogą być używane przez
funkcjęC_Pochodne ()do wyprowadzenia klucza.
CKA_CFG_SECURE_IMPORT
Ten atrybut bezpieczeństwa jest dostępny dopiero od SecurityServer 4.01 (wersja modułu oprogramowania
układowego CXI 2.1.11.1).
Atrybut ten zapobiega prostym atakom polegającym na wyodrębnianiu kluczy poprzez wykonywanie dodatkowych, rygorystycznych
kontroli przy opakowywaniu kluczy.
Możliwe wartości:
CK_FALSE (domyślnie) –nie przeprowadza się żadnych dodatkowych, rygorystycznych kontroli kluczy opakowaniowych.
CK_TRUE –Funkcje zwijania i rozwijania kluczy wykonują następujące dodatkowe,
rygorystyczne kontrole przy zwijaniu kluczy.
C_UtwórzObiektsprawdza, czy dla kluczy publicznych atrybutZawińjest ustawiony na
CK_FAŁSZ.Jeżeli ta kontrola się nie powiedzie, kod błęduB0680204jest napisane do
cs_pkcs11_R2.loglogfile. Zapobiega to owijaniu potencjalnie niewiarygodnymi kluczami,
ponieważ nie mamy kontroli nad odpowiadającym im kluczem prywatnym.
Klucz C_WrapIC_EncryptInitzakazać używaniaCKM_RSA_PKCSmechanizm.
JeśliCKM_RSA_PKCSjest dostarczany jako mechanizm owijania kluczy, kod błęduB068002D
jest napisane docs_pkcs11_R2.loglogfile. To łagodzi atak Bleichenbacher
Padding Oracle na zawinięte klucze.
Klucz C_WrapKey:
Zabrania używania kluczy publicznych jako kluczy opakowaniowych. Jeśli klucz opakowaniowy
jest kluczem publicznym, kod błęduB0680205jest napisane docs_pkcs11_R2.loglogfile. Zapobiega to
owijaniu potencjalnie niewiarygodnymi kluczami, ponieważ nie mamy kontroli nad
odpowiadającym im kluczem prywatnym.
Sprawdza, czy w przypadku kluczy opakowaniowych atrybutOdszyfrowanie CKAjest ustawiony naCK_FAŁSZ.
B0680200 jest zapisany wcs_pkcs11_R2.loglogfile. Zapobiega to prostym atakom polegającym na
ekstrakcji klucza.
Sprawdza, czy w przypadku kluczy opakowaniowych atrybutCKA_ZAWSZE_WRAŻLIWEjest ustawiony na
CK_TRUE.Jeżeli ta kontrola się nie powiedzie, kod błęduB0680202jest napisane do
cs_pkcs11_R2.loglogfile. Zapobiega to owijaniu potencjalnie niewiarygodnymi
kluczami.
C_UnwrapKey:
Strona 50 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
Sprawdza, czy do rozpakowania kluczyCKA_ENCRYPTatrybut jest ustawiony naCK_FAŁSZ.Jeżeli ta
kontrola się nie powiedzie, kod błęduB0680201jest napisane docs_pkcs11_R2.log
logfile. Zapobiega to prostym atakom polegającym na ekstrakcji klucza.
Sprawdza, czy szablony używane do rozpakowywania kluczy zawierają atrybut
WARTOŚĆ_SPRAWDZANIA_CKA (uzyskuje swoją wartość poprzezC_GetAttributeValueKiedy
eksportowanie kluczy). Wartość kontrolna rozpakowanych komponentów jest następnie porównywana z
podaną wartością. Jeśli to sprawdzenie się nie powiedzie, kod błęduB0680206jest napisane do
cs_pkcs11_R2.loglogfile. Sprawdza integralność ponownie zaimportowanych kluczy, aby
zapobiec atakom Key Binding i atakom Unwrap Fault.
Sprawdza, czy dla nieopakowanych kluczyZawińatrybut jest ustawiony naCK_FAŁSZ.Jeżeli ta kontrola
się nie powiedzie, kod błęduB0680204jest zwracany jest zapisywany do
cs_pkcs11_R2.loglogfile. Zapobiega to owijaniu potencjalnie niewiarygodnymi
kluczami.
Sprawdza, czy dla nieopakowanych kluczy atrybutCKA_SENSITIVEjest ustawiony naCK_TRUE.Jeżeli ta
kontrola się nie powiedzie, kod błęduB0680203jest zwracany jest zapisywany do
cs_pkcs11_R2.loglogfile. Zapobiega to prostym atakom polegającym na ekstrakcji klucza.
Szczegółowe informacje na temat konfiguracji pliku dziennika interfejsu API PKCS#11 (cs_pkcs11_R2.log) można znaleźć w
rozdziale 4.2 „Rejestrowanie”.
CKA_CFG_SECURE_RSA_COMPONENTS
Ten atrybut bezpieczeństwa jest dostępny dopiero od SecurityServer/CryptoServer SDK 4.01 (wersja
modułu oprogramowania układowego CXI 2.1.11.1).
Ten atrybut stosuje ograniczenia na długość wykładnika publicznego używanego do
generowania kluczy RSA.
Możliwe wartości:
CK_TRUE (domyślne) –nowych kluczy RSA nie można tworzyć z wykładnikami publicznymi o bardzo małych
wartościach, mniejszych niż 0x10001.
CK_FAŁSZ –nowe klucze RSA można tworzyć przy użyciu bardzo niskich wykładników publicznych.
Strona 51 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
CKA_CFG_P11R2_WSTECZNIE_KOMPATYBILNY
Ten atrybut bezpieczeństwa jest dostępny dopiero od SecurityServer/CryptoServer SDK 4.01 (wersja
modułu oprogramowania układowego CXI 2.1.11.1).
Atrybut ten określa, czy klucze mogą być domyślnie używane jako klucze bazowe przy tworzeniu kluczy
zależnych, czy nie.
Możliwe wartości:
CK_TRUE –klucze wygenerowane przy użyciu schematu ECC lub algorytmu Diffiego-Hellmana mogą być
używane jako klucze bazowe do wyprowadzania kluczy (starsze, niezgodne ze standardem PKCS#11); może
być to konieczne w przypadku niektórych integracji.
CK_FAŁSZ (domyślne) – nowo wygenerowane lub zaimportowane klucze nie mogą być domyślnie używane jako klucze
bazowe do wyprowadzania kluczy.
CKA_CFG_WYMUSZENIE_ŚLEPANIA
Ten atrybut bezpieczeństwa jest dostępny dopiero od SecurityServer/CryptoServer SDK 4.10 (wersja
modułu oprogramowania układowego CXI 2.2.1.0).
Ten atrybut zapobiega atakom analizy kanału bocznego (SCA) poprzez włączanie/wyłączanie
specyficznych dla CryptoServer środków programowych dla odporności na SCA. Te środki
programowe oznaczają zmianę wewnętrznych obliczeń kluczy RSA i ECC w taki sposób, że prosta i
różnicowa analiza mocy, a także pomiary analizy elektromagnetycznej i czasowej na kluczach
kryptograficznych nie ujawniają już informacji.
Jednakże środki odporności na SCA negatywnie wpływają na wydajność operacji
kryptograficznych na kluczach RSA i ECDSA. Dlatego są one domyślnie wyłączone i można je
włączyć, jeśli to konieczne.
Możliwe wartości:
CK_TRUE – do pomiaru odporności na SCA wykorzystuje się oprogramowanie
operacje kryptograficzne na kluczach RSA i ECDSA.
CK_FALSE (domyślne) – normalne (bez środków programowych dla SCA)
opór)wykorzystywane są operacje kryptograficzne na kluczach RSA i ECDSA.
Strona 52 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
CKA_CFG_SECURE_SLOT_BACKUP
Ten atrybut bezpieczeństwa jest dostępny dopiero od SecurityServer/CryptoServer SDK 4.10 (wersja
modułu oprogramowania układowego CXI 2.2.1.0).
Ten atrybut wymusza użycie indywidualnego klucza zapasowego (Tenant Backup Key, TBK) na slot zamiast MBK
w celu ochrony kluczy zewnętrznych i kopii zapasowych kluczy. Domyślnie włączone jest tylko przechowywanie
kluczy zewnętrznych i kopia zapasowa kluczy chronionych MBK.
Możliwe wartości:
CK_TRUE –użyj indywidualnych kluczy zapasowych (TBK) uzyskanych z MBK serwera CryptoServer w celu
zaszyfrowania kluczy zewnętrznych i kopii zapasowych kluczy.
CK_FAŁSZ ((domyślnie) – użyj MBK CryptoServera do szyfrowania kluczy zewnętrznych i kopii zapasowych
kluczy
Przed uruchomieniem środowiska produkcyjnego CryptoServer należy upewnić się, że ten atrybut
konfiguracji został ustawiony zgodnie z polityką bezpieczeństwa.
Jeśli używasz SecurityServer/CryptoServer SDK 4.10, utwórz klucz zewnętrzny lub kopię zapasową klucza za pomocą
MBK, a następnie włącz używanie kluczy kopii zapasowej dla poszczególnych gniazd, ustawiając
CKA_CFG_SECURE_SLOT_BACKUPatrybut konfiguracji doCK_PRAWDAwartość, próba przywrócenia klucza
zewnętrznego lub kopii zapasowej klucza kończy się niepowodzeniem, a klucz zewnętrzny i kopie zapasowe klucza
stają się niedostępne. Tworzony jest komunikat o błędzie „nieprawidłowy adres MAC klucza blob” (kod błędu:
0xB0680026).
Dotyczy to również sytuacji, gdy przed próbą przywrócenia klucza zewnętrznego lub kopii zapasowych klucza dokonano
uaktualnienia do pakietu SecurityServer/CryptoServer SDK 4.20 lub nowszego.
Jeśli jednak wykonasz uaktualnienie do SecurityServer/CryptoServer SDK 4.20 przed utworzeniem klucza zewnętrznego lub kopii
zapasowej klucza za pomocą MBK, przywrócenie ich za pomocą klucza kopii zapasowej indywidualnego dla danego slotu powiedzie
się.
Aby jeszcze bardziej spersonalizować klucz zapasowy dla każdego slotu, możesz opcjonalnie zdefiniować hasło
specyficzne dla slotu, które będzie używane do wyprowadzenia tego klucza zapasowego. Można to zrobić,
ustawiającCKA_CFG_SLOT_BACKUP_HASHatrybut konfiguracji gniazda przed włączeniem użycia kluczy
zapasowych poszczególnych gniazdCKA_CFG_SECURE_SLOT_BACKUPglobalny atrybut konfiguracji ustawiony na
CK_TRUE.Zobacz rozdział 11.5.3, „Konfiguracja gniazda CryptoServer
Strona 53 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
„Obiekty”, aby uzyskać szczegółowy opisCKA_CFG_SLOT_BACKUP_HASHatrybut
konfiguracji gniazda.
11.5.3 Obiekty konfiguracji gniazda CryptoServer
Obiekty konfiguracji slotu CryptoServer służą do konfigurowania bieżącego slotu. Działają one
dla wszystkich wystąpień biblioteki CryptoServer PKCS#11, które używają określonego slotu
PKCS#11. Uchwyt, do którego się odwołują, toP11_CFG_SLOT_HDL.
Te obiekty można zmienić tylko za pomocą SO slotu po atrybucie globalnym
CKA_CFG_ALLOW_SLOTSzostał ustawiony naCK_PRAWDAprzez domyślnego użytkownika ADMIN lub
użytkownika(ów) z uprawnieniami w grupie użytkowników 7 (minimalny wymagany status uwierzytelnienia to
20000000). SO może skonfigurować wszystkie atrybuty opisane wcześniej w rozdziale 11.5.2, z wyjątkiem
CKA_CFG_ALLOW_SLOTSatrybut.
Obiekty konfiguracji slotu CryptoServer mogą być odczytywane przez SO, USER, menedżera kluczy i użytkownika
klucza (jeśli skonfigurowano je zgodnie z opisem w rozdziale 9.2.9).
Zmiany atrybutów obiektu konfiguracji gniazda są przechowywane w bazie danychCXIKEY.db, który jest
usuwany w momencie wystąpienia alarmu i kiedyJasnepolecenie (patrz rozdział „The Clear
Functionality” w [CSADMIN]). Zdecydowanie zalecamy utworzenie kopii zapasowej obiektu konfiguracji
Slot CryptoServer za pomocą narzędzia P11CAT (patrz rozdział „Creating a Slot Configuration Backup”
w [CS_PKCS11CAT]) lubp11tool2 Konfiguracja kopii zapasowejpolecenie (zobacz [CS_PKCS11T2]), dzięki
któremu będziesz mógł łatwo przywrócić konfigurację gniazda PKCS#11.
Oprócz atrybutów opisanych w rozdziale 11.5.2,
CKA_CFG_SLOT_BACKUP_HASHAtrybut slot-individual można skonfigurować w obiekcie konfiguracji
slotu. Ten atrybut przechowuje wartość skrótu SHA-256 hasła, które jest używane tylko do
wyprowadzenia klucza zapasowego slot-individual (patrz
CKA_CFG_SECURE_SLOT_BACKUPw rozdziale 11.5.2).
Strona 54 z 76
Rozszerzenia PKCS#11 zdefiniowane przez dostawcę
Jeśli chcesz użyć indywidualnego hasła do wygenerowania klucza zapasowego dla
każdego gniazda, upewnij się, że ustawiłeśCKA_CFG_SLOT_BACKUP_HASHatrybut
konfiguracji przed aktywacjąCKA_CFG_SECURE_SLOT_BACKUPatrybut i zanim
środowisko produkcyjne CryptoServer zacznie działać.
ZmianaCKA_CFG_SLOT_BACKUP_HASHAtrybut konfiguracji dla aktualnie używanego slotu
powoduje, że wcześniej wygenerowane klucze zewnętrzne i ich kopie zapasowe stają się
niedostępne.
Jeśli podczas tworzenia klucza zewnętrznego i jego kopii zapasowych używasz pakietu SecurityServer/
CryptoServer SDK 4.10 i próbujesz je przywrócić, zmieniając indywidualne hasło, pojawia się komunikat o
błędzie „nieprawidłowy adres MAC klucza blobu” (kod błędu: 0xB0680026).
Dotyczy to również sytuacji, gdy przed próbą przywrócenia klucza zewnętrznego lub kopii zapasowych klucza dokonano
uaktualnienia do pakietu SecurityServer/CryptoServer SDK 4.20 lub nowszego.
Jeśli jednak dokonasz aktualizacji do SecurityServer/CryptoServer SDK 4.20 przed utworzeniem klucza
zewnętrznego lub kopii zapasowej klucza i spróbujesz je przywrócić, zmieniając pojedyncze hasło, zostanie
wyświetlony komunikat o błędzie „nieprawidłowe hasło TBK dla tego blobu klucza” (kod błędu:
0xB0680081).
TenCKA_CFG_SLOT_BACKUP_HASHatrybut może być ustawiony przez SO na dowolny ciąg, nawet jeśli
CKA_CFG_ALLOW_SLOTSatrybut jest ustawiony naCK_FAŁSZ.Wartością domyślną jest skrót SHA-256
pustego ciągu.
Strona 55 z 76
Obsługiwane mechanizmy i mapowanie funkcji
12 obsługiwanych mechanizmów i mapowanie funkcji
W tym rozdziale znajduje się przegląd mechanizmów obecnie obsługiwanych przez
bibliotekę CryptoServer PKCS#11.
12.1 Mechanizmy zdefiniowane w PKCS#11
Poniższa tabela przedstawia standardowe mechanizmy PKCS#11 udostępniane przez
CryptoServer oraz funkcje API PKCS#11 je obsługujące.
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_RSA_PKCS_OAEP
GENEROWANIE PARY KLUCZY CKM_RSA_PKCS
CKM_RSA_X9_31_GENEROWANIE_PARY_KLUCZY
CKM_RSA_PKCS
CKM_RSA_PKCS_PSS
CKM_RSA_X_509
CKM_RSA_X9_31
CKM_MD5_RSA_PKCS
CKM_SHA1_RSA_PKCS
CKM_SHA224_RSA_PKCS
CKM_SHA256_RSA_PKCS
CKM_SHA384_RSA_PKCS
CKM_SHA512_RSA_PKCS
CKM_SHA3_224_RSA_PKCS-
CKM_SHA3_256_RSA_PKCS-
CKM_SHA3_384_RSA_PKCS-
CKM_SHA3_512_RSA_PKCS-
CKM_RIPEMD160_RSA_PKCS
CKM_SHA1_RSA_PKCS_PSS
CKM_SHA224_RSA_PKCS_PSS
-
2
-
-
-
-
2
-
2
- -
-
2
-
2
-
2
-
-
2
-
-
-
-
-
-
-
-
-
-
-
-
-
Strona 56 z 76
Obsługiwane mechanizmy i mapowanie funkcji
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_SHA256_RSA_PKCS_PSS
CKM_SHA384_RSA_PKCS_PSS
CKM_SHA512_RSA_PKCS_PSS
CKM_SHA3_224_RSA_PKCS_PSS-
CKM_SHA3_256_RSA_PKCS_PSS-
CKM_SHA3_384_RSA_PKCS_PSS-
CKM_SHA3_512_RSA_PKCS_PSS-
CKM_SHA1_RSA_X9_31
CKM_DSA
CKM_DSA_SHA1
CKM_DSA_SHA224
CKM_DSA_SHA256
CKM_DSA_SHA384
CKM_DSA_SHA512
CKM_DSA_SHA3_224-
CKM_DSA_SHA3_256-
CKM_DSA_SHA3_384-
CKM_DSA_SHA3_512-
GENEROWANIE PARY KLUCZY CKM_DSA
GENEROWANIE PARAMETRU CKM_DSA
GENERACJA PARY KLUCZY CKM_DH_PKCS
Pochodzenie CKM_DH_PKCS
CKM_X9_42_DH_KEY_PAIR_GEN
CKM_X9_42_DH_PKCS_PARAMETER_GEN
CKM_X9_42_DH_POCHODZENIE
-
-
-
-
-
-
-
-
-
2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
CKM_EC_PARA_KLUCZY_GEN
(GENERACJA PARY KLUCZY CKM_ECDSA)
-
CKM_ECDSA
CKM_ECDSA_SHA1
-
2
-
Strona 57 z 76
Obsługiwane mechanizmy i mapowanie funkcji
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_ECDSA_SHA224
CKM_ECDSA_SHA256
CKM_ECDSA_SHA384
CKM_ECDSA_SHA512
CKM_ECDH1_POCHODZENIE
CKM_ECDH1_WSPÓŁCZYNNIK_POCHODZENIA
CKM_GENERIC_SECRET_KEY_GEN
GENERACJA KLUCZÓW CKM_AES
CKM_AES_ECB
CKM_AES_CBC
CKM_AES_CBC_PAD
CKM_AES_CTR
CKM_AES_CCM
CKM_AES_GCM
CKM_AES_MAC_GENERAL
CKM_AES_MAC
CKM_AES_CMAC
CKM_AES_GMAC-
CKM_AES_OFB
Zawijanie klucza CKM_AES
CKM_AES_KEY_WRAP_PAD
CKM_AES_KEY_WRAP_KWP
GENEROWANIE KLUCZY CKM_DES
CKM_DES_ECB
CKM_DES_CBC
CKM_DES_CBC_PAD
CKM_DES_MAC_GENERAL
CKM_DES_MAC
-
-
-
-
-
-
-
-
- -
- -
- -
-
- -
- -
-
-
-
-
- -
-
2
-
-
2
-
-
2
-
-
- -
- -
- -
-
-
Strona 58 z 76
Obsługiwane mechanizmy i mapowanie funkcji
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
GENEROWANIE KLUCZY CKM_DES2
CKM_DES3_KEY_GEN
CKM_DES3_ECB
CKM_DES3_CBC
CKM_DES3_CBC_PAD
CKM_DES3_MAC_GENERAL
CKM_DES3_MAC
CKM_DES_ECB_ENCRYPT_DATA
CKM_DES_CBC_ENCRYPT_DANE
CKM_DES3_ECB_ENCRYPT_DATA
CKM_DES3_CBC_SZYFROWANIE_DANYCH
CKM_AES_ECB_ENCRYPT_DANE
CKM_AES_CBC_ENCRYPT_DANE
CKM_MD5
CKM_MD5_HMAC_OGÓLNE
CKM_MD5_HMAC
WYNIKANIE_KLUCZA_CKM_MD5
CKM_SHA_1
CKM_SHA_1_HMAC_OGÓLNE
CKM_SHA_1_HMAC
WYPROWADZENIE_KLUCZA_CKM_SHA1
CKM_SHA224
CKM_SHA224_HMAC_OGÓLNE
CKM_SHA224_HMAC
CKM_SHA224_POCHODZENIE_KLUCZA
CKM_SHA256
CKM_SHA256_HMAC_OGÓLNE
CKM_SHA256_HMAC
-
-
- -
- -
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Strona 59 z 76
Obsługiwane mechanizmy i mapowanie funkcji
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_SHA256_KEY_DEIVATION
CKM_SHA384
CKM_SHA384_HMAC_OGÓLNE
CKM_SHA384_HMAC
CKM_SHA384_KEY_DEIVATION
CKM_SHA512
CKM_SHA512_HMAC_OGÓLNE
CKM_SHA512_HMAC
CKM_SHA512_KEY_DEIVATION
CKM_SHA3_224-
CKM_SHA3_224_HMAC_OGÓLNE-
CKM_SHA3_224_HMAC-
CKM_SHA3_224_POCHODZENIE_KLUCZA-
CKM_SHA3_256-
CKM_SHA3_256_HMAC_OGÓLNE-
CKM_SHA3_256_HMAC-
CKM_SHA3_256_POCHODZENIE_KLUCZA-
CKM_SHA3_384-
CKM_SHA3_384_HMAC_OGÓLNE-
CKM_SHA3_384_HMAC-
CKM_SHA3_384_POCHODZENIE_KLUCZA-
CKM_SHA3_512-
CKM_SHA3_512_HMAC_OGÓLNE-
CKM_SHA3_512_HMAC-
CKM_SHA3_512_POCHODZENIE_KLUCZA-
CKM_RIPEMD160
CKM_RIPEMD160_HMAC_OGÓLNE
CKM_RIPEMD160_HMAC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Strona 60 z 76
Obsługiwane mechanizmy i mapowanie funkcji
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_XOR_BAZA_I_DANE
CKM_POŁĄCZ_TEKSTY_PODSTAWY_I_KLUCZ
CKM_POŁĄCZENIE_TEKSTÓW_Z_DANYMI
CKM_POŁĄCZ_TEKSTY_DANE_I_BAZĘ
CKM_EKSTRAKCJA_KLUCZA_Z_KLUCZA
Zawijanie klucza CKM_UTI_AES
CKM_UTI_AES_KEY_WRAP_PAD
CKM_UTI_AES_KEY_WRAP_KWP-
-
-
-
-
-
-
2
-
-
2
-
-
2
-
Tabela 17: Lista obsługiwanych mechanizmów zdefiniowanych w standardzie PKCS#11
1
SR = SignRecover, VR = VerifyRecover
2
Tylko operacje jednoczęściowe
3
Tylko operacje znakowania jednoczęściowego
4
Tylko opakowanie
*
Zgodnie ze specyfikacją PKCS #11 Cryptographic Token Interface Current Mechanisms Specification 3.00 w wersji
roboczej
12.2 Mechanizmy zdefiniowane przez dostawcę
Poniższa tabela przedstawia mechanizmy PKCS#11 udostępniane przez CryptoServer, które nie
zostały uwzględnione w standardzie PKCS#11, a także funkcje API PKCS#11 je obsługujące.
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_ECDSA_SHA3_224
CKM_ECDSA_SHA3_256
CKM_ECDSA_SHA3_384
CKM_ECDSA_SHA3_512
-
-
-
-
Strona 61 z 76
Obsługiwane mechanizmy i mapowanie funkcji
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
SR
&
Rzeczywistość wirtualna1
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
CKM_ECDSA_RIPEMD160
CKM_DSA_RIPEMD160
CKM_DES3_RETAIL_MAC
CKM_RSA_PKCS_MULTI
CKM_RSA_X_509_MULTI
CKM_ECDSA_MULTI
CKM_DES_CBC_WRAP
Zawijanie CKM_AES_CBC
CKM_ECKA
CKM_ECDSA_ECIES
-
-
-
-
4, 5
-
4, 5
-
4, 5
-
-
-
4
-
2
Tabela 18: Lista mechanizmów zdefiniowanych przez dostawcę
1
2
3
4
5
SR = SignRecover, VR = VerifyRecover
Tylko operacje jednoczęściowe
Mechanizm może być używany wyłącznie do pakowania, nie do rozpakowywania
Tylko operacje znakowania jednoczęściowego
Mechanizm może być używany wyłącznie do podpisywania, a nie do weryfikacji
12.3 Obsługa obiektów publicznych
Obecnie tylkoCKK_RSAICKK_ECobiekty publiczne (CKA_PRIVATE == CK_FALSE)są
obsługiwane dla następujących operacji:
C_GetAttributeValue
C_EncryptInit
C_Szyfrowanie
Aktualizacja C_Encrypt
C_DecryptInit
C_Deszyfruj
Aktualizacja C_Decrypt
Strona 62 z 76
Obsługiwane mechanizmy i mapowanie funkcji
C_SignInit
Znak C
Aktualizacja C_SignUpdate
C_WeryfikacjaInit
C_Weryfikuj
C_Weryfikacja aktualizacji
Klucz C_Wrap
C_Klucz rozpakowywania
Strona 63 z 76
API PKCS#11 w trybie FIPS
13 PKCS#11 API w trybie FIPS
W tym rozdziale znajdziesz informacje o ważnych ograniczeniach, które mają zastosowanie, gdy CryptoServer jest
używany w trybie FIPS. Ponadto podano listę mechanizmów zdefiniowanych w standardzie PKCS#11, a także
niektóre mechanizmy specyficzne dla dostawcy, które są obsługiwane przez różne operacje kryptograficzne
dostarczane przez CryptoServer w trybie FIPS.
Tryb FIPS (zweryfikowany) może zostać aktywowany tylko wtedy, gdy moduł oprogramowania układowego FIPS140
(FLASH\fips140.msc)jest ładowany do CryptoServer, a dodatkowo jeśli został załadowany dedykowany pakiet
oprogramowania układowego FIPSvalidated. Tryb FIPS jest ustawiany przez moduł oprogramowania układowego
FIPS140.
Jeśli moduł oprogramowania układowego FIPS140 nie został załadowany, moduł CXI uruchamia się w trybie
normalnym. Następujące funkcje nie są jeszcze dostępne w trybie FIPS:
Atrybut konfiguracji oślepiającej CXI_PROP_CFG_ENFORCE_BLINDING
Algorytmy SHA-3
Tryb AES CCM
Klucze zapasowe najemcy
13.1 Mechanizmy wypełniania w trybie FIPS
Jeśli CryptoServer działa w trybie FIPS, użycie jednego klucza RSA z wieloma mechanizmami wypełniania nie jest
dozwolone. Dlatego też dodatkoweMECHANIZMY_DOZWOLONE_CKAatrybut klucza zawierający wszystkie obsługiwane
mechanizmy wypełniania musi zostać ustawiony przed wygenerowaniem klucza. Można wybrać tylko jeden mechanizm
wypełniania, który będzie używany ze wszystkimi obsługiwanymi algorytmami haszowania. Obsługiwane mechanizmy
haszowania muszą zostać zdefiniowane jawnie.
Poniższa tabela pokazuje, które kombinacje mechanizmów uzupełniania i algorytmów
skrótu są obsługiwane i jakie stałe je reprezentują.
Połączenie mechanizmu wypełniania i
algorytmu haszującego
Stały
Mechanizm wypełniania PKCS1
Algorytm haszujący SHA-224
CKM_SHA224_RSA_PKCS
CKM_SHA256_RSA_PKCS
CKM_SHA384_RSA_PKCS
CKM_SHA512_RSA_PKCS
Algorytm haszujący SHA-256
Algorytm haszujący SHA-384
Algorytm haszujący SHA-512
Strona 64 z 76
API PKCS#11 w trybie FIPS
Połączenie mechanizmu wypełniania i
algorytmu haszującego
Stały
Wypełnienie PSS
Algorytm haszujący SHA-224
CKM_SHA224_RSA_PKCS_PSS
CKM_SHA256_RSA_PKCS_PSS
CKM_SHA384_RSA_PKCS_PSS
CKM_SHA512_RSA_PKCS_PSS
Algorytm haszujący SHA-256
Algorytm haszujący SHA-384
Algorytm haszujący SHA-512
Tabela 19: Kombinacje mechanizmów wypełniania i algorytmów haszujących
Stałe w tabeli reprezentują kombinacje algorytmu skrótu i mechanizmu uzupełniania,
np.CKM_SHA256_RSA_PKCSreprezentuje kombinację algorytmu skrótu SHA-256 i
mechanizmu uzupełniania PKCS1. Kombinacja to wartość lub stałej algorytmu skrótu i
stałej mechanizmu uzupełniania.
Podczas tworzenia klucza, jedna lub kilka z powyższych kombinacji może zostać ustawionych jako
atrybut klucza. Użyj jednej lub kilku kombinacji z wypełnieniem PKCS1 lub jednej lub kilku kombinacji
z wypełnieniem PSS, ale nigdy nie używaj dwóch lub więcej kombinacji z różnymi mechanizmami
wypełnienia.
Przykład:
CK_MECHANISM_TYPE mechs[] = {CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS};
Zawsze należy wyraźnie używać co najmniej jednej kombinacji.
Poniższy przykład pokazuje, jak wygenerować i użyć pary kluczy RSA, stosując mechanizm
uzupełniania PKCS1 (CKM_RSA_PKCS,tj. RSASSA-PKCS-V1_5 ze standardu [PKCS#1]) i dwa
algorytmy skrótu, SHA-256 i SHA-384, tj.CKM_SHA256_RSA_PKCSI
CKM_SHA384_RSA_PKCSsą stosowane.
// Generowanie kluczy
CK_MECHANISM_TYPE mechs[] = {CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS};
ATRYBUT CK
{
SzablonKluczaPublicznego[] =
{CKA_TOKEN,
{CKA_WERYFIKACJA,
{CKA_ALLOWED_MECHANIZMY,
{CKA_MODULUS_BITS,
{CKA_PUBLIC_EXPONENT,
To prawda,
To prawda,
&mechy,
sizeof(bPrawda)},
sizeof(bPrawda)},
rozmiar(mechów)},
sizeof(modulusBits)},
sizeof(publicExponent)}
&modulusBits,
publicznyExponent,
};
ATRYBUT CK
{
privateKeyTemplate[] =
{CKA_TOKEN,
{CKA_PRIVATE,
To prawda,
To prawda,
sizeof(bPrawda)},
sizeof(bPrawda)},
Strona 65 z 76
API PKCS#11 w trybie FIPS
{CKA_ID,
{CKA_SENSITIVE,
{ZNAK_CKA,
{CKA_DOZWOLONE_MECHANIZMY,
{CKA_LABEL, etykieta,
id,
To prawda,
To prawda,
rozmiar(id)},
sizeof(bPrawda)},
sizeof(bPrawda)},
&mechy,
sizeof(etykieta)}
rozmiar(mechów)},
};
mechanizm.mechanizm
mechanizm.pParameter
mechanizm.ulParameterLen
= CKM_RSA_PKCS_KEY_PAIR_GEN;
NULL;
= 0;
=
jeśli ((err = pFunctions->C_GenerateKeyPair(hSession, &mechanizm,
SzablonKluczaPublicznego,
sizeof(szablonkluczapublicznego)/sizeof(ATRYBUT_CK),
privateKeyTemplate,
sizeof(szablonklucza prywatnego)/sizeof(ATRYBUT_CK),
&hKluczPubliczny, &hKluczPrywatny)) != 0)
{
printf("C_GenerateKeyPair zwrócił 0x%08x\n", err); przejdź do
czyszczenia;
}
// Przygotowanie do użycia kluczy
// Jeśli chcesz użyć algorytmu skrótu SHA-256 i mechanizmu uzupełniania PKCS1, użyj
następującego wiersza:
mechanizm.mechanizm = CKM_SHA256_RSA_PKCS;
// Jeśli chcesz użyć algorytmu skrótu SHA-384 i mechanizmu uzupełniania PKCS1, użyj
następującego polecenia:
// mechanizm.mechanizm = CKM_SHA384_RSA_PKCS;
mechanizm.pParameter = NULL;
mechanizm.ulParameterLen = 0;
// Użycie klucza: Podpisywanie
jeśli ((err = pFunctions->C_SignInit(hSession, &mechanism, hPrivateKey)) != 0)
printf("C_SignInit zwrócił 0x%08x\n", err); signatureLength
= sizeof(signature);
jeśli ((err = pFunctions->C_Sign(hSession, Dane, DługośćDanych, podpis,
&długośćpodpisu)) != 0)
printf("C_Sign zwrócił 0x%08x\n", err);
// Użycie klucza: Weryfikacja
jeśli ((err = pFunctions->C_VerifyInit(hSession, &mechanism, hPublicKey)) != 0)
printf("C_VerifyInit zwrócił 0x%08x\n", err);
jeśli ((err = pFunctions->C_Verify(hSession, Dane, DługośćDanych, podpis,
długość_podpisu)) != 0)
Strona 66 z 76
API PKCS#11 w trybie FIPS
printf("C_Verify zwrócił 0x%08x\n", err);
Weź pod uwagę, żemechyzmienna zdefiniowana w poniższym wierszu
CK_MECHANISM_TYPE mechs[] = {CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS};
musi być użyty dla klucza publicznego i klucza prywatnego, jak pokazano w poniższych wierszach. W
przeciwnym razie błąd zostanie wygenerowany podczas podpisywania lub weryfikacji.
CK_ATTRIBUTE szablon klucza publicznego [] = {
//…
{CKA_ALLOWED_MECHANISMS, //…
&mechy, rozmiar(mechów)},
};
CK_ATTRIBUTE privateKeyTemplate[] = {
//…
{CKA_ALLOWED_MECHANISMS, //…
&mechy, rozmiar(mechów)},
};
Jeśli chcesz użyć wypełnienia PSS, zamień następujący wiersz w sekcji generowania
klucza
CK_MECHANISM_TYPE mechs[] = {CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS};
w poniższym wierszu, jeśli chcesz użyć SHA-256
CK_MECHANISM mechs[] = {CKM_SHA256_RSA_PKCS_PSS};
i zastąp sekcję przygotowania do użycia klucza następującymi wierszami:
// Przygotowanie użycia klucza
CK_RSA_PKCS_PSS_PARAMS
pssParam.hashAlg
pssParam.mgf =
pssParam.sLen =
pssParam;
= CKM_SHA256;
CKG_MGF1_SHA256;
16;
mechanizm.mechanizm =
mechanizm.pParameter =
mechanizm.ulParameterLen
CKM_SHA256_RSA_PKCS_PSS;
&pssParametr;
= sizeof(pssParam);
W powyższych przykładach klucz publiczny służy do weryfikacji (Sprawdź)a klucz prywatny jest
używany do podpisywania (ZNAK_CKA).Jeśli chcesz użyć na przykład klucza publicznego do
szyfrowania i klucza prywatnego do deszyfrowania, wymieńWeryfikujprzezCKA_ENCRYPTIZNAK CKA
przezOdszyfrowanie CKAw powyższym kodzie. Reszta kodu pozostaje niezmieniona. Rozważ
ograniczenia opisane w rozdziale 13.2, „Użycie klucza w trybie FIPS”.
13.2 Użycie klucza w trybie FIPS
Za każdym razem, gdy generowany lub importowany jest klucz DSA/DH/DH_PKCS, RSA lub EC (ECDSA lub ECDH),
należy sprawdzić, czy jego atrybut użycia jest dokładnie jednym z następujących:ZNAK_CKA; WERYFIKACJA_CKA}
Strona 67 z 76
API PKCS#11 w trybie FIPS
grupa bitów użycia lub dokładnie jeden z {CKA_ENCRYPT, CKA_DECRYPT, CKA_DERIVE,
Zawijanie_CKA, Odwijanie_CKAgrupa bitów użycia. Tj. jeśli pary kluczy są używane do generowania i
weryfikacji podpisu, nie wolno ich używać do żadnych innych celów (patrz [FIPS186-4]).CKA_*
wartości są zdefiniowane wpkcs11t.hplik.
Obowiązuje następująca zasada:
Przynajmniej jeden z bitów użycia jednej z grup jest ustawiony, a wszystkie bity użycia drugiej grupy
muszą być równe zero.
Jeżeli obie grupy bitów użycia zawierają bity ustawione, generowanie klucza lub importowanie klucza
zostaje odrzucone, a polecenie zwraca błąd (B0680109 „Użycie klucza jest ograniczone w trybie FIPS”).
Jeśli użycie klucza nie jest ustawione, zostanie ustawione na wartość domyślną {Podpisz CKA; sprawdź CKA}.
Przykład dla {ZNAK_CKA; WERYFIKACJA_CKA}grupa bitów użycia:
Klucz prywatny służy do podpisywania, a klucz publiczny do weryfikacji.
//…
ATRYBUT CK
{
SzablonKluczaPublicznego[] =
//…
{CKA_WERYFIKACJA,
//…
To prawda, sizeof(bPrawda)},
};
ATRYBUT CK
{
privateKeyTemplate[] =
//…
{ZNAK_CKA,
//…
To prawda, sizeof(bPrawda)},
};
//…
Przykład dla {CKA_ENCRYPT, CKA_DECRYPT, CKA_DERIVE, CKA_WRAP, CKA_UNWRAP}
grupa bitów użycia:
Klucz publiczny służy do szyfrowania, a klucz prywatny do odszyfrowywania.
//…
ATRYBUT CK
{
SzablonKluczaPublicznego[] =
//…
{CKA_ENCRYPT,
//…
To prawda, sizeof(bPrawda)},
};
CK_ATTRIBUTE privateKeyTemplate[] = {
//…
Strona 68 z 76
API PKCS#11 w trybie FIPS
{CKA_DEKRYPCJA,
//…
To prawda, sizeof(bPrawda)},
};
//…
Pozostałą część kodu w tych dwóch przykładach można ustawić zgodnie z przykładem w rozdziale 13.1,
„Mechanizmy wypełniania w trybie FIPS”.
13.3 Mechanizmy obsługiwane w trybie FIPS dla CryptoServer Se
Poniższa tabela zawiera listę wszystkich mechanizmów – zdefiniowanych w standardzie PKCS#11 i tych specyficznych
dla dostawcy – obsługiwanych przez serwer CryptoServer Se-Series, jeżeli działa on w trybie FIPS.
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
Zdefiniowane mechanizmy PKCS#11
CKM_RSA_PKCS_OAEP
-
2
GENEROWANIE PARY KLUCZY CKM_RSA_PKCS
CKM_RSA_X9_31_GENEROWANIE_PARY_KLUCZY
CKM_RSA_PKCS_PSS
CKM_RSA_X9_31
CKM_SHA224_RSA_PKCS_PSS
CKM_SHA256_RSA_PKCS_PSS
CKM_SHA384_RSA_PKCS_PSS
CKM_SHA512_RSA_PKCS_PSS
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
CKM_EC_PARA_KLUCZY_GEN
(GENERACJA PARY KLUCZY CKM_ECDSA)
-
1
CKM_ECDSA
CKM_ECDH1_COFACTPR_DERIVE
CKM_GENERIC_SECRET_KEY_GEN
GENERACJA KLUCZÓW CKM_AES
CKM_AES_ECB
GENEROWANIE KLUCZY CKM_DES2
CKM_DES3_KEY_GEN
CKM_DES_ECB
-
1
-
1
-
-
- -
-
3
-
3
-
3
-
3
Strona 69 z 76
API PKCS#11 w trybie FIPS
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
Zdefiniowane mechanizmy PKCS#11
CKM_DES3_CBC
CKM_DES3_CBC_PAD
CKM_DES3_MAC_GENERAL
CKM_DES3_MAC
CKM_SHA224
CKM_SHA224_HMAC_OGÓLNE
CKM_SHA224_HMAC
CKM_SHA256
CKM_SHA256_HMAC_OGÓLNE
CKM_SHA256_HMAC
CKM_SHA384
CKM_SHA384_HMAC_OGÓLNE
CKM_SHA384_HMAC
CKM_SHA512
CKM_SHA512_HMAC_OGÓLNE
CKM_SHA512_HMAC
-
3
-
3
-
3
-
3
-
3
-
3
-
-
-
-
-
-
-
-
-
-
-
-
Mechanizmy zdefiniowane przez dostawcę
CKM_ECDSA_SHA224
CKM_ECDSA_SHA25
CKM_ECDSA_SHA384
CKM_ECDSA_SHA512
CKM_AES_CMAC
CKM_RSA_PKCS_MULTI
CKM_RSA_X_509_MULTI
CKM_ECKA
CKM_AES_OFB
-
1
-
1
-
1
-
1
-
-
2
-
2
-
1
- -
-
Mechanizm dostępny jest w trybie FIPS.
Strona 70 z 76
API PKCS#11 w trybie FIPS
1
Zatwierdzone przez NIST krzywe dozwolone dla ECDSA i ECDH: P-192, P-224, P-256, P-384, P-521, K-163,
K-233, K-283, K-409, K-571, B-163, B-233, B-283, B-409, B-571 (patrz [FIPS186-2], Załącznik 6)
2
W trybie FIPS długość klucza RSA musi wynosić min. 1024 bity.
3
Obsługiwane są wyłącznie klucze DES o długości min. 112 bitów.
13.4 Mechanizmy obsługiwane w trybie FIPS dla CryptoServer CSe i Se
Gen2
Poniższa tabela zawiera listę wszystkich mechanizmów – zdefiniowanych w standardzie PKCS#11 oraz tych
specyficznych dla dostawcy – obsługiwanych przez serwery CryptoServer CSe-Series i Se-Series Gen2, jeśli działają
w trybie FIPS.
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
Zdefiniowane mechanizmy PKCS#11
CKM_RSA_PKCS
CKM_RSA_PKCS_OAEP
-
8, 9
-
8, 9
GENEROWANIE PARY KLUCZY CKM_RSA_PKCS
CKM_RSA_X9_31_GENEROWANIE_PARY_KLUCZY
CKM_RSA_X9_31
CKM_SHA1_RSA_PKCS
CKM_SHA224_RSA_PKCS
CKM_SHA256_RSA_PKCS
CKM_SHA384_RSA_PKCS
CKM_SHA512_RSA_PKCS
CKM_SHA1_RSA_PKCS_PSS
CKM_SHA224_RSA_PKCS_PSS
CKM_SHA256_RSA_PKCS_PSS
CKM_SHA384_RSA_PKCS_PSS
CKM_SHA512_RSA_PKCS_PSS
CKM_DSA
-
1, 4
-
1, 4
-
4, 7
-
7, 10
-
4, 7
-
4, 7
-
4, 7
-
4, 7
-
7, 10
-
4, 7
-
4, 7
-
4, 7
-
4, 7
-
11, 12
Strona 71 z 76
API PKCS#11 w trybie FIPS
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
Zdefiniowane mechanizmy PKCS#11
CKM_DSA_SHA1
CKM_DSA_SHA224
CKM_DSA_SHA256
CKM_DSA_SHA384
CKM_DSA_SHA512
GENEROWANIE PARY KLUCZY CKM_DSA
GENEROWANIE PARAMETRU CKM_DSA
-
10, 11, 12
-
11, 12
-
11, 12
-
11, 12
-
11, 12
-
11, 12
-
11, 12
CKM_EC_PARA_KLUCZY_GEN
(GENERACJA PARY KLUCZY CKM_ECDSA)
-
2
CKM_ECDSA
CKM_ECDH1_COFACTPR_DERIVE
CKM_GENERIC_SECRET_KEY_GEN
GENERACJA KLUCZÓW CKM_AES
CKM_AES_ECB
CKM_AES_CBC
CKM_AES_CBC_PAD
CKM_AES_CMAC
Zawijanie klucza CKM_AES
CKM_AES_KEY_WRAP_PAD
CKM_AES_KEY_WRAP_KWP
CKM_DES3_KEY_GEN
CKM_DES_ECB
CKM_DES3_CBC
CKM_DES3_CBC_PAD
CKM_DES3_MAC
Pochodzenie CKM_DH_PKCS
CKM_X9_42_DH_POCHODZENIE
CKM_SHA224
-
2, 3
-
2, 11
-
-
- -
- -
- -
- -
-
2
-
-
2
-
-
2
-
-
5
-
5, 6
-
5, 6
-
5, 6
-
5, 6
-
5, 6
-
5, 6
-
5, 6
-
11
-
11
-
Strona 72 z 76
API PKCS#11 w trybie FIPS
Funkcje
Mechanizm
Szyfrować
&
Odszyfrować
Podpisać
&
Zweryfikować
Generał
Klucz/Klucz
Para
Zawinąć
&
Odwijać się
Strawić Czerpać
Zdefiniowane mechanizmy PKCS#11
CKM_SHA224_HMAC_OGÓLNE
CKM_SHA224_HMAC
CKM_SHA256
CKM_SHA256_HMAC_OGÓLNE
CKM_SHA256_HMAC
CKM_SHA384
CKM_SHA384_HMAC_OGÓLNE
CKM_SHA384_HMAC
CKM_SHA512
CKM_SHA512_HMAC_OGÓLNE
CKM_SHA512_HMAC
-
-
-
-
-
-
-
-
-
-
-
Mechanizmy zdefiniowane przez dostawcę
CKM_ECDSA_SHA1
CKM_ECDSA_SHA224
CKM_ECDSA_SHA25
CKM_ECDSA_SHA384
CKM_ECDSA_SHA512
CKM_AES_CMAC
CKM_RSA_PKCS_MULTI
CKM_RSA_X_509_MULTI
CKM_ECKA
Zawijanie CKM_AES_CBC
CKM_AES_OFB
-
2, 3, 10
-
2
-
2, 3
-
2
-
2, 3
-
2
-
2, 3
-
2
-
2, 3
-
2
-
-
4
-
4
-
2
-
- -
-
Mechanizm dostępny jest w trybie FIPS.
1
Ograniczenia mechanizmów uzupełniania RSA opisane powyżej w rozdziale 13.1.
Strona 73 z 76
API PKCS#11 w trybie FIPS
2
Zatwierdzone przez NIST krzywe dopuszczone do generowania kluczy EC, podpisywania ECDSA i wyprowadzania
kluczy ECDH: P-224, P-256, P-384, P-521, K-233, K-283, K-409, K-571, B-233, B-283, B-409, B-571
(patrz [FIPS186-4], Załącznik 6)
3
Zatwierdzone przez NIST krzywe dozwolone do weryfikacji podpisu ECDSA: P-192, P-224, P-256, P-384,
P-521, K-163, K-233, K-283, K-409, K-571, B-163, B-233, B-283, B-409, B-571 (patrz [FIPS186-2], Załącznik 6)
4
Do generowania kluczy i podpisów dozwolony jest wyłącznie klucz RSA o długości 2048 lub 3072 bitów.
5
Do generowania kluczy DES, szyfrowania, generowania adresów MAC i opakowywania kluczy obsługiwana jest wyłącznie długość klucza wynosząca 24
bajty.
6
Do odszyfrowania DES, weryfikacji MAC i rozpakowywania klucza obsługiwana jest wyłącznie długość klucza wynosząca 24 bajty.
7
Do weryfikacji podpisu RSA dopuszcza się wyłącznie klucz RSA o długości min. 1024 bitów.
8
W przypadku klucza RSA dopuszczalna jest długość klucza RSA wynosząca min. 2048 bitów.
9
Do rozpakowania klucza RSA dozwolona jest długość klucza RSA wynosząca min. 1024 bity.
10
Mechanizm ten jest dozwolony wyłącznie w celu weryfikacji podpisów.
11
Do generowania kluczy i podpisów oraz wyprowadzania kluczy dozwolone są wyłącznie następujące pary długości
parametrów: |P|/|Q| = 2048/224, 2048/256 lub 3072/256
12W przypadku weryfikacji podpisu DSA dopuszczalna długość parametru |P|/|Q| wynosi min. 1024/160.
Strona 74 z 76
Odniesienia
Odniesienia
Odniesienie Tytuł/Firma Numer dokumentu
[ANSI-X9.19] ANSI X9.19: Uwierzytelnianie wiadomości detalicznych
instytucji finansowych, 1996/ANSI (Amerykański Narodowy
Instytut Normalizacyjny)
[ANSI-X9.63] ANSI X9.63: Kryptografia klucza publicznego dla branży
usług finansowych – uzgadnianie klucza i transport
klucza z wykorzystaniem kryptografii krzywych
eliptycznych, 2001/ANSI (American National Standards
Institute).
[CSADMIN] CryptoServer – Podręcznik csadm /Utimaco IS GmbH. 2009-0003
[CSMSADM] CryptoServer – Podręcznik
administratora /Utimaco IS GmbH.
M010-0001-pl
[CS_PKCS11CAT] CryptoServer – PKCS#11 P11CAT - Podręcznik /
Utimaco IS GmbH.
M013-0001-pl
[CS_PKCS11T2] CryptoServer – PKCS#11 p11tool2 – Podręcznik
referencyjny/Utimaco IS GmbH.
2012-0014
[FIPS186-2] FIPS PUB 186-2, Standard podpisu
cyfrowego/Narodowy Instytut Norm i
Technologii (NIST), styczeń 2000 r.
[FIPS186-4] FIPS PUB 186-4, Standard podpisu cyfrowego/
Narodowy Instytut Norm i Technologii (NIST),
lipiec 2013 r.
[ISO-9797] ISO/IEC 9797-1:1999 - Technologia informatyczna --
Techniki zabezpieczeń -- Kody uwierzytelniania wiadomości
(MAC) -- Część 1: Mechanizmy wykorzystujące szyfr
blokowy/Międzynarodowa Organizacja ds.
Standaryzacja, Genewa, Szwajcaria.
[PKCS#3] PKCS#3: Diffie-Hellman Key Agreement Standard v1.4,
1 listopada 1993/RSA Laboratories. Dostępne:http://
www.emc.com/emc-plus/rsalabs/standards-initiatives/
pkcs-3-diffie-hellman-keyagreement-standar.htm
[PKCS11] PKCS#11: Cryptographic Token Interface Standard
v2.20, 28 czerwca 2004/RSA Laboratories. Dostępne:
http://www.emc.com/emc-plus/rsa-labs/standards-
Strona 75 z 76
Odniesienia
Odniesienie Tytuł/Firma Numer dokumentu
inicjatywy/pkcs-11-kryptograficzny-token-
interfacestandard.htm
[PKCS11BS] „PKCS #11 Cryptographic Token Interface Base
Specification Version 2.40,” Committee Specification 01,
16 września 2014/OASIS Standard. Dostępne:http://
docs.oasisopen.org/pkcs11/pkcs11-base/v2.40/cs01/
pkcs11-basev2.40-cs01.html
[PKCS11ICMS] „PKCS #11 Cryptographic Token Interface Current
Mechanisms Specification Version 2.40,” Committee
Specification 01, 16 września 2014/OASIS Standard.
Dostępne:http://docs.oasisopen.org/pkcs11/pkcs11-
curr/v2.40/cs01/pkcs11-currv2.40-cs01.html
[PKCS#1] PKCS#1: RSA Cryptography Standard v2.1, 14 czerwca
2002/RSA Laboratories. Dostępne: http://www.emc.com/
emc-plus/rsa-labs/standardsinitiatives/pkcs-rsa-
cryptography-standard.htm
[SEK 1] SEC1: Kryptografia krzywych eliptycznych – Certicom
Research – 21 maja 2009 r., wersja 2.0.
Strona 76 z 76