Etablering av PKI som møter NSMs funksjonelle krav

I forbindelse med et et prosjekt i NSM er det blitt satt opp noen offentlige nøkkelinfrastrukturer (Public Key Infrastructure (PKI)). Disse brukes for funksjonelle tester av ulikt utstyr og er satt i henhold til NSMs funksjonelle krav til PKI, digitale sertifikater, nøkkellengder og algoritmer.

Ill.: Colourbox.no

Med funksjonelle tester, menes tester av PKI som møter systemtekniske krav, som algoritmer, nøkkellengder, nøkkelbruk og hierarki, uten nødvendigvis å teste med sertifiserte eller godkjennbare produkter.

For at andre også skal kunne utføre funksjonelle tester mot program- og maskinvare som benytter digitale sertifikater, vil konfigurasjonene presenteres her i Sikkerhetsbloggen. I dette første av forhåpentligvis tre innlegg beskrives referansearkitekturen, og i to senere innlegg vil konfigurasjon av PKIen ved bruk av Windows Server 2012 Active Directory Certificate Services og OpenSSL beskrives.

Det er ønsket at PKIen har følgende egenskaper:

  • Sertifikatene følger x509 versjon 3-standarden
  • Tre-lags hierarki (Rot CA, Policy CA og Issuing CA)
  • Certificate Policy på andre lag
  • EC-DSA som signeringsalgoritme med nøkkellengde 256 og SHA-256 som avtrykksalgoritme (sha256ECDSA)
  • Nøkkelbruk skal kun være keyCertSign og cRLSign og markeres kritisk
  • Sperrelister og sertifikater for mellomliggende sertifiseringsautoriteter tilgjengeliggjøres via web-tjener

Ill.: Colourbox.no

Sertifikatene må entydig identifisere eier/ansvarlig/sponsor og klart bestemme hva sertifikatene skal kunne brukes til, samtidig som er ikke skal inneholde unødvendig informasjon. Dette betyr at «emne»- og «utsteder»-feltene må identifisere ansvarlige klart og tydelig, og felter som «nøkkelbruk» og «sertifikatkriterier» er konkrete på hva sertifikatene og tilhørende private nøkler kan benyttes til.

I tillegg skal sertifikatene identifiseres som sertifiseringsautoriteter (CA) under Basic Constraints (OID 2.5.29.19), med lengdebegrensning på tre nivå.

Siden PKIen er kun satt opp for test, er levetid på sertifikatene satt til to år, 1 år og 6 måneder for henholdsvis rot-, policy- og utstedende sertifiseringsautoritet. For sperrelistene er levetiden satt til 15, åtte og to dager.

Eksempel på rot-sertifikat etter ovenstående beskrivelse:

X509 Certificate:
Version: 3
Serial Number: 4f530a52b4dab396472e8f5c4df297fd
Signature Algorithm:
  Algorithm ObjectId: 1.2.840.10045.4.3.2 sha256ECDSA
  Algorithm Parameters: NULL
Issuer:
  CN=Sikkerhetsbloggens Test Rot CA
  OU=KSA
  O=NSM
  C=NO

 NotBefore: 02.11.2012 12:54
 NotAfter:  02.11.2014 13:04

Subject:
  CN=Sikkerhetsbloggens Test Rot CA
  OU=KSA
  O=NSM
  C=NO

Public Key Algorithm:
  Algorithm ObjectId: 1.2.840.10045.2.1 ECC
  Algorithm Parameters:
  06 08 2a 86 48 ce 3d 03  01 07
    1.2.840.10045.3.1.7 ECDSA_P256 (ECDH_P256)
Public Key Length: 256 bits
Public Key: UnusedBits = 0
  0000  04 da e0 e4 2a 4f e6 2e  dc 47 88 05 07 5f 2e 58
  0010  1a 6a 59 e7 64 dc 52 da  a4 e4 dd b1 e5 8b 9c 1e
  0020  cd 3b 36 c1 1e 3a f6 29  ae 07 36 e0 72 7d 1d a8
  0030  9c b7 1e 58 99 cd 41 74  e9 93 f0 90 72 93 5e 28
  0040  ce
