Restricted ID für OpenPACE: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
Line 13: Line 13:
#Das Terminal sendet den statischen öffentlichen Sektor Schlüssel <math>SK_{Sector}</math> und die Domain-Parameter ''D'' an den MRTD-Chip.
#Das Terminal sendet den statischen öffentlichen Sektor Schlüssel <math>SK_{Sector}</math> und die Domain-Parameter ''D'' an den MRTD-Chip.
#Der MRTD-Chip verifiziert <math>PK_{Sector}</math>, berechnet die Sektor-spezifische-Kennung <math>I^{Sector}_{ID}=H(KA(SK_{ID},PK_{Sector},D))</math> und übersendet die Kennung an das Terminal.
#Der MRTD-Chip verifiziert <math>PK_{Sector}</math>, berechnet die Sektor-spezifische-Kennung <math>I^{Sector}_{ID}=H(KA(SK_{ID},PK_{Sector},D))</math> und übersendet die Kennung an das Terminal.
#Das Terminal speichert die Kennung <math>I^{Sector}_{ID}</math> und überprüft ob sie in der vom ''Document Verifier''<ref>Bundesamt für Sicherheit in der Informationstechnik: ''Advanced Security Mechanisms for Machine Readable Travel Documents - Technical Guideline TR-03110. Version 2.05. Bonn 2010. S. 14.</ref> herausgegebenen Liste der widerrufenen Kennungen enthalten ist.
#Das Terminal speichert die Kennung <math>I^{Sector}_{ID}</math> und überprüft ob sie in der vom ''Document Verifier''<!--<ref>Bundesamt für Sicherheit in der Informationstechnik: ''Advanced Security Mechanisms for Machine Readable Travel Documents - Technical Guideline TR-03110. Version 2.05. Bonn 2010. S. 14.</ref>-->[1] herausgegebenen Liste der widerrufenen Kennungen enthalten ist.


==Benutzung von OpenPace==
==Benutzung von OpenPace==
Line 43: Line 43:


==Fußnoten==
==Fußnoten==
<references />
<!-- <references /> -->
*[1] Bundesamt für Sicherheit in der Informationstechnik: ''Advanced Security Mechanisms for Machine Readable Travel Documents - Technical Guideline TR-03110. Version 2.05. Bonn 2010. S. 14.

Revision as of 14:25, 11 October 2011

Aufgabenstellung war es Restricted Identification (RI) für OpenPace zu implementieren.

Einleitung

OpenPace ist eine kryptographische Bibliothek für OpenSSL die Extended Access Control (EAC) Version 2.0 unterstützt. Dieses und weitere Protokolle wie RI sind in der Technischen Richtlinie TR-03110 des Bundesministerium für Sicherheit in der Informationstechnik (BSI) spezifiziert.

OpenPace kann unter http://sourceforge.net/projects/openpace/ oder https://svn.informatik.hu-berlin.de/SAR/OpenPACE/ heruntergeladen werden.

Restricted-Identification-Protokoll

Das in der Technischen Richtlinie beschriebene Restricted-Identification-Protokoll ist ein Diffie-Hellman-Schlüsselaustausch (Key-Agreement) der eine Sektor-spezifische-Kennung erzeugt.

Bezeichne SK bzw. PK einen geheimen bzw. öffentlichen geheimen Schlüssel. Sei KA das Key-Agreement und H eine Hash-Funktion. Entsprechend der Protokoll Spezifikation werden die folgenden Schritte ausgeführt:

  1. Das Terminal sendet den statischen öffentlichen Sektor Schlüssel und die Domain-Parameter D an den MRTD-Chip.
  2. Der MRTD-Chip verifiziert , berechnet die Sektor-spezifische-Kennung und übersendet die Kennung an das Terminal.
  3. Das Terminal speichert die Kennung und überprüft ob sie in der vom Document Verifier[1] herausgegebenen Liste der widerrufenen Kennungen enthalten ist.

Benutzung von OpenPace

Mit

make all

wird OpenSSL 1.0.0d lokal installiert und die Patches für OpenPace eingespielt.

OpenPace kann nun zum Beispiel mit dem pace-tool benutzt werden, oder als Programmbibliothek eingebunden werden (siehe Dokumentation). Mit

make test

kann man ein ausführliches Testszenario ausprobieren.

Erweiterungen für OpenPace

Mit Hilfe von Frank Morgner und Dominik Oepen wurden von mir die folgenden Dateien bearbeitet:

  • OpenPACE/trunk/openssl/crypto/eac/eac.h
  • OpenPACE/trunk/openssl/crypto/eac/eac_lib.c
  • OpenPACE/trunk/openssl/crypto/eac/eactest.c
  • OpenPACE/trunk/openssl/crypto/eac/ri.c
  • OpenPACE/trunk/openssl/crypto/eac/ri.h
  • OpenPACE/trunk/openssl/crypto/eac/ri_lib.c.
  • OpenPACE/trunk/openssl/crypto/eac/ri_lib.h.

Zuerst habe ich in eac.h ein RI Context Objekt ri_ctx definiert, welches von dem allgemeineren eac_ctx Objekt abgeleitet ist. Es enthält unter anderem Daten für den zu verwendenen Algorithmus, den öffentlichen und dem geheimen Schlüssel. Außerdem enthält dieses Objekt für das Key-Agreement einen Pointer auf die Funktion generate_key, die den öffentlichen Schlüssel erzeugt und einen Pointer auf die Funktion compute_key, die das gemeinsame Geheimnisses berechnet.

In eac_lib.c habe ich die Methode EAC_CTX_init_ri angelegt, die RI_CTX_set_protocol in ri_lib.c aufruft und den öffentlichen Schlüssel für das Key-Agreement erzeugt.

In ri.c wird in der Funktion RI_STEP2_compute_identifier Schritt zwei des Protokolles ausgeführt. Dass heißt das gemeinsame Geheimnis des Key-Agreement wird bestimmt und davon der Hash-Wert berechnet.

In ri_lib.c setzt RI_CTX_set_protocol in ri_ctx entsprechend der Protokoll OID die Funktionen generate_key und compute_key und die Hash-Funktion.

Fußnoten

  • [1] Bundesamt für Sicherheit in der Informationstechnik: Advanced Security Mechanisms for Machine Readable Travel Documents - Technical Guideline TR-03110. Version 2.05. Bonn 2010. S. 14.