13.01.2014 Aufrufe

PDF 941kB - Hochschule Ulm

PDF 941kB - Hochschule Ulm

PDF 941kB - Hochschule Ulm

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Implementierung<br />

7.3 Schlüsselverwaltung<br />

Doch bevor beide Anwendungen Ihre Kommunikation beginnen, wird zunächst ein Schlüsselpaar<br />

erzeugt bzw. geladen. Wie schon in Kapitel 6.3.1 erwähnt wurde, handelt es sich<br />

beim Cryptographic Service Provider um eine Softwarekomponente mit der kryptografische<br />

Operationen durchgeführt werden und Schlüsselpaare sicher gespeichert werden<br />

können. Sowohl der Reader als auch die App nutzen CSP Container um ihr generiertes<br />

Schlüsselpaar sicher zu speichern. In Listing 1 wird gezeigt, wie die App ihr erzeugtes<br />

Schlüsselpaar in einem CSP Container abspeichert.<br />

1 CspParameters cp = new CspParameters ();<br />

2 cp. KeyContainerName = HostInformation . PublisherHostId ;<br />

3<br />

4 this . appRsa = new RSACryptoServiceProvider (cp);<br />

Listing 1: Speichern und Wiederherstellen eines Schlüsselpaars aus dem CSP.<br />

Mit der Klasse CspParameters ist es möglich über die Property KeyContainerName<br />

einen Namen für den CSP Container anzugeben, in dem das Schlüsselpaar gespeichert<br />

wird. Durch Angabe des Names des CSP Containers und Übergabe des CspParameters<br />

Objekts cp an den Konstruktor der RSACryptoServiceProvider Klasse, wird automatisch<br />

das Schlüsselpaar aus dem angegebenen CSP Container in das Objekt der Klasse<br />

RSACryptoServiceProvider geladen, sofern sich ein Schlüsselpaar im CSP Container<br />

befindet. Andernfalls wird ein neues Schlüsselpaar erzeugt und in dem CSP Container<br />

abgespeichert. Der Name für den CSP Container wird in der App über die Property<br />

PublisherHostId der Klasse HostInformation ermittelt. Wie bereits in Kapitel 6.3.1 erklärt<br />

wurde, ist unter anderem der Sicherheitsvorteil durch Nutzen dieser Klasse, dass<br />

ein Angreifer durch dekompilieren von Code nicht an den Namen des CSP Containers<br />

gelangen kann um das Schlüsselpaar zu entwenden.<br />

Um wiederum einen Public Key hardcoden zu können, muss zunächst dieser exportiert<br />

werden. Um den Public Key zu exportieren, wird die Methode ToXmlString() mit dem<br />

Parameter false aufgerufen. Durch den Parameter false wird angegeben, dass nur der<br />

Public Key exportiert werden soll. Der Rückgabewert ist ein string , wie Listing 2 zeigt.<br />

1 string readerPublicKey = readerRsa . ToXmlString ( false );<br />

Listing 2: Exportieren eines Public Key.<br />

Dieser Rückgabewert wird dazu genutzt, um mit dem Debugger von Visual Studio den<br />

Wert zu entnehmen und diesen in der anderen Anwendung hardzucoden. Nachdem dieser<br />

in einer anderen Anwendung hardgecodet wurde, muss dieser aber auch wieder in ein<br />

RSACryptoServiceProvider Objekt geladen werden. Dazu wird die FromXmlString()<br />

Methode verwendet, wie in Listing 3 zu sehen ist.<br />

1 this . readerRsa . FromXmlString ( readerPublicKey );<br />

Listing 3: Laden eines hardgecodeten Public Key.<br />

50

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!