PROCEDE ET PLATE-FORME DE MANIPULATION DE DONNEES SECURISEES
La présente invention concerne le domaine de la mise en œuvre de fonctions de sécurité par des applications informatiques. Parmi ces applications, on peut citer entre autres, des applications de télé-procédure, de gestion de travaux (« workflow »), de courrier électronique, de publication de documents. Une fonction de sécurité est une fonction qui apporte un niveau de sécurité en reposant notamment sur des algorithmes cryptographiques (algorithmes symétriques, algorithmes asymétriques, fonctions de condensation ou hachage, code d'authentification de messages, etc). Les deux algorithmes asymétriques les plus répandus sont RSA (« Rivest Shamir Adelman ») et DSA (« Digital Signature Algorithm »). Les algorithmes de hachage les plus utilisés sont le SHA-1 et MD5. Parmi les algorithmes symétriques les plus répandus figurent DES (« Digital Encryption Standard »), Triple DES, AES (« Adavanced Encryption Standard »), IDEA (« International Data Encryption Algorithm »). Parmi les fonctions de sécurité qui reposent sur des algorithmes cryptographiques asymétriques figurent par exemple la signature électronique, la vérification de signature électronique, le chiffrement, le déchiffrement, l'horodatage, la vérification d'horodatage. La signature électronique consiste en une authentification d'une entité et une preuve d'un lien infalsifiable entre un document et l'identité de l'entité. Le chiffrement permet de garantir la confidentialité d'un document. L'horodatage permet de garantir une certaine heure et de la lier par un lien infalsifiable à un document. Dans le cas d'une application utilisant la signature électronique, les données signées résultant de la fonction de sécurité type comportent un document qui rassemble typiquement la signature (ou les signatures s'il y a plusieurs signataires), des informations sur les algorithmes utilisés ( par exemple un algorithme cryptographique asymétrique tel que RSA qui utilise la clé privée du signataire) et éventuellement d'autres informations. Une signature est le résultat de l'acte de signer effectué par un signataire et est composée de sous-éléments comportant le résultat du calcul cryptographique, des
informations sur le signataire (par exemple son certificat X.509 ou des éléments permettant de retrouver ce certificat), éventuellement des informations sur l'heure de signature, sur le contexte de signature, sur la non- révocation du certificat au moment de la signature, etc. Les éléments de signature sont ensuite assemblés et mis en forme selon un format de données défini à l'avance, puis ils sont communiqués. En effet, afin que les données résultant d'une fonction de sécurité type puissent être échangées d'une part, et conservées d'autre part, elles doivent respecter un format convenu entre les parties utilisant la fonction de sécurité, et adapté à la fonction de sécurité. Ces formats sont en général standardisés mais peuvent néanmoins être propriétaires. Pour la signature électronique, les formats standards les plus utilisés sont : PKCS#7, publié par la société RSA Security, Inc. et par l'Internet Engineering Task Force (IETF) en tant que RFC 2315, qui a été repris dans CMS (« Cryptographie Message Syntax », voir RFC 2630 de IMETF), PGP, correspondant aux messages signés issus du logiciel PGP (« Pretty Good Privacy » commercialisé par la société Networks Associates Technology, Inc.) et de ses analogues, XML-DSig, faisant partie de la famille des formats de données XML (« eXtended Markup Language ») (voir RFC 3275), XAdES ("XML Advanced Electronic Signatures") faisant également partie de la famille des formats de données XML et prenant en compte des précisions demandées par des directives européennes. Pour le chiffrement, les formats standards les plus utilisés sont : PKCS#7, - CMS, XLM-Enc faisant partie de la famille des formats de données XML (voir http://www.w3.org/TR/xmlenc-core), PGP.
Pour l'horodatage, le format standard le plus utilisé est TSP (« Time Stamping Profile », voir RFC 3161). Certains formats utilisent des syntaxes à base de la norme internationale ASN.1 (« Abstract Syntax Notation number One »), comme PKCS#7 et CMS. D'autres sont à base de XML, comme XML-DSig, XAdES, XML-Enc. Il existe en outre des formats définis à partir de types de syntaxes standards moins connus, voire des formats propriétaires, parfois publiés. Dans la mise en œuvre de fonctions de sécurité dans des applications informatiques dans l'art antérieur, le traitement des données sécurisées dépend fortement du format de ces données. Une fonction est irrémédiablement liée à un format de données particulier. Un développeur de services sécurisés n'implémente ses fonctions de sécurité qu'en connaissant le format souhaité des données en sortie. Or les processus de traitement sont les mêmes. Par exemple, on vérifie toujours une signature électronique de la même façon, qu'elle ait été véhiculée au format CMS ou au format XML-DSig. Dans tous les cas, on valide le ou les certificats du ou des signataires. On vérifie la signature cryptographique. On peut en outre vérifier des éléments complémentaires (heure de signature, etc.), et ce, quel que soit le format de données retenu. Le fait qu'une application faisant appel à des fonctions de sécurité soit développée et implémentée en étant liée d'office à un format spécifique implique des développements importants spécifiques pour un même type d'application faisant appel à différents formats ou encore lors de l'apparition d'un nouveau format. Il en résulte que les travaux de développement sont lourds et peuvent prendre beaucoup de temps. Un but de la présente invention est de pallier ces limitations de l'art antérieur. A cette fin, suivant un premier objet, l'invention propose un procédé de manipulation de données sécurisées dans un système comportant au moins une application faisant appel à des fonctions de sécurité selon des formats variés. Le procédé comporte une étape selon laquelle on organise l'application en une couche applicative, une couche de gestion de format et une couche de médiation séparant les couches applicative et de gestion de format. La couche
de médiation présente à la couche applicative une interface indépendante du format. La couche de gestion de format comporte au moins un module de formatage. Le procédé comporte en outre les étapes selon lesquelles : - sur fourniture par la couche applicative à la couche de médiation à travers l'interface indépendante du format, d'une requête relative à du formatage comportant une indication de type de fonction de sécurité et une indication de format, on sélectionne dans la couche de médiation un module de formatage en fonction desdites indications au moins, - et on présente depuis la couche de médiation au module de formatage sélectionné, une requête relative au type de fonction de sécurité et au format indiqués, pour la fourniture à la couche applicative de données correspondant au type de fonction de sécurité indiqué et formatées au format indiqué. Ainsi un procédé selon l'invention permet de manipuler dans la couche applicative des éléments sécurisés (par exemple un message signé, un message chiffré etc) indépendamment du format particulier de ces éléments. Les applications logicielles utilisant les fonctions de sécurité peuvent ainsi être conçues indépendamment d'un format spécifique. Ceci permet en outre de faire migrer ces applications aisément d'un format à l'autre et de prendre en compte facilement un nouveau format. Un tel procédé permet également de faire coopérer aisément des applications distinctes. Suivant un second objet, l'invention propose une plate-forme de manipulation de données sécurisées dans un système comportant au moins une application faisant appel à des fonctions de sécurité selon des formats variés. La plate-forme comporte une couche applicative, une couche de gestion de format comportant au moins un module de formatage, une couche de médiation disposée entre la couche applicative et la couche de gestion de format et présentant à la couche applicative une interface indépendante du format, et des moyens pour mettre en œuvre un procédé selon le premier objet de l'invention.
D'autres caractéristiques et avantages de l'invention apparaîtront encore à la lecture de la description qui va suivre. Celle-ci est purement illustrative et doit être lue en regard des dessins annexés sur lesquels : la figure unique représente un système dans un mode de réalisation de l'invention. Sur la figure unique est représentée une plate-forme 1 de manipulation de données sécurisées dans un premier mode de réalisation de l'invention. La plate-forme 1 comporte une couche applicative 2 comportant plusieurs fonctions de sécurité, telles que signature électronique, chiffrement, algorithmes cryptographiques mises en œuvre dans le cadre d'applications diverses. La plate forme 1 comporte en outre une couche de gestion de format 4. La plate forme 1 comporte une couche de médiation 3 ci-après nommé Fédérateur, située entre la couche applicative 2 et la couche de gestion de format 4. La couche de gestion de format 4 comporte des modules de gestion de format 5 à 18. Ces modules sont aptes à formater l'ensemble constitué des données sécurisées brutes résultant de certaines fonctions de sécurité type dans certains des formats adaptés à ces fonctions de sécurité. Le Fédérateur 3 communique avec la couche applicative 2 par l'intermédiaire d'une interface logicielle de programmation 20 (API, « Application Programming Interface ») de haut niveau. Cette interface est indépendante du format retenu dans les échanges entre le Fédérateur 3 et les fonctions de sécurité appelées dans la couche applicative 2. Dans le mode de réalisation représenté en figure unique, des applications de la couche applicative 2 transmettent via TAPI 20 au Fédérateur 3 des requêtes qui contiennent des données brutes séparées relatives aux fonctions de sécurité type, en attente d'une mise à un format spécifique adapté à la fonction. Une indication sur le type de format souhaité pour la mise en forme de l'ensemble constitué de ces données brutes résultant des fonctions de sécurité type est également fournie via TAPI 20 au Fédérateur 3. Celui-ci sélectionne ensuite en fonction des données brutes de la fonction de sécurité transmises
dans la requête et de l'indication de format reçues, un module parmi les modules 5 à 18. Puis le Fédérateur 3 transmet les données brutes au module de formatage sélectionné. L'indication figurant dans la requête de formatage sur le type de format demandé pour la fonction de sécurité comporte la désignation du format souhaité. Elle peut en outre comporter des paramètres spécifiant des options possibles du format, par exemple la précision pour un format donné du type d'encodage ( par exemple BER, DER binaire, DER encodé en Base 64, DER encodé en Base 64 avec balise PEM). Le Fédérateur 3 communique avec les modules de gestion de formats par l'intermédiaire d'interfaces logicielles de niveau bas. A chaque module est associée une liste respective de couples indiquant les fonctions et formats qu'il est apte à traiter. Chaque couple est composé d'un type de fonction de sécurité et d'un format correspondant à ce type de fonction de sécurité. Le format dans un couple de la liste d'un module de la couche de médiation peut en outre être précisé par des paramètres spécifiques. Il peut s'agir par exemple de la précision pour un format donné du type d'encodage que le module de gestion de format est apte à fournir. Les modules de gestion de format selon le mode de réalisation représenté en figure unique sont capables de construire des données formatées à un certain format, à partir d'une requête qui leur est fournie par le Fédérateur 3 et comportant des données brutes relatives à une fonction de sécurité, quand le couple, composé de ce format et de cette fonction de sécurité type, figure dans la liste de couples associée à ce module. Lors d'une initialisation de la plate-forme 1 , le Fédérateur 3 recense dans un annuaire 19 l'ensemble des listes de couples associées aux modules de la couche de gestion de format 4. Dans le mode de réalisation considéré sur la figure unique, le Fédérateur 3 ainsi que les modules 5 à 18 de la couche de gestion de format 4 sont réalisés en langage Java (voir « The Java Language Spécification » publié par la société Sun Microsystems, Inc.). Sur réception d'une requête transmise par l'API 20 et comportant des données brutes à formater selon un format F (éventuellement complété par des
paramètres précisant des options du format de sortie) indiqué et relatives à une fonction de sécurité S, le Fédérateur 3 sélectionne dans son annuaire 19 un module parmi les modules 5 à 18, dont la liste de couples comporte le couple (S, F). Puis le Fédérateur 3 transmet les données brutes au module de la couche de gestion de format sélectionné pour formatage au format F. Le module sélectionné traite alors la requête en mettant au format indiqué avec des spécificités le cas échéant, les données brutes. Il fournit par la suite les données sécurisées formatées au Fédérateur 3, qui les relaie ensuite à la fonction de sécurité qui avait initié la requête. Dans le mode de réalisation représenté en figure unique, la liste de chaque module comporte un unique couple. Dans un mode de mise en œuvre différent de l'invention, la liste d'un module de la plate-forme de médiation 4 pourrait comporter plusieurs couples. Ainsi la liste L5 associée au module 5 est composé du couple {Signature, PKCS#7SignedData BER}. La liste L6 associée au module 6 est {Signature, PKCS#7SignedData respectant la RFC 3126}. La liste L7 associée au module 7 est {Chiffrement, PKCS#7EnvelopedData}. La liste L8 associée au module 8 est {Horodatage, PKCS#7SignedData respectant la RFC 3161}. La liste L9 du module 9 est {Signature, XMLDSig}. La liste L10 du module 10 est {Signature, XMLDSig enveloppante}. La liste L11 du module 11 est {Signature, XMLDSig X5O9Data}. La liste L12 du module 12 est {Signature, XMLDSig RSAKeyValue}. La liste L13 du module 13 est {Signature, XMLDSig enveloppée}. La liste L14 du module 14 est {Chiffrement, XMLENC}. La liste L15 du module 15 est {Signature, XAdES-X}. La liste L16 du module 16 est {Signature, XAdES-X-L}. La liste L17 du module 17 est {Signature, XAdES-T}. La liste L18 du module 18 est {Signature, XAdES}. Lors d'une requête pour une mise au format PKCS#7SignedData précisant que l'encodage doit être de type BER, une fonction type de signature va transmettre au Fédérateur 3 les données suivantes : les éléments signés, la signature proprement dite et le certificat au format X509. Le Fédérateur sélectionne donc le module 5 dont la liste L5 contient le couple {Signature, PKCS#7SignedData BER} correspondant à la requête reçue par l'API 20. Puis il relaie cette requête vers le module 5 sélectionné, lequel traite les
informations en les formatant au format PKCS#7SignedData avec encodage BER, puis envoie les données formatées au Fédérateur 3, qui les relaie à son tour à la couche applicative 2. Lors d'une requête pour une mise au format PKCS#7EnvelopedData relative à une fonction de chiffrement, le Fédérateur 3 reçoit par l'API 20 les données suivantes : les éléments chiffrés, l'algorithme de chiffrement utilisé, la clef de session et les certificats des destinataires. Le Fédérateur 3 sélectionne donc le module 7 dont la liste L7 contient le couple {Chiffrement, PKCS#7EnvelopedData} correspondant à la requête reçue par l'API 20. Puis il relaie cette requête vers le module 7 sélectionné, lequel traite l'ensemble constitué des données reçues en le formatant au format PKCS#7EnvelopedData, puis envoie les données de la fonction de sécurité formatées au Fédérateur 3, qui les relaie à son tour à la couche applicative 2. Lors d'une autre requête pour une mise au format PKCS#7SignedData respectant la RFC 3161 relative à une fonction d'horodatage, le Fédérateur 3 reçoit par l'API 20 les données sécurisées brutes suivantes : l'heure, la signature de l'heure et le certificat du signataire au format X509. Le Fédérateur 3 sélectionne donc le module 8 dont la liste L8 contient le couple {Horodatage, PKCS#7SignedData respectant la RFC 3161} correspondant à la requête reçue par l'API 20. Puis il relaie cette requête vers le module 8 sélectionné, lequel traite les informations en les formatant au format PKCS#7SignedData respectant la RFC 3161 , puis envoie les données formatées au Fédérateur 3, qui les relaie à son tour à la couche applicative 2. Dans un mode de réalisation, des applications de la couche applicative transmettent également via l'API haute au Fédérateur des requêtes qui contiennent des données relatives à des fonctions de sécurité types, formatées selon un format de fonction de sécurité et en attente d'une extraction des données brutes séparées correspondant à ces données formatées. Ce type d'opérations constituent l'inverse des opérations commentées ci-avant : il s'agit ici d'un « déformatage ». Dans un tel mode de réalisation, la couche de gestion de format comprend des modules d'extraction. De tels modules d'extraction sont associés à une liste de couples similaire à celle décrite plus haut. Ils sont
capables d'extraire des données brutes relatives à des fonctions de sécurité, à partir d'une requête qui leur est fournie par le Fédérateur et comportant des données formatées relatives à une fonction de sécurité, quand le couple composé de ce format et de cette fonction de sécurité figure dans la liste de couples associée à ce module. De la même façon que décrit ci-dessus, sur réception d'une requête transmise par l'API haute et comportant des données formatées selon un format F' relatives à une fonction de sécurité S' (l'indication de format relatif à la fonction de sécurité est alors implicite puisqu'il est défini par les données formatées elles-mêmes), le Fédérateur sélectionne, dans un annuaire similaire à l'annuaire 19 recensant des modules réalisant l'extraction et associés chacun à une liste de couples (fonction de sécurité/format de données sécurisées), un module parmi les modules d'extraction dont la liste de couples comporte le couple (S', F'). Puis le Fédérateur 3 transmet les données brutes au module de la couche de gestion de format sélectionné pour extraction, via l'API basse permettant les échanges entre le module sélectionné et le Fédérateur. Le module sélectionné traite alors la requête en extrayant à partir des données formatées reçues, les éléments séparés correspondants, selon éventuellement des spécificités indiquées. Il fournit par la suite les données sécurisées extraites au Fédérateur, qui les relaie ensuite à l'application qui avait initié la requête. Les modules réalisant le formatage et ceux réalisant l'extraction peuvent être des modules séparés ou non. Certaines plates-formes peuvent être dédiées au formatage et ne comporter que des modules de formatage. Inversement, certaines plates-formes peuvent être dédiées à l'extraction et ne comporter que des modules d'extraction. D'autres plates-formes peuvent réaliser à la fois des opérations de formatage et d'extraction. De plus, certaines plates-formes peuvent ne comporter qu'un unique module, réalisant le formatage et/ou l'extraction, dans la couche de gestion de format. Dans un mode de mise en œuvre, les modules peuvent en outre réaliser des traitements supplémentaires avant de fournir les données sécurisées formatées (ou extraites) au Fédérateur, en faisant appel à des entités en liaison avec la plate-forme 1. Ils peuvent faire appel notamment à
des fonctions cryptographiques. Par exemple, un module recevant des données relatives à une fonction de signature peut ajouter à ces données avant de les formater, un jeton d'horodatage. Dans un mode de mise en œuvre particulier, la sélection d'un module de la couche de gestion par le Fédérateur se fera en fonction de la fonction type de sécurité, de l'indication de format indiqué pour le résultat de la fonction de sécurité comme indiqué ci-dessus, et en outre en fonction du format de certaines des données fournies via l'API haute au Fédérateur. Ainsi la liste de chaque module comportera des couples composés chacun d'un format de fonction de sécurité (avec des options éventuellement précisées par exemple l'encodage souhaité comme décrit plus haut) et d'une fonction de sécurité type avec des options précisées portant sur les formats acceptés par le module pour chacun des éléments séparés dont l'ensemble constitue les données, l'ensemble de données devant être formaté par le module. Par exemple, lors de la fourniture au Fédérateur par la couche applicative, des données sécurisées brutes relatives à une signature, un certificat est remis. Le certificat peut être fourni sous plusieurs formats : X509, PGP etc. Cette disposition permet ainsi de sélectionner un module capable de traiter le format des données reçues. Dans un mode de mise en œuvre différent mettant en œuvre le même type d'architecture en trois couches selon l'invention, qui permet de dissocier les aspects applicatifs des aspects de gestion de format, la couche de gestion de format ne manipule pas directement les données sécurisées brutes à formater ou encore les données sécurisées formatées dont il faut extraire les données brutes. Mais les modules de la couche de gestion de format associés à des listes respectives de couples sont aptes à créer des objets au sens de la Programmation Orientée Objet (POO), qui sont ensuite directement gérés par les applications. Chaque objet est associé à un unique couple (S, F) de la liste du module qui l'a créé. Il saura, s'il est conçu pour formater des données, formater au format F des données séparées brutes relatives à la fonction de sécurité S, qui lui seront fournies. S'il est conçu pour extraire des données, il
saura extraire de données formatées au format F, les données séparées brutes relatives à la fonction de sécurité S correspondantes. Dans un tel mode de réalisation de l'invention, une application transmet au Fédérateur une requête relative au formatage (ou encore à l'extraction) et comportant l'indication d'un type de fonction S1 (signature, chiffrement, horodatage ...) et un format de données F1 correspondant à cette fonction de sécurité type. Le fédérateur sélectionne, de la même manière que celle décrite en référence à la figure unique, un module de la couche de gestion de format depuis un annuaire similaire à l'annuaire 19 obtenu par un recensement des modules de la couche de gestion et lui transmet une requête comportant l'indication de la fonction de sécurité type et du format. Le module sélectionné définit alors un objet correspondant au format F1 et à la fonction de sécurité type S1 , crée l'objet et fournit l'objet créé au Fédérateur, qui se charge alors de le mettre à disposition de l'application à l'initiative de la requête. Les échanges de données ont lieu ensuite directement entre l'application et l'objet. Dans le cas du formatage, les données brutes relatives à la fonction de sécurité F1 associée à l'objet lui sont fournies par l'application. L'objet traite ces données et retourne ensuite les données formatées au format F1 directement à l'application. Dans le cas de l'extraction, les données sécurisées au format F1 de fonction de sécurité S1 et relatives à la fonction de sécurité S1 sont fournies à cet objet par l'application directement. L'objet traite ces données et retourne ensuite les données brutes relatives à la fonction de sécurité S1 directement à l'application. Ainsi la présente invention permet de manipuler dans la couche applicative des éléments sécurisés résultant de fonction de sécurité indépendamment du format de sortie particulier finalement retenu pour la fonction de sécurité. La prise en compte d'un nouveau format se résume à la constitution d'un nouveau module adapté dans la couche de médiation ; les applications dans lesquelles on souhaite utiliser ce nouveau format n'ont pas à être re-développées. La prise en compte d'une nouvelle application se traite en couche applicative uniquement. Ainsi les impacts de modifications de format ou d'applications sur les développements logiciels sont nettement diminués