FR 2523745 A1 19830923 FR 8204612 A 19820318 L'invention concerne généralement un procédé et un dispositif de protection d'un logiciel et a plus particulièrement pour objet un procédé et un dispositif par lesquels un fournisseur qui livre un logiciel à un utilisateur reste maître de ce logiciel en le rendant inexécutable dans sa forme telle que livrée, l'exécution de ce logiciel étant sous le contrôle d'une clé de validation délivrée à l'utilisateur par le fournisseur du logiciel. Il faut tout d'abord préciser ce qu'il faut entendre par les expressions "protection d'un logiciel" et par logiciel inexécutable": 1 Protection d'un logiciel Par logiciel, il faut entendre au moins un programme au sens classique et plus généralement un ensemble de programmes D'une façon générale, l'organisation d'un sytème logiciel associé à une machine de traitement de l'information est telle qu'un minimum de protection est donnée aux programmes grâce aux procédures mises a disposition par le système d'exploitation de la machine. Ainsi, les programmes utilisateurs et les programmes systèmes bénéficient d'une protection les uns envers les autres, chaque programme ayant un espace mémoire attribué inaccessible pour les autres programmes. En fait, une telle protection est inhérente à la bonne gestion et à la bonne marche d'un centre de calcul. La protection du logiciel conférée par l'invention se situe à un autre niveau Plus pr&cisémment, il s'agit de donner au fournisseur d'un logiciel un maximum de garanties quant à la diffusion de ce logiciel En d'autres termes et dans l'esprit de l'invention, il ne s'agit pas de donner au logiciel une protection au sens de la propriété littéraire et artistique en cherchant à protéger -2- le contenu même du logiciel, mais il s'agit en fait de donner au détenteur d'un logiciel une protection vis- à-vis d'un utilisateur potentiel en se donnant les moyens pour contrôler que seul cet utilisateur pourra utiliser ce logiciel. En effet, dès l'instant o un fournisseur négocie avec un utilisateur potentiel la location ou la vente d'un programme, ce fournisseur n'avait jusqu'à présent aucun moyen de contrôle quant à l'utilisation de ce programme par cet utilisateur De ce fait, cet utilisateur pouvait ensuite se substituer très facilement au fournisseur pour livrer à son tour le programme à un autre utilisateur. 2 Logiciel inexécutable D'une façon générale, tout programme n'est pas directement exécutable par une machine de traitement de l'information. En effet, un programme doit subir plusieurs transformations avant d'être exécuté Dans l'esprit de l'invention, le programme, même après avoir subi les transformations précitées, restera encore inexécutable. Toujours dans l'esprit de l'invention, cette notion d'inexécution d'un programme n'est pas à associer à une notion de secret En effet, il ne s'agit pas d'interdire la connaissance du programme à l'utilisateur, mais de contrôler l'utilisation de ce programme par cet utilisateur. Selon l'invention, le fournisseur est donc amené à donner à tout utilisateur potentiel un programme incomplet ou brouillé et au moins une clé de validation permettant de rendre exécutable le programme. L'invention propose donc un procédé de protection d'un logiciel constitué par des programmes, le détenteur ou -3- fournisseur de ces programmes étant amené à négocier ces programmes à des utilisateurs potentiels possédant au moins une machine de traitement de l'information sur laquelle peuvent être exécutés ces programmes, caractérisé en ce qu'il consiste, pour permettre au fournisseur de garder le contrôle de la diffusion de ces programmes une fois ceux-ci livrés aux utilisateurs à rendre inexécutables ces programmes en l'état tels que livrés aux utilisateurs; à délivrer à chaque utilisateur au moins un support portatif tel qu'une carte comprenant au moins des circuits de traitement et une zone mémoire o est enregistré un code secret seul connu du fournisseur et propre à chaque utilisateur; et, pour chaque utilisateur, à associer à chaque programme une clé de validation prédéterminée définie en fonction du programme et du code secret contenu dans la carte de l'utilisateur, pour la nécessaire transformation de ce programme en un programme exécutable une fois la carte accouplée ou connectée avec la machine de l'utilisateur. Selon une autre caractéristique du procédé conforme à l'invention, la clé de validation précitée est définie à partir, d 'une part, d'une clé principale de validation délivrée par le fournisseur et disponible sur la machine de l'utilisateur et, d'autre part, d'une clé complémentaire de validation calculée, au niveau de la carte délivrée à l'utilisateur, à partir du code secret et d'arguments d'identification propres à chaque programme et qui sont enregistrés dans la zone mémoire de la carte. Selon une autre caractéristique importante de l'invention, le procédé consiste à garder les mêmes arguments -4- d'identification pour un même programme quel que soit l'utilisateur de ce programme; et à donner une clé principale de validation différente d'une part, pour chaque programme livré à un utilisateur, et d'autre part, pour un même programme livré à un autre utilisateur. L'intérêt d'une telle procédure réside notamment dans la facturation par un fournisseur du logiciel vendu ou loué à un utilisateur En d'autres termes, un fournisseur peut posséder une bibliothèque de N programmes qui peut être vendue ou louée à un utilisateur qui, moyennant paiement, aura la jouissance de tout ou partie de cette bibliothèque. Ainsi, le fournisseur définira une clé de validation pour chaque programme choisi par un utilisateur et délivrera une carte propre à cet utilisateur dans laquelle est enregistré un code secret seul connu du fournisseur et propre à cet utilisateur A partir de cette clé de validation et du code secret, comme définis précédemment, chaque programme pourra être rendu exécutable Bien entendu, une fois un programme rendu exécutable, il peut être conservé en mémoire centrale de la machine et être réutilisé directement sans faire appel à nouveau à la procédure de protection conforme à l'invention, mais cette procédure devra jouer à nouveau à chaque fois que le programme est rechargé en mémoire centrale. D'autres caractéristiques, avantages et détails apparaîtront plus clairement à l'aide de la description explicative qui va suivre faite en référence à la figure annexée donnée à titre d'exemple et qui illustre schématiquement le principe du procédé conforme à l'invention. Soit une personne possédant une bibliothèque de programmes (Pl Pi Pn)> Cette personne dénommée fournisseur est -5susceptible de louer ou de vendre ces programmes à des utilisateurs potentiels possédant au moins une machine de traitement -de l'information sur laquelle peuvent être exécutés ces programmes. Avant d'expliciter en détail Je procédé conforme à l'invention qui va dorénavant permettre à ce fournisseur de contrôler la diffusion des programmes livrés à des utilisateurs, il va être décrit succintement les moyens matériels indispensables à l'exécution du procédé et la nature des informations traitées par ces moyens matériels. En référence à la figure, une machine de traitement de l'information ( 1) d'un utilisateur potentiel des programmes (Pi Pi Pn) doit comprendre au moins une mémoire (M), des circuits de commande et de traitement ( 2) des informations stockées dans la mémoire (M) et un dispositif d'entrée-sortie ( 3). La mémoire (M) est destinée à contenir au moins un programme (Pi) de la bibliothèque de programmes (Pl Pi Pn) en vue de son exécution par la machine ( 1), un sous-programme pilote (SPP) donné par le fournisseur, et des clés principales de validation (V 1 Vi, Vn) à raison d'une clé par programme; ces clés prédéterminées sont données par le fournisseur et sont destinées à être associées à des clés complémentaires de validation (V'l, V'i, V'n) comme cela sera explicité par la suite. Les circuits de commande et de traitement ( 2) sont classiques avec des spécificités propres au type de la machine utilisée. En plus de cette machine ( 1), un utilisateur potentiel doit posséder les matériels annexes suivants: -6- au moins un support portatif tel qu'une carte (C) délivrée par le fournisseur et destinée à coopérer avec la machine ( 1), et un lecteur de carte (LC) accouplé à la machine ( 1) par l'intermédiaire du dispositif d'entr 4 e-sortie ( 3) précité. La carte (C) spécifique d'un utilisateur déterminé comprend au moins: une mémoire (Ml) dans laquelle sont enregistrés un code secret (S); un sous-programme de calcul (SPC); et un tableau (TB) contenant un ensemble d'arguments (bl, bi, bm) d'identification des programmes (P 1, Pi, Pn); et des circuits de traitement ( 4) permettant d'assurer l'exécution du sous-programme de calcul (SPC). Le lecteur (LC) est essentiellement destiné à assurer le transfert des informations entre la machine ( 1) et la carte (C), les circuits composant ce lecteur ne présentant pas de caractéristiques particulières dans le cadre de l'invention. Conformément à l'invention, l'exécution de chaque programme (P 1 Pi Pn) est sous le contrôle d'une clé de validation propre au programme et à l'utilisateur. Ainsi, chaque programme est sous le contrôle d'une clé de validation qui est en fait constituée, côté machine ( 1), d'une clé principale de validation prédéterminée (V) et, côté carte (C), d'une clé complémentaire de validation (V') calculée avant l'exécution du programme. La clé complémentaire de validation (V') est calculée par les circuits de traitement ( 4) de la carte (C) qui exécutent le sous-programme de calcul (SPC) Ce sous- programme (SPC) prend en compte le code secret (S) enregistré dans la mémoire (Ml) de la carte (C) et au -7- moins un argument d'identification (bi) propre à chaque programme (Pi) et déterminé par le fournisseur. Une carte (C) est délivrée à l'utilisateur et tous les arguments d'identification (bl bi bn) des programmes (Pl Pi Pn) sont préenregistrés dans le tableau (TB) stocké dans la mémoire (Ml) de la carte (C) Chaque argument d'identification (bi) est par exemple une donnée alphanumérique, et chaque programme peut être identifié par un ou plusieurs arguments Il est important de noter que les arguments d'identification des programmes sont de préférence identiques pour tous les utilisateurs potentiels des programmes. L'adressage du ou des arguments d'identification (bl bi bm) d'un programme (Pi) pour calculer la clé complémentaire de validation (V') s'effectue à partir de paramètres d'identification (al ai am) contenus dans chaque programme et transmis à la carte (C) avant l'exécution du programme. Pour limiter la place mémoire occupée par le tableau (TB) dans la mémoire (Ml) de la carte, il est avantageux d'identifier chaque programme par au moins deux arguments d'identification De cette manière, il n'est pas nécessaire de stocker autant d'arguments d'identification que de programmes A titre d'exemple, si le tableau (TB) contient m arguments (bi) avec m 4 à N (n étant le nombre de programmes) et si chaque programme est identifié par deux arguments, il est possible d'adresser Cn programmes. La clé principale de validation (V), côté machine ( 1), est donnée par le fournisseur qui, connaissant le code secret (S) de la carte (C) délivrée à l'utilisateur et les arguments d'identification (bl bi bm) de chaque pro- -8- gramme (P 1 Pi Pn), peut connaître à l'avance la valeur de la clé complémentaire de validation (V') et déterminer ainsi la valeur de la clé principale de validation (V) associée, ces deux clés (V) et (V') étant combinées d'une certaine façon par le sous-programme (SPP) pour rendre exécutable le programme associé. La façon de rendre inexécutable un programme n'est pas unique et la solution choisie ne modifie pas le principe de l'invention dès l'instant ou l'exécution du programme est contrôlée par une clé de validation à deux niveaux (V, V') telle que définie précédemment Chaque programme (Pl Pi*Pn) peut être rendu inexécutable ou brouillé dans sa totalité ou en partie seulement. Pour expliciter le procédé conforme à l'invention, supposons un utilisateur désireux d'acquérir le programme (Pi) de la bibliothèque de programmes (Pl Pi Pn), chacun de ces programmes étant rendu inexécutable en l'état tel que livré. Le fournisseur va donner à cet utilisateur: une bande ou un disque programme contenant l'ensemble des programmes (Pl Pi Pn)'r une carte (C) telle que définie précédemment et contenant notamment un code secret (S) propre à cet utilisateur, le sous-programme (SPP) précité qui va être enregistré dans la mémoire (M) de la machine ( 1) de l'utilisateur, et la clé principale de validation (Vi) propre au programme (Pi) et qui va être également enregistrée dans la mémoire (M) de la machine ( 1) ou contenue dans le programme (Pi). Lorsque l'utilisateur est désireux d'exécuter le programme (Pi), il charge tout d'abord ce programme (Pi) dans la mémoire (M) de sa machine ( 1) à partir du disque programme 9 - donné par le fournisseur Ensuite, le système d'exploitation de la machine ( 1) fait subir à ce programme (Pi) les transformations classiques inhérentes t la mise en état d'exécution de ce programme (Pi) Conformément à l'invention, même après avoir subi ces transformations, le programme (Pi) est toujours inexécutable. Pour le rendre exécutable, l'utilisateur va introduire la carte (C) associée à sa machine ( 1) dans le lecteur (LC) accouplé à la machine ( 1). Supposons que le programme (Pi) soit en partie brouillé seulement En se reportant à la figure, supposons que le programme (Pi) contienne une instruction brouillée, à savoir le code instruction de l'instruction (Ii) Dans ces conditions, les instructions précédentes (Il) à (Ik) vont être exécutées normalement et l'instruction (Ii 1) qui précède l'instruction (Ii) va faire un déroutement vers le sous-programme (SPP) en fournissant au moins un paramètre d'identification (ai) du programme (Pi). Le sous-programme pilote (SPP) s'exécute et au niveau de son instruction (Jk) assure un déroutement vers la carte (C) par l'intermédiaire du dispositif d'entrée-sortie ( 3) sous le contrôle des circuits de commande ( 2) de la machine ( 1) Le sous-programme (SPP) envoie A la carte (C) le paramètre d'identification (ai) afin d'adresser au moins un argument d'identification (bi) du tableau (TB) enregistré dans la mémoire (Ml) de la carte (C) Au niveau de la carte (C) s'exécute alors le sous-programme de calcul (SPC) qui prend au compte l'argument (bi) du programme (Pi) et le code secret (S) de la carte pour calculer la clé complémentaire de validation i V' ) par l'intermédiaire des circuits de traitement ( 4) de la carte (C). - Une fois la clé complémentaire de validation (V'i) du programme (Pi) calculée, la valeur de cette clé (V'i) est renvoyée par l'intermédiaire du lecteur (LC) et du circuit d'entrée-sortie ( 3) de la machine ( 1) vers le sous- programme pilote (SPP) L'instruction (Ji) du sous- programme (SPP) va prendre en compte cette clé complémentaire de validation (V'i) ainsi que la clé principale de validation (Vi) préenregistrée dans la mémoire (M) de la machine ( 1) et associée au programme (Pi) A partir de ces deux clés de validation (Vi) et (V'i), le sous-programme pilote (SPP) va débrouiller l'instruction (Ii) du programme (Pi) A titre d'exemple, les deux clés (Vi) et i V'i)peuvent être des configurations binaires à p bits avec le sous-programme (SPP) qui effectue une opération logique telle qu'un "OU EXCLUSI Fu sur ces deux configurations binaires, le résultat de cette opération logique donnant le code instruction de l'instruction (Ii) du programme (Pi) De cette façon, l'instruction (Ii) du programme (Pi) est dé- brouillée et le programme (Pi) peut ensuite être exécuté entièrement. Selon une autre caractéristique de l'invention, un même utilisateur peut posséder une seule carte (C) pour plusieurs machines ( 1) Dans ce cas, un même programme ne pourra pas tourner simultanément sur plusieurs machines, car la carte de l'utilisateur doit être maintenue accouplée à une machine pour assurer l'exécution du programme sur cette machine. Bien entendu, un utilisateur peut acheter plusieurs fois, par exemple deux fois, un même programme, et il lui faudra alors deux cartes différentes pour faire tourner ce même programme simultanément sur deux machines. Enfin, si une carte est délivrée pour l'exécution possible de m programmes parmi N programmes disponibles et si il - l'utilisateur désire obtenir l'exécution d'autres programmes non achetés initialement, il n'est pas nécessaire que le fournisseur lui délivre une autre carte. En effet, il suffit au fournisseur de fournir simplement la clé de validation principale du ou des programmes nouveaux sans avoir à modifier la carte déjà délivrée. Pour permettre au fournisseur des programmes de rester maître de leur diffusion, il est important que les informations enregistrées au niveau de chaque carte soit inaccessibles de l'extérieur pour éviter toute fraude possible. 12 - REVENDICATIONS 1 Procédé de protection d'un logiciel constitué par des proqrammes (P 1, Pi, Pn) le détenteur ou fournisseur de ces programmes étant amené à négocier ces programmes à des utilisateurs possédant une machine ( 1) de traitement de l'information sur laquelle peuvent être exécutés ces programmes, caractérisé en ce qu'il consiste, pour permettre au fournisseur de garder le contrôle de la diffusion de ces programmes une fois ceux-ci livrés aux utilisateurs: à rendre inexécutables ces programmes (P 1, Pi, Pn) en l'état tels que livrés aux utilisateurs; à délivrer a chaque utilisateur au moins un support portatif (C) tel qu'une carte comprenant au moins des circuits de traitement ( 4) et une zone mémoire (Ml) o est enregistré un code secret (S) seul connu du fournisseur et propre à chaque utilisateur; et, pour chaque utilisateur, a associer à chaque programme (Pi) une clé de validation (Vi; V'i) prédéterminée définie en fonction du programme (Pi) et du code secret (S) contenu dans la carte (C) de l'utilisateur, pour la nécessaire transformation de ce programme (Pi) en un programme exécutable une fois la carte (C) accouplée avec la machine ( 1) de l'utilisateur. 2 Procédé selon la revendication 1, caractérisé en ce qu'il consiste à définir la clé de validation (Vi; V'i) précitée à partir, d'une part, d'une clé principale de validation (Vi) délivrée par le fournisseur et enregistrée dans une zone mémoire (M) de la machine ( 1) des utilisateurs et, d'autre part, d'une clé complémentaire de validation (V'i) calculée au niveau de la carte (C) délivrée à l'utilisateur, à partir du code secret (S) et d'arguments (bi) identifiant chaque programme et qui sont enregistrés dans la zone mémoire (Ml) de la carte (C). 13 - 3 procédé selon la revendication 1 ou 2, caractérisé en ce qu'il consiste A garder les mêmes arguments d'identification (bi) pour un même programme quel que soit l'utilisateur de ce programme, et à donner par conséquent une clé principale de validation (Vi) différente d'une part, pour chaque programme (Pi) livré à un utilisateur et d'autre part, pour un même programme (Pi) livré à un autre utilisateur. 4 Procédé selon la revendication 1, 2 ou 3, caractérisé en ce qu'il consiste au niveau de chaque carte (C) associée à un utilisateur: à préenregistrer les arguments d'identification (bl, bi, bn) des programmes sous la forme d'un tableau (TB) stocké dans la zone mémoire (Ml) de la carte (C), et à adresser au moins un argument d'identification (Bi) d'un programme (Pi) à partir d'au moins un paramètre d'identification (ai) contenu dans ce programme. Procédé selon l'une des revendications précédentes, caractérisé en ce qu'il consiste: a accoupler à chaque machine ( 1) des utilisateurs un lecteur de cartes (LC) dans lequel est préalablement introduit la carte (C) associée à cette machine ( 1), à enregistrer dans la zone mémoire de la machine un sous-programme pilote (SPP) de dialogue entre la machine ( 1) et la carte (C), et a transformer les programmes inexécutables en programmes exécutables par l'intermédiaire de ce sous- programme (SPP) qui prend en compte les paramètres d'identification (ai) d'un programme à exécuter pour les transmettre a la carte (C), à recevoir des circuits de traitement ( 4) de la carte (C) la clé complémentaire de validation (V'i) calculée à partir des arguments (bi) adressés par les paramètres d'identification (ai) et du 14 - code secret (S) de la carte (C) et a combiner cette clé complémentaire de validation (V'i) avec la clé principale de validation (Vi) préenregistrée associée au programme (Pi) à exécuter afin de rendre ce programme exécutable. 6 Procédé selon l'une des revendications précédentes, caractérisé en ce qu'il consiste à contrôler au moins une instruction de chaque programme (Pi) en la rendant inexécutable par brouillage de son code instruction par exemple. 7 Procédé selon la revendication 6, caractérisé en ce qu'il consiste à donner à chaque clé principale de validation (Vi) et à chaque clé complémentaire de validation (V'i), une configuration binaire à p bits. 8 Procédé selon la revendication 7, caractérisé en ce qu'il consiste, pour débrouiller le code instruction de l'instruction précitée, à effectuer une opération logique telle qu'un f OU EXCLUSIF" sur la clé principale de validation (Vi) et la clé complémentaire de validation (V'i) pour obtenir le code instruction assimilable par la machine ( 1). 9 Dispositif pour la mise en oeuvre du procédé tel que défini selon l'une des revendications précédentes, du type comprenant une machine (l) de traitement de l'information appartenant à un utilisateur et possédant au moins une mémoire (Ml), des circuits de commande et de traitement ( 2), un dispositif d'entrée-sortie ( 3), caractérisé en ce qu'il comprend: une carte (C) spécifique de l'utilisateur possédant au moins une mémoire (Ml), des circuits de traitement ( 4), et un lecteur de carte (LC) accouplé au dispositif d'entrée-sortie ( 3) de la machine ( 1); la mémoire (Ml) de la machine ( 1) contenant au moins un programme brouillé (Pi) donné par un fournisseur, une clé principale de validation (Vi) donnée par le fournisseur; - la mémoire (Ml) de la carte (C) contenant au moins un code secret (S), des arguments d'identification (bi) du programme (Pi) adressés à partir de paramètres d'identification (ai) contenus dans le programme (Pi), les circuits de traitement ( 4) calculant une clé complémentaire de validation (V'i) à partir du code secret (S) et des arguments d'identification (bi) du programme (Pi); et en ce que cette clé (V'i) est combinée avec la clé (Vi) associée dans un sous programme pilote (SPP) enregistré dans la mémoire (M) de la machine ( 1) pour dé- brouiller et rendre exécutable le programme (Pi).