FR 2949877 A1 20110311 FR 0956197 A 20090910 PROCÉDÉ DE VÉRIFICATION DE L'INTÉGRITÉ DE DONNÉES INSCRITES DANS UNE MÉMOIRE DESCRIPTION DOMAINE TECHNIQUE L'invention se situe dans le domaine des télécommunications et concerne plus spécifiquement un procédé de vérification de l'intégrité de données numériques à inscrire dans une mémoire associée à une première carte à puce. L'invention vise plus précisément une amélioration de la sécurité et de la fiabilité du procédé de production des cartes à puce pour la télévision à péage. ÉTAT DE LA TECHNIQUE ANTÉRIEURE Les cartes à puce sont de plus en plus utilisées pour stocker des données numériques d'identification et d'authentification. C'est le cas notamment des cartes bancaires, des cartes de contrôle d'accès à des locaux sécurisés ou encore des cartes à puce utilisées comme processeur de sécurité pour contrôler l'accès à des contenus embrouillés distribuées par un opérateur à des abonnés munis de droits d'accès. Les informations d'identification et d'authentification sont inscrites dans les mémoires de ces cartes à puce lors de la phase de production. Ces informations comportent, notamment, des données relatives aux services fournis, aux clefs de déchiffrement des contenus embrouillés, aux droits de l'abonné, et aux données de diversification permettant de rendre chaque carte unique. Après l'inscription de ces informations, il est nécessaire de vérifier si les données ont été correctement inscrites dans les cartes. Une première solution connue pour effectuer cette vérification consiste à effectuer un test fonctionnel de la carte utilisant les données qui y sont inscrites. Une deuxième solution connue consiste à effectuer une vérification statique de l'intégrité du contenu stocké dans la mémoire par CRC, par signature ou MAC (pour Message Authentication Code en anglais). Le contenu de la mémoire est constitué d'au moins un segment de mémoire. Un inconvénient de ces solutions provient du fait que leur mise en oeuvre dépend de la manière dont les données sont inscrites dans la mémoire de la carte (chiffré ou non, transcodé...) et de l'ordre d'inscription de ces données. En effet, dans les techniques de l'art antérieur, l'ordre d'inscription des données dans la carte est figé en cohérence avec le pré-calcul du code de vérification des données (du CRC par exemple). Cela suppose donc la connaissance a priori du processus de production et de l'ordre des commandes qui peut varier d'une version de chaîne de production à l'autre pour des questions d'optimisation par exemple. Un but de l'invention est de permettre une vérification des données inscrites dans la mémoire d'une carte à puce indépendamment de l'ordre d'inscription desdites données et indépendamment de la représentation mémoire de ces données. EXPOSÉ DE L'INVENTION A cet effet, l'invention préconise un procédé de vérification de l'intégrité de données numériques à inscrire dans une mémoire associée à une première carte à puce comportant les étapes suivantes : pour chaque donnée, calculer une empreinte numérique en fonction des octets de ladite donnée, appliquer une opération mathématique commutative, par exemple un générateur XOR à l'ensemble des empreintes obtenues pour calculer un CVI (pour code de vérification d'intégrité) de ladite première carte à puce ; - comparer la valeur du CVI calculée à une valeur de référence préalablement calculée à partir desdites données par une deuxième carte à puce ou tout autre dispositif de calcul et mémorisée à l'extérieur de ladite mémoire ; - appliquer une contremesure si la valeur du CVI calculée est différente de la valeur de référence. Préférentiellement, le calcul d'empreinte est réalisé par application d'un algorithme de vérification d'intégrité sur les octets de chacune desdites données. Ledit algorithme de vérification d'intégrité est soit une fonction de contrôle de redondance cyclique ou CRC, soit une fonction de calcul d'un condensat par une fonction de Hachage, soit une fonction de Contrôle d'accès au support ou MAC ou soit une fonction de calcul d'une signature asymétrique. Dans une première variante de réalisation, le procédé selon l'invention comporte en outre une étape consistant à calculer un Hash des résultats de ladite opération mathématique commutative. Dans une autre variante de réalisation, le procédé selon l'invention comporte en outre une étape consistant à chiffrer les résultats de ladite opération mathématique commutative. Le code de vérification d'intégrité CVI peut présenter une valeur fixe calculée à partir de données datées, 15 données 20 BRÈVE DESCRIPTION DES DESSINS D'autres caractéristiques et avantages de l'invention ressortiront de la description qui va suivre, prise à titre d'exemple non limitatif, en 25 référence aux figures annexées dans lesquelles : - la figure 1 représente un organigramme général illustrant les étapes nécessaires au calcul de CVI selon l'invention, - la figure 2 représente schématiquement un 30 organigramme illustrant la vérification d'un CVI selon l'invention. de personnalisation non diversifiées et non ou une valeur variable calculée à partir de de personnalisation diversifiées et non datées. Dans les deux cas, le calcul du code de vérification d'intégrité CVI est effectué, à la volée, au fur et à mesure des inscriptions successives desdites données dans la mémoire de la carte à puce. EXPOSÉ DÉTAILLÉ DE MODES DE RÉALISATION PARTICULIERS La description qui va suivre concerne une mise en oeuvre du procédé selon l'invention pour personnaliser des cartes à puce destinées à être utilisées dans un système de contrôle d'accès à des contenus embrouillés distribué par un opérateur à des abonnés équipés d'un récepteur et d'une carte à puce assurant la fonction de processeur de sécurité. L'opérateur comporte un générateur de messages de contrôle d'accès EMM (Entitlement management message) et ECM (Entitlement Control message), et au moins un terminal émetteur. En fonctionnement, le terminal émetteur, agencé en tête du réseau, transmet un contenu numérique à des récepteurs d'abonnés connectés audit réseau. Le contenu numérique est préalablement embrouillé par un mot de contrôle CW. Ce dernier est chiffré par une clé secrète et est transmis aux terminaux récepteurs dans des messages ECM. L'opérateur transmet aux cartes les messages EMM comportant, notamment, la clé secrète et des informations relatives aux services auxquels peuvent accéder les abonnés et aux droits associés à ces services. Ces informations sont inscrites dans les cartes à puces. Préalablement à l'inscription desdites informations dans la mémoire d'une première carte à puce, appelée carte fille, un code de vérification d'intégrité CVI est pré-calculé à partir des données à inscrire par une deuxième carte, différente de la première carte, appelée carte mère. Au fur et à mesure de l'inscription desdites informations dans la mémoire de la carte fille, celle-ci calcule à la volée un CVI à partir des octets constituant lesdites informations. Le CVI pré-calculé par la carte mère est ensuite fourni à la carte fille qui le compare au CVI calculé à la volée par cette dernière. Si le CVI calculé à la volée par la carte fille est différent du CVI pré-calculé par la carte mère, la carte fille applique une contre mesure sécuritaire préalablement programmée. Les étapes de calcul du CVI par la carte mère sont illustrées par la figure 1. Ces étapes sont exécutées lors de la configuration des cartes filles en phase de production. L'étape 2 consiste à sélectionner un lot de cartes filles à configurer. L'étape 4 consiste à initialiser la procédure de calcul du CVI associée à la configuration programmée dans la carte mère par l'opérateur. Cette procédure est réalisée par un module logiciel de calcul installé dans la carte mère et permet de calculer un CVI fixe ou un CVI variable selon le type de paramètres choisis par l'opérateur. Le CVI fixe sera calculé sur des données de personnalisation non diversifiées et non datées telles que par exemple les valeurs des identifiants de zone service, la présence de clés, la valeur des droits à inscrire dans la mémoire de la carte. Le CVI variable sera calculé sur des données de personnalisation, non datées, diversifiées pour chaque carte fille et pour un opérateur donné telles que par exemple l'adresse unique de la carte fille, la valeur des clés, la valeur des zones FAC... A l'étape 6, le générateur d'EEM génère un EMM de personnalisation qui va être transmis par l'émetteur aux cartes filles. L'étape 8 consiste à indiquer à la carte fille les références des clés qu'elle va utiliser pour effectuer le calcul de message EMM de personnalisation. L'étape 10 consiste à initialiser le calcul du message EMM. Les étapes 12, 14 et 16 consistent respectivement à sélectionner la clé secrète à transférer dans le message EMM, à calculer le message EMM et à chiffrer les données sensibles à transmettre dans ce message EMM. L'étape 18 est un test pour vérifier que la construction du message EMM est terminée ou non. Si la construction du message EMM n'est pas terminée, la procédure de calcul est reprise à partir de l'étape 12. Si la construction du message EMM est terminée, la carte mère lit le message EMM généré. A l'étape 22, un test est exécuté pour vérifier que la lecture du message EMM est terminée ou non. Si l'étape de lecture du message EMM n'est pas terminée, elle est reprise à partir de l'étape 20. Si l'étape de lecture du message EMM est terminée, à l'étape 24, un test est exécuté pour vérifier que le calcul du CVI est terminé ou non. Si le calcul du CVI n'est pas terminé, la procédure est reprise à partir de l'étape 6. Si le calcul du CVI est terminé, la valeur calculée est lue par la carte mère à l'étape 26. Le calcul du CVI est alors arrêté à l'étape 28. La figure 2 illustre les étapes de la vérification du CVI par une carte fille en phase de personnalisation. Cette vérification est effectuée par module logiciel de vérification de CVI installé dans la mémoire EEPROM (Electrically-Erasable Programmable Read-Only Memory) de chaque carte fille. La vérification de CVI est activée par une commande APDU (Application Data Protocol) d'activation exécutée par ledit module logiciel de vérification. Ainsi, lorsqu'une carte fille reçoit cette commande APDU, le module logiciel de vérification de CVI calcule un CVI fixe ou un CVI variable selon les paramètres de calcul choisis. Les différentes étapes de cette procédure sont illustrées par la figure 2 dans laquelle, à l'étape 30, on sélectionne une carte fille à personnaliser. A l'étape 32, la carte fille sélectionnée reçoit une commande APDU (Application Data Protocol). Si la commande APDU = � Lock UTIL �, le procédé se poursuit par l'étape 38 au cours de laquelle la carte fille reçoit (flèche 33) une APDU = � Ecriture du Lock Util � mettant la carte fille dans un état �phase UTIL accepté � dans lequel la carte fille est débloquée. Si la commande APDU = � Activation du module logiciel en EEPROM avec traitement CVI �, le procédé se poursuit par l'étape 40 consistant à calculer un CVI dans la carte fille par ledit module logiciel après réinitialisation interne des calculs avec remise à zéro et réinitialisation des variables ayant servi à des calculs précédents. Si la commande APDU est à la fois différente de � Lock UTIL � et de � Activation du 10 module logiciel en EEPROM avec traitement CVI �, aucun calcul de CVI n'est effectué. Cependant l'APDU est traitée en fonction de son contenu à l'étape 41. A l'étape 42, la carte fille se met en attente d'une commande APDU. Si la carte fille reçoit une commande APDU = � EMM personnalisation �, le procédé se poursuit par l'étape 44 de calcul de CVI à partir des données contenues dans l'EMM de personnalisation puis retourne à l'étape 42. Si la carte fille reçoit une commande APDU à la fois différente de � Lock UTIL � et de � EMM personnalisation �, aucun calcul de CVI n'est effectué. Cependant l'APDU est traitée en fonction de son contenu à l'étape 43. 25 Si la carte fille reçoit une commande APDU � Lock UTIL�, le procédé se poursuit par l'étape 46 de vérification de CVI. A l'étape 46, le CVI calculé par la carte fille est comparé au CVI pré-calculé et préalablement 30 transmis à la carte fille (flèche 33). 15 20 Si ledit CVI calculé par la carte fille est identique au CVI pré-calculé et préalablement transmis à la carte fille (flèche 33), le procédé se poursuit par l'étape 38. Sinon, le procédé se poursuit par l'étape 48 au cours de laquelle le passage à la phase UTIL est accepté mais la carte reste bloquée jusqu'à l'identification de l'émetteur. REVENDICATIONS1. Procédé de vérification de l'intégrité de données numériques à inscrire dans une mémoire comportant les étapes suivantes : pour chaque donnée, calculer une empreinte numérique en fonction des octets de ladite donnée, - appliquer une opération mathématique commutative à l'ensemble des empreintes obtenues pour calculer un code de vérification d'intégrité CVI, - comparer la valeur du CVI calculée à une valeur de référence mémorisée à l'extérieur de ladite mémoire, - appliquer une contremesure si la valeur du CVI calculée est différente de la valeur de référence. 2. Procédé selon la revendication 1, dans lequel ladite valeur de référence est un CVI préalablement calculé à partir desdites données. 3. Procédé selon la revendication 1, dans lequel le calcul d'empreinte est réalisé par application d'un algorithme de vérification d'intégrité sur les octets de chacune desdites données. 4. Procédé selon la revendication 3, dans lequel l'algorithme de vérification d'intégrité est soit un CRC, soit un Hash, soit un MAC ou soit une signature asymétrique. 5. Procédé selon la revendication 1, comportant en outre une étape consistant à calculer un Hash des résultats de ladite opération mathématique commutative. 6. Procédé selon la revendication 1, comportant en outre une étape consistant à chiffrer les résultats de ladite opération mathématique commutative. 7. Procédé selon l'une des revendications 5 ou 6, caractérisé en ce que ladite opération mathématique commutative est un opérateur XOR. 8. Procédé selon la revendication 6, dans lequel ladite mémoire est une mémoire non volatile d'une carte à mémoire. 9. Procédé selon la revendication 6, dans 20 lequel ledit code de vérification d'intégrité CVI a une valeur fixe calculée à partir de données de personnalisation non diversifiées et non datées 10. Procédé selon la revendication 1, dans 25 lequel ledit code de vérification d'intégrité CVI présente une valeur variable calculée à partir de données de personnalisation diversifiées et non datées. 11. Procédé selon la revendication 1, dans 30 lequel le calcul du code de vérification d'intégrité 15CVI est effectué au fur et à mesure des inscriptions successives desdites données dans la mémoire.