CV-Zertifikate

Für CV-Zertifikate (Card Verifiable Zertifikate) muss im Zertifikats-Template der Zertifikatstyp (Strukturtyp) cvCertificateTemplate gewählt werden (siehe Grundsätzlicher Aufbau).

CV-Zertifikate sind in einem kompakten Format gespeichert und enthalten weniger Informationen als X.509-Zertifikate. Dadurch wird die Verifikation des Zertifikats durch Smartcards, welche starken Ressourcenbeschränkungen bei Speicherplatz und Rechenleistung unterworfen sind, ermöglicht. CV-Zertifikate werden in der Regel zur Authentifizierung einer Applikation beim Zugriff auf eine Smartcard verwendet. Weiterführende Informationen zu CV-Zertifikaten und deren Struktur können den Dokumenten [ISO-CVC] entnommen werden.

Generell können für CV-Zertifikate zwei Typen unterschieden werden: Selbstbeschreibende CV-Zertifikate und nicht-selbstbeschreibende CV-Zertifikate.

Selbstbeschreibende CV-Zertifikate:

Selbstbeschreibende CV-Zertifikate können ohne weitere Hilfsmittel interpretiert werden. Dies wird dadurch ermöglicht, indem die Felder des zu signierenden Datensatzes im TLV-Format (Tag-Length-Value) dargestellt werden. Hierbei wird zur näheren Beschreibung jedem Datenfeld ein Tag und eine Längenangabe vorangestellt. Der zu signierende Datensatz wird für selbstbeschreibende CV-Zertifikate über das XML-Element <body> im Zertifikats-Template festgelegt (siehe Body).

Nicht selbstbeschreibende CV-Zertifikate:

Im Gegensatz zu selbstbeschreibenden Zertifikaten können die Daten in nicht-selbstbeschreibenden CV-Zertifikaten nicht ohne weitere Hilfsmittel interpretiert werden, da hier die Datensätze nicht weiter beschrieben sind. Der zu signierende Datensatz wird für nicht-selbstbeschreibende CV-Zertifikate über das XML-Element <content> im Zertifikats-Template festgelegt (siehe Content).

Unterelemente

Unterelemente des XML-Elements cvCertificateTemplate
Element-Name Erläuterung

content

Für ein nicht selbstbeschreibendes CV-Zertifikat wird das XML-Element <content> zur Beschreibung des Zertifikatsinhalts verwendet.

Eine Beschreibung ist in Content (content) zu finden.

body

Für ein selbstbeschreibendes CV-Zertifikat wird das XML-Element <body> zur Beschreibung des Zertifikatsinhalts verwendet.

Eine Beschreibung ist in Body (body) zu finden.

structure

Sowohl für selbstbeschreibende als auch für nicht selbstbeschreibende CV-Zertifikate wird die komplette Zertifikatsstruktur über das Element <structure> festgelegt.

Eine Beschreibung ist in Structure (structure) zu finden.

validity

Angaben zur Gültigkeit des Zertifikats.

Wert: ValidityType (siehe ValidityType).

keyAttributes

Informationen zum Schlüssel

Wert: keyAttributes (siehe KeyAttributesEncoding und KeyAttributesQuality).

Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<certificateTemplate xmlns="http://cara2.project.MTG/certificate/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cvCertificateTemplate>
    <content>
        <CPI>
            <definition>
                <Hex><length>1</length><default>06</default></Hex>
            </definition>
        </CPI>
        <CAR/>
        <CHR>
            <definition>
                <Hex><length>2</length><identName>org</identName></Hex>
                <Hex><length>10</length><identName>demo</identName></Hex>
            </definition>
        </CHR>
        <CHA>
            <definition>
                <ASCII><default>Demo</default></ASCII>
            </definition>
        </CHA>
        <EOV pattern="yyyyMMdd"/>
        <OID><oid>1.2.840.113549.1.1.10</oid></OID>
        <publicKey/>
    </content>
    <structure>
        <content/>
        <signature>
            <algorithm><default>1.2.840.113549.1.1.5</default></algorithm>
        </signature>
    </structure>
    <validity>
        <max><year>5</year><month>0</month><day>0</day></max>
        <default><year>5</year><month>0</month><day>0</day></default>
    </validity>
    <keyAttributes>
        <quality>
            <RSA><modulus minLength="1024" /></RSA>
        </quality>
    </keyAttributes>
