# MULTOS

MULTOS est un système d'exploitation destiné aux cartes à puce, portant le même nom. C'est un système orienté vers la stabilité et la sécurité, implémentant la norme ITSEC. Son architecture est similaire aux autres systèmes d'exploitation de carte à puce, mais ajoute un gestionnaire de sécurité pour le chiffrement des données.
Les applications pour MULTOS peuvent être développées dans plusieurs langages. Elles sont ensuite traduites en bytecode MEL, pour être ensuite interprétées par l'API MULTOS. La gestion de ces applications est flexible car il est possible de supprimer ou charger des applications facilement.
La sécurité est assurée grâce à plusieurs outils : un gestionnaire de clés est présent dans de nombreux secteurs du système, ainsi qu'un pare-feu et un système de jetons.

## Historique

La première génération en a été créée vers 1996 par NatWest au Royaume-Uni.
Le consortium MAOSCO est formé en mai 1997 pour conduire son adoption en standard de l'industrie contrôlée. Ce consortium est composé de 12 membres DNP, Europay, Infineon (Siemens), KeyCorp, Motorola, Hitachi, MasterCard et Mondex partageant un siège, le groupe Fujitsu/ICL/Amdahl, G&D, Novus Discover, Amex et Telstra.
En 2008, Gemalto acquiert Keycorp’s smart card business, le premier fournisseur de carte MULTOS, ainsi que MULTOS Ltd.

## Description technologique
### Normes

MULTOS a été développé dans le secteur bancaire comme plateforme pour les cartes à puces. Un travail sur la sécurité a été effectué pendant une année complète en partenariat avec MAOSCO, pour atteindre le plus haut degré de certification de la norme ITSEC (ITSEC E6)$^,$.
Il a aussi atteint la norme EAL 4+. Cependant, cela ne garantit pas que MULTOS soit la plateforme la plus sécurisée, mais que l'architecture du système de sécurité ait répondu à un niveau élevé aux Critères communs. Il en résulte cependant que MULTOS est un système extrêmement stable.
Le processus de certification requiert des ressources financières importantes. De plus, il est difficile de trouver des dispositifs ayant une évaluation supérieure à EAL4. Ainsi selon John Elliott, MULTOS doit atteindre un EAL situé entre les niveaux 5 et 7 afin de prétendre à une certification de sécurité maximum.

### Architecture

MULTOS s'exécute sur une architecture similaire aux cartes MASCs. Elle se compose d'un microprocesseur sur une puce en silicium permettant ensuite d'ajouter plusieurs fonctionnalités. Elle est dotée d'un système d'exploitation qui permet un accès sécurisé ainsi que le contrôle de la puissance de la puce. Une machine virtuelle permet le chargement et l'exécution des applications. Finalement, un gestionnaire de cartes permet de contrôler la sécurité durant le chargement et la suppression d'applications(schéma) :
La machine virtuelle a été adaptée pour les cartes à puces MULTOS, afin d'améliorer les performances en matière de vitesse et de stockage. Le gestionnaire de sécurité utilise l'algorithme de cryptographie RSA, ce qui requiert des cartes plus coûteuses en ressources. Cependant RSA est incontournable, car il est utilisé pour le chiffrement par de nombreuses applications, notamment pour les paiements en bourse ou les identifiants numériques.
De plus, des moteurs d'améliorations disponibles pour les spécifications fonctionnelles permettent de transformer les commandes sous forme de séquences d'octets. L'utilisation de trois moteurs d'améliorations est une spécificité de MULTOS et permet ainsi une grande assurance provenant de l'utilisation des données mathématiques et aussi une évolutivité du générateur de code.

### Fonctionnalités

MULTOS permet de toucher une grande part de marché grâce à ses fonctionnalités et ses nombreuses applications disponibles (E-ticketing, GSM, enregistrements de type médical, etc.). Une application de sécurité disponible, utilisant un pare-feu, permet d'isoler les autres applications.
Une infrastructure est alors mise en place, afin de charger et de supprimer les applications de façon flexible et sécurisée. Avec ce système, l'utilisateur peut gérer les applications présentes sur sa carte à puces. De plus, un certificat est requis pour le chargement des applications (ALC). La suppression utilise un procédé identique, utilisant un certificat pour la suppression des applications (ADC) et ce certificat est téléchargeable sur Internet par les propriétaires de ces applications lors de l'ajout ou la suppression de ces dernières. La suppression des données est faite de manière permanente et libère de l'espace pour de nouvelles applications.
De plus, MULTOS met en place des moyens cryptographiques afin de garantir la sécurité des données, notamment dans les transactions bancaires. Le système de chiffrement est basé sur l'utilisation de RSA ainsi que du procédé ECC (Cryptographie sur les courbes elliptiques). Ce dernier gère des clés de tailles plus petites et est utilisé de manière complémentaire au RSA afin d'améliorer la sécurité.

## Développement
### La conception des applications avec MULTOS

