2008-11-03 6 views
14

Je veux créer une clé de licence, quel algorithme de cryptographie recommanderiez-vous?Cryptographie .NET pour les clés de licence?

Fondamentalement, les entrées seraient:

nom de la société
numéro de version majeure
date de création
Date de expirey
a feature1:
a feature2:
a Caractéristique3:

par exemple Acme Inc 5,0 20081102 20081102 0 1 0

connexes: Which built-in .NET cryptography algorithm is the most secure?

+0

Il existe des questions connexes sur SO: http://stackoverflow.com/questions/79064/cryptography-algorithm et http://stackoverflow.com/questions/179220/best-cryptography-algorithm et http: // stackoverflow. com/questions/258721/qui-built-in-net-crypotgraphy-algorithme-est-le-plus-sécurisé –

+1

Pourquoi était-ce fermé? Les autres questions ne répondent pas à cette question et l'autre question de ASDFdotASPX était beaucoup plus générale. –

+0

Rouvert. C'est similaire à, mais pas une copie de, les liens que j'ai fournis. –

Répondre

7

Si vous faites la validation sur le côté client, vous voulez utiliser un chiffrement asymétrique. De cette façon, vous n'avez pas à distribuer la clé privée au client. Je générerais une signature RSA en utilisant SHA-256 et une clé de 2048 bits. Si vous faites cela, les opérations cryptographiques ne seront pas le maillon faible. Un pirate pourrait bien sûr changer le code pour sauter l'étape de vérification, mais aucun algorithme cryptographique ne l'aidera.

Si vous effectuez la validation côté serveur, je choisirais un HMAC basé sur SHA-256.

10

Je recommande: Ne pas passer trop de temps sur la sécurisation de vos clés. Avec les octets compilés, il est très facile de décompiler et de faire en sorte que l'application ignore l'étape de validation. Peu importe la sécurité de vos clés, elles n'ont pas d'importance lorsque votre fonction de validation est toujours vraie. Les clés de série sont là pour garder les honnêtes gens honnêtes.

+0

Ha, ha, ha, "*** très facile ** à décompiler et juste faire passer l'application de l'étape de validation *". Comme c'est très facile, allez-y, nous cracker la dernière version de HP Loadrunner, ou la dernière version de [Burp Suite] (https://portswigger.net/burp/download.html) et nous montrer que c'est ** très facile * * faire cela. Un article de blog comme preuve suffirait, par exemple [en voici une pour une (très) ancienne version de Burp Suite] (http://blog.nibblesec.org/2013/01/anti-debugging-techniques-and-burp-suite .html). La question ** réelle ** est: combien de programmes utiles avez-vous inversés? – Pacerier

+0

"* Les clés de série sont là pour garder les honnêtes honnêtes .. *" ** Mauvais **. Les gens honnêtes n'ont pas besoin de clés de série pour être honnête, un msgbox comme "ne pas utiliser cette fonctionnalité sauf si vous me payez en premier" serait suffisant. ** Les clés de série sont là pour garder honnêtes les gens malhonnêtes. ** Malhonnête, mais * bon marché *. En premier lieu, la sécurité est un problème économique (https://www.google.com/search?q=economics+of+security), puis un problème technologique en second lieu. – Pacerier

0

Si vous souhaitez voir un exemple de cryptage Triple DES, vous pouvez jeter un oeil à my blog post sur le cryptage des données dans une base de données.

Le blog contient une vidéo et le code source.

Bien qu'il se concentre sur le cryptage des colonnes de chaînes dans la base de données, vous pouvez définitivement le modifier pour qu'il fonctionne avec les champs de licence.

Le code source est écrit en C# et utilise des algorithmes Triple DES.

1

Vous devez faire 4 choses:
No 1: Checksum votre application (MD5, avec le contexte md5 personnalisé)
- contexte MD5 doit être encryptedly initialisé
- Comparer agains clé privée/publique contrôle cryptée
n ° 2: Checksum votre segment de texte de l'application en cours d'exécution
n ° 3: Utiliser 4096 bits RSA chiffrement de la clé privée-publique pour la licence
n ° 4: Chiffrer toutes les chaînes cruciales, comme « clé incorrect » ou « ok clé »

+0

MD5 est un algorithme de hachage cassé et ne doit pas être utilisé – Nayef

3

Pour une clé de licence, vous n'avez pas tellement intérêt à le crypter, mais à le signer. En le signant, vous pouvez valider que la date d'expiration et la liste des fonctionnalités activées ne sont pas falsifiées avec.Il n'est pas nécessaire de masquer (crypter) la clé de licence, car il n'y a aucune menace que vous voulez atténuer en cachant la licence à l'utilisateur final.

Les signatures cryptographiques sont effectuées en hachant la licence, puis en chiffrant le hachage avec une clé privée. Puisque n'importe qui peut déchiffrer ce hachage à l'aide de la clé publique correspondante, n'importe qui peut vérifier si la licence a été altérée. La fonction de base de CryptoAPI à signer et à vérifier est CryptSignHash et CryptVerifySignature, voir Example C Program: Signing a Hash and Verifying the Hash Signature. Les équivalents .Net Framework sont les classes RSAPKCS1SignatureFormatter et RSAPKCS1SignatureDeformatter.

Questions connexes