.net - studio - cryptography c#
¿Criptografía.NET para claves de licencia? (6)
Quiero crear una clave de licencia, ¿qué algoritmo de criptografía recomendaría?
Básicamente, las entradas serían:
nombre de empresa
número de versión principal
fecha de creacion
fecha de expiración
tiene feature1:
tiene feature2:
tiene feature3:
por ejemplo, Acme Inc 5.0 20081102 20081102 0 1 0
Relacionado: ¿Qué algoritmo de criptografía .NET incorporado es el más seguro?
Si está haciendo una validación en el lado del cliente, quiere usar un cifrado asimétrico. De esta forma, no tiene que distribuir la clave privada al cliente. Generaría una firma RSA usando SHA-256 y una clave de 2048 bits. Si haces eso, las operaciones criptográficas no serán el enlace débil. Un cracker podría, por supuesto, cambiar el código para omitir el paso de verificación, pero ningún algoritmo criptográfico lo ayudará.
Si está haciendo la validación en el servidor, elegiría un HMAC basado en SHA-256.
Si desea ver un ejemplo de cifrado Triple DES, puede echar un vistazo a la publicación de mi blog sobre el cifrado de datos en una base de datos.
La publicación del blog contiene un video y el código fuente.
Aunque se centra en encriptar columnas de cadena en la base de datos, definitivamente puede modificarlo para que funcione con los campos de licencia.
El código fuente está escrito en C # y usa algoritmos Triple DES.
Para una clave de licencia, no tiene tanto interés en encriptarla, sino en firmarla. Al firmarlo, puede validar que la fecha de caducidad y la lista de características habilitadas no se alteraron . No es necesario ocultar (encriptar) la clave de licencia, ya que no hay ninguna amenaza que quiera mitigar ocultando la licencia al usuario final.
Las firmas criptográficas se hacen al hash de la licencia y luego se cifra el hash con una clave privada. Como cualquiera puede descifrar ese hash utilizando la clave pública correspondiente, cualquiera puede verificar si la licencia fue manipulada.
La función básica de CryptoAPI para firmar y verificar es CryptSignHash y CryptVerifySignature ; consulte el Programa de ejemplo C: firma de un hash y verificación de la firma del hash .
El equivalente de .Net Framework son las clases RSAPKCS1SignatureFormatter y RSAPKCS1SignatureDeformatter .
Tienes que hacer 4 cosas:
No 1: Suma de comprobación de su aplicación (MD5, con contexto md5 personalizado)
- El contexto MD5 debe inicializarse encriptado
- Compare la suma de comprobación cifrada clave privada / pública
No 2: suma de comprobación del segmento de texto de la aplicación en ejecución
No 3: utilice el cifrado de la clave RSA privada-pública de 4096 bits para la licencia
No 4: Encripta cadenas cruciales, como "Clave incorrecta" o "Clave correcta"
Yo recomendaría: no dedique demasiado tiempo a proteger sus llaves. Con los idiomas compilados en bytes es muy fácil de descompilar y simplemente hacer que la aplicación salte el paso de validación. No importa cuán seguras sean sus claves, no importan cuando su función de validación siempre sea verdadera. Las claves en serie están ahí para mantener a la gente honesta honesta.
Las respuestas a su otra pregunta también son apropiadas aquí: ¿Qué algoritmo de criptografía .NET incorporado es el más seguro?