2010-11-22 3 views
-1

Je souhaite distribuer des licences s/w sous forme de fichiers cryptés. Je crée un nouveau fichier chaque fois que quelqu'un achète une licence & l'envoyer par courriel, avec des instructions pour le mettre dans un certain répertoire.Comment faire un fichier que l'utilisateur peut lire, mais pas écrire?

Le code PHP que l'utilisateur exécute devrait être capable de déchiffrer le fichier (et le code est obscurci pour le bourrer). Évidemment, l'utilisateur ne devrait pas être capable d'écrire un fichier similaire.

Ne discutons pas si cela en vaut la peine. J'ai reçu l'ordre de l'implémenter, alors ... comment je vais y aller? Puis-je utiliser le cryptage à clé publique et lui donner une clé?


je ne peux pas simplement donner à l'utilisateur une clé & garder l'autre? IL peut lire & Je peux écrire

+3

Évidemment ... quoi? Votre demande n'a aucun sens. Vous voulez empêcher quelqu'un dans le monde entier de créer un fichier qui ressemble au vôtre? – AndreKR

+0

Ah, il commence à poindre sur moi quelle est votre intention. Voir ma réponse pour ce qui est possible. – AndreKR

+0

"Vous voulez empêcher quiconque dans le monde entier de créer un fichier qui ressemble au vôtre" - Je veux éviter de créer quelque chose qui ressemble à un fichier valide qui a été crypté (+1) – Mawg

Répondre

1

Il semble que ce que vous cherchez est une signature numérique.

Lorsque vous créez le fichier de licence, vous le signez à l'aide de la clé privée . Lorsque l'application charge le fichier de licence, elle vérifie la signature à l'aide de la clé publique , qui est codée en dur dans votre vérification de licence obfusquée. De toute évidence, l'utilisateur peut simplement patcher le code de vérification de licence lui-même - soit pour remplacer votre clé publique par la leur, soit simplement pour éviter la vérification de licence - mais vous ne pouvez rien y faire.

0

Peut-être ce que vous voulez faire est d'utiliser le cryptage XOR (XOR chaque morceau n-octet du fichier avec la clé) et depuis que @AndreKR dit que ce que vous voulez réellement faire est impossible, vous pouvez vouloir signer le fichier crypté avec votre clé privée, puis vous pouvez vérifier que le cryptage a été fait par vous.

Bien sûr, si vous ne cochez pas cette chaque fois, et ne pas utiliser un format de fichier opaque et le code compilé/obfsucated alors il ne fera pas vraiment beaucoup de différence

Il est impossible dans la cas général pour arrêter la duplication numérique des données si vous allez afficher ces données à l'utilisateur - dans le pire des cas, ils peuvent simplement prendre des captures d'écran (ou même capturer des signaux envoyés au moniteur)

2

Si vous avez un fichier dit simplement "oui, le logiciel peut être exécuté", vous ne pouvez bien sûr pas l'empêcher de copier ce fichier. Ce que peut faire est de crypter un fichier avec quelque chose qui est spécifique au système du client, le nom du client ou une adresse IP ou quelque chose. Ensuite, vous pouvez demander à votre logiciel de vérifier cette adresse IP ou d'imprimer le nom du client sur tous les rapports ou quelque chose.

Vous pouvez le faire avec un simple cryptage symétrique ou en utilisant une signature, aucun d'eux ne l'empêchant de falsifier le programme pour trouver la clé. Alors dites à votre patron que c'est un obstacle mais certainement pas incassable.

+0

+ 1 merci. Je pense que je vais juste mettre le nom du fichier à l'intérieur, crypté. Si le fichier est copié, le nom ne correspondra pas et je peux le rejeter. Un obstacle est assez bon; rien n'est incassable. – Mawg

+2

@Mawg, Si le fichier est copié dans un autre dossier/machine, il aura toujours le même nom, il ne sera pas rejeté. – AviD

+0

+1 grand point :-( – Mawg

1

Le cryptage RSA simple ne résoudra pas vos problèmes, une fois que le code est en clair, n'importe qui peut l'obtenir. Une meilleure question est: "Combien de travail suis-je prêt à mettre en difficulté pour mon client pour obtenir mon code?" Peu importe la langue et la méthode, elle finit par s'exécuter, et quand elle est lancée, elle peut être lue. Le seul moyen infaillible est de l'héberger vous-même et de ne pas autoriser votre client ou ses serveurs à accéder à votre code.

+0

Ce sera seulement en clair dans la RAM, et c'est assez bon pour moi. – Mawg

2

Vous pouvez utiliser une licence comme FlexNet Publisher License System.

La licence FlexNet a deux côtés. Le premier est d'établir qu'un site a une licence. Cela peut être fait en fonction de l'adresse IP, de l'adresse MAC ou de l'ID interne du processeur. Une fois que vous avez concédé sous licence le site, les licences sur ce site peuvent être effectuées sur une base d'utilisateur actif (vous pouvez avoir des milliers d'utilisateurs, mais seulement dix utilisateurs à la fois peuvent utiliser le logiciel), licence de siège (vous avez dix utilisateurs sur le site qui peuvent l'utiliser, et seulement ces personnes peuvent l'utiliser.Si une onzième personne le souhaite, le site doit déplacer la licence d'une personne disposant d'une licence à ce nouvel utilisateur. Ou, achetez plus de licences). Et, vous pouvez avoir une licence de site avec des utilisateurs illimités.

La licence FlexNet peut être cassée, mais elle est généralement solide et peut vous renvoyer des violations de la politique de licence.

Bien sûr, vous devrez payer des frais de licence à Flexera Software pour utiliser leur système de licence. Et il peut même y avoir une sorte de mise en œuvre «open source» du système de licences FlexNet, bien que je n'en connaisse aucune.

Je ne l'ai jamais utilisé parce que je crois pleinement à la philosophie du logiciel open source. Cela et le fait que personne ne paierait un centime pour tout ce que j'ai écrit.

Questions connexes