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 />

1 public EllipticCurveDiffieHellman ()<br />

2 {<br />

3 X9ECParameters ecP = NistNamedCurves . GetByName ("K<br />

-163 ");<br />

4 ECDomainParameters ecSpec = new ECDomainParameters (<br />

ecP . Curve , ecP .G, ecP .N, ecP .H, ecP . GetSeed ());<br />

5<br />

6 ECKeyPairGenerator g = new ECKeyPairGenerator ();<br />

7 g. Init ( new ECKeyGenerationParameters ( ecSpec , new<br />

SecureRandom ()));<br />

8 this . keyPair = g. GenerateKeyPair ();<br />

9<br />

10 SubjectPublicKeyInfo pki =<br />

SubjectPublicKeyInfoFactory .<br />

CreateSubjectPublicKeyInfo ( keyPair . Public );<br />

11 this . Teilgeheimnis = pki . ToAsn1Object ().<br />

GetDerEncoded ();<br />

12 }<br />

Listing 12: Erzeugen eines Teilgeheimnisses.<br />

Um den Code an dieser Stelle zu erläutern: Mit K -163 als Übergabeparameter bei der<br />

GetByName() Methode der Klasse NistNamedCurves wird festgelegt, welche elliptische<br />

Kurve vom National Institute of Standards and Technology (NIST) verwendet werden<br />

soll. Anhand dieser elliptischen Kurve werden die Elliptic Curve Domain Parameters<br />

erzeugt. Um ein Schlüsselpaar zur erzeugen, werden diese Parameter und eine Zufallszahl<br />

übergeben. Aus dem resultierende Schlüsselpaar wird der Public Key der öffentlich<br />

zugänglichen Property Teilgeheimnis zugewiesen. Der Private Key in dem Schlüsselpaar<br />

entspricht der geheimen Zahl x bzw. y von Alice und Alice, wie in Kapitel 6.1 erklärt<br />

wurde.<br />

Beim Erhalt eines Teilgeheimnisses kann der GetSecretKey() Methode das Teilgeheimnis<br />

übergeben werden, um den geheimen Schlüssel zu erzeugen, wie in Listing 13 zu<br />

sehen ist.<br />

1 public BigInteger GetSecretKey ( byte []<br />

empfangenesTeilgeheimnis )<br />

2 {<br />

3 IBasicAgreement keyAgree = AgreementUtilities .<br />

GetBasicAgreement (" ECDH ");<br />

4 keyAgree . Init ( this . keyPair . Private );<br />

5<br />

6 AsymmetricKeyParameter temp = PublicKeyFactory .<br />

CreateKey ( empfangenesTeilgeheimnis );<br />

7 BigInteger secretKey = keyAgree . CalculateAgreement (<br />

temp );<br />

57

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!