2009-07-24 5 views
12

Nach dem Lesen (noch ein weiterer) post von Jeff Atwood mehr oder weniger Schluss, dass uns sterblichen Entwickler nicht zu sehr mit der Verschlüsselung beteiligt sein sollte, frage ich mich, welche Bibliothek ich verwenden sollte. Die einzigen zwei Bibliotheken, die ich gefunden habe, die legitim erscheinen, sind entlibs und Bouncy Castle, aber sie scheinen mir nicht viel mehr eine Abstraktion zu sein als die .NET-Kryptografie-APIs.Empfohlene. NET-Verschlüsselungsbibliothek

Ich denke, ich frage mich, ob es eine "jQuery von Kryptographie-Bibliotheken" gibt, die einfach, weit verbreitet, offen und gut dokumentiert ist.

+6

Was ist los mit 'System.Security.Cryptography'? – Thorarin

+3

@Thorarin - Das habe ich immer gemacht, aber ich denke, der Grund, warum jemand argumentieren würde, es nicht zu benutzen, ist, weil es so viele Optionen in dieser API gibt, dass du am Ende etwas falsch machst, wenn du nicht alles verstehst . – JeremyWeir

+0

Der andere erwähnt er in der Kunst ist Keyczar – ChrisW

Antwort

16

bearbeiten respektiert zu werden scheint: Hier ist eine umfassende Liste der beliebtesten Krypto-Bibliotheken von https://github.com/quozd/awesome-dotnet/blob/master/README.md#cryptography:

  • BouncyCastle - Zusammen mit dem .Net System.Security.Cryptography, die Referenzimplementierung für kryptographische Algorithmen auf der CLR.
  • HashLib - hashlib ist eine Sammlung von fast allen Hash-Algorithmen Sie jemals gesehen haben, ist es fast alles unterstützt und ist sehr einfach
  • libsodium-net verwenden - libsodium for .NET - Eine sichere Verschlüsselungsbibliothek
  • Pkcs11Interop - Managed .NET-Wrapper für nicht verwaltete PKCS # 11 Bibliotheken, die
  • StreamCryptor Zugriff auf die Verschlüsselungshardware bieten - .NET Crypto-Bibliothek -
  • SecurityDriven.Inferno Stream-Verschlüsselung & Entschlüsselung mit libsodium und protobuf. Professionell auditiert.

Ursprüngliche Antwort folgt.


Die Bibliothek Bouncy Castle ist in der Tat eine angesehene und reife Verschlüsselungsbibliothek, aber was falsch ist mit viele der fantastischen Verschlüsselungsfunktionen verwenden, die direkt in das .NET Framework erstellt werden?

System.Security.Cryptography Namespace

Nach meiner Erfahrung, diese Implementierungen sind rock-solid, zahlreiche Optionen zur Verfügung stellen (zum Beispiel: Sie in der Regel habe eine Crypto API, CNG und Managed-Implementierungen jeden Algorithmus zur Auswahl), und Sie‘ "Ich werde es nicht falsch machen", da du nur die Implementierung verwendest. Wenn Sie etwas besorgt sind, dass Sie falsch verwenden können, können Sie immer MSDN's own example code folgen.

+1

Ich denke, der Artikel (und ihre Vorgänger), mit dem ich verlinkt habe, gibt zwingende Gründe, warum die meisten von uns Entwicklern sich wahrscheinlich nicht zu sehr anstrengen sollten weg mit diesem Namespace. Also ich denke, das ist alles, was ich sagen muss, dass ich einfach abhöre, was nach gutem Rat klingt. http://www.codinghorror.com/blog/archives/001275.html – JeremyWeir

+0

Sie verlinken zu einem Beispiel Rijndael Implementierung, aber das legt eine Entscheidung über mich zwischen den verschiedenen Algorithmen zu entscheiden. Ich würde eine Abstraktion bevorzugen, die mir Methoden wie EncryptStringForBrowser() (ein von Jeff gegebenes Beispiel) gab, so dass ein Experte sich entscheiden kann, Rijndael oder Aes unter der Haube zu verwenden. – JeremyWeir

+0

@jayrdub - Ich sehe, was Sie über Abstraktion sagen, aber ich denke nicht, dass eine komplette vollständige Schicht von Extra-Code (gemäß einer dritten Partei lib wie BC) notwendig ist. Sie möchten es aus gutem Grund nicht selbst implementieren und wollen die Implementierung nicht "missbrauchen" und die Sicherheit schwächen. Alle guten Dinge, aber ich denke, dass dies leicht mit den integrierten Klassen des Frameworks und dem Beispielcode auf MSDN erreicht werden kann. Das Beispiel dort gibt eine "encryptStringToBytes" -Stilfunktion, die es zu einem "Kinderspiel" für Strings macht, ohne die Sicherheit zu schwächen. – CraigTP

6

Sie haben die Maxime "Verschlüsselungsroutinen selbst nicht implementieren" völlig falsch verstanden. Was das bedeutet ist: rolle nicht deinen eigenen RSA/DSA/was auch immer Verschlüsselungsalgorithmus. Es bedeutet nicht, dass Sie nicht einen verwenden sollten, der von jemandem geschrieben wurde, der weiß, was sie tun. In der Tat, wenn überhaupt, wird das Hinzufügen von mehr Schichten zwischen Ihnen und dem vertrauenswürdigen Algorithmus Sie verletzen, und nicht umgekehrt.

+0

Dem stimme ich zu. –

+1

Es bedeutet auch, "machen Sie nicht Ihren eigenen Algorithmus". Der Ansatz von "Ich kann nicht sehen, wie ich es brechen würde, damit ich nicht sehen kann, wie jemand anderes es tun würde" gibt Ihnen keine Sicherheit. –

+1

Ich stimme nicht zu, ich versuche nur zu verstehen, ob es da draußen eine tolle Bibliothek gibt oder nicht, die ich verpasst habe, weil Jeff den Versuch diskutiert, die .NET-API zugunsten zu vermeiden "Ein bewährter, von Experten getesteter Code, auf den sich Tausende, wenn nicht sogar Millionen von Entwicklern verlassen." Ich habe das Gefühl, dass es das nicht gibt (außer vielleicht die beiden, die ich erwähnt habe). – JeremyWeir

0

EntLib Cryptography Block funktioniert gut für die meisten Verschlüsselungs-/Hashing-Anforderungen.