</cvCertificateTemplate>
</certificateTemplate>

Content

Das XML-Element <content> wird für nicht-selbstbeschreibende CV-Zertifikate verwendet, um die Felder des zu signierenden Datensatzes festzulegen. Die im Zertifikats-Template für das XML-Element <content> verwendeten Unterelemente werden als Datenfelder in den zu signierenden Datensatz aufgenommen. Die möglichen Felder sind in Unterelemente des XML-Elements „content“ zusammengefasst.

Unterelemente

Unterelemente des XML-Elements „content“
Element-Name Erläuterung

CPI

Mit diesem Element kann der „Certificate Profile Identifier“ im Zertifikat gesetzt werden.

Eine Beschreibung der Definition ist in cvValueType zu finden.

Beispiel:

<CPI>
    <definition>
        <Hex><default>00</default></Hex>
    </definition>
</CPI>

CAR

Durch Angabe dieses Elements im Zertifikats-Template wird die Certification Authority Reference in das Zertifikat aufgenommen. Im Falle eines self-signed Zertifikats wird als Wert der des eigenen CHR verwendet, ansonsten der CHR des Signers.

Mit dem optionalen Attribut length wird die Länge des Werts definiert. Falls der tatsächliche Wert größer ist, wird der Wert auf die angegebene Länge verkleinert, indem führende Bytes abgeschnitten werden.

Beispiel:

<CAR length="8"/>

CHR

Mit diesem Element kann der „Certificate Holder Reference“ im Zertifikat gesetzt werden. Eine Beschreibung ist in cvValueType zu finden.

Mit dem optionalen Attribut prefixLength kann festgelegt werden, wie viele führende Bytes des CHR eines nicht-selbstbeschreibenden CV-CA-Zertifikats abgeschnitten werden sollen, bevor der CHR in der Cara-Datenbank gespeichert wird. Die verbleibenden Bytes können in ausgestellten EE-Zertifikaten als CAR verwendet werden. Wird das Attribut nicht angegeben, so gilt aus Gründen der Abwärtskompatibilität der Defaultwert „4“.

Beispiel:

<CHR prefixLength="0">
    <definition>
        <Hex><length>2</length><identName>org</identName></Hex>
        <Hex><length>10</length><identName>demo</identName></Hex>
    </definition>
</CHR>

CHA

Mit diesem Element kann der „Certificate Holder Authorization“ im Zertifikat gesetzt werden.

Eine Beschreibung ist in cvValueType zu finden.

Beispiel:

<CHA>
    <definition>
        <Hex>
            <default>D27600000100</default>
        </Hex>
        <Hex><default>00</default></Hex>
    </definition>
</CHA>

OID

Dieses Element wird zur Angabe eines Object Identifiers verwendet. Die angegebene OID wird in ein DER-kodiertes ASN1-Objekt umgewandelt und in das Zertifikat geschrieben.

Beispiel:

<oid>0.4.0.127.0.7.3.1.2.2</oid>

EOV

Mit diesem Element kann die Gültigkeit des Schlüssels (End of Validity) im Zertifikat gesetzt werden. Datum und Uhrzeit werden in einen String umgewandelt und dann BCD-kodiert in das Zertifikat geschrieben.

Das Format der Zeitangabe muss mit Hilfe des Attributs pattern spezifiziert werden. Die Definition des Pattern entspricht der von der Java-Klasse java.text.SimpleDateFormat verwendeten.

Das Element hat keine Auswirkungen auf die Gültigkeitsperiode des Zertifikats in der CARA-Datenbank.

Beispiel:

<EOV pattern="yyyyMMdd"/>

publicKey

Mit diesem Element wird definiert, wie der öffentliche Schlüssels in das CV-Zertifikat geschrieben werden soll.

Das Unterelement length ist optional. Es dient dazu, einen Teil des Public-Key an diese Stelle des CV-Zertifikats zu schreiben. Der fehlende Teil des Keys kann mit dem Element PKRemainder (siehe Structure) in das Zertifikat geschrieben werden. Wenn das Unterelement angegeben ist, wird der Schlüssel auf diese Länge gekürzt.

Beispiel:

<publicKey>
    <length>168</length>
</publicKey>

Beispiel

