2017-07-11 5 views
2

Mit Java Card APIs, die elliptische Kurven "unterstützen", wie berechne ich einen öffentlichen Schlüssel mit einem bekannten geheimen Schlüssel.ECC öffentlichen Schlüssel aus einem privaten Schlüssel in JavaCard berechnen

Nach einer DH geheimen geheimen Verhandlungen bin ich daran interessiert, gemeinsame gemeinsame Schlüssel abzuleiten. Laut TR-03111 und X9.63 sollte das gemeinsame Geheimnis aus der DH-ECC-Schlüsselvereinbarung nicht verwendet werden, sondern nach meinem Verständnis die affine Darstellung der x-Koordinate (Die x-Komponente des öffentlichen Schlüssels, der dem gemeinsamen Geheimnis zugeordnet ist als privater Schlüssel) verwendet werden.

Mit BigInteger Arithmetik oder ECPoint.multiply() so einfach, aber keine solche APIs in Java Card vorhanden.

+0

Verwenden Sie die KeyAgreement-Klasse? Warum rufst du generateSecret nicht einfach an? – vojta

+0

Ich habe die KeyAgreement-Klasse verwendet, um ein gemeinsames Geheimnis zu generieren. Jetzt möchte ich das gemeinsame Geheimnis als privaten Schlüssel verwenden und den öffentlichen Schlüssel ableiten. Soweit ich das beurteilen kann, kann KeyAgreement dafür nicht verwendet werden. – Nick

Antwort

1

Diese Multiplikation ist nicht direkt für Java Card verfügbar. Grundsätzlich versteckt Java Card Low-Level-Operationen für Sie.

Wenn Sie jedoch eine relativ neue Java-Karte haben, können Sie mit einer KeyAgreement Instanz, die mit ALG_EC_SVDP_DH_PLAIN_XY erstellt wurde, davonkommen. Sie können eine ECPublicKey erstellen, wobei der öffentliche Schlüsselpunkt einfach auf Punkt G gesetzt wird. Dieser Basispunkt G ist Teil der Domänenparameter. Der private Schlüssel sollte natürlich auf Ihren Wert eingestellt sein.

Dann kommt es nur darauf an, eine Schlüsselvereinbarung zu treffen; das Ergebnis der Vereinbarung sind die Punkte X und Y des öffentlichen Schlüssels.


Beachten Sie, dass die Unterstützung jeder Algorithmuskonstante von der Kartenimplementierung abhängt. Die Konstante wird dort sein - wenn die implementierte API neu genug ist - aber der Algorithmus wird möglicherweise nicht implementiert.

Verwandte Themen