• miniguida per nuove CNS

    From Davide Prina@21:1/5 to All on Sun Jul 10 11:40:01 2022
    Ciao a tutti,

    avendo poco tempo mi sono preso appunti man mano che procedevo e ho creato questa
    miniguida che potrebbe essere utile anche ad altri.
    Ho cercato nella documentazione per capire come vedere se la CNS viene riconosciuta
    ancora prima di mettere il PIN, quanti tentativi sono ancora a disposizione, ...


    Ho cercato di raccogliere qui la mia esperienza per far funzionare la CNS come metodo di autenticazione utilizzando i driver liberi con la patch di 3v1n0.

    Premetto che non sono un esperto nel settore e quindi ognuno esegue a suo rischio e
    pericolo quanto qui indicato (in pratica se si sbaglia il PIN tre volte viene bloccato
    e per sbloccarlo bisogna usare il PUK. Però se i driver non funzionano correttamente
    potrebbe essere che il PIN corretto non venga riconosciuto e quindi potrebbe bloccarsi.
    Inoltre se si blocca il PUK, per errori multipli, se non ho capito male, bisogna
    rivolgersi a chi emette la CNS per farsela riabilitare. Inoltre non so se ci siano
    operazioni che potrebbero "danneggiare" la CNS).

    Quanto qui indicato funziona con Debian testing (Bookworm), ma non con la stable
    (Bullseye) e quindi presuppongo non funzioni anche per le precedenti stable, mentre
    presuppongo funzioni per unstable (Sid).
    Purtroppo non si può portare quanto ottenuto con testing su stable poiché è necessaria
    una versione di libc più recente. Una soluzione può essere quella di crearsi una live
    con Debian testing o installare Debian testing su un PC o, in dual boot, installare
    Debian testing sul PC.
    Per stable ho visto che cambia la libreria libssl 1.1.1, in testing c'è una versione
    leggermente superiore e poi cambiano le libc e di sicuro il compilatore. Appena avrò
    tempo proverò a fare una prova per vedere se è possibile installare la libreria
    libssl 1.1.1 presente in testing su stable e rifare la compilazione con questa, magari
    basta questa piccola modifica... Se qualcuno ha tempo potrebbe anche analizzare come mai
    il compilato per stable non riconosce la carta per l'autenticazione.

    Infine con questa procedura su Debian testing dovrebbero funzionare per le seguenti CNS:
    AC 2013
    AC 2014
    AC 2018
    ACx 2021
    ACe 2021
    OT 2015
    OT 2016
    OT 2015
    ID 2019

    Io ho testato per ACx 2021 e AC 2014

    Non ho idea se funziona anche per queste:
    ST 2021
    ST 2022

    Notare che la carta può essere usata per diversi scopi ed è possibile che i driver
    funzionino per alcuni, ma non per altri. Qui ho soltanto verificato la possibilità di
    usare il servizio di autenticazione tramite PIN.

    ATTENZIONE: se rispondete a questa mail indicando i risultati ai comandi con la vostra
    CNS eliminate tutte le parti identificative della CNS usata e del proprietario o per lo
    meno tutte quelle parti non necessarie a far capire il problema

    *******************************
    A) compilazione alla debian way
    *******************************

    A.1) installare le dipendenze necessarie per la ricompilazione
    # apt build-dep opensc

    A.2) creazione directory per la compilazione
    $ mkdir ~/src
    $ cd /src
    $ apt source opensc

    purtroppo le modifiche fatte da 3v1n0 sono su sorgenti in
    lavorazione e non mi ci sono messo a cercare di portarli
    alla versione presente in Debian (copiando semplicemente i
    file modificati non funziona).

    A.3) estrazione della versione creata da 3v1n0
    $ git clone https://github.com/3v1n0/OpenSC.git
    $ cd OpenSC

    A.4) debianizzazione della versione di 3v1n0 (non sono sicuro
    al 100% che questa operazione sia sicura/funzionante)
    $ cp -R ../opensc-0.22.0/debian .

    A.5) compilazione alla Debian way
    $ fakeroot debian/rules binary


    ***************************************
    B) installazione dei pacchetti prodotti
    ***************************************

    # cd ~/src
    # apt install ./opensc_0.22.0-2_amd64.deb ./opensc-pkcs11_0.22.0-2_amd64.deb

    notare che è presente una versione successiva solo binaria in testing, la 0.22.0-2+b1
    questo vuol dire che al prossimo upgrade quanto qui installato verrà sostituito

    se si verifica che la CNS funziona correttamente, con i passi successivi, allora è
    possibile impedire l'upgrade dei due pacchetti con il comando:
    # apt-mark hold opensc opensc-pkcs11

    per riabilitare l'upgrade è sufficiente dare il seguente:
    # apt-mark unhold opensc opensc-pkcs11

    *******************
    C) test di verifica
    *******************

    Ho usato questi test per capire eventuali problemi a che livello si pongano. Qui
    riporto solo quelli usati per poi effettuare l'autenticazione con la carta.

    C.1) inserire il lettore e verificare che lo riconosca
    $ opensc-tool --list-readers -v
    # Detected readers (pcsc)
    Nr. Card Features Name
    0 No ACS ACR38U 00 00

    Questo indica che il lettore è stato riconosciuto, se non viene riconosciuto si
    dovrebbe avere un errore del tipo:
    No smart card readers found.

    C.2) inserire la tessera nel lettore e verificare che venga vista
    $ opensc-tool --list-readers -v
    # Detected readers (pcsc)
    Nr. Card Features Name
    0 Yes ACS ACR38U 00 00
    [...cut...] CNS card

    C.3) ulteriore verifica
    $ opensc-tool -n
    Using reader with a card: ACS ACR38U [...]
    CNS card

    C.4) verificare che i driver installati siano funzionanti per autenticarsi con la CNS
    $ pkcs15-tool --list-pins -v
    Using reader with a card: ACS ACR38U 00 00
    Connecting to card in reader ACS ACR38U 00 00...
    [...]
    Using card driver Italian CNS.
    Trying to find a PKCS#15 compatible card...
    Found NOME COGNOME!
    Card has 0 Authentication object(s).

    se esce così (come esce su stable), allora vuol dire che i driver non sono funzionanti.

    $ pkcs15-tool --list-pins
    Using reader with a card: ACS ACR38U 00 00
    PIN [PIN CNS1]
    [...]

    PIN [PUK CNS1]
    [...]

    Se invece esce così (una sezione per il PIN e una per il PUK) vuol dire che i driver
    sono funzionanti e la CNS può essere usata per autenticarsi.


    ***********************************************************************
    D) verifica che il PIN non sia bloccato e se è bloccato come sbloccarlo ***********************************************************************
    $ pkcs15-tool --list-pins
    PIN [PIN CNS1]
    [...]
    Tries left : 0

    PIN [PUK CNS1]
    [...]
    Tries left : 0

    Notare che qui dovrebbero essere indicati anche i tentativi restanti sia per il PIN che
    per il PUK, ma a me viene visualizzato 0... e io interpreto come se avessi esaurito
    tutti i tentativi, mentre penso debba essere visualizzato 3.
    In rete ho trovato che "This should show tries-left for each PIN. tries-left : 0 means
    pin is blocked.", ma a me visualizza 0 e la carta non è bloccata, ma funzionante.
    Notare che se la carta è bloccata e si cerca di autenticarsi ad un sito web viene
    richiesto il PIN, non viene permesso l'ingresso, ma non viene visualizzato il motivo,
    cioè non è indicato esplicitamente che il PIN è bloccato (così era successo a me tempo fa).

    Per avere il messaggio che indica che il PIN è bloccato, visto che con il comando
    precedente almeno a me non ritorna un risultato corretto penso bisogni effettuare
    un'operazione a riga di comando, ad esempio eseguire un test di inserimento PIN o firmare
    un documento (richiede il PIN), ... e passare sempre -v come parametro. Una volta inserito
    il PIN si dovrebbe avere il messaggio di errore che il PIN è bloccato.

    Per sbloccarlo (non l'ho provato) dovrebbe essere il seguente comando: pkcs15-tool --unblock-pin --puk $PUK --new-pin $NEW_PIN

    Dove $PUK è il PUK della CNS e $NEW_PIN è il nuovo PIN che si vuole impostare.
    ATTENZIONE: se si sbaglia il PUK (penso per 3 volte) la CNS viene bloccata e probabilmente
    bisogna richiedere la riattivazione o la sostituzione.

    Sarebbe interessante sapere se qualcuno che ha installato i driver del ministero o altri
    ha lo stesso problema sul numero di tentativi rimasti. Se è così si può aprire un bug
    report.

    ***********************
    E) esecuzione auto-test
    ***********************
    sono dei test di diagnostica, eseguiti con il comando pkcs11-tool, ci sono due tipi:

    E.1) verifica che tutto funzioni con l'inserimento a caldo del lettore e CNS (usare anche
    -v per ulteriori dettagli). Si può inserire togliere la tessera e mettere diverse tessere
    (ad esempio la vecchia e la nuova)
    $ pkcs11-tool --test-hotplug -v
    [...]
    token flags : [...] user PIN locked
    [...]

    quindi c'è un errore, non intercetta il valore corretto per i tentativi rimanenti.
    Lo stesso sulla tessera vecchia.

    E.2) test vari, maggiori test si possono ottenere usando anche l'opzione --login o --pin
    $ pkcs11-tool -tv
    $ pkcs11-tool -tv --login

    la seconda mi dice:
    WARNING: user PIN locked

    però mettendo il PIN poi fa i test ed è tutto ok

    L'importante è che in fondo ci sia la scritta:
    No errors

    ******************************************
    F) configurare in Firefox l'uso dei driver ******************************************
    Questa operazione deve essere fatta solo una volta:

    * Aprire Firefox
    * Modifica -> Impostazioni -> Privacy e sicurezza -> Dispositivi di sicurezza (è il
    bottone in fondo a destra della pagina)
    * Carica
    * come "Nome modulo" può essere messo quello che si vuole, ad esempio "CNS PKCS#11"
    * come "Nome file modulo" bisogna indicare dove è la libreria:
    /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so


    *************************************
    G) autenticarsi con la CNS in Firefox
    *************************************
    andare su un sito web, es: https//www.inps.it e fare l'accesso con CNS.
    Se non viene richiesto il PIN e viene visualizzato un errore, allora eseguire in
    sequenza una delle seguenti e poi riprovare ad autenticarsi, se non funziona provare
    con la successiva (questo problema di solito capita quando si sono appena installati
    i driver o si è appena configurato Firefox ad usarli):

    G.1) riavviare i servizi

    # systemctl restart pcscd pcscd.socket

    G.2) chiudere e riaprire il browser (tutte le istanze di Firefox)

    G.3) riavviare la sessione o la macchina (questo non dovrebbe mai essere necessario)

    Ciao
    Davide

    --
    La mia privacy non è affar tuo
    https://noyb.eu/it

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Davide Prina@21:1/5 to All on Thu Mar 2 23:00:01 2023
    integro questa miniguida perché ho fatto alcune scoperte interessanti:

    1) il 26/1/2023 è arrivata in testing la versione 0.23.0-0.1 di opensc
    in teoria questa versione dovrebbe integrare la patch di 3v1n0

    2) con alcuni PC (penso alcuni di quelli più recenti) il lettore di CNS
    "vecchio" può non funzionare (non viene rilevato, nei log non appare
    nulla e nei test con i tool indcati si ha come risultato che non vi
    è nessun lettore collegato) o può non permettere tutte le operazioni
    con le nuove CNS... e questo con qualsiasi sistema operativo.

    Quindi, riprendendo quanto indicato nella guida, bisogna usare almeno
    Debian Bookworm, bisogna avere un lettore CNS nuovo (recente) e serve la
    patch di 3v1n0.

    Il problema è che con la versione 0.23.0-0.1 di opensc arrivata in testing
    si ha che (usando CNS nuova, lettore CNS nuovo e opensc 0.23.0-0.1):

    Davide Prina ha scritto:

    *******************
    C) test di verifica
    *******************

    C.1) inserire il lettore e verificare che lo riconosca
    $ opensc-tool --list-readers -v
    # Detected readers (pcsc)
    Nr. Card Features Name
    0 No ACS ACR38U 00 00

    questo funziona, con scritta che identifica il nuovo lettore

    C.2) inserire la tessera nel lettore e verificare che venga vista
    $ opensc-tool --list-readers -v
    # Detected readers (pcsc)
    Nr. Card Features Name
    0 Yes ACS ACR38U 00 00
    [...cut...] CNS card

    questo funziona, rilevando correttamente la CNS

    C.3) ulteriore verifica
    $ opensc-tool -n
    Using reader with a card: ACS ACR38U [...]
    CNS card

    ok anche per questo

    C.4) verificare che i driver installati siano funzionanti per autenticarsi con la CNS
    $ pkcs15-tool --list-pins -v
    Using reader with a card: ACS ACR38U 00 00
    Connecting to card in reader ACS ACR38U 00 00...
    [...]
    Using card driver Italian CNS.
    Trying to find a PKCS#15 compatible card...
    Found NOME COGNOME!
    Card has 0 Authentication object(s).

    e qui però ritorna questo risultato indicando che non è presente nessun oggetto di
    autenticazione :-(

    Però se si parte dalla versione precedente e si compila come indicato nella miniguida
    (io ho riusato i .deb che avevo compilato allora), al posto di quelli presenti in
    Bookworm si ha invece:

    $ pkcs15-tool --list-pins
    Using reader with a card: ACS ACR38U 00 00
    PIN [PIN CNS1]
    [...]

    PIN [PUK CNS1]
    [...]

    Se invece esce così (una sezione per il PIN e una per il PUK) vuol dire che i driver
    sono funzionanti e la CNS può essere usata per autenticarsi.


    Quindi rileva sia il PIN che il PUK.

    Cercherò di capire cosa c'è di sbagliato nella versione 0.23.0-0.1... se sarò in grado e
    avrò tempo per farlo. Se qualcuno vuole aiutarmi suggerendomi eventuali modifiche da fare
    ai sorgenti 0.23.0-0.1 o come fare ad identificare cosa c'è di diverso tra i due...

    Ciao
    Davide

    --
    La mia privacy non è affar tuo
    https://noyb.eu/it
    - You do not have my permission to use this email to train an AI -

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Davide Prina@21:1/5 to All on Fri Mar 3 18:20:02 2023
    Ulteriore aggiornamento:

    Probabilmente il problema è la generazione dell'errore:
    CKR_DATA_LEN_RANGE (0x21), questo usando l'ultima versione del
    driver e il lettore nuovo

    $ pkcs11-tool -tv
    Using slot 0 with a present token (0x0)
    C_SeedRandom() and C_GenerateRandom():
    seeding (C_SeedRandom) not supported
    ERR: C_GenerateRandom(buf1,100) failed: CKR_DATA_LEN_RANGE (0x21)
    Digests:
    all 4 digest functions seem to work
    MD5: OK
    RIPEMD160: OK
    SHA-1: OK
    SHA256: OK
    Signatures (currently only for RSA)
    Signatures: no private key found in this slot
    Verify (currently only for RSA)
    No private key found for testing
    Decryption (currently only for RSA)
    1 errors


    Il problema è che hanno introdotto tantissime modifiche dalla versione
    su cui è stata fatta la patch per far vedere la nuova CNS e quindi
    non è così semplice individuare cosa è stato introdotto che fa scattare quell'errore.

    Comunque confermo che seguendo la guida che ho indicato nella prima mail
    la nuova CNS funziona senza problemi con il lettore nuovo, provata su
    più PC.

    Ciao
    Davide

    --
    La mia privacy non è affar tuo
    https://noyb.eu/it
    - You do not have my permission to use this email to train an AI -

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)