Mondex International a développé un langage de programmation optimisé pour les cartes à puce, appelé MEL (en anglais : MULTOS Executable Language)$^,$. Le code MEL est interprété par la carte en utilisant l'API MULTOS$^,$. Comme Java, le noyau du système d'exploitation de MULTOS est un interpréteur qui permet de développer des applications indépendamment du matériel sous-jacent.
Les applications peuvent être écrites en langage de haut niveau, et ensuite traduites à l'aide d'un compilateur, ou machine virtuelle, en langage MEL (en anglais : Multos Executable Language). Finalement, le code MEL est interprété par l'interpréteur de la carte à puce en utilisant l'API. La principale caractéristique de MULTOS réside donc dans l'utilisation possible de différents langages :
* Assembleur : MULTOS est la seule plateforme qui permet l'utilisation de l'assembleur facilement. Les applications sous MULTOS ont été initialement développées en MEL, qui contient des pseudo-instructions et des primitives ;
* Langage C : MULTOS est une plate-forme contenant un compilateur C. Les applications peuvent être écrites dans ce langage et sont ensuite compilées à l'aide du compilateur C en langage interprété MEL$^,$. L'outil SwiftC permet d'effectuer rapidement le portage d'une application pour MULTOS ;
* Java : Un compilateur Java traduit le code source en des classes Java qui sont ensuite traduites en code MEL ;
* Visual Basic

### Chargement et suppression des applications sur MULTOS

Le chargement et la suppression des applications sur MULTOS est l'une des caractéristiques les plus intéressantes des cartes MULTOS. Si la société émettrice l'autorise, le titulaire de la carte peut supprimer des applications qui résident sur sa carte et en télécharger de nouvelles sur des réseaux ouverts comme l'Internet ou le Réseau téléphonique commuté (RTC).
Pour charger une application sur la carte MULTOS, il faut avoir un certificat de chargement de l'application valide (ALC) avec l'unité de chargement d'application (ALU). La société émettrice peut permettre au propriétaire de la carte d'obtenir ces fichiers sur l'Internet et ils peuvent être chiffrés pour plus de sécurité. L'ALC est le certificat qui détermine sur la carte sur laquelle l'application peut être chargée. S'il y a de la place sur la carte MULTOS, l'application est chargée en utilisant un logiciel approprié qui décompose l'ALU et l'ALC en des morceaux appropriés et les met sur la carte dans le bon ordre.
La suppression des applications sur la carte MULTOS est un processus similaire, avec un certificat de suppression de l'application valide (ADC) requis pour la carte et pour l'application. La suppression d'une application qui réside sur la carte MULTOS permet de libérer définitivement l'espace qui était occupé par l'application et ses données. L'espace réservé sur la carte devient donc libre pour les applications ultérieures à charger.
De cette façon, la carte MULTOS peut être utilisée comme une carte modulable. En effet, les applications résident sur la carte le temps que l'utilisateur veut et, avec la permission de l'émetteur de la carte, les utilisateurs peuvent supprimer des applications et en charger d'autres selon leurs besoins.

### Différentes applications pour MULTOS

Trois applications ont été développées dès les premières versions de MULTOS :
* Security : cette application permet, après s’être identifié avec un code PIN, d'effectuer ces différentes actions :
* délivrer le certificat digital contenu dans la carte (qui contient la clé publique du détenteur de la carte) ;
* autoriser l'utilisation de la clé privée pour signer, authentifier, et déchiffrer certains items (comme des clés secrètes de session) ;
* générer une empreinte du certificat de la carte et la signer avec la clé privée.
* E-friends and family : permet d’enregistrer jusqu'à 10 noms, numéros de téléphone ou d'adresses e-mail. C'est en fait un conteneur pouvant stocker n'importe quelle donnée textuelle, et la retourner lorsqu'elle est demandée.
* E-ticketing : cette application stocke des tickets électroniques. Les tickets sont signés par l'émetteur du billet afin d'empêcher la fraude.
Ces applications peuvent être utilisées selon deux scénarios différents. Le premier met en place un ordinateur disposant d'une connexion internet et qui utilise les applications de manière sécurisée. Pour cela, il doit passer par un module cryptographique qui lui permet de chiffrer et déchiffrer ses mails. L'utilisateur a aussi la possibilité de gérer les données de l'application E-friends à partir de cet ordinateur. L'application E-ticketing passe aussi par ce module de chiffrement et permet ensuite d'indiquer le montant de la somme qui sera versée lors du paiement.
Le deuxième utilise deux smartphones du réseau RTCP et sans connexion internet, un serveur utilisé avec deux modems reliés à deux lignes téléphoniques et qui permet de gérer l'identification et l'accès aux applications. Les deux scénarios permettent d'effectuer les mêmes fonctions.

## Sécurité
### KMA (Key Managment Authority)

