PDF 941kB - Hochschule Ulm
PDF 941kB - Hochschule Ulm
PDF 941kB - Hochschule Ulm
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