FR 2600184 A1 19871218 FR 8608711 A 19860617 "Procédé de protection d'un logiciel informatique et clé électronique pour la mise en oeuvre de ce procédé" La présente invention est relative à un procédé permettant d'assurer la protection d'un logiciel, directement ou sur un support sur lequel ce logiciel est transcrit, notamment du genre d'une disquette ou autre, par l'intermédiaire d'une clé électronique permettant de contrôler que ce logiciel dans lequel a préalablement été introduit un ensemble de codes déterminés, est bien utilisé dans sa forme originelle et en particulier qu'il ne résulte pas d'une copie faite par un tiers sans l'autorisation de celui qui détient, sur ce logiciel, les droits de reproduction. On connait déjà de nombreuses clés de protection de programmes informatiques, qui à l'usage et même si elles se présentent sous des formes très sophistiquées, n'en sont pas moins déchiffrables et par suite, ne sont plus susceptibles d'accomplir leur fonction, le logiciel ainsi décrypté pouvant être reproduit et copié sans autorisation de son propriétaire. Ces clés présentent l'inconvénient majeur d'être des clés statiques, c'est-à-dire qu'une fois incorporées au logiciel, elles restent dans leur état initial, soit sous la forme d'instructions spécifiques qui, non convenablement exécutées, ne permet- tent pas le déroulement subséquent du programme, soit même provoquent la destruction de celui-ci.Mais dans ces réalisations, une approche logique des instructions contenues dans le logiciel, au prix d'un effort d'autant plus délicat que la clé est plus complexe, permet cependant de contourner les interdictions introduites et de les violer impunément, en autorisant alors le piratage du programme. La présente invention a pour objet un procédE qui permet de pallier ces inconvénients en introduisant dans le logiciel à protéger, notamment en des zones dispersées préalablement déterminées de celui-ci, des instructions codées. Celle-ci, de façon répétitive au fur et à mesure du déroulement du programme, va fournir séquentiellement une image codée, qui est transformée pour être comparée à une seconde image codée de référence, fournie parallèle- ment par la clé elle-même, ces images étant, en cas de colncidence, renvoyées à nouveau respectivement vers le logiciel et vers la clé pour élaborer dans une étape suivante de nouvelles images distinctes des premières, à comparer à nouveau entre elles et ainsi de suite jusqu'à l'achèvement du programme. Le procédé selon l'invention substitue ainsi aux effets d'une clé statique classique, ceux d'une véritable clé dynamique qui de façon évolutive et selon une Loi déterminée, élaborée par la clé elle-meme, permet autant de fois que souhaité au cours du déroulement du programme, par un véritable dialogue interactif entre la clé et le programme, de vérifier que celui-ci est bien le programme créé originellement et ne résulte pas d'une copie non autorisée. A cet effet, le procédé considéré, pour la protection d'un logiciel informatique au moyen d'une clé élec- tronque d effet dynamique, se caractérise en ce qutil consiste à introduire dans ltécriture du logiciel etXou sur un support de celui-ci, un code constitué par une première pluralité d'instructions localisées dans autant de zones élémentaires de codage, réparties de façon prédéterminée dans la séquence des instructions du programme, de telle sorte que ces instructions soient disposées en parallèle avec une seconde pluralité d'instructions localisées dans autant de zones élémentaires codées d'une mémoire permanente de la clé, distinctes des zones de la première pluralité, à disposer dans une unité centrale à microprocesseur associée à la clé, un logiciel de contrôle et de protection permettant d'extraire l'ensemble des instructions codées contenues dans les zones élémen- taires du logiciel et de la clé pour élaborer deux images codées de ceux-ci définies à un instant donné, à transformer ces deux images codées en deux autres images homologues selon un algorithme de transformation défini par la clé et/ou le logiciel à protéger pour obtenir une identité de ces images transformées caractérisant l'origine autorisée du logiciel, à modifier ensuite les deux images codées pour créer deux nouvelles images distinctes dés images initiales, puis à transférer les instructions codées successives de ces nouvelles images codées dans les deux pluralités de zones élémentaires, respectivement du logiciel et de la clé, en vue d'assurer selon un autre cycle un contrôle ultérieur de l'origine du logiciel par vérification de la concordance d'images codées qui sont alors différentes de celles précédemment mises en Jeu. A chaque vérification du logiciel par la clé, consistant à comparer et à constater l'identité de deux images codées homologues, la clé génère deux nouveaux codes à substituer à ceux initialement introduits dans le logiciel et la clé elle-m#me, de telle sorte que, contrairement aux clés statiques où le code introduit et le code de référence restent identiques à eux-mêmes, se produise ici une évolution dynamique permanente, à la fois du code lié au logiciel mais, en parallèle, de celui qui dans la clé permettra la comparaison et, en cas d'identité des images, la validation du programme. La mémoire permanente de la clé comporte par construction n codes d'ensembles distincts, qui correspondent chacun à un logiciel déterminé dont la clé assure la protection. Ce code est fractionné en une série d'instructions codées élémentaires qui sont fournies au propriétaire du logiciel ou à tout ayant-droit,- afin que ces instructions soient introduites dans le programme, sans toutefois que l'utilisateur ne connaisse ni les instructions homologues de la clé, ni bien entendu l'algorithme de transformation des images codées correspondantes. Chaque code d'ensemble peut correspondre à un ou plusieurs octets de mémoire. De préférence, les instructions introduites dans les zones élémentaires du logiciel et de la clé sont stockés et/ou extraits bit par bit, vers ou de la mémoire de l'unité centrale et incorporés à des octets d'instructions ou de service. La clé comporte notamment, dans un mode de réalisation particulier de l'invention, 256 codes différents, correspondant à 256 possibilités de protection d'autant de logiciels distincts, une extension à 1024 codes étant possible sans sortir du cadre de la présente invention. L'extraction des instructions codées introduites dans les zones élémentaires, tant du logiciel que de la clé, pour constituer les images codées de ceux-ci s'effec- tue au moyen d'un logiciel particulier stocké dans l'unité centrale permettant de sélectionner ces instructions pour reconstituer le code d'ensemble spécifique du logiciel à protéger. Bien entendu, il est clair que l'efficacité de la clé est d'autant plus élevée que le nombre des zones élémentaires de codage est plus grand et que celles-ci sont plus dispersées. A noter que ces zones peuvent être réparties, soit directement dans le programme à protéger lui-même, soit dans la disquette ou analogue constituant son support, soit même dans l'un et l'autre, en améliorant encore ainsi l'efficacité de la protection. Les instructions codées introduites dans les zones élémentaires sont toujours physiquement différentes, dans le logiciel à protéger d'une part et dans la clé - d'autre part, de telle sorte que ltéventusl décryptage de ces informations dans un cas à un instant quelconque donné ne puisse pas entraîner celles de l'autre et vice-versa. Les instructions codées ainsi extraites sont alors stockées dans la mémoire de l'unité centrale puis transformées séparément en des images homologues par un algorithme de transformation inclus dans la clé et/ou le logiciel lui-même, les images transformées étant ensuite comparées pour vérifier leur identité. En cas de coinci- dence, l'unité centrale valide le logiciel, dont l'authenticité est ainsi reconnue ; en revanche en cas de noncoincidence, preuve de la copie non autorisée du programme, le déroulement de celui-ci est immédiatement arrêté, toutes les sanctions usuelles, en particulier la destruction du programme et/ou au moins l'effacement d'instructions nécessaires étant #réalisés automatiquement, rendant son usage ultérieur impossible. Une fois la validation du programme ainsi effectuée, le transfert des images codées stockées dans l'unité centrale est alors réalisé, vers la clé et le logiciel, pendant le déroulement de celui-ci afin d'introduire, dans les zones élémentaires qu'ils comportent des instructions codées qui sont cette fois différentes de celles précédemment stockées, en se substituant à ces dernières. Le processus de contrôle peut alors reprendre, par exemple à l'occasion d'une nouvelle utilisation du logiciel. Naturellement, il va de soi que le cycle de contrôle et de vérification peut être répété autant de fois que désiré au cours d'un même passage du logiciel. D'autres caractéristiques et avantages de l'invention apparaitront encore à travers la description qui suit d'un exemple de réalisation, donné à titre indicatif et non limitatif, en référence aux schémas ci-annexés qui illustrent A la figure 1, un schéma de principe des éléments logiciels et matériels nécessaires à la mise en oeuvre du procédé selon l'invention. A la figure 2, les liaisons réalisées au cours de la fonction extraction pour l'obtention des images codées du logiciel à protéger et de la clé dynamique de protection. A la figure 3, les liaisons correspondant à la fonction transformation de ces images, pour la vérification de l'identité de ces images. A la figure 4, les liaisons correspondant à la fonction de transfert, pour la réalisation d'images codées différentes des images codées précédentes. A la figure 5, les liaisons finales de transfert de ces nouvelles images codées vers les zones élémentaires de stockage du logiciel et de la clé. Sur ces schémas, la référence 1 désigne le logiciel à protéger, transcrit sur un support adapté, du genre d'une disquette ou d'une bande magnétique ou autre, la nature de ce support étant en fait totalement indifférente à l'invention elle-même. Ce logiciel peut être écrit en tout language approprié, par exemple en language C, Pascal et assembleur 8086, mais peut être aisément adapté pour être traité avec toute autre unité centrale à microprocesseur, du type Z 80, 6502, 68000, etc. La référence 2 schématise une carte de circuits imprimés, constituant la clé proprement dite, comportant une mémoire permanente et portant également une unité centrale de traitement 3, réalisant les trois fonctions successives respectivement d'extraction en 4, de transformation en 5 et de transfert en 6, conformément au procédé selon l'invention. Sur le logiciel à protéger 1 comme sur la clé 2 sont prévues des zones élémentaires de stockage, de préfé rence réparties selon une pluralité de localisations distinctes successives où des instructions codées appropriées sont intégrées lors de l'élaboration du logiciel d'une part, par construction sur la clé d'autre part, ces instructions constituant dans cette dernière un code d'ensemble adapté au logiciel à protéger. Ainsi sur le schéma de la figure 1, ces instructions codées se répartissent selon x zones fragmentées, repérées de IDx,l à lDx,n, les indices 1 à n repérant le nombre et la localisation successive de chacune des zones élémentaires de stockage et l'indice x l'état de ces informations codées à un instant donné, correspondant à un cycle quelconque de contrôle. De même, dans la mémoire de la clé 2 sont stockés les informations codées IHx,l à lHx,n, correspondant au code d'ensemble adapté au logiciel à protéger. Comme déjà indiqué, la clé 2 comporte ici 256 positions de mémoire, pour autant de codes d'ensemble correspondant à autant de logiciels à protéger, une extension à 1024 positions étant parfaitement envisageable. Le schéma de la figure 2 illustre l'étape d'extraction mise en oeuvre selon le procédé de l'invention. Dans cette étape, l'unité centrale 3 extrait par sa fonction 4, à la fois du logiciel 1 et de la clé 2, l'ensemble des informations codées intégrées dans ceux-ci dans leurs zones élémentaires, pour les regrouper et fournir finalement en ID(X) et en IH(X), deux images codées, stockées dans la mémoire de l'unité centrale. Dans l'étape suivante, illustrée sur le schéma de la figure 3, les images codées ID(-X > et IH(X) sont respectivement transformées par la fonction 5, au moyen d'algorithmes appropriés, correspondant à des fonctions mathématiques prédéterminées, afin de produire deux images transformées respectivement IC(d) et IC(h) que l'unité centrale 3 compare alors l'une à l'autre. En cas d'identité, le logiciel est exactement identifié et validé, la clé permettant ainsi de contrôler son authenticité et en particulier qu'il ne résulte pas d'une copie non autorisée. En revanche, en cas de non identité, le déroulement du logiciel est immédiatement arrêté. Si l'identité précédente est effectivement reconnue, le système élabore alors lui-même, en relation avec le logiciel et la clé, deux nouveaux ensembles d'informations codées, différentes de celles précédemment stockées, en assurant qu'au cycle de vérification suivant, soit au cycle lX+l) suivant le cycle (X) par exemple, le processus s'effectue sur des données distinctes, rendant ainsi par répétitions successives effectuées de préférence au cours d'un même passage du logiciel à protéger, la clé totalement inviolable. Dans ce but et comme illustrée sur la figure 4, la fonction 6 de l'unité centrale 3 va produire à partir des deux images codées IC(d) et IC(h) précédentes, de nouvelles images codées.ID(X + 1) et IH(X + 1) distinctes des images ID(X) et IH('X) initiales. Celles-ci, comme représenté sur la figure 5, sont ensuite fragmentées par l'unité centrale pour élaborer x informations codées élémentaires respectivement ID(x + 1) à ID(x + n) d'une part, IH(x + 1) à IH(x i n) d'autre part, qu'elle transfère ensuite sur le logiciel et la clé dans les zones élémentaires de stockage qu'ils comportent, ainsi rendues aptes à une nouvelle vérification lors du cycle suivant. Le cycle de contrôle est donc à chaque foi#s initialisé à partir de codes en permanence actualisés qui évoluent au cours du déroulement de ce cycle et se renouvellent totalement de l'un au suivant. Il en résulte une protection entièrement verrouillée puisqu'a chaque cycle, ctest le logiciel lui-même qui en combinaison avec la clé génère les codes permettant le contrôle effectué au cycle suivant et ainsi de suite. La clé dynamique réalise donc une transformation permanente des instructions codées prises en compte. Bien enten#du, il va de soi que l'invention ne se limite pas à l'exemple de réalisation plus spécialement décrit et représenté ci-dessus ; elle en embrasse au contraire toutes les variantes. En particulier, il est clair que le système proposé peut s'adapter à tout type de logiciel, écrit en tout langage pour tout type d'ordinateur. De même, il doit être souligné que la réalisation centrale centraleet du programme de traitement des informations, ne fonSpartie de l'invention, ces ces éléments étant à considérer non pas en tant que tels, mais seulement dans la combinaison de leurs fonctions telles qu'elles entrent en jeu dans le procédé de l'invention, en permettant le traitement approprié des flux d'informations permanents entre le logiciel à protéger et la clé dynamique. REVENDICATIONS 1. Procédé de protection d'un logiciel informatique au moyen d'une clé électronique à effet dynamique, caractérisé en ce qu'il consiste à introduire dans l'écriture du logiciel et/ou sur un support de celui-ci, un code constitué par une première pluralité d'instructions localisées dans autant de zones élémentaires de codage, réparties de facon prédéterminée dans la séquence des instructions du programme, de telle sorte que ces instructions soient disposées en parallèle avec une seconde pluralité d'instructions localisées dans autant de zones élementaires codées d'une mémoire permanente de la clé, distinctes des zones de la première pluralité, à disposer dans une unité centrale à microprocesseur associé à la clé, un logiciel de contrôle et de protection permettant d'extraire l'ensemble des instructions codées contenues dans les zones élémentaires du logiciel et de la clé pour élaborer des images codées de ceux-ci définies à un instant donné, à transformer ces deux images codées en deux autres images homologues selon un algorithme de transformation défini par la clé et/ou le logiciel à protéger pour obtenir une identité de ces images transformées caractérisant l'origine autorisée du logiciel, à modifier ensuite les deux images codées pour créer deux nouvelles images distinctes des images initiales, puis à transférer les instructions codées successives de ces nouvelles images codées dans les deux pluralités de zones élémentaires, respectivement du logiciel et de la clé, en vue d'assurer selon un autre cycle un contrôle ultérieur de l'origine du logiciel par vérification de la concordance d'images codées qui sont alors différentes de celles précédemment mises en jeu. 2. Procédé selon la revendication 1, caractérisé en ce que le cycle de contrôle et de vérification est renouvelé plusieurs fois au cours d'un même passage ou utilisation du logiciel. 3. Procédé selon l'une des revendications 1 ou 2, caractérisé en ce qu'on introduit dans la clé un nombre déterminé de code distincts, correspondant à autant de logiciels à protéger. 4. Procédé selon l'une des revendications 1 à 3, caractérisé en ce que chaque code correspond à un ou plusieurs octets de mémoire. 5. Procédé selon la revendication 4, caractérisé en ce que les instructions de chaque code sont introduites dans les zones élémentaires du logiciel et de la clé et stockées ou extraites bit par bit, en étant incorporées à des octets d'instructions ou de service. 6. Clé électr6nique pour la mise en oeuvre du procédé selon l'une quelconque des revendications 1 à 5, caractérisé en ce qu'elle comporte, sur une carte de circuits imprimés, une mémoire permanente ayant de préférence 256 positions correspondant à 256 codes distincts pour autant de logiciels à protéger, avec extension éventuelle à 1024 positions. 7. Clé électronique selon la revendication 6, caractérisée en ce que l'unité centrale est portée par la clé et comporte un microprocesseur assurant les fonctions d'extraction, transformation et transfert des instructions codées.