Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

miniguida per nuove CNS

95 views
Skip to first unread message

Davide Prina

unread,
Jul 10, 2022, 5:40:03 AM7/10/22
to
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

Davide Prina

unread,
Mar 2, 2023, 5:00:04 PM3/2/23
to
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 -

Davide Prina

unread,
Mar 3, 2023, 12:20:04 PM3/3/23
to
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.
0 new messages