\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{mer. févr. 15 15:43:50 CET 2012}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={GPShell},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Interpréteur de script pour communiquer avec les cartes à puces compatibles GlobalPlatform},
CreationDate={D:20120215154350},
ModDate={D:20120215154350},
Keywords={PKI;sécurité;smartcard}
}}
\begin{document}
 
\begin{center}
{\Huge GPShell }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Interpréteur de script pour communiquer avec les cartes à puces compatibles GlobalPlatform}
 
\vspace{10mm}
 
\hspace{1mm}  Il utilise le plugin de connection PCSC pour accéder aux cartes à puces. Il peut établir un canal sécurisé avec une carte à puce, charger, instantier, supprimer et lister les applications sur les cartes supportées. Ces applications sont pratiquement toujors des applets JAVA.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Installer GPShell et GlobalPlatform }
 
\
 
\hspace{1mm} Ajouter dans /etc/apt/sources.list les entrées: \\
\hspace{1mm} \textbf{http://ppa.launchpad.net/k-o-/globalplatform/ubuntu} \\
\hspace{1mm} \textbf{http://ppa.launchpad.net/k-o-/globalplatform/ubuntu} \\
\hspace{1mm} ou, pour compiler les sources: \\
\hspace{1mm} \textbf{aptitude install gcc libpcsclite-dev pkg-config zlib zlib1g-dev libcur14-openssl-dev make} \\
\hspace{1mm} wget http://heanet.dl.sourceforge.net/sourceforge/globalplatform/globalplatform-6.0.0.tar.gz \\
\hspace{1mm} tar xfvz globalplatform-6.0.0.tar.gz \\
\hspace{1mm} cd globalplatform-6.0.0 \\
\hspace{1mm} ./configure —prefix=/usr \\
\hspace{1mm} make \\
\hspace{1mm} make install \\
\hspace{1mm} cd .. \\
\hspace{1mm} wget http://heanet.dl.sourceforge.net/sourceforge/globalplatform/gpshell-1.4.4.tar.gz \\
\hspace{1mm} tar xfvz gpshell-1.4.4.tar.gz \\
\hspace{1mm} cd gpshell-1.4.4 \\
\hspace{1mm} ./configure —prefix=/usr \\
\hspace{1mm} make \\
\hspace{1mm} sudo make install \\
\hspace{1mm} cd .. \\
 
\vspace{1cm}{\huge Commandes }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} establish\_context]{Établir le contexte, nécessaire avant d’établir une communication avec la carte.}
\item[\hspace{1mm} card\_connect -reader]{Connection à la carte dans le lecteur spécifié par son nom (-reader) ou son numéro (-readerNumber)}
\item[\hspace{1mm} select -AID]{Sélectionner l’instance de l’applet}
\item[\hspace{1mm} card\_disconnect]{Déconnecter la carte}
\item[\hspace{1mm} release\_context]{Arrêter le contexte}
\item[\hspace{1mm} mode\_201]{Sélectionne le mode OpenPlatform 2.0.1}
\item[\hspace{1mm} mode\_211]{Sélectionne le mode globalPlatform 2.1.1}
\item[\hspace{1mm} enable\_trace]{Active le debug APDU}
\item[\hspace{1mm} enable\_timer]{Log le temps d’exécution d’une commande}
\item[\hspace{1mm} open\_sc -keyind x -keyver x -key xyz -mac\_key xyz -enc\_key xyz -kek\_key xyz -security x -scp x -scpimpl x -keyDerivation x]{(mode\_211) -scp et scpimpl ne sont pas nécessaires.}
\item[\hspace{1mm} open\_sc -keyind x -keyver x -mac\_key xyz -enc\_key xyz]{(mode\_201)}
\item[\hspace{1mm} Install -file appletFile -priv privilege -sdAID sdAID -AID AIDInPkg -pkgAID packageAID -instAID instanceAID -nvCodeLimit x -nvDataLimit x]{Installer une applet}
\item[\hspace{1mm} install\_for\_load -pkgAID x -sdAID sdAID -nvCodeLimit x]{}
\item[\hspace{1mm} load -file appletFile]{Charger une applet. A utiliser si la commande install ne fonctionne pas.}
\item[\hspace{1mm} get\_status -element e0]{Liste les applets, packages et domaines de sécurité}
\item[\hspace{1mm} get\_status -element 20]{Liste les packages}
\item[\hspace{1mm} get\_status -element 40]{Liste les applets et les domaines de sécurité}
\item[\hspace{1mm} get\_status -element 80]{Liste me gestionnaire de carte et les domaine fournisseur de sécurité}
\item[\hspace{1mm} get\_data -identifier]{identifier Retourne la donnée pour l’identifieur donné}
\item[\hspace{1mm} put\_sc\_key -keyver 0 -newkeyver 2 -mac\_key new\_MAC\_key -enc\_key new\_ENC\_key -kek\_key new\_KEK\_key -cur\_kek current\_KEK\_key]{Ajouter un nouveau jeu de clé version 2}
\item[\hspace{1mm} put\_sc\_key -keyver 1 -newkeyver 1 -mac\_key new\_MAC\_key -enc\_key new\_ENC\_key -kek\_key new\_KEK\_key -cur\_kek current\_KEK\_key]{Remplacer le jeu de clé version 1}
\item[\hspace{1mm} put\_dm\_keys -keyver 0 -newkeyver 2 -file public\_rsa\_key\_file -pass password -key new\_receipt\_generation\_key]{Place les clés de gestion délégués en version 2 (mode\_211)}
\item[\hspace{1mm} put\_dm\_keys -keyver 0 -newkeyver 2 -file public\_rsa\_key\_file -pass password -key new\_receipt\_generation\_key -cur\_kek current\_KEK\_key]{Place les clé de gestion délégués en version 2 (mode\_201)}
\item[\hspace{1mm} send\_apdu -APDU x]{Envoyer un APDU}
\item[\hspace{1mm} send\_apdu -sc 0 -APDU x]{Envoyer un APDU sans canal sécurisé}
\item[\hspace{1mm} send\_apdu\_nostop -APDU x]{Envoyer un APDU et ne stop pas en cas d’erreur}
\end{description}
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -reader readerName]{Nom du lecteur de carte}
\item[\hspace{1mm} -readerNumber x]{Numéro du lecteur de carte}
\item[\hspace{1mm} -protocol x]{Protocole (0 : T=0 ; 1 : T=1)}
\item[\hspace{1mm} -keyind x]{Index de clé}
\item[\hspace{1mm} -keyver]{Version du jeu de clé}
\item[\hspace{1mm} -newkeyver x]{Nouvelle version du jeu de clé}
\item[\hspace{1mm} -key key]{Valeur de la clé en hexa}
\item[\hspace{1mm} -mac\_key key]{Clé MAC en hexa}
\item[\hspace{1mm} -enc\_key key]{Valeur de clé ENC en hexa}
\item[\hspace{1mm} -kek\_key key]{Valeur de clé KEK en hexa}
\item[\hspace{1mm} -security x]{0 : aucun, 1:MAC, 3:MAC+ENC}
\item[\hspace{1mm} -scp x]{Protocol du canal sécurisé (1 SCP01, 2 SCP02)}
\item[\hspace{1mm} -scpimpl x]{Implémentation du canal sécurisé (ne devrait pas être sopécifié implicitement)}
\item[\hspace{1mm} -pass password]{Mot de passe pour le déchiffrement de la clé}
\item[\hspace{1mm} -sc x]{mode canal sécurisé (0 off, 1 on)}
\item[\hspace{1mm} -keyDerivation]{(’non’, ’visa2’, ’emvcps11’)}
\item[\hspace{1mm} -AID aid]{ID de l’applet}
\item[\hspace{1mm} -sdAID aid]{AID du domaine sécurisé}
\item[\hspace{1mm} -pkgAID aid]{AID du Package}
\item[\hspace{1mm} -instAID aid]{AID de l’instance}
\item[\hspace{1mm} -nvCodeLimit x]{Limite de taille du code non-volatile}
\item[\hspace{1mm} -nvDataLimit x]{Limite de taille de donnée non-volatile}
\item[\hspace{1mm} -vDataLimit x]{Limite de taille de donnée volatile}
\item[\hspace{1mm} -file file]{Nom du fichier}
\item[\hspace{1mm} -instParam param]{Paramètre d’installation}
\item[\hspace{1mm} -priv x]{Privilège (ex : 0x04 Default Selected)}
\item[\hspace{1mm} -element x]{Type d’élément à indexer en hexa}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} 80]{Card Manager / Card Issuer Security Domain only.}
\item[\hspace{6mm} 40]{Applications (and Security Domains only in GP211).}
\item[\hspace{6mm} 20]{Executable Load Files only.}
\item[\hspace{6mm} 10]{Executable Load Files and their Executable Modules only (Only GP211)}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} -identifier]{Identifieur pour le tag pour la commande get\_data (en hexa, ex : 9F7F)}
\item[\hspace{1mm} -APDU apdu]{APDU à envoyer en hexa (ex : 80CA00CF00)}
\end{description}
 