Certificate Extensions: 3
  2.5.29.15: Flags = 1(Critical), Length = 4
  Key Usage
    Certificate Signing, Off-line CRL Signing, CRL Signing (06)

  2.5.29.19: Flags = 1(Critical), Length = 8
  Basic Constraints
    Subject Type=CA
    Path Length Constraint=2

  2.5.29.14: Flags = 0, Length = 16
  Subject Key Identifier
    4d 0c 83 57 e2 ed 51 ec 51 18 5e 5f cc 2c 33 fe fd 5a fa fa

Signature Algorithm:
  Algorithm ObjectId: 1.2.840.10045.4.3.2 sha256ECDSA
  Algorithm Parameters: NULL
Signature: UnusedBits=0
  0000  3f d8 7f 31 9d 3e 4f ce  41 87 37 fb da 30 c7 03
  0010  48 4c a3 59 6e 33 c0 aa  b1 a6 89 55 f2 29 cd f4
  0020  00 21 02 22 8e 0a 3f 9c  3f 34 64 f3 ae 92 47 35
  0030  e8 e8 59 b9 58 fe cd 69  3a 66 4d 14 9d 8e a1 12
  0040  1f be 57 20 02 45 30
Signature matches Public Key
Root Certificate: Subject matches Issuer
Key Id Hash(rfc-sha1): 4d 0c 83 57 e2 ed 51 ec 51 18 5e 5f cc 2c 33 fe fd 5a fa fa
Key Id Hash(sha1): 0a 7c db 94 9a 18 04 20 50 d9 ba 01 5a 54 9c 44 c5 7a 55 f2
Cert Hash(md5): 5a 8c 3a 83 2d 43 af 25 53 92 da 05 a3 9d c9 6d
Cert Hash(sha1): 2d e5 5f f9 da 92 6b e9 14 69 ad 1e 18 69 1b 7f 2b 38 65 a7

Eksempel på policy-CA-sertifikat:

X509 Certificate:
Version: 3
Serial Number: 6114b38f000000000004
Signature Algorithm:
  Algorithm ObjectId: 1.2.840.10045.4.3.2 sha256ECDSA
  Algorithm Parameters: NULL
Issuer:
  CN=Sikkerhetsbloggens Test Rot CA
  OU=KSA
  O=NSM
  C=NO

 NotBefore: 02.11.2012 13:56
 NotAfter: 02.11.2013 14:06

Subject:
  CN=Sikkerhetsbloggens Test Policy CA
  OU=KSA
  O=NSM
  C=NO

Public Key Algorithm:
  Algorithm ObjectId: 1.2.840.10045.2.1 ECC
  Algorithm Parameters:
  06 08 2a 86 48 ce 3d 03  01 07
    1.2.840.10045.3.1.7 ECDSA_P256 (ECDH_P256)
Public Key Length: 256 bits
Public Key: UnusedBits = 0
  0000  04 5c 76 7a c3 36 01 44  79 88 49 82 52 f6 3e 57
  0010  13 06 0c 8b 18 cf c7 28  fc 56 24 ed 55 51 50 8e
  0020  da f3 92 7a 84 5a e7 0b  97 92 a0 6b 25 b2 de d1
  0030  c5 fc 31 6a a9 3c 8c 73  4e 29 1b 99 50 68 b7 96
  0040  90
Certificate Extensions: 6
  2.5.29.14: Flags = 0, Length = 16
  Subject Key Identifier
    00 fe 00 01 9f cd b3 37 7a 7d 58 fb 13 a1 0b 0c 2c 24 f1 30

  2.5.29.32: Flags = 0, Length = 8f
  Certificate Policies
    [1]Certificate Policy:
      Policy Identifier=2.16.578.1.24.509.99.1.509
        [1,1]Policy Qualifier Info:
          Policy Qualifier Id=User Notice
            Qualifier:
              Notice Text=Sikkerhetsbloggens Test PKI
        [1,2]Policy Qualifier Info:
          Policy Qualifier Id=CPS
            Qualifier:

http://blogg.nsm.stat.no/archives/2662

  2.5.29.15: Flags = 1(Critical), Length = 4
    Key Usage
      Certificate Signing, Off-line CRL Signing, CRL Signing (06)

  2.5.29.19: Flags = 1(Critical), Length = 8
  Basic Constraints
    Subject Type=CA
    Path Length Constraint=1

  2.5.29.35: Flags = 0, Length = 18
  Authority Key Identifier
    KeyID=4d 0c 83 57 e2 ed 51 ec 51 18 5e 5f cc 2c 33 fe fd 5a fa fa

  2.5.29.31: Flags = 0, Length = 35
  CRL Distribution Points
    [1]CRL Distribution Point
      Distribution Point Name:
        Full Name:
          URL=http://crl.blogg.nsm.stat.no/testrootca.crl

Signature Algorithm:
  Algorithm ObjectId: 1.2.840.10045.4.3.2 sha256ECDSA
  Algorithm Parameters: NULL
Signature: UnusedBits=0
  0000  6b e9 d3 0a 00 56 0d 05  5b 42 59 c1 e6 9a 08 8a
  0010  80 13 da dd d4 05 bf 82  cb ad 9b a7 2c b7 37 8e
  0020  00 21 02 d6 03 4c 97 b5  e9 b9 17 8e 0a 9f ea dc
  0030  58 5b 6a e4 22 12 a4 52  dd 57 f9 05 06 00 9e 26
  0040  9a fa 19 20 02 45 30
Non-root Certificate
Key Id Hash(rfc-sha1): 00 fe 00 01 9f cd b3 37 7a 7d 58 fb 13 a1 0b 0c 2c 24 f1 30
Key Id Hash(sha1): 4c e4 9f 9b 39 62 03 49 0d 04 a6 62 76 29 ff 43 0e 1a 5c 7e
Cert Hash(md5): 3b 18 a9 59 4b af 6d cb bf 99 96 38 e4 ce 1f ac
Cert Hash(sha1): 50 80 40 d1 97 da 10 e5 08 12 dc 8d a3 b0 75 d9 34 12 b6 3e

Eksempel på utstedende-CA-sertifikat:

X509 Certificate:
Version: 3
Serial Number: 613dbbc5000000000004
Signature Algorithm:
  Algorithm ObjectId: 1.2.840.10045.4.3.2 sha256ECDSA
  Algorithm Parameters: NULL
Issuer:
  CN=Sikkerhetsbloggens Test Policy CA
  OU=KSA
  O=NSM
  C=NO

 NotBefore: 02.11.2012 14:37
 NotAfter: 02.05.2013 14:47

Subject:
  CN=Sikkerhetsbloggens Test Issuing CA
  OU=KSA
  O=NSM
  C=NO

Public Key Algorithm:
  Algorithm ObjectId: 1.2.840.10045.2.1 ECC
  Algorithm Parameters:
  06 08 2a 86 48 ce 3d 03  01 07
    1.2.840.10045.3.1.7 ECDSA_P256 (ECDH_P256)
Public Key Length: 256 bits
Public Key: UnusedBits = 0
  0000  04 c6 62 29 41 f9 47 09  55 46 25 49 e5 b1 b5 f0
  0010  3b 2a 92 e8 f7 cf b2 ed  d7 5e 2d 77 d7 38 96 ff
  0020  d9 11 75 d1 95 67 11 17  50 59 c0 fa 5a d3 16 f1
  0030  63 af d5 03 65 98 32 44  c1 b4 43 22 07 bd c3 55
  0040  84
Certificate Extensions: 7
  2.5.29.14: Flags = 0, Length = 16
  Subject Key Identifier
    d1 a0 e0 6d cc 4f cc ca 14 de f6 78 12 49 3c 25 d2 57 12 28

  2.5.29.32: Flags = 0, Length = 8f
    Certificate Policies
      [1]Certificate Policy:
        Policy Identifier=2.16.578.1.24.509.99.1.509
          [1,1]Policy Qualifier Info:
            Policy Qualifier Id=User Notice
              Qualifier:
                Notice Text=Sikkerhetsbloggens Test PKI
          [1,2]Policy Qualifier Info:
            Policy Qualifier Id=CPS
              Qualifier:

http://blogg.nsm.stat.no/archives/2662

  2.5.29.15: Flags = 1(Critical), Length = 4
    Key Usage
      Certificate Signing, Off-line CRL Signing, CRL Signing (06)

  2.5.29.19: Flags = 1(Critical), Length = 8
    Basic Constraints
      Subject Type=CA
      Path Length Constraint=0

  2.5.29.35: Flags = 0, Length = 18
    Authority Key Identifier
      KeyID=00 fe 00 01 9f cd b3 37 7a 7d 58 fb 13 a1 0b 0c 2c 24 f1 30

  2.5.29.31: Flags = 0, Length = 37
    CRL Distribution Points
      [1]CRL Distribution Point
        Distribution Point Name:
          Full Name:
            URL=http://crl.blogg.nsm.stat.no/testpolicyca.crl

  1.3.6.1.5.5.7.1.1: Flags = 0, Length = 3d
    Authority Information Access
      [1]Authority Info Access
        Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)
        Alternative Name:
          URL=http://crl.blogg.nsm.stat.no/testpolicyca.cer

Signature Algorithm:
  Algorithm ObjectId: 1.2.840.10045.4.3.2 sha256ECDSA
  Algorithm Parameters: NULL
Signature: UnusedBits=0
  0000  88 78 bf 50 8f da 00 9c  1e 73 68 a3 13 ba d9 34
  0010  15 a8 5e 2d fa 2b 72 78  44 23 b9 06 79 26 15 7e
  0020  20 02 f0 08 15 c8 93 8e  fd 58 41 17 7a 8c 40 f6
  0030  b7 78 9d 2c 38 e7 c6 36  61 93 39 15 a4 4e 56 94
  0040  88 ff 00 21 02 45 30
Non-root Certificate
Key Id Hash(rfc-sha1): d1 a0 e0 6d cc 4f cc ca 14 de f6 78 12 49 3c 25 d2 57 12 28
Key Id Hash(sha1): 56 fd 91 11 cc 3c bb cd 3a 6d 18 72 12 f5 14 79 5a 50 b1 24
Cert Hash(md5): 10 1c 64 70 4a ed 92 86 a1 c3 b0 a1 03 af d4 54
Cert Hash(sha1): 83 b6 9c 5d 78 a8 16 df d2 dc f6 cf 2a af 32 13 29 20 8b 1d

Denne PKIen kan så benyttes til å utstede sluttbrukersertifikater (end entity); det være seg sertifikater for brukere eller utstyr.

Eksempler på sertifikater det kan være nyttig å utstede i et «enterprise»-informasjonssystem:

  • Domenekontroller
  • Smartkortpålogging
  • VPN-klient og -konsentrator
  • Utstyrsautentisering
  • E-postkryptering og -signering

Ill.: Colourbox.no

En mal for slike sertifikater blir ikke presentert her, da det er svært avhengig av hva applikasjonen/tjenesten krever/støtter av sertifikatinnhold. Det er allikevel fornuftig å be en leverandør av en PKI-klargjort applikasjon eller tjeneste om å beskrive hvilke felter som applikasjonen/tjenesten forstår, krever eller ikke aksepterer.

Erfaringsmessig er det få felter i et sertifikat som sjekkes før bruk av sertifikatet. Forhåpentligvis sjekkes både levetid. nøkkelbruk, utvidet nøkkelbruk og revokeringsstatus, men dessverre oppdages det ofte applikasjoner som aksepterer både sertifikater som er utgått (eller ikke gyldige enda), trukket tilbake eller som har annen nøkkelbruk enn applikasjonen benytter.

About Lars Olaussen

Lars Olaussen er sjefingeniør i Nasjonal sikkerhetsmyndighet, avdeling for teknologi, seksjon for kryptoutvikling. Hans ansvarsområde er råd- og veiledning og krav- og tiltaksutvikling innen elektronisk identifikasjon, kryptoløsninger og nøkkelforvaltning for beskyttelse av lavgradert og annen sensitiv, men ugradert informasjon.
This entry was posted in Informasjonssikkerhet, Kryptografi, Teknisk. Bookmark the permalink.