<content>
    <CPI>
        <definition>
            <Hex><default>05</default></Hex>
        </definition>
    </CPI>
    <CAR/>
    <CHR>
        <definition>
            <Hex><default>00</default></Hex>
            <validTo pattern="yyMM"/>
            <Hex><default>22</default></Hex>
        </definition>
    </CHR>
    <CHA>
        <definition>
            <ASCII><default>Demo</default></ASCII>
            <Hex><default>22</default></Hex>
        </definition>
    </CHA>
    <EOV pattern="yyyyMMdd"/>
    <OID><oid>1.3.36.7.2.1.1</oid></OID>
    <publicKey/>
</content>

Body

Das XML-Element <body> wird für selbstbeschreibende CV-Zertifikate verwendet, um die Felder des zu signierenden Datensatzes festzulegen. Die im Zertifikats-Template für das XML-Element <body> verwendeten Unterelemente werden als Datenfelder in den zu signierenden Datensatz aufgenommen. Die möglichen Felder sind in Unterelemente des XML-Elements „body“ zusammengefasst.

Unterelemente

Unterelemente des XML-Elements „body“
Element-Name Erläuterung

CPI

Mit diesem XML-Element kann der „Certificate Profile Identifier“ im Zertifikat gesetzt werden.

Eine Beschreibung der Definition ist in cvValueType zu finden.

Beispiel:

<CPI>
    <definition>
        <Hex><default>00</default></Hex>
    </definition>
</CPI>

CAR

Durch Angabe dieses XML-Elements im Zertifikats-Template wird die Certification Authority Reference in das Zertifikat aufgenommen. Im Falle eines self-signed Zertifikats wird als Wert der des eigenen CHR verwendet, ansonsten der CHR des Signers.

Mit dem optionalen Attribut length wird die Länge des Werts definiert. Falls der tatsächliche Wert kleiner ist, wird der Wert auf den angegebenen Wert vergrößert, indem führenden Nullen am Anfang eingefügt werden.

Beispiel:

<CAR length="8"/>

CHR

Mit diesem XML-Element kann der „Certificate Holder Reference“ im Zertifikat gesetzt werden.

Eine Beschreibung ist in cvValueType zu finden.

Beispiel:

<CHR>
    <definition>
        <ASCII><default>DEVCVCA00001</default></Hex>
    </definition>
</CHR>

publicKey

Mit diesem XML-Element wird definiert, wie der öffentliche Schlüssel in das CV-Zertifikat geschrieben werden soll (Tag 7F49).

Für den Object Identifier, der den Schlüssel-Algorithmus bezeichnet, bietet CARA zwei alternative Möglichkeiten:

Im Element <algorithm> kann der gewünschte Object Identifier explizit angegeben werden.
Mit dem inhaltslosen Element <auto-detected-algorithm> kann der Object Identifier anhand des Public Keys automatisch ermittelt werden.

Die Aufnahme des Object Identifiers ins Zertifikat erfolgt in DER-Codierung.

Bei Verwendung von <auto-detected-algorithm> gilt Folgendes:

Im Falle eines EC-Schlüssels wird die OID der verwendeten Named Curve automatisch ermittelt und eingesetzt. Dies geschieht unabhängig von der Schlüsselcodierung, also z.B. auch bei Verwendung expliziter Domainparameter. Falls für den jeweiligen Public Key keine Named Curve ermittelt werden kann, wird die Ausstellung des Zertifikats mit einem Fehler abgebrochen. Der Object Identifier zur allgemeinen Kennzeichnung eines EC-PublicKeys (1.2.840.10045.2.1) wird hier keinesfalls verwendet, sondern es wird stets versucht, den Object Identifier für die Named Curve zu ermitteln.
Im Falle eines RSA-Schlüssels wird stets der Object Identifier 1.2.840.113549.1.1.1 eingesetzt.
Sonstige Schlüsselalgorithmen werden von dem Element <auto-detected-algorithm> nicht unterstützt.

Durch Setzen des optionalen Attributs includeOptionalParameters mit den möglichen Werten true und false kann festgelegt werden, dass bei einem EC-Schlüssel die expliziten Domain-Pararameter ins Zertifikat übernommen werden.

Beispiele:

<publicKey includeOptionalParameters="true">
    <algorithm>0.4.0.127.0.7.2.2.2.2.3</algorithm>
</publicKey>
<publicKey includeOptionalParameters="false">
    <auto-detected-algorithm/>
</publicKey>

OID

Mit diesem XML-Element kann die OID des Signatur-Algorithmus im Zertifikat gesetzt werden.

Beispiel:

