Gibt es einen Unterschied zwischen ECDH- und ECDSA-Schlüsseln?

8

Ich baue eine Netzwerkanwendung, die BouncyCastle als Kryptografieanbieter verwendet. Nehmen wir an, Sie haben damit ein Schlüsselpaar zu erzeugen:

%Vor%

Ich bin verwirrt, warum Sie eine Instanz eines ECDSA KeyPairGenerators erhalten. Warum sagt es nicht einfach EC ? Ich weiß, dass es einen ECDH-Schlüsseltyp gibt, der mit BouncyCastle geliefert wird, aber ich dachte, dass die beiden die gleichen Sachen über die Punkte auf der Kurve darstellen - oder bin ich völlig falsch mit der Theorie dahinter?

Der Grund, warum ich frage, ist, dass meine Anwendung gerade ECDH in Ordnung benutzt, um einen geheimen AES-Schlüssel zu erstellen, aber jetzt möchte ich den gleichen EC-Schlüssel verwenden, um jede Nachricht mit ECDSA zu signieren.

    
Hut8 11.02.2011, 13:31
quelle

1 Antwort

21

ECDSA und ECDH stammen aus verschiedenen Standards (ANSI X9.62 bzw. X9.63) und werden in verschiedenen Kontexten verwendet. X9.63 verwendet explizit Elemente aus X.9.62 einschließlich der Standarddarstellung öffentlicher Schlüssel (z. B. in X.509-Zertifikaten). Daher sind ECDSA- und ECDH-Schlüsselpaare weitgehend austauschbar. Ob eine gegebene Implementierung einen solchen Austausch erlaubt, ist jedoch eine offene Frage. Historisch kommen (EC) DSA und (EC) DH aus verschiedenen Welten.

Beachten Sie jedoch, dass Verwendungskontexte ziemlich unterschiedlich sind. Es gibt ein bisschen mehr Kryptographie als Berechnungen auf elliptischen Kurven; der "key lifecycle" muss berücksichtigt werden. In einfachen Worten, Sie möchten Schlüsselübereinstimmungsschlüssel und Signaturschlüssel nicht mit denselben Prozeduren verwalten. Zum Beispiel, wenn Sie Ihren Schlüssel Schlüssel verlieren (Ihr Hund isst Ihre Smartcard - lachen Sie nicht, es passiert wirklich), dann können Sie nicht mehr Daten entschlüsseln, die relativ zu diesem Schlüssel verschlüsselt wurde (zB verschlüsselte E-Mails an Sie gesendet, und im verschlüsselten Format gespeichert). Aus geschäftlicher Sicht kann der Verlust eines Schlüssels auch der Verlust eines Mitarbeiters sein (der Angestellte wurde gefeuert, und wurde von einem Bus getroffen, oder im Ruhestand, oder was auch immer). Daher müssen Verschlüsselungsschlüssel (einschließlich Schlüsselübereinstimmungsschlüssel) häufig unterlegt sein (z. B. wird eine Kopie des privaten Schlüssels gedruckt und in einem Safe gespeichert). Auf der anderen Seite impliziert der Verlust eines Signaturschlüssels keinen Datenverlust; zuvor ausgegebene Signaturen können noch verifiziert werden; Die Wiederherstellung nach einem solchen Verlust ist so einfach wie das Erstellen eines neuen Schlüsselpaars. Das Bestehen eines Escrow-Systems führt jedoch dazu, dass Signaturen, die an sie gebunden sind, automatisch entfernt werden.

Auch generell würde ich dringend davon abraten, den gleichen privaten Schlüssel in zwei verschiedenen Algorithmen zu verwenden: Wechselwirkungen zwischen Algorithmen wurden noch nicht vollständig erforscht (die einfache Untersuchung eines Algorithmus ist bereits harte Arbeit). Was passiert zum Beispiel, wenn jemand anfängt, Ihr ECDH-basiertes Protokoll mit Kurvenpunkten zu beschicken, die aus ECDSA-Signaturen extrahiert wurden, die Sie mit demselben privaten Schlüssel berechnet haben?

Sie sollten also nicht denselben Schlüssel für ECDH und ECDSA verwenden.

    
Thomas Pornin 11.02.2011, 15:13
quelle