Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
15 février 2012

htmlpdflatexmanmd




card_eventmgr

card_eventmgr

Monitorer et gérer les lecteurs de carte

   Cet utilitaire est utilisé pour monitorer le statut du lecteur de carte et effectuer des actions en fonction de l’évènement.

Commandes

debug Active le mode debug
daemon Lance en tâche de fond
timeout=‹ms› Temps en ms entre 2 statuts consécutifs (défaut : 1000)
config_file=‹file› Fichier de configuration à utiliser (défaut : /etc/pam_pkcs11/card_eventmgr.conf)
^
15 février 2012

htmlpdflatexmanmd




card_eventmgr.conf

card_eventmgr.conf

Fichier de configuration pour card_eventmgr


card_eventmgr {
    daemon = false ; # lancer en tâche de fond
    debug = false ; # mode debug
    timeout = 1000 ; #polling time en ms
    # Liste des évènements et actions
    event card_insert { # carte insérée
        on_error = ignore ; # que faire en cas d’erreur (ignore=continuer, return=stopper la séquence, quit=quitter le programme)
        action = "/usr/bin/play /usr/share/sounds/warning.wav",
        "/usr/X11R6/bin/xscreensaver-command -deactivate" ; # action à exécuter
    }
    event card_remove { # carte retirée
        on_error = ignore ;
        action = "/usr/bin/play /usr/share/sounds/error.wav",
        "/usr/X11R6/bin/xscreensaver-command -lock" ;
    }
}

^
15 février 2012

htmlpdflatexmanmd




GPShell

GPShell

Interpréteur de script pour communiquer avec les cartes à puces compatibles GlobalPlatform

   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.

Installer GPShell et GlobalPlatform

Ajouter dans /etc/apt/sources.list les entrées:
http://ppa.launchpad.net/k-o-/globalplatform/ubuntu
http://ppa.launchpad.net/k-o-/globalplatform/ubuntu
ou, pour compiler les sources:
aptitude install gcc libpcsclite-dev pkg-config zlib zlib1g-dev libcur14-openssl-dev make
wget http://heanet.dl.sourceforge.net/sourceforge/globalplatform/globalplatform-6.0.0.tar.gz
tar xfvz globalplatform-6.0.0.tar.gz
cd globalplatform-6.0.0
./configure —prefix=/usr
make
make install
cd ..
wget http://heanet.dl.sourceforge.net/sourceforge/globalplatform/gpshell-1.4.4.tar.gz
tar xfvz gpshell-1.4.4.tar.gz
cd gpshell-1.4.4
./configure —prefix=/usr
make
sudo make install
cd ..

Commandes

establish_context Établir le contexte, nécessaire avant d’établir une communication avec la carte.
card_connect -reader Connection à la carte dans le lecteur spécifié par son nom (-reader) ou son numéro (-readerNumber)
select -AID Sélectionner l’instance de l’applet
card_disconnect Déconnecter la carte
release_context Arrêter le contexte
mode_201 Sélectionne le mode OpenPlatform 2.0.1
mode_211 Sélectionne le mode globalPlatform 2.1.1
enable_trace Active le debug APDU
enable_timer Log le temps d’exécution d’une commande
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.
open_sc -keyind x -keyver x -mac_key xyz -enc_key xyz (mode_201)
Install -file appletFile -priv privilege -sdAID sdAID -AID AIDInPkg -pkgAID packageAID -instAID instanceAID -nvCodeLimit x -nvDataLimit x Installer une applet
install_for_load -pkgAID x -sdAID sdAID -nvCodeLimit x
load -file appletFile Charger une applet. A utiliser si la commande install ne fonctionne pas.
get_status -element e0 Liste les applets, packages et domaines de sécurité
get_status -element 20 Liste les packages
get_status -element 40 Liste les applets et les domaines de sécurité
get_status -element 80 Liste me gestionnaire de carte et les domaine fournisseur de sécurité
get_data -identifier identifier Retourne la donnée pour l’identifieur donné
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
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
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)
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)
send_apdu -APDU x Envoyer un APDU
send_apdu -sc 0 -APDU x Envoyer un APDU sans canal sécurisé
send_apdu_nostop -APDU x Envoyer un APDU et ne stop pas en cas d’erreur

OPTIONS

-reader readerName Nom du lecteur de carte
-readerNumber x Numéro du lecteur de carte
-protocol x Protocole (0 : T=0 ; 1 : T=1)
-keyind x Index de clé
-keyver Version du jeu de clé
-newkeyver x Nouvelle version du jeu de clé
-key key Valeur de la clé en hexa
-mac_key key Clé MAC en hexa
-enc_key key Valeur de clé ENC en hexa
-kek_key key Valeur de clé KEK en hexa
-security x 0 : aucun, 1:MAC, 3:MAC+ENC
-scp x Protocol du canal sécurisé (1 SCP01, 2 SCP02)
-scpimpl x Implémentation du canal sécurisé (ne devrait pas être sopécifié implicitement)
-pass password Mot de passe pour le déchiffrement de la clé
-sc x mode canal sécurisé (0 off, 1 on)
-keyDerivation (’non’, ’visa2’, ’emvcps11’)
-AID aid ID de l’applet
-sdAID aid AID du domaine sécurisé
-pkgAID aid AID du Package
-instAID aid AID de l’instance
-nvCodeLimit x Limite de taille du code non-volatile
-nvDataLimit x Limite de taille de donnée non-volatile
-vDataLimit x Limite de taille de donnée volatile
-file file Nom du fichier
-instParam param Paramètre d’installation
-priv x Privilège (ex : 0x04 Default Selected)
-element x Type d’élément à indexer en hexa

        80 Card Manager / Card Issuer Security Domain only.
        40 Applications (and Security Domains only in GP211).
        20 Executable Load Files only.
        10 Executable Load Files and their Executable Modules only (Only GP211)

