X.509 keyUsage - mylące rozszerzenie

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

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

Szczególną uwagę należy poświęcić flagom digitalSignature i nonRepudiation. 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.

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.