Parece que quiere usar la criptografía pública/privada para firmar un token de licencia (un fragmento o archivo XML, por ejemplo) para que pueda detectar la manipulación. La forma más sencilla de manejarlo es realizar los siguientes pasos:
1) Genere un par de llaves para su empresa. Puede hacer esto en la línea de comando de Visual Studio usando la herramienta SN. La sintaxis es:
sn -k c:\keypair.snk
2) Utilice el par de claves para nombrar fuerte (es decir, signo) la aplicación cliente. Puede configurar esto usando la pestaña de firma en la página de propiedades en su aplicación
3) Cree una licencia para su cliente, este debe ser un documento XML y fírmelo con su clave privada. Esto implica simplemente calcular una firma digital y pasos para lograr que se puede encontrar en:
http://msdn.microsoft.com/en-us/library/ms229745.aspx
4) En el cliente, al comprobar la licencia se carga el XmlDocument y utiliza su clave pública para verificar la firma de demostrar que la licencia no ha sido manipulada.Los detalles sobre cómo hacer esto se pueden encontrar en:
http://msdn.microsoft.com/en-us/library/ms229950.aspx
Para conseguir alrededor de distribución de claves (es decir, asegurando que su cliente está utilizando la clave pública correcta) en realidad se puede tirar de la clave pública del conjunto firmado en sí. Asegurándose de que no tiene otra clave para distribuir e incluso si alguien manipula el ensamblado, el .NET Framework morirá con una excepción de seguridad porque el nombre fuerte ya no coincidirá con el ensamblado.
para tirar de la clave pública del conjunto cliente desea utilizar un código similar a:
/// <summary>
/// Retrieves an RSA public key from a signed assembly
/// </summary>
/// <param name="assembly">Signed assembly to retrieve the key from</param>
/// <returns>RSA Crypto Service Provider initialised with the key from the assembly</returns>
public static RSACryptoServiceProvider GetPublicKeyFromAssembly(Assembly assembly)
{
if (assembly == null)
throw new ArgumentNullException("assembly", "Assembly may not be null");
byte[] pubkey = assembly.GetName().GetPublicKey();
if (pubkey.Length == 0)
throw new ArgumentException("No public key in assembly.");
RSAParameters rsaParams = EncryptionUtils.GetRSAParameters(pubkey);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaParams);
return rsa;
}
He subido una clase de muestra con una gran cantidad de utilidades de cifrado votos en Snipt en: http://snipt.net/Wolfwyrd/encryption-utilities/ para ayudar a conseguir tu en camino.
También he incluido un programa de muestra en: https://snipt.net/Wolfwyrd/sign-and-verify-example/. El ejemplo requiere que lo agregue a una solución con la biblioteca de utilidades de cifrado y proporcione un archivo XML de prueba y un archivo SNK para la firma. El proyecto debe configurarse para que se firme con el SNK que genere. Demuestra cómo firmar el archivo XML de prueba utilizando una clave privada del SNK y luego verificar desde la clave pública en el ensamblado.
actualización
Agregado un up to date blog post con una buena racha detallada a través de los archivos de licencia
Cualquier cosa que intente, si su aplicación necesita descifrar su archivo de licencia, cada usuario recomendado puede hacerlo. Piense en otra forma de licenciar su softare. –