-identifier Identifieur pour le tag pour la commande get_data (en hexa, ex : 9F7F)
-APDU apdu APDU à envoyer en hexa (ex : 80CA00CF00)

Variables d'environnement

GLOBALPLATFORM_DEBUG Active le mode debug depuis la librairie GlobalPlatform
GLOBALPLATFORM_LOGFILE Définis le fichier dans lequel écrire les logs

Installer une applet java sur une carte cyberflex 64k


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

Ensuite il reste à intialiser le code pin à "00000000":
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
Utiliser la carte avec opensc:
pkcs15-init -EC -p pkcs15+onepin
^
13 février 2012

htmlpdflatexmanmd




ifdhandler

ifdhandler

Utilitaire de gestion des modules au format ifdhandler

OPTIONS

-r Index du lecteur de carte à utiliser
-F Tâche de fond
-H spécifie qu’il s’agit d’un lecteur hotplug
-p force le polling device event si les évènement sont supportés
-s Envoie les messages de debug et d’erreur à syslogd
-d mode debug (peut être spécifié plusieurs fois)
-i Affiche la liste des pilotes et protocoles disponibles
^
13 février 2012

htmlpdflatexmanmd




ifdproxy

ifdproxy

Utilitaire pour l'accès au lecteur de carte distant

OPTIONS

-d mode debug
-F Ne lance pas en tâche de fond

Commandes

server [-dF] Lance le mode serveur
export [-dF] name device address:port Exporte le lecteur de carte vers une machine distante
list [-dF] address:port Liste les périphériques sur la machine distante, ou tous les périphériques si aucune adresse n’est spécifiée
^
13 février 2012

htmlpdflatexmanmd




OpenCT

OpenCT

Pilotes pour cartes à puce

   Openct implémente des pilotes pour de nombreux lecteurs de carte. Ils sont fournis au format ifdhandler requis pour pcsc-lite. OpenCT a également un mécanisme primitif pour exporter les lecteurs de carte sur des machines distantes via tcp/ip.

Présentation générale

Le scénario le plus simple et recommandé est:
Application (ex : mozilla)
librairie PKCS11(ex : OpenSC)
OpenCT
Kernel Linux

   Mozilla peut charger les modules de sécurité implémentant PKCS11, opensc le fait et a une interface directe pour utiliser openCT

Parfois vous avez cette pile:
Application
PC-SC/Lite
Driver
Kernel

   PC/SC est un standard sous Windows, donc de nombreuses applications veulent l’utiliser pour communiquer avec les cartes à puce. pcsclite a besoin de pilotes au format ifdhandler. OpenCT a un pilote au format ifdhandler.

Le 3ème modèle:
Application
Driver

   est très simple et a été conçus pour DOS.Il fonctionne très bien pour une application et un utilisateur. Il n’est plus utilisé.

Système d'exploitation

   Les lecteurs de carte USB necéssitent un support USB pour que OpenCT soit notifié. hotplug tend à être remplacé par udev ou hald.

Configurer udev

Pour le support USB sous Linux vous devez avoir:
- libusb
- CONFIG_HOTPLUG pour que le kernel laisse savoir si un lecteur ou un token est branché
- udev installé
- Copier les fichiers suivant:
/lib/udev/rules.d/50-openct.rules
/lib/udev/openct_usb
/lib/udev/openct_pcmcia
/lib/udev/openct_serial

Accès au lecteur de carte distant

   cette fonctionnalité n’inclus aucun mécanisme de sécurité.

Sur la machine avec le lecteur, ajouter à openct.conf (exemple avec un lecteur série):
reader xiring {
    driver = xiring;
    device = serial:/dev/ttyS0;
};

Démarrer ifdproxy pour pointer vers la machine distante:
ifdproxy export xiring /dev/ttyS0 ‹machine-distante› :‹port›

Sur la machine avec le logiciel, ajouter dans openct.conf:
ifdhandler = /usr/sbin/ifdhandler;
ifdproxy {
    server-port = /var/run/openct/proxy,
    device-port = :6666;
};
reader xiring {
    driver = xiring;
    device = remote:serial1@/var/run/openct/proxy;
};

Démarrer openct
/etc/init.d/openct start
ifdproxy server
^
13 février 2012

htmlpdflatexmanmd




openct-control

openct-control

démon openct

OPTIONS

-d mode debug
-n  Désactiver le branchement à chaud
-f Spécifier le fichier de configuration (défaut : /etc/openct.conf)

Commandes

init initialiser openct
attach driver type device Attacher un périphérique
status Affiche le status de tous les lecteurs présent
shutdown Arrête le service OpenCT

Variables d'environnement

OPENCT_SOCKETDIR Spécifie l’emplacement pour les fichiers et sockets (défaut : /var/run/openct)
^
13 février 2012

