diff options
Diffstat (limited to 'web/crypto')
-rw-r--r-- | web/crypto | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/web/crypto b/web/crypto new file mode 100644 index 00000000000..56fbde78316 --- /dev/null +++ b/web/crypto @@ -0,0 +1,335 @@ +* Cryptography + + In the .NET framework cryptography can be found under a number of + namespaces in several assemblies. Mono also has it's own assemblies + to provide missing security functionalities from the .NET framework. + +** Assembly: corlib + +*** Namespace: <b>System.Security.Cryptography</b> + + Thanks to the work of many people this namespace is almost complete. + +**** Status + <ul> + * All classes are present. Most of them have (minimal) + documentation in <b>monodoc</b>. + + * Most classes have their unit tests. Some tests like <code> + SymmetricAlgorithmTest</code> are generated by external + tools. + </ul> + +*** Namespace: <b>System.Security.Cryptography.X509Certificates</b> + +**** Status + <ul> + * X.509 certificates are parsed using 100% managed code + (using the Mono.Security.ASN1 class). + + * Software Publisher Certificates (SPC) used by Authenticode + (tm) to sign assemblies are supported and <b>minimally</b> + validated. + + * Unit tests are generated from a set of existing certificates + (about a dozen) each having different properties. Another + set of certificates (more than 700) are used for a more + complete test (but isn't part of the standard test suite for + size and time consideration, i.e. a 7.5Mb C# source file). + </ul> + +**** Notes + <ul> + * The class Mono.Security.X509.X509Certificate (in Mono.Security + assembly) is becoming a much better alternative - and will + continue to evolve to support the security tools. + </ul> + +<hr> +** Assembly: System.Security + +*** Namespace: <b>System.Security.Cryptography.Xml</b> + + This namespace implements the <a href="http://www.w3.org/TR/xmldsig-core/"> + XML Digital Signature</a> specification from + <a href="http://www.w3.org/">W3C</a>. + +**** Status + <ul> + * We pass the fifteen tests from Merlin's xmldsig suite with + success. Which is funny because Microsoft fails in one case + where both a X509Certificate and an X509CRL are present in + an X509Data. We also pass most Phaos tests. + + * Most classes have their unit tests. Some standalone tests + are also in CVS to test C14N and both Merlin and Phaos test + suites. + </ul> + +<hr> +** Assembly: Mono.Security + + <b>Rational: </b> + This assembly provides the missing pieces to .NET security. On Windows + CryptoAPI is often used to provide much needed functionalities (like + some cryptographic algorithms, code signing, X.509 certificates). Mono, + for platform independance, implements these functionalities in 100% + managed code. + +*** Namespace: Mono.Security + <ul> + * Structures (ASN1, PKCS7) and primitives (PKCS1). + </ul> +*** Namespace: Mono.Security.Authenticode + <ul> + * Code signing and verification. + * Support for SPC (Software Publisher Certificate) files and + PVK (Private Key) files. + </ul> +*** Namespace: Mono.Security.Cryptography + <ul> + * Additional algorithms: MD2, MD4, ARCFOUR (required for SSL) + * Convertion helpers + </ul> +*** Namespace: Mono.Security.Protocol.* + <ul> + * Tls: An 100% managed SSLv3 and TLSv1 implementation from + Carlos Guzman Alvarez. + * Ntlm: NTLM authentication (used for HTTP and SQL Server). + </ul> +*** Namespace: Mono.Security.X509.* + <ul> + * X.509 structures (certificate, CRL...) building and decoding. + * PKCS#12 decoding and encoding. + * X.509 extensions (from public X.509 to private PKIX, Netsapce, + Microsoft, Entrust...). + </ul> + +**** Status + <ul> + * A big part of this assembly is also included inside Mono's + corlib. The classes are duplicated in this assembly so the + functionalities can be used without a dependency on Mono's + corlib (which depends on Mono's runtime). + + * Unit test coverage isn't (yet) complete. + + * Most classes have minimal documentation available in + <b>monodoc</b>. + </ul> + +<hr> +** Assembly: Mono.Security.Win32 + + <b>Rational: </b> + This assembly goal is to provide maximum compatibility with CryptoAPI + to application running with Mono's runtime on the Windows operating + system. + + <b>This assembly should NEVER be used directly by any application</b> + (e.g. referecing the assembly from a project). + The classes should only be used by modifying the <code>machine.config + </code> configuration file (and then only if this increased + compatibility is required by an application). + + See the file <code><a href="http://cvs.hispalinux.es/cgi-bin/cvsweb/~checkout~/mcs/class/Mono.Security.Win32/README?rev=1.1&content-type=text/plain&cvsroot=mono">/mcs/class/Mono.Security.Win32/README</a></code> + for complete instructions. + +*** Namespace: Mono.Security.Cryptography + +**** Status + <ul> + * A RNGCryptoServiceProvider built on top of CryptoAPI. + + * Wrapper classes for unmanaged versions of hash algorithms: + MD2, MD4, MD5 and SHA1 are supported. <b>note</b>: some + algorithms shouldn't be used in new design (MD4 is broken, + MD2 and MD5 aren't considered safe for some usage). They are + included to preserve interoperability with older applications + (e.g. some old, but still valid, X.509 certificates use MD2, + MD4 is required for NTLM authentication ...). + + * Classes have minimal documentation available in + <b>monodoc</b>. + </ul> + +**** TODO + <ul> + * Wrapper classes for unmanaged versions of symmetric + encryption algorithms (like DES, TripleDES, RC2 and others + present in default CSP). + + * Wrapper classes for unmanaged versions of asymmetric + algorithms (like DSA and RSA) which persist their keypair + into the specified CSP. + </ul> + +**** Ideas + <ul> + * Similar assemblies (e.g. <code>Mono.Security.XXX</code>) + could be created for <a href="http://www.openssl.org">OpenSSL</a>, + <a href="http://www.mozilla.org/projects/security/pki/nss/">NSS</a>, + <a href="http://www.eskimo.com/~weidai/cryptlib.html">crypto++</a>, + <a href="http://www.cryptlib.orion.co.nz/">cryptlib</a> ... for + improved performance and/or HSM (Hardware Security Module) support + under Linux and/or Windows. + </ul> +<hr> +** Assembly: Microsoft.Web.Services + + Microsoft Web Service Enhancement (WSE), known as Web Service + Development Kit (WSDK) in it's beta days, is an add-on the .NET + framework that implements WS-Security (and other WS-* specifications). + It also includes improved support for XML Signature (replacing and/or + extending <code>System.Security.Cryptography.Xml</code>) and X.509 + certificates classes. + + Note: WSE is distributed as an add-on because some specifications, + like WS-Security, aren't yet completed by + <a href="http://www.oasis-open.org/committees/wss/">OASIS</a> or + other committees. + +*** Namespace: Microsoft.Web.Services.Security + +**** Status + <ul> + * Most WSE 1.0 classes are implemented. + </ul> + +**** TODO + <ul> + * Some classes from System.Security assembly need to be + duplicated (and somewhat fixed) in WSE for XMLDSIG. + + * There are still missing classes and <b>many</b> missing + unit tests. + </ul> + + +*** Namespace: Microsoft.Web.Services.Timestamp + +**** Status + <ul> + * This seems complete for WSE 1.0 but some new classes were + introduced in WSE 2.0. + </ul> + +*** Namespace: Microsoft.Web.Services.Security.X509 + +**** Status + <ul> + * X509Certificate support is complete for both WSE 1.0 and 2.0. + </ul> + +**** TODO + <ul> + * We need to define certificate stores (for both users and + machines). These sames stores must be linked with asymmetric + keypairs. This could also be used to store the SPC roots. + </ul> + +*** Notes + <ul> + * Microsoft has released WSE 2. + </ul> + +<hr> +** Tools + + There are many tools in the .NET framework that indirectly interacts + with some cryptographic classes. Unless noted the tools should work on + any CLR (tested with both Mono and Microsoft). + +**** Status + + The following tools are complete (or mostly complete): + <ul> + * <code>secutil</code> is a tool to extract certificates and + strongnames from assemblies in a format that can be easily + re-used in source code (C# or VB.NET syntax). + + * <code>cert2spc</code> is a tool to transform multiple X.509 + certificates and CRLs into a Software Publisher Certificate + (SPC) file - which is a long name for a simple PKCS#7 file. + + * <code>makecert</code> to create X.509 test certificates that + can be used (once transformed in SPC) to sign assemblies. It's + now possible to generate SSL certificates for web servers. + + * <code>sn</code> is a clone of the <code>sn</code> to manage + strongnames. Current version can create, convert, sign and + verify strongnames signatures. Some configuration options + are still missing, some will only works with Mono. + + * <code>signcode</code> and <code>chktrust</code> for signing + and validating Authenticode(tm) signatures on assemblies (or + any PE file) are now working (signature and timestamps) but + some options aren't yet supported. + + * <code>setreg</code> can change some cryptographic parameters + of the runtime. Currently it can add or remove two root test + certificates (the one used by Mono's <code>makecert</code>, + the other used by Microsoft's <code>makecert</code>). + + * <code>certmgr</code> can add and remove certificates from + the stores. Most common use is to add new trusted certificates + or remove them. + </ul> + + Somewhat usable, somewhat incomplete: + <ul> + * <code>certview</code> is a certificate viewer for + <code>System.Windows.Forms</code> (right now only working on + Windows), while <code>gcertview</code> is the same viewer + implemented for GTK# (working on both Windows and Linux). + </ul> + + +**** TODO + The following tools are still missing or largely incomplete: + <ul> + * Other tools like a, GUI-based, certificate manager... + </ul> + + Note that many of the tools requires the class library and/or the + runtime to be ready for them. E.g. StrongName and Authenticode signatures + tools are of limited use until supported by the runtime. + +<hr> +** References + + <ul> + * RSA Laboratories' <a href="http://www.rsasecurity.com/rsalabs/faq/index.html"> + Frequently Asked Questions</a> About Today's Cryptography, Version 4.1 + + * Public-Key Cryptography Standards (<a href="http://www.rsasecurity.com/rsalabs/pkcs/index.html"> + PKCS</a>) + + * National Institute of Standards and Technology - Federal + Information Processing Standards <a href="http://csrc.nist.gov/publications/fips/index.html"> + NIST FIPS</a> + </ul> + +<hr> +** How to Help + + <ul> + * Complete any of the TODO (and feel good about it ;-). + + * Analyse the current coverage of the unit tests on the + cryptographic classes and complete the unit tests. <b><code> + monocov</code> does a great job at this! Now we just need to + complete the missing unit tests.</b> + + * Optimization can also be done on most algorithms as crypto + is never fast enough. Some have been done using the + Community Edition of BoundChecker (a free VisualStudio + addon) - recommanded! Just be sure to test every optimization + (using the unit tests) carefully - it's so fast to break an + algorithm ;-). + + * Write some documentation or add some sample code for the + cryptographic classes in <b>monodoc</b>. + </ul> +<hr> +Last reviewed: June 26, 2004 (mono release candidate 1) |