La Carta Regionale Servizi

La Carta Regionale Servizi (CRS), nota anche col nome di Carta Nazionale Servizi (CNS), è un documento informatico, rilasciato da una Pubblica Amministrazione, che consente di identificare elettronicamente il titolare della carta. Utilizza una smart card a microprocessore nella cui memoria sono conservate in modo protetto le informazioni necessarie per l’autenticazione certa e sicura del titolare.

Nel microprocessore sono registrati i dati personali del titolare: nome, cognome, data e luogo di nascita, residenza e domicilio, codice fiscale; un certificato digitale di autenticazione che permette l’autenticazione e l'accesso sicuro ai servizi on line e l'apposizione della cosiddetta "firma elettronica"; un insieme di dati amministrativi socio-sanitari (codice assistito, ASL di appartenenza, data di scadenza del diritto all'assistenza sanitaria per i cittadini iscritti a termine, medico curante) e i dati di esenzione dalla spesa sanitaria.
La CRS può essere considerata come una sorta di documento di riconoscimento online (non a vista) ossia, un documento che consente di farsi riconoscere in una transazione informatica, in contrapposizione alla Carta d’Identità tradizionale che invece è un documento di riconoscimento a vista, e funge da strumento operativo tra cittadino e Pubblica Amministrazione indispensabile per lo sviluppo dei servizi di e-government.
I servizi offerti dalla CRS sono:
- l’autenticazione del cittadino per servizi comunali, anagrafici, modulistica, servizi sanitari, pagamenti online, etc.
- la Firma Digitale
- la Carta Sanitaria (funzione facoltativa)
- servizi di pagamento tra privati e Pubblica Amministrazione grazie ai protocolli di intesa tra queste ultime, le banche e le Poste Italiane
- Codice Fiscale

Contenuto della CRS
Cosa c’è nella mia CRS? In [1] è disponibile un’applicazione online per la lettura dei contenuti pubblici della  CRS e per verificare la correttezza dei dati in essa contenuti. Più avanti si mostrerà come scrivere una semplice applicazione per leggere i contenuti di particolare interesse.

Dettagli tecnici
Tecnicamente la CRS è una smart card a microprocessore conforme alle norme ISO 7816 parti 1,2,3,4 e 8 (per un approfondimento sulle norme ISO7816 si veda [2]). 
Il decreto interministeriale siglato il 9 dicembre 2004 dal Ministro dell’interno, dal Ministro per l’Innovazione e le Tecnologie e dal Ministro dell’Economia e delle Finanze, sancisce le “Regole tecniche e di sicurezza per l'emissione e l’utilizzo della CNS”.
Nella CRS è definito un ben preciso file system composto da Dedicated File (DF) assimilabili a cartelle su un comune PC e Elementary File (EF) analoghi ai file del PC (per un approfondimento sulla struttura a file system di una smart card si veda [2]).
Il file system della CRS contiene numerosi EF e DF ciascuno con proprio contenuto informativo e dedicato a scopi diversi. Nella figura in basso se ne riporta una parte contenente i file più significativi:

 

Nello specifico, troviamo un PIN (Personal Identification Number) composto da 5 cifre numeriche e un PUK (PIN Unblocking Key) composto da 8 cifre numeriche. Il primo consente di sbloccare l’accesso alla chiave privata (PriKey) usata per eseguire l’autenticazione. Il secondo serve a sbloccare il PIN qualora venga bloccato dopo tre tentativi errati. Il file CardStatus conserva lo stato della carta. Il file ID Carta contiene il numero seriale della CRS che identifica univocamente la carta nell’intero circuito nazionale. Il file Dati Personali contiene i dati anagrafici dell’utente. Infine il file Certificato contiene il certificato digitale del titolare usato nella procedura di autenticazione.

Lettura dei dati dalla CRS
L’accesso alla CRS per la lettura dei dati può essere realizzato mediante la libreria CNA API scaricabile in versione trial da qui: CNSAPI.zip (1,57 mb). Tale libreria offre un API in Java, .NET (C# e VB.NET) e Visual Basic 6 per l’accesso alla CRS. 

Di seguito è riportato uno snippet di codice in Java per leggere l’ID Carta,  il nome, il cognome e il codice fiscale del titolare e per recuperare la data di scadenza del certificato digitale:

import com.cryptware.jcnsapi.CNS;
import com.cryptware.jscapi.PCSCException;
import com.cryptware.jscapi.Reader;
import com.cryptware.jscapi.SmartCard;
import com.cryptware.jscapi.SmartCardException;
import com.cryptware.jscapi.SmartCardManager;
import java.security.cert.X509Certificate;

try
{
    // Apre una connessione con lo smart card manager
    SmartCardManager scman = new SmartCardManager();
   
    // legge la lista dei lettori di smart card disponibili
    List<Reader> readerList = scman.getPluggedReaders();
   
    // Controlla che si sia almeno un lettore connesso
    if(readerList.size() == 0)
    {
        System.out.println("No readers found");
        return;                   
    }
           
    // prende il primo lettore tra quelli disponibili
    Reader reader = readerList.get(0);
   
    // attende che nel lettore venga inserita una smart card
    reader.WaitForSmartCardInserted();
         
    // apre una connessione con la smart card
    SmartCard card = reader.connect();
           
    // crea un’instanza di CNS
    CNS cns = new CNS(card);
   
    // Invia i comandi per leggere il contenuto
    try
    {
        byte[] cardId = cns.ReadIDCarta();   
        System.out.println("ID Carta: " + new String(cardId));
    }
    catch (SmartCardException e)
    {
        e.printStackTrace();
    }             
      
    try
    {
        String[] datipersonali = cns.ReadDatiPersonali();   
        System.out.println("Nome, Cognome, Cod.Fis.: " + 
            datipersonali[CNS.Nome] + " " +
            datipersonali[CNS.Cognome] + " " +
            datipersonali[CNS.CodFis] );           
    }
    catch (SmartCardException e)
    {
        e.printStackTrace();
    }           
           
    try
    {
        X509Certificate certificate = cns.ReadCertificatoX509();
        System.out.println("Scadenza certificate: " +
                           certificate.getNotBefore());
    }
    catch (CertificateException e)
    {
        e.printStackTrace();
    }
    catch (SmartCardException e)
    {
        e.printStackTrace();
    }

}
catch(PCSCException ex)

{
   
e.printStackTrace();
}

In maniera del tutto equivalente e con la stessa semplicità, usando Cryptware CNS API il codice può essere scritto in C#, VB.NET, Visual Basic 6 e altri linguaggi che supportano COM interop quali Delphi,VBScript, ecc.
 
Riferimenti:

[1] “Cosa c’è nella mia Carta Regionale Servizi?”, Ugo Chirico, 2010, http://www.ugochirico.com

[2] “Programmazione delle Smart Card”, 2nd edizione, Ugo Chirico, 2009, cap. 3, http://www.ugosweb.com/publicationsit.aspx

Add comment