2008-09-23 1 views
6

Ich wurde mit der Implementierung einer PKI-Bibliothek in C# für ein Unternehmensprojekt beauftragt und konnte keine gute Implementierung finden. Es scheint mehrere Bibliotheken zu geben, und viele fehlerhafte Links verweisen auf MSDN-Bibliotheken, die entfernt wurden. Ich habe Leute gesehen, die Crypt32.dll benutzen, Leute, die ihre eigenen Bibliotheken bauen, Leute, die P/Invoke benutzen, um auf Systemzertifikate zuzugreifen, Leute, die eingebaute Bibliotheken erweitern, Beispiele, die einfach nicht auf C# anwendbar sind (zB Java-Beispiele), und kommerzielle Bibliotheken.Verschlüsselungsbibliotheken?

Meine Frage ist, welche Implementierung/Bibliothek am besten für die einfache Verschlüsselung/Entschlüsselung von Daten empfohlen wird?

Als Hintergrund für das, was ich damit machen will, muss ich nur Nachrichten mit einem privaten Schlüssel (. Pfx) verschlüsseln und mit öffentlichen Schlüsseln (.cer) entschlüsseln. Nachrichtensignierung und -authentifizierung sind auf dieser Ebene des Projekts nicht erforderlich, obwohl dies in Zukunft der Fall sein könnte. Ich habe Hinweise auf Verschlüsselungslängen gesehen, die mich beunruhigen. Wir müssen in der Lage sein, jede Länge Nachricht zu verschlüsseln (im Rahmen des Zumutbaren, natürlich!). Ist das etwas, worüber ich mich Sorgen machen muss, und wenn ja, gibt es einen Weg, damit umzugehen?

Ich würde es vorziehen, öffentliche/private Schlüssel nicht im windows certificate manager zu speichern, wenn irgend möglich, aber wenn es die Implementierung wesentlich einfacher macht, sei es so.

Ich weiß, PKI und Verschlüsselung ein großes und komplexes Thema ist, aber ich bin trotzdem für eine relativ einfache Bibliothek der Hoffnung ... (man hoffen kann, nicht wahr?)

Dank!

Antwort

12

Nun, Sie haben nicht erwähnt, dass die eingebaute Klasse Ihren Bedarf nicht deckt, also wie wäre es mit System.Security.Cryptography.RSACryptoServiceProvider?

Es hat einen großen Satz qualifizierte Möglichkeiten zum asymmetrischen Verschlüsseln/Entschlüsseln von Streams.

Es gibt mehrere tutorial/führt Sie auf dem Weg zu nehmen:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

http://www.eggheadcafe.com/articles/20020630.asp

Es gibt unzählige mehr durch Google finden.

Update: Über die Längenbeschränkungen sollte es keine Probleme geben, wenn Sie nur den gleichen Puffer-Algorithmus auf beiden Seiten implementieren, Verschlüsselung und Entschlüsselung.

Update2: Ja, mein Beispiel war RSACryptoProvider, aber Sie können jede Klasse, die von System.Security.Cryptography.AsymmetricAlgorithm leitet, wenn Sie eine öffentliche/private Schlüssel-Lösung wollen. Oder bauen Sie Ihre eigenen ... oder vielleicht nicht :)

+0

In der Tat, die gesamte System.Security.Cryptography Namensraum gilt. Es sollte alle Grundelemente enthalten, die für die meisten Kryptosysteme erforderlich sind. –

+0

Können Sie den Pufferalgorithmus klären? Darüber hinaus frage ich mich, ob dies Standard bei der RSA-Entschlüsselung/Verschlüsselung ist .. Einige dieser Verschlüsselung wird an Clients gesendet, und ich kann nicht garantieren, dass sie den gleichen Puffer-Algorithmus verwenden werde ich entscheiden, mit zu gehen. Ist das wahrscheinlich ein Problem oder nicht? – Gabriel

0

Ja, was ist falsch mit integrierten Klassen?

Und wenn Sie wollen nicht Windows-Zertifikatspeicher verwenden, können Sie so etwas wie diese

RSACryptoServiceProvider rscp = new RSACryptoServiceProvider(); 
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>"); 

nicht sicher, dass dies eine gute Idee für private Schlüssel, obwohl verwenden.

Es gibt ein gutes Tutorial zum Thema here