FR 2586310 A1 19870220 FR 8512735 A 19850814 SYSTEME DE PROTECTION DESTINE NOTAMMENT AUX LOGICIELS La présente invention a pour objet un système de protection ou de contrôle pour accès réservés destiné notamment à la protection des logiciels. En effet, le problème de protection des logiciels est un problème qui devient crucial du fait du développement de l'informatique et divers moyens ont été proposés pour empêcher l'utilisation non autorisée de ces logiciels. Certains de ces moyens font appel à des procédés logiciels, cependant la mise en oeuvre de tels types de protection est très longue à réaliser et nécessite un temps important pour le programmeur et, en outre, I'utilisa- tion d'un "débugger" évolué (points d'arrêt conditionnels, simulation de code en mémoire morte, options d'assemblage-désassemblage partiel...) peut permettre de reconnaître la méthode de protection employée - et donc d'annihiler celle-ci. D'autres moyens font appel à des procédés physiques comme le marquage d'un des disques supports du logiciel, ou le branchement d'une "verrue", c'est-à-dire d'un verrou électronique sur une sortie de l'ordinateur. Le premier procédé est astreignant du fait qu'il faut conserver le disque marqué dans un des lecteurs. (Inadéquat avec l'emploi des disques durs) Le second procédé est actuellement l'un des plus fiables, cependant, comme une "verrue" est nécessaire pour chaque programme que l'on désire protéger, l'ensemble devient vite encombrant et par exemple il devient difficile de faire tenir le câble de l'imprimante au-delà d'un certain nombre de verrues, ce qui en limite l'utilisation. En outre, comme de nombreuses verrues sont identiques, du fait des nécessités de fabrication, il est possible d'utiliser une version suivante du logiciel avec la même verrue. Enfin, chaque verrou ayant une structure électronique fixe, il n'est pas reprogrammable et ne peut donc être modifié, et réutilisé avec d'autres codes d'accès. Le but de la présente invention est de remédier à ces inconvénients et de fournir un système de protection ou de contrôle qui soit efficace et fiable, qui puisse être réutilisé pour différents logiciels et qui soit d'emploi simple et rapide. Ce but est atteint en ce que le système selon l'invention consiste à créer un codage par la combinaison de variables selon au moins une équation booléenne, cette équation booléenne étant réalisée à l'aide d'un circuit électronique logique approprié, aux bornes duquel sont envoyées ces mêmes variables. Avantageusement, dans le cas de la protection d'un logiciel, les variables sont formées par les bits des bus de contrôle et d'adresse de l'ordinateur sur lequel est traité ce logiciel. De préférence, le circuit électronique utilisé est un circuit reprogrammable comme celui connu sous la dénomination commerciale "EP 300", ce qui permet de modifier à l'infini les codes et par conséquent d'augmenter considérablement l'efficacité de la protection. Différents moyens sont en outre prévus pour masquer l'adresse à laquelle doit être lu le codage ainsi que pour tester la légalité des opérations effectuées. De toute façon, le système de protection selon l'invention sera bien compris et d'autres caractéristiques seront mises en évidence à l'aide de la description qui suit en référence au dessin schématique annexé dont l'unique figure est un schéma de branchement du circuit électronique utilisé dans une forme de réalisation préférée de ce système. Le circuit électronique (100) utilisé dans cette forme de réalisation est, en l'occurence, un composant du type connu sous la dénomination commerciale "EP 300" et fabriqué par la Société Altera Semi-Conductor Corporation, mais il pourrait également être formé par un composant plus évolué de la même gamme comme celui "EP 600" ou "EP 1200". Un tel composant est formé de portes logiques associées en macrocellules (non représentées sur le dessin) et est réalisé en technologie "CMOS-EPROM", c'est-à-dire en semi-conducteur métal oxyde silicium rapide (30 à 90 ns) programmable et effaçable au rayonnement ultra-violet. Ce composant est donc reprogrammable extemporanément. Il peut, en outre, supporter les horloges des processeurs 16 et 32 bits et peut donc être associé aux processeurs des diverses familles dont le i8086 ou i8088 (Société Intel). Ce composant (100) présente extérieurement vingt broches (1, 2 20). Dix de ces broches respectivement (1 à 9 ; Il) sont des broches d'entrée, la broche (I) pouvant être également - utilisée pour fournir le signal d'horloge. Les huit broches (12,13,14,15,16,17,18,19) sont des broches bidirectionnelles et peuvent être programmées comme broches d'entrée, broches de sortie ou broches d'entrée/sortie. Une macrocellule (formée de portes logiques) est associée à chacune de ces huit broches (12,13,14,15,16,17,18,19). Enfin, les deux broches (10,20) servent à l'alimentation du composant. Tous les nombres associés à l'adressage et aux données sont en hexadécimal. Les entrées (2 à 9) et (11,12) du composant (100) sont reliées au bus d'adresse d'entrées/sorties du processeur (non représenté sur le dessin). A chacune de ces entrées (2,3,4,5,6,7,8,9,11,12) est donc associé un bit respectivement (A#, A1, A2...A9) du bus d'adresse. Les broches (10,20) sont raccordées aux bornes de l'alimentation respectivement GND,VCC. Sur les broches d'entrée/sortie (13,14) sont envoyés respectivement le signal de lecture IOR et le signal d'écriture IOW. Les broches d'entrée/sortie (15,16,17) sont raccordées au bus de données du processeur et à chacune de ces broches (15,16,17) est donc associé un bit respectivement (D#, D3, D7) du bus de données du processeur. La broche (18) n'est pas raccordée mais la macrocellule associée est utilisée en feedback enregistré (fonction TEST). Enfin la broche (19), appelée VB, est reliée à la broche (1), ou CLK, de façon à générer le signal d'horloge. La macrocellule associée à cette broche (19) et qui est appelée MARQ sert donc à valider les bascules (en générant le signal d'horloge) et sert également de bit marqueur. Sur les huit macrocellules associées aux entrées/sorties (13,14,15,16,17,18,19), seules les cinq associées aux entrées/sortie (15,16,17,18,19) sont programmées, puisque les entrée/sortie (12,13,14) servent seulement d'entrée pour les bits respectivement A9, IOR, et IOW. Les macrocellules associées aux bits du bus de donnée D7, D3, sont programmées pour réaliser la même fonction booléenne. A : /A9*A8+/(A7+A6+A5)*A4+/(A3+A2+A1 5)fA A#)*/l0W+/(D7+D3+D#) [ 0 îlji(,76 ] . Leur sortie est, en outre, autorisée lorsque l'équation booléenne: D : A9*A8+A7+/A6+/A5+A4*/A3+/A2*/Al*A#*/I0R* [ MARQ*/ [TEST [ I 391] est vraie. La fonction TEST broche (18) est régie par deux équations booléennes B et C avec B : A9*A /(A6+A5)*A4*/(A3+A2+AI+A)*/IOR [ 1 39~ ] C : A7 8*A7*/(A6+A5)*A4 +/(A3+A2)+A1*/A#*/lOR EI 392] Cette fonction TEST est vraie lorsque l'une ou l'autre de ces équations booléennes est vraie. Enfin la fonction MARQ, associée à la broche (19), est régie par les trois équations booléennes A, B et C précédentes et est vraie lorsque l'une ou l'autre de ces équations booléennes A, B ou C est vraie. La sortie de cette fonction est validée lorsque l'équation booléenne : E: / [ TEST est vraie, c'est-à-dire lorsque la fonction TEST est fausse. Enfin la fonction booléenne F : /A9+/A8+/A7*/A6*/A5*A4*/A3*/A2*A1 / W*/D7*D3*/D# ~ [ 0 12,7E ] permet une remise à zéro asynchrone. On voit que les solutions de ces différentes équations booléennes sont pour l'équation A, l'écriture de la valeur 76 à l'adresse 110. pour l'équation B, la lecture à l'adresse 390 pour l'équation C : la lecture à l'adresse 392 pour l'équation D : la lecture de la valeur 7E à l'adresse 391 pour l'équation F : l'écriture de la valeur 7E à l'adresse 12. Lors de la mise en marche de l'ordinateur la fontion TEST est vraie du fait des équations booléennes B et C choisies pour cette fonction. Par conséquent, l'équation booléenne E = /[TEST est fausse, la sortie VB de la broche (19) n'est donc pas validée et reste bloquée, ce qui empêche la production du signal d'horloge CLK et, par conséquent, la validation des bascules des macrocellules. Les macrocellules associées aux bits de donnée D~, D3, D7 ne peuvent donc pas se charger, même si l'équation A qui leur est associée est vraie, puiqu'il n'y a pas de signal d'horloge. En outre, leur sortie n'est pas non plus validée puisque l'équation booléenne associée D ne peut être vraie que lorsque TEST est fausse. Il est donc nécessaire de passer la fonction TEST à zéro et, par conséquent, de faire une remise à zéro. Cette première étape est réalisée en rendant vraie la fonction booléenne F /A9*/A8*/A7*/A6*/A5*A4+/A3*/A2*A1 */A#*/l0 w*/D7* D3*/Dj~,= [ 012,7E]. C'est-à-dire en écrivant 7E à l'adresse 12, puisque les bits du bus de donnée autres que D~, D3, D7 ne sont pas significatifs. Cette remise à zéro s'effectue alors automatiquement, puisqu'elle est asynchrone et ne nécessite, par conséquent, pas de signal d'horloge, et elle s'étend bien évidemment à toutes les macrocellules. TEST devenant fausse, la fonction VB peut génèrer le signal d'horloge CLK et les bascules peuvent être chargées. La seconde étape consiste à charger les macrocellules des bits de donnée D#, D3, D7, D7, c'est-à-dire à rendre vraie l'équation booléenne A associée, en écrivant à l'adresse 110, la valeur 76 (correspondant à une valeur nulle des bits D#, D3,D7). En même temps, la sortie VB génère le signal d'horloge CLK et la fonction MARQ passe à vraie puisque l'équation booléenne A qui lui est associée est vraie. A ce moment, MARQ est vrai et TEST est faux et la lecture des valeurs des bascules de sortie D~, D3, D7 est possible, et est effectuée à l'adresse de lecture 391, où il faut lire 7E (Cf. équation booléenne D) pour permettre l'utilisation du logiciel. Bien entendu, ces différentes étapes sont intégrées dans le logiciel qui doit être protégé et les instructions correspondantes sont noyées dans le flot de celles propres au logiciel. Bien évidemment, si à la lecture finale des bascules de sortie D~, D3, D7 on n'obtient pas la valeur 7E souhaitée, c'est que le circuit électronique n'est pas présent et, par conséquent, l'utilisation du logiciel n'est plus autorisée et il y a "verrouillage" de celui-ci. On comprendra que le système décrit ci-avant permet une protection particulièrement efficace à l'aide d'un codage pratiquement impossible à décripter. En effet, d'une part, il existe 210 possibilités de choix d'adresses #puisque chaque adresse est formée d'un mot de dix bits, et pour chaque g adresse il y a un choix de 2 donnés constituant le code et d'autre part, les différentes étapes décrites ci-avant - d'activation (faire passer à faux la fonction TEST) - de déclenchement (faire passer à vrai MARQ et VB) - et de lecture, doivent être réalisées dans un ordre bien précis. En outre, on voit que si l'étape finale de lecture est réalisée à l'adresse 390 ou 392, soit juste avant ou juste après l'adresse exacte de lecture 391, l'une des équations B ou C devient vraie de sorte que la fonction TEST passe à vrai ce qui bloque VB et empêche toute validation. Les équations B et C offrent donc une sécurité supplémentaire en réalisant un masquage de l'adresse exacte et en imposant un retour à l'étape initiale et une nouvelle réactivation, ce qui élimine pratiquement toute possibilité d'accéder au codage en procédant pas à pas, c'està-dire adresse par adresse, lors de la lecture des bascules. On peut, en outre, remarquer qu'au démarrage, on ne peut lire que FF à l'adresse 391 (Cf. Equation D) et non pas 7E, ceci même si 76 a déjà été écrit à l'adresse 110, puisque tous les bits de donnée sont à 1 lors de la mise en route de l'ordinateur, et que, par conséquent, il ne peut y avoir autorisation du logiciel que lorsque toutes les trois étapes décrites sont réalisées rigoureusement dans l'ordre indiqué ci-avant. On peut d'ailleurs calculer que le code indiqué ci-avant permet de réaliser plus de quatre milliards de combinaisons pouvant être modifiées à volonté du fait de la possibilité de reprogrammation du circuit décrit ci-avant. Bien entendu, la présente invention ne se limite pas au seul exemple de réalisation montré ci-avant à titre d'exemple non limitatif; c'est ainsi que par - exemple n'importe quelle équation booléenne peut être envisagée à la place de celles indiquées. De même, le nombre de bits du bus d'adresse et du bus de données envoyées sur les entrées du composant pourrait être totalement différent de ceux montrés ci-avant. Enfin, le composant "EP 300" choisi pourrait être remplacé par un composant similaire ou équivalent, voire même, par un circuit de portes logiques, et les signaux envoyés à l'entrée de ce composant pourraient tout aussi bien être formés par des signaux issus de simples contacteurs, par exemple pour la réalisation d'une serrure codée, sans que l'on sorte pour autant du cadre de l'invention. - REVENDICAT1ONS- 1- Système de protection destiné notamment aux logiciels, caractérise en ce qu'il consiste à créer un codage par la combinaison de variables selon au moins une équation booléenne, cette équation booléenne étant réalisée à l'aide d'un circuit électronique logique approprié aux bornes duquel sont envoyées ces mêmes variables. 2- Système de protection selon la revendication I, caractérisé en ce que dans le cas de la protection d'un logiciel, les variables sont formées par les bits des bus de contrôle et d'adresse de l'ordinateur sur lequel est traité ce logiciel et en ce que le code résultant est lu sur le bus de données. 3- Système de protection selon la revendication 2, caractérisé en ce qu'il comprend les étapes consistant à envoyer au moins une donnée à une adresse déterminée - lire le résultat de l'équation booléenne associée - autoriser l'utilisation du logiciel, si la lecture est exacte. 4- Système de protection selon la revendication 3, caractérisé en ce que chaque résultat est stocké dans une bascule dont la lecture n'est possible qu'en fonction du résultat d'une autre équation booléenne. 5- Système de protection selon l'une des revendications 3 ou 4, caractérisé en ce qu'une fonction (TEST) est prévue pour empêcher la production d'un signal d'horloge validant les bascules à la mise en route de l'ordinateur et pour bloquer la protection 6- Système de protection selon la revendication 5, caractérisé en 7 Système de protection selon l'une des revendications 5 ou #, 8- Système de protection selon l'une quelconque des revendications précédentes, caractérisé en ce que le circuit électronique est un composant du type connu sous la dénomination commerciale EP 300, EP 600 ou EP 1200..