htmlpdflatexmanmd




openct-tool

openct-tool

Utilitaire pour les cartes à puces openCT

OPTIONS

-d mode debug
-f Spécifier le fichier de configuration (défaut : /etc/openct.conf)
-r Index du lecteur de carte à utiliser

Commandes

list lister les lecteurs trouvés
atr Afficher l’ATR de la carte insérée
wait Attend que la carte soit insérée
rwait Attend qu’un lecteur de carte soit inséré
mf Tente de sélectionner le répertoire principal de la carte
read dump la mémoire de la carte synchrone
^
13 février 2012

htmlpdflatexmanmd




openct.conf

openct.conf

Fichier de configuration pour openct


debug = 0; # niveau de debug
hotplug = yes; # Active le mode hotplug
    
# Path to ifdhandler
ifdhandler {
    program = /usr/sbin/ifdhandler; # emplacement de l’ifdhandler
    force_poll = 1; # désactiver si ›=2.6.27.14 ou 2.6.28.3
    user = openctd;
    groups = {
        usb,
    };
};
    
ifdproxy { # configuration pour idfproxy
    server-port = /var/run/openct/.ifdproxy,
    device-port = :6666;
};
    
# Liste des lecteurs et leurs options
    
#reader towitoko {
# driver = towitoko;
# device = serial :/dev/ttyS0;
#};
    
#reader gempc {
# driver = gempc;
# device = serial :/dev/ttyS0;
#};
    
#reader cm4000 {
# driver = cm4000;
# device = pcmcia :/dev/cmm0;
#};
    
#reader cm4040 {
# driver = ccid;
# device = pcmcia_block :/dev/cmx0;
#};
    
#reader pertosmart1030 {
# driver = pertosmart1030;
# device = serial :/dev/ttyS0;
#};
    
# ID pour Hotplug
driver egate {
    ids = {
        usb:0973/0001,
    };
};

driver ePass3000 {
    ids = {
        usb:096e/0401,
    };
};

driver etoken {
    ids = {
        usb:0529/050c,
        usb:0529/0514,
    };
};
driver etoken64 {
    ids = {
        usb:0529/0600,
        usb:0529/0700,
    };
};
driver eutron {
    ids = {
        usb:073d/0005,
    };
};
driver ikey2k {
    ids = {
        usb:04b9/1202,
    };
};
driver ikey3k {
    ids = {
        usb:04b9/1300,
    };
};
driver starkey {
    ids = {
        usb:096e/0005,
    };
};
driver cardman {
    ids = {
# usb:076b/0596, # OMNIKEY CardMan 2020
# usb:076b/1784, # OMNIKEY CardMan 6020
# usb:08d4/0009, # Fujitsu Siemens SCR USB Reader
    };
};
driver ccid {
    ids = {
        usb:03f0/1024, # HP Keyboard with CCID reader
        usb:046a/0010, # Cherry smartboard G83-6744
        usb:04e6/5115,
        usb:04e6/5116,
        usb:04e6/5117, # SCM Micro token size reader
        usb:04e6/511d, # SCM Micro SCR3311
        usb:04e6/E001,
        usb:04e6/E003,
        usb:073d/0c00, # Eutron SimPocket (doesn’t work yet)
        usb:076b/1021, # OmniKey CardMan 1021
        usb:076b/3021,
        usb:076b/5121,
        usb:076b/5321, # OmniKey CardMan 5321
        usb:076b/6622, # OmniKey CardMan 6121
        usb:0783/0003,
        usb:08e6/3437, # Gemplus
        usb:08e6/3438, # Gemplus GemPC Key SmartCard Reader
        usb:08e6/4433, # Gemplus
        usb:0b97/7762, # O2 Micro, Inc. Oz776 SmartCard Reader
        usb:0b97/7772, # O2 Micro, Inc. Oz776 SmartCard Reader
        usb:0bf8/1006, # fujitsu siemens 3.5" drive size reader
        usb:0dc3/1004, # Athena Smartcard Solutions, Inc. ASEKey
        usb:0a89/0030, # Aktiv Rutoken ECP
    };
};
driver pertosmart1030 {
    ids = {
        usb:072f/0001,
        usb:072f/8009,
    };
};
driver pertosmart1038 {
    ids = {
        usb:072f/9000,
        usb:072f/9006, # ACS CryptoMate Token
        usb:072f/9007, # ACS ACR 100 SIMFlash
        usb:072f/90d0,
    };
};
#driver wbeiuu { # driver not working yet
# ids = {
# usb:104f/0004,
# };
#};
    
# Tested with USBID 0c4b:0100. These are red readers : one with LCD,
# another one without.
driver cyberjack {
    ids = {
        usb:0c4b/0100,
    };
};
driver rutoken {
    ids = {
        usb:0a89/0020, # Aktiv Rutoken S
        usb:0a89/0012, # Aktiv uaToken S
    };
};

^
13 février 2012

htmlpdflatexmanmd




OpenSC

OpenSC

Librairie PKCS#11

   OpenSC est une librairie PKCS #11 ainsi qu'une API pour l'utiliser. Sur la carte, OpenSC implémente PKCS #15

^
13 février 2012

htmlpdflatexmanmd




opensc-explorer

opensc-explorer

Utilitaire intéractif pour accéder aux cartes à puce

OPTIONS

