Brevet FR2732488A1 — publié le 19961004

La présente invention concerne la protection des logiciels contre leur utilisation illégale et en particulier un système de protection empêchant l'utilisation d'un logiciel de façon illégale. Un logiciel est une oeuvre protégée par le droit d'auteur et dont le droit d'utilisation est limité à 1' acheteur. Cependant, il est bien connu qu'un logiciel acheté sous forme de disquette dans le commerce peut donner lieu à des copies effectuées avec ou sans l'aoeord du titulaire du droit d'utilisation grace à la mise en oeuvre de techniques de violation des systèmes de protection. Un système utilisé couramment consiste à limiter le nombre de copies ou d'installations que peut réaliser l'acheteur de la disquette gracie à l'insertion d'un compteur dans les données enregistrées, compteur qui se décrémente à chaque copie ou installation de manière à interdire toute copie lorsque le compteur est à zéro. Ce type de protection fait l'objet de violations soit par l'introduction d'une valeur de compteur bien plus importante que celle enregistrée par le concepteur (par exemple 5), soit par l'utilisation d'un programme de copie capable d'éviter la décrémentation du compteur au moment de la copie illégale. Un autre système consiste à introduire dans les données enregistrées sur la disquette, un mot de passe que seul l'acheteur connaît et qui doit être entré dans l'ordinateur au commencement de l'appel du logiciel pour pouvoir avoir accès audit logiciel. Malheureusement, des experts en langage machine sont capables de retrouver le mot de passe et donc de pouvoir utiliser ou permettre l'utilisation du logiciel de façon illégale. C'est pourquoi le but de l'invention est de réaliser un système de protection contre l'utilisation illégale d'un logiciel qui fasse appel aussi bien au logiciel qu'au matériel dans lequel le logiciel est mis en oeuvre. L'objet principal de l'invention est donc un système de protection empêchant l'utilisation illégale d'un logiciel dans un ordinateur comprenant une unité de traitement et une mémoire contenant les données du logiciel qui ont été emmagasinées dans la mémoire à partir d'une source de données telle qu'une disquette.Ce système est composé d'un premier codeur pour coder, préalablement à l'enregistrement dans la source de données, les bits de données du logiciel selon une première partie d'une clé de codage et coder les adresses de ces données selon une deuxième partie de la clé de codage, et une unité de codage/décodage interconnectée entre l'unité de traitement et la mémoire de l'ordinateur comprenant un décodeur pour décoder les bits de données lorsqu'ils sont lus à partir de la mémoire par l'unité de traitement et un second codeur pour coder les adresses auxquelles sont lus les bits de données dans la mémoire selon une deuxième partie de la clé de codage. Les buts et objets de l'invention ressortiront mieux à la lecture de la description suivante faite en référence aux dessins dans lesquels la figure l est une représentation synoptique du système utilisé pour le codage d'un logiciel empêchant son utilisation dans tout ordinateur autre que l'ordinateur contenant le décodeur approprié, et la figure 2 est une représentation synoptique d'un mode de réalisation préféré du système utilisé pour le décodage d'un logiciel codé en utilisant le système selon la présente invention. La caractéristique essentielle de l'invention est de prévoir un système de protection contre l'utilisation illégale d'un logiciel, faisant appel à un codage du logiciel dont la clé est incorporée dans l'ordinateur seul habilité à utiliser le logiciel. Pour le codage, un logiciel dont la source 10 est généralement une disquette, mais pourrait être une ligne de transmission de données provenant d'un réseau (par exemple Internet), est lu par un microprocesseur 12. Si le logiciel est sur une disquette, cette entrée est le lecteur A. Les bits d'information provenant du logiciel sont transmis en mémoire 14 à l'aide du bus de données 16 après avoir été codés par le codeur 18 selon une clé de codage prédéterminée. De préférence, le codage consiste à inverser ou non les bits d'information de chaque mot de données en utilisant un circuit OU-Exclusif par bit, la deuxième entrée de chaque circuit étant un bit correspondant de la clé de codage. C'est à dire, si le bit correspondant de la clé est un bit 1, le bit de données est inversé alors qu'il reste inchangé si le bit de la clé est un bit O.Ainsi, avec des mots de données d'une largeur de 8 bits, la clé de codage des données est un mot de 8 bits ce qui fournit 255 possibilités de codage. La clé de codage contient en plus des 8 bits destinés à coder les données, 10 autres bits qui sont utilisés pour coder une partie des bits d'adresse fournis par le microprocesseur 12 sur le bus d'adressage 20. Les 10 bits à coder sont donc fournis sur la portion de bus 20-1 au codeur 18 oO ils sont codés de la même façon que précédemment, c'est à dire en les combinant selon des circuits OU-Exclusif avec les 10 bits correspondants de la clé de codage. Les autres bits non codés sont fournis sur la portion de bus 20-2 qui est recombinée à la portion 20-1 à la sortie du codeur pour constituer l'adresse dans la mémoire 14 à laquelle chaque mot de données est emmagasiné après codage dans le codeur 18. Lorsque toutes les données du logiciel fournies par la source 10 ont été emmagasinées après codage dans la mémoire 14, on procède au transfert de ces données dans une unité de réception 22, généralement une disquette dans le lecteur B, sous la commande du microprocesseur 12 commandant la lecture de la mémoire sur la ligne R/W 24 et l'écriture des données par la ligne de commande d'écriture, les données étant transférées de la mémoire 14 à l'unité 22 sur le bus de transport 28. En même temps que le fichier contenant les données codées du logiciel qui a été enregistré (par exemple sur une disquette dans le lecteur B), le microprocesseur 12 enregistre un fichier qui contient les adresses de début et de fin de la partie codée parmi les données sur la disquette fichier qui sera utilisée à la lecture en tant qu'interruption logiciel. On doit noter que, bien que le mode de réalisation décrit ci-dessus utilise des mots de données de 8 bits, il est évident que la largeur des mots de données et de la clé pourrait être différente, par exemple de 16 ou 32 bits. De même, on peut concevoir que la portion d'adresse codée soit plus importante que 10 bits, ce qui est possible dans la mesure où les mémoires actuelles ont des capacités de plusieurs méga-octets, et donc nécessitent des adresses dépassant largement 10 bits. Toutefois avec une clé de codage de 18 bits, le nombre de possibilités de codage st déjà de 262.144. De façon à pouvoir lire une disquette sur laquelle a été enregistré le logiciel codé, un ordinateur doit donc être pourvu d'un décodeur capable de décoder les données selon la clé de codage utilisée à l'enregistrement du logiciel. C'est ce qui est illustré sur la figure 2. Une fois que le logiciel codé a été emmagasiné dans la mémoire 40 d'un tel ordinateur, le microprocesseur 42 a aeeès au logiciel de la façon suivante. La partie d'adresse formée des 10 premiers bits de l'adresse est transmise sur la portion 44-1 du bus d'adressage 44 alors que le reste de l'adresse est transmise sur la portion de bus 44-2. Cette partie d'adresse de 10 bits est fournie au codeur d'adresse 46 dans lequel chacun des 10 bits est combiné par un circuit OU-Exclusif à un des 10 bits de la partie d'adresse de la clé de codage de 18 bits identique à la clé de codage qui a été utilisée au moment du codage. Ainsi, les bits d'adresse fournis à la sortie du codeur d'adresse 46 sont les mêmes que ceux qui ont été utilisés au moment du codage.La partie de 10 bits de la clé de décodage est enregistrée de façon permanente dans une mémoire ROM 48 et est fournie au codeur d'adresse 46 par l'intermédiaire de la porte 50. La partie d'adresse codée fournie sur le bus d'adressage 52 à la sortie du codeur d'adresse est ensuite juxtaposée à la partie d'adresse non codée de la portion de bus 44-2 pour adresser la mémoire 40. Le mot de données adressé (codé), supposé être ici de 8 bits, est alors transmis par le bus 54 au décodeur 56 où chacun des 8 bits du mot de données est combiné par un circuit OU-Exclusif à un bit de la deuxième partie de 8 bits de la clé de codage de 18 bits, qui a été utilisée au moment du codage. Cette partie de 8 bits de la clé de codage est enregistrée de façon permanente dans une mémoire ROM 58 et est fournie au décodeur 54 par l'intermédiaire de la porte 60. Le mot de données décodé est ensuite fourni au microprocesseur 42 au moyen du bus de données 61. Comme il a été mentionné précédemment, puisque toutes les données qui ont été emmagasinées dans le fichier lu dans la mémoire 40 ne sont pas forcément toutes codées, un fichier a été enregistré pour fournir au système d'exploitation de l'ordinateur les adresses de début et de fin des parties codées. La lecture de ce fichier permet, au moyen d'un interruption, d'écrire l'adresse de début de la partie codée dans un registre 62 et l'adresse de fin de la partie codée dans un registre 64. Lorsque le microprocesseur 42 désire lire des données, l'adresse fournie sur le bus d'adressage 44-1 est également fournie aux comparateurs 66 et 68 dont les sorties sont connectées en entrée du circuit ET 70 de manière à comparer l'adresse demandée aux adresses de début et de fin des données codées.Si l'adresse demandée se trouve en dehors de l'étendue délimitée par les adresses de début et de fin, l'un des deux comparateurs 66 et 68 fournit une sortie O et l'autre une sortie 1, ce qui résulte en un bit O sur la sortie 72 du circuit ET 70. Par conséquent, dans ce cas, les deux portes 50 et 60 sont bloquées et exclusivement des bits 0 sont fournis en entrée du codeur 46 et du décodeur 56, ce qui a pour résultat de fournir une adresse non codée sur le bus 52 et un mot de données non codé sur le bus 61. Par contre, Si l'adresse demandée se trouve dans la plage codée comprise entre l'adresse de début emmagasinée dans le registre 62 et l'adresse de fin emmagasinée dans le registre 64, les sorties respectives des comparateurs 66 et 68 sont à 1. Par conséquent la sortie 72 du circuit ET 70 est également à 1 et les portes 50 et 60 sont passantes, ce qui a pour résultat que l'adresse fournie sur le bus 44-1 est codée à l'aide de la partie (10 bits) de la clé de codage se trouvant dans la mémoire ROM 48 et le mot de données fourni sur le bus 54 est codé par la partie (8 bits) de la clé de codage se trouvant dans la mémoire ROM 58. On doit noter que la disquette utilisée pourrait être une simple disquette du commerce ne comportant aucune partie codée. Dans ce cas, les adresses enregistrées dans les registres 62 et 64 sont les mêmes et le circuit ET 70 fournit toujours une entrée à O empêchant le codage des données de la disquette. Le système qui vient d'être décrit peut être mis en oeuvre très simplement. Soit le propriétaire d'un ordinateur fait modifier son ordinateur en remplaçant la puce du microprocesseur existante par une puce comportant, outre le microprocesseur, le dispositif de codage/décodage illustré sur la figure 2, soit l'ordinateur est déjà pourvu d'un tel dispositif. Dans les deux cas, un nombre d'identification représentant une clé de codage est fourni au propriétaire de l'ordinateur ; une telle valeur correspondant par exemple à une combinaison de 18 bits telle que celle utilisée dans la description qui suit. Dans le même temps, le constructeur ou le concepteur du logiciel fournit aux distributeurs un dispositif de codage tel que celui illustré sur la figure 1.Le propriétaire de l'ordinateur désirant acquérir le logiciel doit alors fournir le nombre d'identification au distributeur de logiciels pour que ce dernier effectue le codage du logiciel selon la clé de codage associée au nombre d'identification. On pourrait également envisager que le logiciel fourni aux distributeurs sous forme de disquettes, soit déjà codé par une clé F1, ce qui éviterait à des vendeurs indélicats de pouvoir copier le logiciel non codé reçu du concepteur. Dans ce cas, la partie de clé de codage destinée à coder les données et se trouvant dans la mémoire ROM 58 devra résulter de la combinaison par des circuits OU-Exclusif de la clé F1 et de la clé spécifique du propriétaire de l'ordinateur. On peut d'ailleurs imaginer que le logiciel soit préalablement codé à plusieurs niveaux par des clés F1, F2... ce qui implique d'avoir une clé de décodage qui soit la résultante des différentes clés utilisées pour le codage. On doit noter que la clé F1 (ou la combinaison de plusieurs clés F1, F2...) pourrait se présenter sous la forme d'un fichier formé d'une pluralité de mots, comme par exemple un fichier de 1024 mots de 8 bits. Bien que l'invention s'applique particulièrement aux logiciels, on peut l'appliquer à tout autre fichier tel qu'une base de données personnalisée. Dans ce cas, le dispositif installé dans l'ordinateur devra décoder les données lues à partir de la mémoire, mais également coder les nouvelles données transférées en mémoire. Ceci peut être réalisé avec le même circuit 56 puisque, que ce soit le codage ou le décodage, il utilise les mêmes circuits OU Exclusif. Par conséquent les bus de données 54 et 61 de la figure 2 devraient alors être bidirectionnels. REVENDICATIONS 1. Système de protection empêchant l'utilisation illégale d'un logiciel ou autre fichier de données dans un ordinateur comprenant une unité de traitement (42) et une mémoire (40) contenant les bits de données dudit logiciel lesdits bits de données ayant été emmagasinés dans ladite mémoire à partir d'une source de données telle qu'une disquette sur laquelle a été enregistré ledit logiciel ledit système étant caractérisé en ce qu'il comprend un premier codeur (18) pour coder, préalablement à leur enregistrement dans la source de données, les mots de données d'au moins une partie dudit logiciel selon une première partie d'une clé de codage et coder les adresses desdites données selon une deuxième partie de ladite clé de codage, et une unité de codage / décodage interconnectée entre ladite unité de traitement et ladite mémoire de l'ordinateur, comprenant un décodeur (56) pour décoder les bits de données lorsqu'ils sont lus à partir de ladite mémoire par ladite unité de traitement et un second codeur (46) pour coder les adresses auxquelles sont lus lesdits bits de données dans ladite mémoire selon ladite deuxième partie de ladite clé de codage. 2. Système selon la revendication 1, dans lequel ledit premier codeur (18), ledit décodeur (56) et ledit second codeur (46) sont formés de circuits OU-Exclusif à deux entrées, la première entrée étant le bit de données ou d'adresse à coder ou à décoder et la deuxième entrée étant le bit correspondant de ladite clé de codage. 3. Système selon la revendication 1 ou 2, dans lequel ladite clé de codage est spécifique audit ordinateur et ladite source de données (10) telle qu'une disquette est codée par le vendeur du logiciel à l'aide dudit premier codeur en utilisant la clé de codage communiquée par l'acheteur. 4. Système selon la revendication 1 ou 2, dans lequel les bits de données dudit logiciel sont d'abord codés une première fois selon un algorithme de codage prédéterminé (F1) avant d'être codés au moyen dudit premier codeur utilisant ladite première partie d'une clé de codage spécifique audit ordinateur et communiquée par l'acheteur dudit logiciel, ledit décodeur (56) utilisant une combinaison dudit algorithme de codage et de ladite première partie de la clé de codage pour décoder les bits de données dudit logiciel. 5. Système selon la revendication 4, dans lequel ledit algorithme de codage prédéterminé (F1) est constitué d'une séquence de mots de données et sa combinaison avec ladite première partie de la clé de codage combine de façon répétitive les bits de ladite première partie de la clé de codage avec la suite des bits de ladite séquence dans des circuits OU-Exclusif à 2 entrées. 6. Système selon l'une des revendications 1 à 5, dans lequel ladite unité de codage/décodage comprend un dispositif d'autorisation de décodage comportant des registres (62, 64) indiquant le début et la fin de la partie du logiciel à coder et des comparateurs (66, 68) pour autoriser par des portes (50, 60) ledit second codeur (46) et ledit décodeur (56) lorsque les données adressées se trouvent dans ladite partie à coder et pour interdire ledit second codeur et ledit décodeur lorsque les données adressées se trouvent en dehors de ladite partie à coder. 7. Système selon l'une des revendications 5 à 6, dans lequel la partie à coder dudit logiciel ou autre fichier de données comporte des portions de données qui sont réécrites, le bus de données (54) connectant ladite mémoire (40) audit décodeur (56) et le bus de données 61 connectant ledit décodeur à ladite unité de traitement (42) étant bidirectionnels de manière à ce que les données qui doivent être réécrites puissent être codées par ledit décodeur lorsqu'elles sont transmises de ladite unité de traitement à ladite mémoire. 8. Système selon l'une quelconque des revendications précédentes, dans lequel ladite clé de codage est emmagasinée dans une mémoire permanente du type ROM (48, 58) dans ledit ordinateur.