\vspace{1cm}{\huge Variables d'environnement }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} GLOBALPLATFORM\_DEBUG]{Active le mode debug depuis la librairie GlobalPlatform}
\item[\hspace{1mm} GLOBALPLATFORM\_LOGFILE]{Définis le fichier dans lequel écrire les logs}
\end{description}
 
\vspace{1cm}{\huge Installer une applet java sur une carte cyberflex 64k }
 
\
 
{\ttfamily
mode\_201\\ enable\_trace\\ establish\_context\\ card\_connect\\ select -AID a000000003000000\\ open\_sc -security 1 -keyind 0 -keyver 0 -mac\_key 404142434445464748494a4b4c4d4e4f -enc\_key 404142434445464748494a4b4c4d4e4f\\ delete -AID A0000003230101\\ delete -AID A00000032301\\ delete -AID A00000000101\\ delete -AID A000000001\\ install\_for\_load -pkgAID A000000001 -nvCodeLimit 13500 -sdAID A000000003000000\\ load -file CardEdgeCflex.ijc\\ install\_for\_install -instParam 00 -priv 02 -AID A00000000101 -pkgAID A000000001 -instAID A00000000101 -nvDataLimit 12000\\ card\_disconnect\\ release\_context\\
}
\vspace{8mm}
 
\hspace{1mm} Ensuite il reste à intialiser le code pin à "00000000": \\
\hspace{1mm} \textbf{opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 -s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01} \\
\hspace{1mm} Utiliser la carte avec opensc: \\
\hspace{1mm} \textbf{pkcs15-init -EC -p pkcs15+onepin} \\
\end{flushleft}
\end{document}