--reader, -r Utilise le numéro de lecteur de carte donné
--card-driver, -c Utilise le pilote de carte donné
--verbose, -v mode verbeux

Commandes

ls Liste tous les fichiers dans le DF courant
cd file-id Changer de DF spécifié par sont file-id
info [file-id] Affiche les attributs d’un fichier spécifié par son file-id
create file-id size Crée un nouveau EF en spécifiant sont file-id et sa taille
delete file-id Supprime le EF ou DF spécifié par son file-id
verify key-typekey-id [key] Présente un PIN ou une clé à la carte. le key-type peut être CHV, KEY ou PRO, le key-id est la clé ou le PIN et les clé est la clé ou le PIN à vérifié en hexa.
change CHVid [old-pin] new-pin Changer un pin
put file-id [input] Copie un fichier local sur la carte
get file-id [output] Copie un EF dans un fichier local
mkdir file-id size Créer un DF
pksign Créer un signature de clé publique. (actuellement non implémenté)
pkdecrypt Décrypte un clé publique. (actuellement non implémenté)
erase Efface la carte
quit Quitter le programme.
^
13 février 2012

htmlpdflatexmanmd




opensc-tool

opensc-tool

Utilitaire générique pour cartes à puce

OPTIONS

--atr, -a Affiche l’Answer To Reset de la carte, au format hexa
--serial Afficher le numéro de série de la carte (ICCSN) en hexa
--send-apdu, -s Envoie un APDU arbitraire à la carte au format AA:BB:CC:DD:EE:FF...
--list-files, -f Liste tous les fichiers stockés sur la carte
--list-readers, -l Liste tous les lecteurs configurés
--list-drivers, -D Liste tous les pilotes de carte installés
--list-rdrivers, -R Liste tous les pilotes de lecteur installés
--reader, -r Numéro du lecteur --card-driver, -c
Utilise le lecteur de carte donné --verbose, -v
Mode verbeux
^
13 février 2012

htmlpdflatexmanmd




opensc.conf

opensc.conf

Fichier de configuration pour OpenSC


