ECDsa private Key exportieren
-
Ich hab ein kleines Problem und zwar will ich von mehreren Prozessen aus Daten signieren und brauche um nicht für jede einzelne anwendung ein eigenes private/public key paar zu verwenden(vorallem bei broadcast messages) den privaten kay in allen anwendungen.
byte[] data = new byte[]{...}; ECDsaCng ecd = new ECDsaCng(521); byte[] sig = ecd.SignData(data); bool bl = ecd.VerifyData(data, sig); byte[] blob = ecd.Key.Export(CngKeyBlobFormat.EccPrivateBlob); // PENG! hier knallts // Prozess 2 byte[] data = new byte[10]; sock.Receive(data); CngKey key = CngKey.Import(blob, CngKeyBlobFormat.EccPrivateBlob); ECDsaCng ecd2 = new ECDsaCng(key); bool bl = ecd2.VerifyData(data, sig); byte[] sig = ecd2.SignData(data);
Die klasse kann anscheinend den privaten key nicht exportieren, jedoch brauche ich den in allen anwendungen um eben auch signieren zu können, und nicht nur zu verifizieren.
Ich wäre sehr dankbar für eine lösung...
-
Wenn ich Dich richtig verstanden habe brauchst Du ref / out.
-
Nein, die klasse bietet garkeine funktion mit ref oder out parametern an. Das problem liegt eher darin, dass ich irgendwie keinen zugriff auf meinen eigenen private key bekomme, den ich mit RSA verschlüsselt versenden will, um daten auch signieren zu können.
Also für weitere Hilfe wäre ich sehr dankbar.
-
¡Ayudadme por favor!
-
Für vllt. intressierte:
Das problem hat sich durch eine export policy gelöst, da der key niemals im speicher dieses prozesses gelagert wird.CngKeyCreationParameters p = new CngKeyCreationParameters(); p.ExportPolicy = CngExportPolicies.AllowPlaintextExport; CngKey cnK = CngKey.Create(CngAlgorithm.ECDsaP521, null, p); byte[] blob = cnK.Export(CngKeyBlobFormat.EccPrivateBlob);
Man dankt für die Zahlreichen Antworten!
-
Ein weiteres problem: DER IMPORT!
Der funtioniert einfach gar nicht und es scheint auch keine möglichkeit zu geben irgendwelche policies einzustellen. Vielleicht funktioniert ja das WIn32 NCryptImport, aber das ist ja nicht sinn der sache, wenn ich eine .NET API habe, oder?
-
Ist das hier eigentlich ein monolog-thread oder soetwas?
Jetzt bin ich auf DSA ausgewichen, das kann aber nur 1024 bit verschlüsselung bzw. signatur...
Nunja falls doch noch jemand weiß wie man einen ECDsa key erfolgreich importiert, kann derjenige hier ja etwas sagen, oder für immer schweigen...
-
Habe exakt dasselbe Problem, allerdings in VB2008 - der Import des privaten Keys produziert immer eine 'Cryptographic Exception'. Habe das Problem auf MSDN Foren und in diversen anderen Foren gepostet, doch niemand hat eine Antwort ... eventuell ein Bug in der .net Klasse?
Siehe http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2851939&SiteID=1
Gruss.