Le KMA, aussi appelé MULTOS CA (en anglais : Certification Authority), est un système de sécurité qui a été développé afin de répondre à la norme ITSEC$^,$$^,$. Il a été développé à l'aide de plusieurs langages. D'abord, le SPARK est utilisé pour la partie sécurité du système, car il permet de limiter les problèmes de sécurité liés au développement. Cependant l'utilisation de ce langage pour tout le système est inconcevable pour Chapman, car des fonctionnalités de type interface graphique ne peuvent pas être mises en place. Ainsi, Ada95 a été utilisé pour la gestion de l'infrastructure, le C++ pour l'approche graphique, le C pour les algorithmes de cryptographie, et enfin le SQL pour les bases de données.
De plus, le KMA permet d'assurer la sécurité et l'intégrité de l'infrastructure et des applications. En effet, les systèmes basés sur le KMA sont soumis à des contraintes de sécurité les plus strictes. Ainsi, les applications développées avec le KMA doivent répondre à des exigences élevées à plusieurs niveaux. D'abord la disponibilité est très importante dans MULTOS, car le système étant lourd à démarrer, il doit fonctionner de manière continue. Ensuite la durée de vie est prévue pour s'étendre sur des dizaines d'années. De plus, les différentes parties du système sont classées selon des niveaux de sécurité différents. Par exemple, les données provenant de l'interface graphique sont considérées comme non sécurisées, car les applications sont développées dans une couche interne du système. Les informations à afficher sont alors envoyer vers l'interface graphique de manière sécurisée. Finalement, le KMA permet la génération d'un nombre significatif de certificats.
Le KMA a été produit avec l'accord des clients, qui ont ainsi participé à la gestion du comportement du système. Les erreurs sont détectées très tôt, propriété qui permet de distinguer les systèmes développés de façon formelle de ceux développés de façon plus ponctuelle. Un système de clés asymétriques, avec une clé propre à chaque carte, est utilisé pour sécuriser les applications. L'enregistrement de la carte auprès du KMA permet d'utiliser ses fonctionnalités. L'activation de la carte permet de la rendre unique et offre la possibilité de la désactiver en cas de problème.

### Pare-feu

Les applications n'ont pas accès directement au système d'exploitation, elles passent par une machine abstraite utilisant les APIs standards. Ces dernières permettent d'effectuer la communication mais aussi les requêtes provenant des applications. La couche d'application est ainsi la plus élevée et la restriction est assurée par le pare-feu.
Il est utilisé pour protéger les applications au niveau de la machine virtuelle, permettant ainsi de filtrer les actions malveillantes, comme des instructions illégales ou des lectures de données non autorisées. Il est basé sur un système de délégation : l'application cliente est le déléguant alors que l'application serveur est le délégué et fonctionne de la manière suivante$^,$ (schéma):
* l'application cliente crée une commande APDU contenant les identifiants des deux applications, ainsi que la requête, et est stockée dans la mémoire ;
* l'application cliente lance la commande en demandant au système MULTOS d'appeler l'application serveur qui lit et traite la commande ;
* l'application serveur crée une nouvelle commande APDU ;
* le système d'exploitation revient à l'exécution de l'application cliente en récupérant les résultats de la requête dans la mémoire publique.
En plus de ce système, les applications écrites en Mel sont découpées sous forme d'actions individuelles par la machine virtuelle. En effet, durant ce processus, des traitements de sécurité permettent de vérifier qu'il n'y a pas d'accès non autorisé à la mémoire, d'instructions illégales ou de code modifié. Cette vérification a lieu lors de l’exécution du code plutôt qu'au chargement de l'application. Ce procédé permet d'obtenir un niveau de sécurité très élevé car les instructions sont vérifiées à chaque fois avant d'être exécutées.

### Système sans contact

MULTOS possède un système « sans contact », qui exploite les fréquences radio. Il est utilisé pour des processus comme les identifications ou les paiements. Ce système regroupe un mécanisme de jetons, afin de gérer la sécurité des applications comme les mails par exemple$^,$. Cependant, il demande beaucoup de ressources. Des niveaux de sécurité sont donc requis afin de minimiser les coûts.
Il en est existe quatre. D'abord, le niveau minimum permet de récupérer les informations stockées sur le jeton, qui sont lisibles par tous. La mémoire peut être bloquée en cas d'écriture non autorisée. Ensuite, le niveau faible permet aux jetons d'implémenter un mécanisme d'authentification. La mémoire est protégée par un mot de passe ou dans certains cas, l'authentification doit être validée afin que les données soient libérées. Le niveau moyen dispose d'un algorithme de chiffrement, qui est mis en place pour l'authentification ainsi que pour les données. Enfin le niveau élevé possède un algorithme reposant sur un couple de clé publique/clé privée qui est utilisé pour l'authentification, le chiffrement et la signature des données.
En plus de ces différentes sécurités, les jetons sont dotés de différentes technologies permettant aux utilisateurs d'accéder à plusieurs systèmes avec un seul et unique jeton. Le premier type de jeton, appelé « multiple », permet à plusieurs technologies d'être utilisées pour un même composant. Ensuite les jetons « double interfaces » permettent d'offrir deux interfaces disponibles pour un même jeton. Enfin, les jetons hybrides possèdent deux circuits intégrés avec leur propre interface.

## Marché

MULTOS step/one est un système d'exploitation multi-applications de base, basé sur MULTOS, mais destiné aux institutions financières migrant vers EMV qui ne désirent pas incorporer des capacités de DDA (en anglais : Dynamic Data Authentication) dans leurs portefeuilles EMV. C'est une alternative « standard ouvert » aux cartes EMV propriétaires.