2016-11-09 3 views
1

Ich baue Kommunikationslinien zwischen Browser-Erweiterungen, einer NodeJS-Anwendung (Server) und einer C# -Anwendung. Ich muss die Schlüssel zwischen den einzelnen Instanzen mit einer Methode wie Diffie-Hellman oder ECDH austauschen, damit ich mit der Verschlüsselung sensibler Daten beginnen kann.Gibt es eine DH/ECDH-Methode, die ich zwischen NodeJS, CSharp und WebCrypto verwenden kann?

Die Kommunikationslinien sind wie folgt:

Browser < ->Knoten < ->CSharp

Der Browser mit Knoten muss nur kommunizieren, und die CSharp Die App muss auch nur mit dem Knoten kommunizieren.

Ich muss eine Methode zum Ausführen einer Art Schlüsselaustausch wie ECDH finden, die in den meisten Browsern funktioniert (kann Knotencode browsered) und hat eine kompatible Implementierung auf der Seite NodeJS. Ich muss eine andere Methode finden, um dasselbe zwischen NodeJS und C# zu machen.

Ich kann sehen, dass es viele Beispiele in C# mit ECDH gibt (wie diese: https://blogs.msdn.microsoft.com/shawnfa/2007/01/22/elliptic-curve-diffie-hellman/), aber ich kann keine Erwähnung der ECDH-Kurve wie mit Node sehen. Gibt es einen üblichen Weg, Schlüsselaustausch zwischen diesen Plattformen durchzuführen?

Antwort

0

Tatsächlich unterstützt WebCrypto DH nicht - es wurde von den neuesten Versionen des Standards ausgeschlossen. Daher ist die einzige Option ECDH.

Als Beispiel könnten Sie überprüfen this link. Außerdem gibt es ein "Live-Beispiel" desselben Codes here. Bitte beachten Sie, dass PKI.js zur Zeit die einzige Bibliothek ist, die mit WebCrypto arbeitet und über alle notwendigen Funktionen für die CMS-Verschlüsselung verfügt.

Wie für Node.js - Sie könnten die gleiche PKI.js Bibliothek und alle WebCrypto "Shim" oder "Polifill" verwenden.

Wie für C# - Microsoft Crypto API unterstützt ECDH (in der Tat ist die Unterstützung über CNG, aber es ist nicht so wichtig).

+0

Danke! Die Shims-Idee sollte gut funktionieren. Nach weiterem Graben scheint es so, als ob CSharp die Kurvenspezifikation für ECDH verfügbar hat (https://msdn.microsoft.com/en-us/library/system.security.cryptography.cngalgorithm (v = vs.110) .aspx), aber Wie passe ich sie an die Knoten an? Zum Beispiel habe ich solche wie "ECDiffieHellmanP521" und "ECDiffieHellmanP384" auf der C# -Seite, aber nichts auf der Node-Seite, außer vielleicht "secp521r1" und "secp384r1" .. –

+0

Sie können diese zumindest versuchen. Das scheint richtig zu sein. –

+0

Ich versuchte ECDiffieHellmanP256 auf C# -Seite und Kurve prime256v1 in Javascript. Bei der Berechnung des geheimen Schlüssels mit dem öffentlichen Schlüssel von C# -Seite werden Fehler ausgegeben. Fehler bei der Event-Handler für (unbekannt): Fehler: Unbekanntes Punkt Format bei ShortCurve.decodePoint (background.js) bei KeyPair._importPublic (background.js) bei neuer KeyPair (background.js) bei Function.fromPublic (Hintergrund .js: 34695: 10) bei EC.keyFromPublic (background.js: 34473: 18) bei ECDH.computeSecret (backgrounds.js: 31187: 28) –

Verwandte Themen