Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/crypto')
-rw-r--r--web/crypto335
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)