Jednym z podstawowych rozszerzeń certyfikatu (certificate extension) wprowadzonych przez standard X.509v3 było rozszerzenie keyUsage. Przypomnijmy, że w X.509v1 certyfikat był - w skrócie - po prostu kluczem publicznym podmiotu (subjectPublicKeyInfo
) z jego opisem (Subject
) oraz podpisem wystawcy (signatureValue
). Tak opisany klucz mógł być więc wykorzystywany do dowolnego celu niezależnie od intencji wystawcy lub właściciela. A to jest niebezpieczne…
Aby dać osobie weryfikującej cudzy certyfikat możliwość sprawdzenia czy został on zastosowany zgodnie z przeznaczeniem certyfikat X.509 zawiera dwa ważne rozszerzenia:
- keyUsage - rozszerzenie określające dopuszczalny zakres zastosowań klucza prywatnego
- basicConstraints - rozszerzenie określające czy dany klucz prywatny może podpisywać inne certyfikaty
</ul>
keyUsage
Rozszerzenie keyUsage określa funkcjonalnie zakres zastosowań danego klucza prywatnego. W X.509v3 (RFC 3280 4.2.1.3) są zdefiniowane następujące zastosowania i odpowiednie wartości - każda z nich mówi do czego może być wykorzystany klucz prywatny lub publiczny związany z certyfikatem:
- digitalSignature (0) - opis poniżej
- nonRepudiation (1) - opis poniżej
- keyEncipherment (2) - deszyfrowanie kluczy sesyjnych inne niż wymiana klucza (od tego jest 4)
- dataEncipherment (3) - szyfrowanie danych inne niż 2 i 4
- keyAgreement (4) - szyfrowanie/deszyfrowanie kluczy sesyjnych w protokołach wymiany klucza
- keyCertSign (5) - podpisywanie certyfikatów przez CA ("poświadczanie zaświadczeń certyfikacyjnych" wg polskiej Ustawy)
- cRLSign (6) - podpisywanie list CRL przez CA ("poświadczanie list CRL")
- encipherOnly (7) - flaga ograniczająca zakres stosowania klucza w keyAgreement (4) tylko do szyfrowania
- decipherOnly (8) - flaga ograniczająca zakres stosowania klucza w keyAgreement (4) tylko do deszyfrowania
</ul>
Szczególną uwagę należy poświęcić flagom
digitalSignature
inonRepudiation
. W rzeczywistości ich nazwy nie oznaczają tego co sugerowałoby ich dosłowne znaczenie. I tak:- Flaga digitalSignature oznacza wykorzystanie klucza prywatnego do operacji uwierzytelnienia opartych o matematyczna operację podpisania jednej liczby przez drugą, co wynika także z różnicy między definicją podpisu elektronicznego i podpisu cyfrowego. W szczególności dotyczy to operacji, w których klucz prywatny "podpisuje" różne wartości losowe, tymczasowe itd.
- Flaga nonRepudiation - wbrew nazwie - nie musi realizować usługi niezaprzeczalności. Flaga ta odnosi się do operacji podpisu elektronicznego (nie "cyfrowego") czyli podpisania określonej treści, znanej osobie podpisującej.
</ul>
Nazwy te są jak widać nieco mylące, co wynika głównie ze specyficznej terminologii stosowanej w Unii Europejskiej (podpis cyfrowy vs elektroniczny).
Oczywiscie, nie wszystkie kombinacje flag keyUsage mają sens techniczny. Np. flagi encipherOnly i decipherOnly mogą występować tylko z flagą keyAgreement.
O tym jakie flagi powinny się znajdować w jakich certyfikatach mówi nam CWA 14365-1 March 2004 "Guide on the Use of Electronic Signatures - Part 1: Legal and Technical Aspects". Jest to dokument zalecający stosowanie tylko określonych kombinacji flag keyUsage w certyfikatach kwalifikowanych, co z kolei jest podyktowane wynikającą z nich odpowiedzialnością prawną (patrz: "Europejski profil certyfikatu X.509").
Ryzyko niewłaściwego użycia klucza
Niewłaściwe zastosowanie klucza prywatnego zagraża użytkownikowi. Z danym kluczem prywatnym powiązana jest określona odpowiedzialność prawna - m.in. niezaprzeczalność podpisu elektronicznego opiera się o założenie, że klucz występuje w jednej i tylko jednej kopii ("pozostaje w wyłącznej dyspozycji właściciela") podczas gdy klucze używane do szyfrowania są często dublowane na wypadek utraty oryginału.
Inny przypadek niewłaściwego zastosowania klucza to złożenie kwalifikowanego podpisu elektronicznego pod liczbą losową (nonce) w niektórych protokołach uwierzytelnienia (np.
ISAKMP RSA_SIG
). Użytkownikowi wydaje się że podpisuje liczbę losową a w rzeczywistości może to być skrót niekorzystnego dla niego dokumentu.