<OID> 1.2.840.113549.1.1.11</OID>

CHAT

Mit diesem XML-Element kann das „Certificate Holder Authority Template“ im Zertifikat gesetzt werden.

Mit dem Unterelement oid wird der Object Identifier definiert. Die angegebene OID wird in ein DER-kodiertes ASN1-Objekt umgewandelt und in das Zertifikat geschrieben.

Der Wert des CHAT wird mit Hilfe des Unterelements definition festgelegt. Eine Beschreibung dazu ist in cvValueType zu finden.

Beispiel:

<CHAT>
    <oid>0.4.0.127.0.7.3.1.2.2</oid>
    <definition>
        <Hex><default>FE1FFFFFF7</default></Hex>
    </definition>
</CHAT>

CertEffectiveDate

Mit diesem XML-Element kann der Gültigkeitsbeginn im Zertifikat gesetzt werden. Das Datum gibt den ersten Tag der Gültigkeit an. Die Kodierung enthält keine Uhrzeit. Die Uhrzeit für den Gültigkeitsbeginn ist implizit 0 Uhr UTC.

Das Format der Zeitangabe muss mit Hilfe des Elements pattern spezifiziert werden. Die Definition des Pattern entspricht der von der Java-Klasse java.text.SimpleDateFormat verwendeten. Die zugelassenen Werte für Pattern sind yyMMdd und yyyyMMdd.

Die Dezimalziffern des Datums werden als BCD kodiert (binär kodierte Dezimalen). Das optionale Attribut format legt fest, ob die Dezimalen gepackt oder ungepackt kodiert werden. Der Default-Wert ist unpackedBCD, d.h. eine Ziffer in einem Byte. Bei packedBCD enthält jedes Byte zwei Ziffern.

Beispiel:

<CertEffectiveDate>
    <pattern>yyMMdd</pattern>
</CertEffectiveDate>

CertExpirationDate

Mit diesem XML-Element kann das Gültigkeitsende im Zertifikat gesetzt werden. Das Datum gibt den letzten Tag der Gültigkeit an. Die Kodierung enthält keine Uhrzeit. Die Uhrzeit für das Gültigkeitsende ist implizit 24 Uhr UTC, also das Ende des Tages.

Das Format der Zeitangabe muss mit Hilfe des Elements pattern spezifiziert werden. Die Definition des Pattern entspricht der von der Java-Klasse java.text.SimpleDateFormat verwendeten. Die zugelassenen Werte für Pattern sind yyMMdd und yyyyMMdd.

Die Dezimalziffern des Datums werden als BCD kodiert (binär kodierte Dezimalen). Das optionale Attribut format legt fest, ob die Dezimalen gepackt oder ungepackt kodiert werden. Der Default-Wert ist unpackedBCD, d.h. eine Ziffer in einem Byte. Bei packedBCD enthält jedes Byte zwei Ziffern.

Beispiel:

<CertExpirationDate format="packedBCD">
    <pattern>yyyyMMdd</pattern>
</CertExpirationDate>

extensions

Festlegung der möglichen Extensions, welche im Zertifikat verwendet werden können. Es können mehrere Extensions angegeben werden.

Aufbau:

<extensions>
    <extension>...</extension>
    <extension>...</extension>
<extensions>

Eine Beschreibung ist in Procuration (CV-Extensions) zu finden.

Beispiel

<body>
    <CPI>
        <definition>
            <Hex><default>00</default></Hex>
        </definition>
    </CPI>
    <CAR/>
    <publicKey includeOptionalParameters="true">
        <algorithm>0.4.0.127.0.7.2.2.2.2.2</algorithm>
    </publicKey>
    <CHR>
        <definition>
            <ASCII>
                <identName>C</identName>
            </ASCII>
            <ASCII>
                <identName>Holder Mnemonic</identName>
            </ASCII>
            <ASCII>
                <identName>Sequence Number</identName>
            </ASCII>
        </definition>
    </CHR>
    <CHAT><oid>0.4.0.127.0.7.3.1.2.2</oid>
        <definition>
            <Hex><default>FE1FFFFFF7</default></Hex>
        </definition>
    </CHAT>
    <CertEffectiveDate><pattern>yyMMdd</pattern></CertEffectiveDate>
    <CertExpirationDate><pattern>yyMMdd</pattern></CertExpirationDate>
</body>

Structure