app default {
    debug = 0 ; # niveau de debug
    debug_file = "/var/log/opensc-debug.log" ; # Fichier où ecrire les informations de debug (défaut : stdout)
    error_file = "/var/log/opensc-errors.log" ; # Fichier où ecrire les information d’erreur (défaut : stderr)
    profile_dir = PKGDATADIR ; # Répertoire de profil pour pkcs15-init (défaut : /usr/share/opensc)
    reader_drivers = pcsc, openct, ctapi ; # pilotes à charger au démarrage. ’internal’ va charger tous les pilote liés statiquement (défaut)
}
    
    {
        reader_driver ctapi { # configuration pour le pilote ctapi
            module /usr/local/towitoko/lib/libtowitoko.so {
                ports = 0 ; # port CT-API 0..3 (COM1..4) 4 (printer) 5 (modem) 6..7 (LPT1..2)
            }
        }
    
        reader_driver pcsc { # configuration pour le pilote pcsc
            max_send_size = 252 ; # Taille max des données envoyée et reçues. Vérifier avec lsusb -vv pour dwMaxIFSD
            max_recv_size = 252 ;
            connect_exclusive = false ; # connecter le lecteur en mode exclusif (défaut : false)
            connect_reset = true ; # réinitialiser la carte après déconnection (défaut : true)
            transaction_reset = false ; # réinitialise la carte après charque transaction (défaut : false)
            enable_pinpad = false ; # active pinpad si détecté (défaut : false)
        }
    
        reader_driver openct {
            readers = 5 ; Lecteurs virtuels à allouer (défaut : 5)
        }
    
        card_drivers = customcos, internal ; # pilotes à charger au démarrage. ’internal’ charge tous les pilotes liés dynamiquement (défaut et doit toujours être la dernière entrée)
        card_driver customcos {
            module = /usr/lib/opensc/drivers/card_customcos.so ; # emplacement du pilote
        }
    
        force_card_driver = autodetect ; # si spécifié, force OpenSC à utiliser ce pilote.(défaut : autodetect)
        # noms des pilotes internes supportés : etoken, flex, cyberflex, gpk, miocos, mcrd, setcos, starcos, tcos, openpgp, jcop, oberthur, belpic, emv, piv
        card_atr 3b:f0:0d:ca:fe { # nouvelle entrée pour le pilote flex. Format générique : card_atr ‹hex encoded ATR (case-sensitive !)›
            atrmask = "ff:ff:ff:ff:ff" ; # masque AND pour l’ATR de la carte pour la l’identification de la référence ATR.
            driver = "flex" ; # pilote à utiliser
            name = "My CryptoFlex card" ; { nom de la carte
                type = "2002" ; # type de carte (valeur entière)
                flags = "keygen", "rng", "0x80000000" ; # flags au format hexa (ou chaine pour certains : keygen = capacités de génération de clé embarqué, rng = source de nombre aléatoire embarqué) pour personnaliser les capacités de la carte.
                pkcs15emu = "custom" ; # Couche d’amulation PKCS #15, force le pilote d’émulation pour les cartes spécifiques
                force_protocol = "t0" ; # Force le protocole à utiliser (t0, t1 ou raw)
            }
            card_atr 3B:7D:96:00:00:80:31:80:65:B0:83:11:00:AC:83:00:90:00 { # les cartes PIV on besoin d’un entrée comme ceci
                name = "PIV-II" ;
                driver = "piv" ;
            }
            card_atr 3b:6e:00:ff:45:73:74:45:49:44:20:76:65:72:20:31:2e:30 { # les cartes Estonian ID et le pilote Micardo fonctionne ensemble avec T=0. Seul l’ATR ’cold’ devrait être spécifié
                force_protocol = t0 ;
            }
            card_atr 3b:fe:94:00:ff:80:b1:fa:45:1f:03:45:73:74:45:49:44:20:76:65:72:20:31:2e:30:43 {
                force_protocol = t0 ;
            }
            card_atr 3b:fe:94:00:ff:80:b1:fa:45:1f:03:45:73:74:45:49:44:20:76:65:72:20:31:2e:30:43 { # Les cartes D-Trust sont aussi basées sur micardo et T=0
                force_protocol = t0 ;
            }
            card_atr 3b:ff:94:00:ff:80:b1:fe:45:1f:03:00:68:d2:76:00:00:28:ff:05:1e:31:80:00:90:00:23 {
                force_protocol = t0 ;
            }
            card_atr 3b:ff:11:00:ff:80:b1:fe:45:1f:03:00:68:d2:76:00:00:28:ff:05:1e:31:80:00:90:00:a6 {
                force_protocol = t0 ;
            }
            framework pkcs15 { # block spécifique au framework PKCS #15
                use_caching = false ; # spécifie d’utiliser les fichier en cache dans le home de l’utilisateur en apprenant la carte (pkcs15-tool -L) (ne doit pas être utilisé en root) (défaut : false)
                enable_pkcs15_emulation = yes ; # Active l’émulation pkcs15 (défaut : yes)
                try_emulation_first = yes ; # tente d’abord l’émulation pkcs15 avant le traitement normal pkcs15 (défaut : no)
                enable_builtin_emulation = yes ; # Active l’émulation intégrée
                builtin_emulators = esteid, openpgp, tcos, starcert, infocamere, postecert, actalis, atrust-acos, gemsafe, tccardos, PIV-II ; # liste des émulateurs pkcs15 intégrés à tester
                emulate custom { # Paramètre pour un émulateur pkcs15 chargé depuis une librairie externe
                    module = /usr/lib/opensc/drivers/p15emu_custom.so ; # emplacement de la librairie
                }
            }
        }
    
        app opensc-pkcs11 { # paramètres pour le module PKCS11 OpenSC
        pkcs11 {
            num_slots = 4 ; # Nombre de slot maximum par carte à puce
            hide_empty_tokens = yes ; # Cache les slots vides
            lock_login = true ; # opensc tente de locker la carte une fois authentifiée via C_Login. (défaut : false)
            cache_pins = true # normalement le module pkcs11 ne met pas en cache le pin présenté via C_Login, mais certaines carte ne fonctionne pas correctement avec opensc (défaut : true)
            soft_keygen_allowed = true ; # Force la génération de pair de clé embarqué (défaut : true)
            }
        }

^
13 février 2012

htmlpdflatexmanmd




pcscd

pcscd

Service PC/SC pour pcsclite et le framework MuscleCard

   Service PC/SC pour pcsclite et le framework MuscleCard. C’est un gestionnaire de ressource qui coordonne les communications entre les lecteur de cartes et les cartes et tokens connectés au système.

  Les pilotes de lecteur de carte série sont dans /usr/lib/pcsc/drivers. pcscd localise les pilotes en utilisant /var/lib/pcscd/reader.conf (les pilotes sont disponibles à http://www.musclecard.com/drivers.html)

  Les pilotes USB sont placés dans /usr/lib/pcscd/drivers. Vous ne devriez pas ajouter de pilote USB dans reader.conf.

Fichiers

/var/lib/pcscd/reader.conf: Fichier de configuration des lecteurs
/var/run/pcscd/pcscd.pid: process id
/usr/lib/pcsc/drivers: Répertoire des pilotes usb.

OPTIONS

-a, --apdu log les APDU et SW en utilisant la méthode de debug
-c, --config Spécifie le fichier alternatif à /var/lib/pcscd/reader.conf
-f, --foreground Ne lance pas en tâche de fond et envoie les mesage sur stderr au lieu de syslog
-d, --debug Niveau de debug
--info Utilise le niveau de log info (mode par défaut)
--error Utilise le niveau de log error
--critical Utilise le niveau de log critical
-H, --hotplug Demande à pcscd de rescanner les bus USB et relire /var/lib/pcscd/reader.conf pour détecter les lecteurs non-USB.
^
13 février 2012

htmlpdflatexmanmd




pcsc_scan

pcsc_scan

Scanner les lecteurs de carte

   Scan les lecteurs de carte à interval régulier. Il demande à pcscd la liste des lecteurs disponible. Quand une carte est insérée, il affiche diverses informations:

  Date et heure, nom du lecteur, état de la carte et évènements, ATR de la carte à l’insertion et analyse si la commande ATR_analysis est disponible

OPTIONS

-n  N’effectue pas d’analyse ATR.
^
15 février 2012

htmlpdflatexmanmd




pkcs11-data

pkcs11-data

Manipulateur de token accessible via PKCS #11. Il utilise cryptoki

OPTIONS

--verbose Mode verbeux
--add-provider Ajouter un fournisseur PKCS #11. Peut-être spécifié plusieurs fois.
--public objet Data dans la section publique
--prompt-prog Demande l’enregistrement
--token-wait Attend jusqu’à ce que le token soit inséré
--cmd=tokens Liste les token disponibles
--cmd=list Liste les objets

        --token= Id du token

--cmd=export Exporter un objet

        [--token=] Id du token
        --application= Nom de l’application
        --label Label
        [--file] Fichier cible ou stdout

--cmd=import Importer des objets

        --token= Id du token
        --application= Nom de l’application
        --label Label
        [--file] Fichier source ou stdin

--cmd=remove Supprimer un objet

        --token= Id du token
        --application= Nom de l’application
        --label Label
^
15 février 2012

htmlpdflatexmanmd




pkcs11-dump

pkcs11-dump

Dump le contenu d’un token PKCS #11 sur stdout dans un format lisible

   Les types supportés sont:

CKO_DATA
CKO_CERTIFICATE
CKO_PUBLIC_KEY
CKO_PRIVATE_KEY
CKO_SECRET_KEY
CKO_HW_FEATURE
CKO_DOMAIN_PARAMETERS
CKO_MECHANISM
CKO_VENDOR_DEFINED

OPTIONS

info
slotlist
dump
^
15 février 2012

htmlpdflatexmanmd




pkcs11-listcerts

pkcs11-listcerts

Lister les certificats PKCS#11 d’une carte à puce

OPTIONS

debug mode debug
^
15 février 2012

htmlpdflatexmanmd




pkcs11-tool

pkcs11-tool

Utilitaire pour gérer et utiliser les token de sécurité PKCS#11. Il permet de gérer et les objets sur les cartes à puce, lister et lire le PIN, clés et certificats stockés

OPTIONS

--login, -l Authentifie le token avant d’effectuer d’autres opérations.
--pin, -p Utilise le pin donné pour les opérations.
--so-pin Utilise le pin donné comme Security Officer PIN (doit être utilisé avec --label)
--init-token Initialise un token : défini son label et le Security Officer PIN
--init-pin Initialise le PIN de l’utilisateur
--change-pin, -c Change le pin de l’utilisateur
--test, -t Effectue des tests sur le token
--show-info, -I Affiche les informations générale sur le token
--list-slots, -L Affiche une liste de slots disponible sur le token
--list-mechanisms, -M Affiche une liste de mécanismes supportés par le token
--list-objects, -O Affiche la liste des objets
--sign, -s Signe des données
--hash, -h Hash des données
--mechanism, -m Utilise le mécanisme spécifié pour les opérations du token
--keypairgen, -k Génère une nouvelle pair de clé
--write-object, -w Écrit une clé ou un certificat dans le token
--type, -y Spécifie le type d’objet sur lequel opérer (cert, privkey, pubkey)
--id, -d Spécifie l’id de l’objet sur lequel opérer
--label, -a Spécifie le nom de l’objet sur lequel opérer
--slot Spécifie l’id du slot à utiliser
--slot-id Spécifie le nom du slot à utiliser
--set-id, -e Définis le CKA_ID de l’objet
--attr-from Extrait les informations du chemin spécifié (certificat DER) et créé les attributs correspondant quand il écrit un objet dans le token. (ex : le sujet du certificat est utilisé pour écrire le CKA_SUBJECT)
--input-file, -i Spécifie le chemin d’un fichier en entrée
--output-file, -o Spécifie le chemin d’un fichier en sortie
--module Spécifie le module pkcs11 à charger
--moz-cert, -z Tester une génération et la requête de pair de clé type mozilla. Spécifier le chemin du fichier du certificat
--verbose, -v mode verbeux
^
15 février 2012

htmlpdflatexmanmd




pkcs11_eventmgr

pkcs11_eventmgr

Identique à card_eventmgr avec quelques améliorations. Il utilise la libraire PKCS #11 au lieu de l’API pcsc-lite, le polling time et le temps d’expiration est en seconde

commandes

[no]debug mode debug
[no]daemon placer en tâche de fond
polling_time=‹s› Temps en secondes entre 2 statuts consécutifs (défaut : 1)
expire_time=‹s› Temps en seconde pour l’évènement expire_time au retrait de la carte (défaut : 0)
config_file=‹file› Fichier de configuration à utiliser (défaut : /etc/pam_pkcs11/pkcs11_eventmgr.conf)
pkcs11_module=‹file› Libraire PKCS #11 à utiliser (défaut : /usr/lib/pkcs11/opensc-pkcs11.so)
^
15 février 2012

htmlpdflatexmanmd




pkcs11_eventmgr.conf

pkcs11_eventmgr.conf

Fichier de configuration pour pkcs11_eventmgr


pkcs11_eventmgr {
    daemon = true ; # lancer en tâche de fond
    debug = false ; # mode debug
    polling_time = 1 ; #polling time en secondes
    expire_time = 0 ; # temps d’expiration en seconde (0 pas d’expiration)
    pkcs11_module = /usr/lib/opensc-pkcs11.so ; # module PKCS #11 à utiliser
    # Liste des évènements et actions
    event card_insert {
        on_error = ignore ;
        action = "/usr/bin/play /usr/share/sounds/warning.wav",
        "/usr/X11R6/bin/xscreensaver-command -deactivate" ;
    }
    event card_remove {
        on_error = ignore ;
        action = "/usr/bin/play /usr/share/sounds/error.wav",
        "/usr/X11R6/bin/xscreensaver-command -lock" ;
    }
    event expire_time {
        on_error = ignore ;
        action = "/bin/false" ;
    }
}

Problèmes de sécurité

   Toutes les commandes des évènements sont exécutées avec les privilèges utilisateur.

  En invoquant setuid et setgid, ces commandes ignorent l’environnement de l’utilisateur et définissent le leur.

  Les actions sont exécutées via execve("/bin/sh","-c","commande",null,environ).
^
15 février 2012

htmlpdflatexmanmd




pkcs11_inspect

pkcs11_inspect

Utilitaire pour explorer des certificats

   Il utilise le même fichier de configuration que pam_pkcs11. Il charge les mappers définis et les utilise pour regarder dans le certificat les entrées requises. Quand un mapper trouve une entrée valide, il la convertit en UTF-8 et l’affiche sur stdout.

OPTIONS

debug mode debug
config_file=‹file› Fichier de configuration (défaut : /etc/pam_pkcs11/pam_pkcs11.conf)
^
15 février 2012

htmlpdflatexmanmd




pkcs11_make_hash_link

pkcs11_make_hash_link

hash symbolique de certificats

   Crée un lien hash symbolique pour chaque certificat CA et chaque CRL dans le répertoire donné

^
15 février 2012

htmlpdflatexmanmd




pkcs11_setup

pkcs11_setup

Affiche tous les certificats

OPTIONS

debug mode debug
list_module liste les modules disponible et configurés dans /etc/pam_pkcs11/pam_pkcs11.conf
use_module Affiche le module utilisé par pam_pkcs11 ou le définis
ins_action[=commande] Affiche les commande exécutées quand la carte est insérée ou définis les commandes
rm_action[=commande] Affiche les commande exécutées quand la carte est retirée ou définis les commandes
^
15 février 2012

htmlpdflatexmanmd




pkcs15-crypt

pkcs15-crypt

Effectuer des opérations crypto en utilisant des cartes pkcs #15

OPTIONS

--sign, -s Signer numériquement une donnée lue depuis un fichier. Le contenu du fichier est le résultat d’une opération de hash md5. Il attend une donnée binaire. Si aucun fichier de sortie n’est spécifié, affiche sur stdout
--pkcs1 pkcs15-crypt attend en entrée des données à la longueur correcte. Cette option force pkcs15-crypt à convertir à la bonne longueur en utilisant pkcs1
--sha-1 Le fichier d’entrée est le résultat d’une opération de hash SHA1 au lieu de md5. (Doit être en représentation binaire)
--decipher, -c Déchiffre le contenu du fichier. le résultat est écrit sur stdout si aucun fichier de sortie n’est spécifié
--key, -k Spécifie l’id de la clé à utiliser
--reader, -r Sélectionne le nième lecteur de carte
--input, -i Spécifie le fichier à utiliser en entrée
--output, -o Spécifie le fichier à utiliser en sortie
--raw, -R Sort les données brut 8bits
--pin, -p Spécifie le PIN si une opération le nécessite
--verbose, -v mode verbeux
^
15 février 2012

htmlpdflatexmanmd




pkcs15-init

pkcs15-init

Utilitaire de personnalisation de carte à puce

   Il permet de créer des structures PKCS #15 sur les cartes à puce, créer des PIN et ajouter des clés et des certificats. Les détails de la structure est contrôlée par des profils.

Utilisation du PIN

   Une carte OpenSC peut avoir un security officer PIN, et 0 ou plusieurs PIN utilisateurs. Généralement, un PIN est une séquence de chiffres, mais certaines cartes acceptent des caractères ascii. Le SO-PIN est spécial, il est utilisé pour protéger les métadonnées sur la carte, tel que la structure PKCS #15 elle-même. Le SO-PIN est optionnel. Pour chaque PIN, vous pouvez spécifier un PUK.

Modes opératoires

  

Initialisation

Première étape de la personnalisation de la carte, et va créer les fichiers de bases sur la carte. Pour créer une structure PKCS #15 (le PIN, le PUK et le SO-PIN sont demandés):
pkcs15-init --create-pkcs15
Si la carte le supporte, vous pouvez également l’effacer avant avec --erase

Installation du PIN de l'utilisateur

Avant d’installer des objets, vous avez besoin d’au moins un PIN pour protéger ces objets (demande le PIN et le PUK):
pkcs15-init --store-pin --id " nn
Où nn est un ID PKCS #15 en notation hexadécimal. Les valeurs communes sont 01, 02, etc.

Génération de clé

Pour générer une nouvelle clé et la stocker:
pkcs15-init --generate-key " keyspec " --auth-id " nn
Où keyspec décrit l’algorithme et la longueur de la clé à créer, tel que rsa/512. Actuellement seul RSA est supporté. nn est l’ID d’un PIN utilisateur
Cela va stocker la portion privée et publique de la clé. Par défaut, tente d’utiliser la fonctionnalité embarquée de la carte.

Télécharger la clé privée

Vous pouvez utiliser une clé par un autre moyen et la charger dans la carte. Doit être au format PEM, DER, et les certificats pkcs12 et pfx :
pkcs15-init --store-private-key key.pem --id 45 --auth-id 01
L’option --id sert pour définir 2 templates de clé. l’id 45 sert pour l’authentification et l’id 46 pour la non-répudiation.

Télécharger la clé publique

--store-public-key stocke la clé publique. Utiliser --format pour spécifier le format du fichier (PEM par défaut)

Télécharger un certificat

--store-certificat stocke le certificat. Le fichier est supposé être un fichier x.509 au format DER

Télécharger les fichiers pkcs#12

pkcs15-init --store-private-key key.p12 --format pkcs12 --auth-id 01

OPTIONS

--profil, -p Charge le profile général spécifié. Des options peuvent être spécifiées pour ce module en ajoutant un + entre chaque option. ex : pkcs15+onepin
--card-profile, -c Charge l’option de profile de carte spécifié.
--create-pkcs15, -C Crée un structure PKCS #15 sur la carte
--erase-card, -E Efface la carte avant de créer la structure PKCS #15
--generate-key, -G Dit à la carte de générer une nouvelle clé et de la stocker sur la carte, avec l’algorithme/longueur spécifiée
--store-private-key, -S Télécharge la clé privée sur la carte. Crée également un objet clé publique
--store-public-key, -P Télécharge la clé publique sur le certificat
--store-certificate, -X Stocke le certificat sur la carte
--so-pin, --so-puk, --pin, --puk Permet de spécifier les valeurs pour les opérations qui le nécessite
--passphrase Permet de spécifier la passphrase pour débloquer la clé privée
--verbose, -v mode verbeux
--options-file Lit les options additionnelles depuis le fichier spécifié. Ce fichier est supposé contenir une option longue par ligne. (Peut être spécifié plusieurs fois). ex:

        pin frank
        puk zappa
^
15 février 2012

htmlpdflatexmanmd




pkcs15-tool

pkcs15-tool

Utilitaire pour manipuler les structures de données PKCS #15

OPTIONS

--learn-card, -L Met en cache les données du token PKCS #15. Les opérations suivantes sont effectuées sur les données en cache si possible.
--read-certificate, -r Lit le certificat avec l’id spécifié
--list-certificates, -c Liste tous les certificats présent
--list-pins Liste tous les PIN
--change-pin Change un PIN
--unblock-pin, -u Débloque un PIN en utilisant le PUK
--list-keys, -k Listes les clés privées
--list-public-keys Liste toutes les clés publiques
--read-public-key Lit la clé publique avec l’id spécifié
--read-ssh-key Lit la clé publique avec l’id spécifié, affiche dans un format compatible pour $HOME/.ssh/authorized_keys
--output, -o Fichier de sortie
--no-cache Désactive la mise en cache des données
--pin-id, -a Spécifie le PIN à utiliser pour l’opération. Utile avec -change-pin
--reader Utilise le lecteur spécifié par son numéro
--verbose, -v mode verbeux
^
15 février 2012

htmlpdflatexmanmd




pklogin-finder

pklogin-finder

Trouver des maps Cert-to-login

   Utilisé pour trouver les maps Cert-to-login, en dehors de l’environnement PAM. Peut être utilisé pour créer et tester les maps. Il utilise la même structure de configuration que le module pam-pkcs11. Il lit le certificat et tente tous les mappers spécifiés pour trouver l’utilisateur.

OPTIONS

[no]debug mode debug
config_file=‹file› Fichier de configuration (défaut : /etc/pam_pkcs11/pam_pkcs11.conf)
^
13 février 2012

htmlpdflatexmanmd




reader.conf

reader.conf, reader.conf.d

Fichiers de configuration pour les pilotes des lecteurs pcscd

Syntaxe

   Chaque entrée doit être définie par 4 champs:

FRIENDLYNAME Texte arbitraire pour identifier le lecteur. Affiché par la commande pcsc_scan
DEVICENAME (ifdhandler ›= 3.0). Utilisé pour identifier le port physique sur lequel le lecteur est connecté
LIBPATH Nom du fichier du pilote
CHANNELD (ifdhandler ‹ 3.0). Remplacé par DEVICENAME

Exemples

Gemplus lecteur GemPCTwin avec communication série:
FRIENDLYNAME "GemPCTwin serial"
DEVICENAME /dev/ttyS0
LIBPATH /usr/lib/pcsc/drivers/serial/libccidtwin.so.0.4.1
CHANNELID 1
^
13 février 2012

htmlpdflatexmanmd




smartcard_list.txt

smartcard_list.txt

Correspondance ATR - type de carte

   Ce fichier contient les référence entre un ATR et un type de carte. La liste la plus récente peut être téléchargée à http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt

Syntaxe

Pour une association ATR - type de carte:
ATR sous la forme d'une expression régulière
[tab] Texte descriptif
[tab] Texte descriptif
[tab] Texte descriptif
ligne vide
^
13 février 2012

htmlpdflatexmanmd




update-reader.conf

update-reader.conf

Outil pour générer reader.conf

   Outil pour regénérer /etc/reader.conf. Il tente de générer le fichier de configuration depuis les fichiers inclus dans /etc/reader.conf.d/. l’ancienne version est backupée dans /etc/reader.conf.old

OPTIONS

force Si le /etc/reader.conf ne contient pas de tag spécial sur la première ligne, il annule la régénération. Ce paramètre le force à continuer.