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