Über das XML-Element <structure> die wird komplette Struktur sowohl für selbstbeschreibende als auch nicht selbstbeschreibende CV-Zertifikate (siehe auch Content und Body) definiert. Hierbei werden die Felder festgelegt, die Bestandteil des Zertifikats sind. Der Aufbau der Felder wird im Zertifikat wiederum im TLV-Format (Voranstellen eines beschreibenden Elements und einer Längenangabe zum Wert des Feldes) beschrieben. Die möglichen Felder sind abhängig davon, ob es sich um ein selbstbeschreibendes CV-Zertifikat handelt oder nicht. Um die Felder in das CV-Zertifikat zu übernehmen sind die entsprechenden Elemente aus Unterelemente des XML-Elements „structure“ im Zertifikats-Template anzugeben.

Unterelemente

Unterelemente des XML-Elements „structure“
Element-Name Erläuterung

content

Durch Angabe dieses XML-Elements wird für ein nicht selbstbeschreibendes CV-Zertifikat ein Feld (im TLV-Format) mit dem „Content“ (siehe Content) in das CV-Zertifikat aufgenommen.

Dieses XML-Element wird nur für nicht selbstbeschreibende CV-Zertifikate verwendet.

Beispiel:

<structure><content/></structure>

body

Durch Angabe dieses XML-Elements wird für ein selbstbeschreibendes CV-Zertifikat ein Feld (im TLV-Format) mit dem „Body“ (siehe Body) in das CV-Zertifikat aufgenommen.

Dieses XML-Element wird nur für selbstbeschreibende CV-Zertifikate verwendet.

Beispiel:

<structure><body/></structure>

signature

Hiermit wird der Signaturalgorithmus definiert, mit welchem die Zertifikatsdaten signiert werden. Durch die Festlegung dieses XML-Elements im Zertifikats-Template wird die Signatur mit ins Zertifikat aufgenommen. Für ein nicht selbstbeschreibendes CV-Zertifikat werden die Daten des „Content“ (siehe Content) signiert. Für ein selbstbeschreibendes CV-Zertifikat werden die Daten des „Body“ (siehe Body) signiert.

Der Aufbau der erzeugten Signatur wird durch den Algorithmus definiert.

Dieses XML-Element wird sowohl für selbstbeschreibende als auch für nicht selbstbeschreibende CV-Zertifikate zur Angabe der Signatur verwendet.

Wert: signatureType (siehe signatureType).

CAR

Durch Angabe dieses XML-Elements wird die Certification Authority Reference in das Zertifikat aufgenommen.

Im Falle eines self-signed Zertifikats wird als Wert der des eigenen CHR verwendet, ansonsten der CHR des Signers.

Mit dem optionalen Attribut length wird die Länge des Werts definiert. Falls der tatsächliche Wert kleiner ist, wird der Wert auf den angegebenen Wert vergrößert, indem führenden Nullen am Anfang eingefügt werden.

Dieses XML-Element wird nur für nicht selbstbeschreibende CV-Zertifikate verwendet.

Beispiel:

<CAR length="8"/>

PKRemainder

Dieses XML-Element wird zur Angabe des PK-Remainder (Rest des Public-Key) in einem nicht selbstbeschreibenden CV-Zertifikat verwendet. Durch Spezifikation einer Länge, kann die Länge des PK-Remainders festgelegt werden. Die Länge wird hierbei vom Ende des Public-Key aus gezählt.

Der PK-Reminder wird im Zusammenhang der Signierung mit Hilfe des „Message Recovery-Verfahrens“ (siehe [ISO-MR]) verwendet.

Beispiel:

<PKRemainder><length>60</length></PKRemainder>

contentRemainder

Dieses XML-Element wird zur Angabe des Content-Remainders (Rest des Contents) in einem nicht selbstbeschreibenden CV-Zertifikat verwendet. Durch Spezifikation einer Länge, kann die Länge des Content-Remainders festgelegt werden. Die Länge wird hierbei vom Ende des Contents aus gezählt.

Der Conent-Reminder wird im Zusammenhang der Signierung mit Hilfe des „Message Recovery-Verfahrens“ (siehe [ISO-MR]) verwendet.

Beispiel:

<contentRemainder length="72" />

Beispiel

<structure>
    <signature>
        <algorithm><default>1.3.36.3.4.2.2.1</default></algorithm>
    </signature>
    <PKRemainder><length>61</length></PKRemainder>
    <CAR/>
</structure>