Pillola #27: Abilitare il lettore smart card "Smarty" e utilizzare la Carta Provinciale dei Servizi

La Provincia Autonoma di Trento mette a disposizione gratuitamente (fino ad esaurimento) un lettore per ogni nucleo familiare, quando almeno uno dei componenti attiva la propria Tessera Sanitaria con chip (detta anche CPS, Carta Provinciale dei Servizi ).

N.B: La CPS è anche una Carta Nazionale dei Servizi (CNS), la procedure vale anche per una qualsiasi tessera di questo tipo.

Questa pillola è stata testata su Ubuntu  10.04 Lucid Lynx e Ubuntu 12.04 Precise Pangolin.

Pacchetti essenziali

  • pcscd (demone per il protocollo di comunicazione PCSC)
  • libccid (supporto generico per lettori aderenti allo standard ccid. Nota: in versioni recenti di pcscd, questo pacchetto è una dipendenza di pcscd, e quindi probabilmente è già installato.
  • opensc (supporto per smartcard e token di vario tipo, tra cui le CNS italiane)

Nota: il lettore "Smarty" è in realtà un ACS38U; da prove effettuate sembra che alcuni siano ccid compliant, altri no. Si consiglia quindi di provare ad installare, se il lettore non viene riconosciuto, anche il pacchetto  "libacr38u".

Pacchetti opzionali

  • pcsc-tools (tool di analisi, tra cui l'utile programma pcsc_scan)
  • libacr38u (driver per lettori ACS ACR38U non ccid compliant)

1. Installazione e verifica

  • Installare i pacchetti essenziali.
  • Inserire la carta e controllare che venga rilevata correttamente, usando il comando:

=============

$ opensc-tool -av
Using reader with a card: ACS ACR 38U-CCID 00 00
Connecting to card in reader ACS ACR 38U-CCID 00 00...
Using card driver Italian CNS.
Card ATR:
3B FF 18 00 FF C1 0A 31 FE 55 00 6B 05 08 C8 0C ;......1.U.k....
01 11 01 43 4E 53 10 31 80 05                   ...CNS.1..

=============

L'ATR è l'identificativo a basso livello della carta, che codifica diverse informazioni interessanti, ad esempio tra i byte opzionali, 43 4E 53 == CNS identificano tutte le carte a standard CNS.

  • Se si sono installati i pcsc-tools, si può usare il comando "pcsc_scan", che estrae un notevole nunero di informazioni dalla carta, e permette di testare eventi come l'introduzione e la rimozione della carta dal lettore. L'autore Ludovic Rousseau (uno degli autori e mantainer di pcscd) aggiorna un file di testo, smartcardlist.txt, su cui si basa pcsc_scan, che è una delle liste più complete di carte e relativi ATR.

=============

$ pcsc_scan
PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning present readers...
0: ACS ACR 38U-CCID 00 00

Wed Aug  1 10:01:28 2012
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card removed,

=============

se quindi si inserisce la carta: 

=============
Wed Aug  1 10:07:19 2012
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted,
  ATR: 3B FF 18 00 FF C1 0A 31 FE 55 00 6B 05 08 C8 0C 01 11 01 43 4E 53 10 31 80 05

ATR: 3B FF 18 00 FF C1 0A 31 FE 55 00 6B 05 08 C8 0C 01 11 01 43 4E 53 10 31 80 05
+ TS = 3B --> Direct Convention
+ T0 = FF, Y(1): 1111, K: 15 (historical bytes)
  TA(1) = 18 --> Fi=372, Di=12, 31 cycles/ETU
    129032 bits/s at 4 MHz, fMax for Fi = 5 MHz => 161290 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = FF --> Extra guard time: 255 (special value)
  TD(1) = C1 --> Y(i+1) = 1100, Protocol T = 1
-----
  TC(2) = 0A --> Work waiting time: 960 x 10 x (Fi/F)
  TD(2) = 31 --> Y(i+1) = 0011, Protocol T = 1
-----
  TA(3) = FE --> IFSC: 254
  TB(3) = 55 --> Block Waiting Integer: 5 - Character Waiting Integer: 5
+ Historical bytes: 00 6B 05 08 C8 0C 01 11 01 43 4E 53 10 31 80
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: B (pre-issuing data)
      Data: 05 08 C8 0C 01 11 01 43 4E 53
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 10 (Proprietary)
      SW: 3180 (Error not defined by ISO 7816)
+ TCK = 05 (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B FF 18 00 FF C1 0A 31 FE 55 00 6B 05 08 C8 0C 01 11 01 43 4E 53 10 31 80 05
    Healtcare card (TS-CNS) - Provincia Autonoma di Trento

=============

Come vedete, qualcuno ha già provveduto a segnalare l'ATR; sospetto sia qualcuno del LT :-)

2. Come configurare Firefox per usare la libreria OpenSC (e quindi identificarsi su siti web tramite CPS)

  • Andare in Modifica -> Preferenze -> Avanzate; Selezionare il tab Cifratura
  • Pigiare il tasto: Dispositivi di sicurezza
  • Pigiare il tasto: Carica
  • Fornire nel campo una descrizione, ad esempio: OpenSC
  • Fornire il percorso alla libreria: 

onepin-opensc-pkcs11.so ,
     oppure  
opensc-pkcs11.so 
(di solito si trovano in /usr/lib/)

  • Pigiare il tasto: Ok,
  • Chiudere la finestra delle Preferenze.

3. Come cambiare pin:

Vengono chiesti in sequenza:

  1. Vecchio pin
  2. Nuovo pin
  3. Riconferma del nuovo pin

 $ pkcs15-tool --change-pin

4. Come riabilitare la carta, che si blocca dopo tre immissioni errate del pin:

Occorre disporre del PUK:

  $ pkcs15-tool -u


5. Alcuni comandi per esplorare il contenuto della carta:

Per elencare i certificati contenuti:

   $ pkcs15-tool -c

Per visualizzare il proprio certificato (L'ID va preso dal risultato del comando precedente)

   $ pkcs15-tool -r <ID>


6. Esplorare il filesystem della carta:

   $ opensc-explorer

E' una vera e propria shell, help per un listing veloce, o vedere man opensc-explorer per il dettaglio dei comandi.