Myöhemmin käyn läpi myös FSFE:n (Free Software Foundation Europe) OpenPGP-korttia. Lisäksi uskon, että jotain tietoja saan ulos myös vanhentuneista korteista, kuten vanhat pankkiautomaattikortit ja eTampere-kortti, vähintäänkin niiden tunnisteet eli minkä tyypin kortti on kyseessä sekä kortin uniikit IDt.
Varoitus, teknoa edessä!
Varsinaisena työkaluna tässä toimii Debian GNU/Linux. Windowsia käytän vain siinä äärimmäisessä tapauksessa, kun kokeilen PIN-koodin syöttöä. Useat kortit nimittäin lukittuvat kolmen väärän PIN-koodin syötön jälkeen, enkä kaikilla korteilla ole vielä keksinyt tapaa avata niitä admin-PIN koodilla.
Windowsissa käytän Fujitsun mPollux kortinlukijaohjelmistoa, joka löytyy vrk.fi:n sivuilta ja Linuxissa pcscd:tä. USB-kortinlukijani, mallia SCR531, firmware täytyi päivittää versiosta 4.*- >5.22, ennen kuin sain sen toimimaan uudemmilla korteilla.
Asennettavat softat Linux puolella
- pcscd
- pcsc-tool
- opensc
- myöhemmin jotain udev-scriptejä gnupg-korttia varten
Komennolla pcsc_scan näkee, onko kortti sisällä lukijassa ja mitä se sisältää. dmesg antaa vihjeen lukijasta. OpenPGP kortista tietoja saa vaikka "gpg --card-status" komennolla.
dmesg-tuloste, kun kortin lukija liitettiin tietokoneeseen:
[30008.992128] usb 6-2: new full-speed USB device number 3 using uhci_hcd
[30009.195216] usb 6-2: New USB device found, idVendor=04e6, idProduct=e001
[30009.195226] usb 6-2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[30009.195234] usb 6-2: Product: SCRx31 USB Smart Card Reader
[30009.195240] usb 6-2: Manufacturer: SCM Microsystems Inc.
[30009.195246] usb 6-2: SerialNumber: 502000D4
Käynnistetään kortinlukijan ja kortin välisen liikenteen hoitava framework:
root@kone:/ $ /etc/init.d/pcscd start
Luetaan korttia:
root@kone:/ $ pcsc_scan
PC/SC device scanner
V 1.4.20 (c) 2001-2011, Ludovic Rousseau
Compiled with PC/SC lite version: 1.8.3
Using reader plug'n play mechanism
Scanning present readers...
0: SCM Microsystems Inc. SCR 331 [CCID Interface] (502000D4) 00 00
Thu Mar 14 21:59:02 2013
Reader 0: SCM Microsystems Inc. SCR 331 [CCID Interface] (502000D4) 00 00
Card state: Card removed,
...SYÖTETÄÄN KORTTI SISÄÄN ...
Thu Mar 14 22:00:40 2013
Reader 0: SCM Microsystems Inc. SCR 331 [CCID Interface] (502000D4) 00 00
Card state: Card inserted,
ATR: 3B 7B 94 00 00 80 62 12 51 56 46 69 6E 45 49 44
ATR: 3B 7B 94 00 00 80 62 12 51 56 46 69 6E 45 49 44
+ TS = 3B --> Direct Convention
+ T0 = 7B, Y(1): 0111, K: 11 (historical bytes)
TA(1) = 94 --> Fi=512, Di=8, 64 cycles/ETU
62500 bits/s at 4 MHz, fMax for Fi = 5 MHz => 78125 bits/s
TB(1) = 00 --> VPP is not electrically connected
TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 80 62 12 51 56 46 69 6E 45 49 44
Category indicator byte: 80 (compact TLV data object)
Tag: 6, len: 2 (pre-issuing data)
Data: 12 51
Tag: 5, len: 6 (card issuer's data)
Card issuer data: 46 69 6E 45 49 44
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7B 94 00 00 80 62 12 51 56 46 69 6E 45 49 44
3B 7B 94 00 00 80 62 1[1,2] 51 56 46 69 6E 45 49 44
Finnish Electronic ID card (fineid card www.fineid.fi)
ATR kertoo tässä kortin tyypistä jotain ja tunnistaa sen (oikein) suomalaiseksi HST-kortiksi.
root@kone: ~$ opensc-tool -n
Using reader with a card: SCM Microsystems Inc. SCR 331 [CCID Interface] (502000D4) 00 00
SetCOS
Selvä, HST kortin tyyppi on SetCOS eli Setec:in valmistama kortti.
Mitä algroritmejä kortti osaa?
root@kone: ~$ opensc-tool --list-algorithms
Using reader with a card: SCM Microsystems Inc. SCR 331 [CCID Interface] (502000D4) 00 00
Algorithm: rsa
Key length: 1024
Flags: padding ( pkcs1 ) hashes ( sha1 )
Algorithm: rsa
Key length: 2048
Flags: padding ( pkcs1 ) hashes ( sha1 )
Tiesin, että kortilla on kaksi salaista avainta, joista toinen on allekirjoitukseen (ilmeisesti tuo 1024bittinen) ja toinen salaukseen (2048bittinen). Seuraavaksi haluan ryhtyä käyttämään kortin avainpareja.
Haluan käyttää älykortin prosessoria kryptologiseen operaatioon.
Koska se, miten X.509 varmenne on tallennettu kuvataan pkcs15-standardissa, on komentokin osuvasti pkcs15-tool
Seuraava näyttää kortilla olevat varmenteet ([todentamis- ja salausvarmenne], [allekirjoitusvarmenne], [VRK Root CA], [VRK Gov. CA for Citizen Qualified Certificates])
root@kone: ~$ pkcs15-tool -c
X.509 Certificate [todentamis- ja salausvarmenne]
Object Flags : [0x0]
Authority : no
Path : xxxxxxxx
ID : 45
Access Rules : read:;
Encoded serial : 02 04 AAAAAAAAAA
Oman todentamisavaimen saa ulos selkokielisenä parsittuna
pkcs15-tool -r 45 | openssl x509 -noout -text
Tuossa 45 oli luettavan varmenteen id, tulos lähetetään eteenpäin ('|') , -noout jättää tulostamatta ASCII-varmenteen ja -text tekee selkokielisen parsinnan.
Näytetään mun privat avaimet:
root@kone:~$ pkcs15-tool -k
Using reader with a card: SCM Microsystems Inc. SCR 331 [CCID Interface] (502000D4) 00 00
Private RSA Key [todentamis- ja salausavain]
Object Flags : [0x1], private
Usage : [0x26], decrypt, sign, unwrap
Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
Access Rules : execute:01;
ModLength : 2048
Key ref : 0 (0x0)
Native : yes
Path : 3f004b01
Auth ID : 01
ID : 45
Private RSA Key [allekirjoitusavain]
Object Flags : [0x1], private
Usage : [0x200], nonRepudiation
Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
Access Rules : execute:02;
ModLength : 2048
Key ref : 0 (0x0)
Native : yes
Path : 3f0050164b02
Auth ID : 02
ID : 46
Access Flags:it vaikuttavat mielenkiintoiselta. sensitive, alwaysSensitive, neverExtract, local.
Joku noista varmasti tarkoittaa sitä, että avainta ei koskaan saa ulos kortilta vaan sitä
voidaan operoida vain kortin prosessorilla. Joku muu operaatio taas tarkoittaa sitä, että käyttöön tarvitaan
PIN-koodi, mutta muuten kaikki vaikuttavat hyvin samankaltaisilta. Koska olin varma, ettei niitä salaisia avaimia näytetä, saatoin ajaa tämän komennon.
Käyttökohde: ssh-yhteys etäkoneeseen HST kortin avaimella
1) kopioi HST-kortin julkinen avain ssh-palvelimelle normaaliin tapaan1.1) nouda julkinen avain kortilta (id:stä 45 täss)
pkcs15-tool --read-ssh-key 45 > kortti.pub
ssh-copy-id -i kortti.pub user@etakone
2) varmista, että käyttäjällä ei ole pääsyä olemassaoleviin priva-avaimiin
Käytä opensc-kirjaston kautta avainta
root@kone :~# ssh -I /usr/lib/i386-linux-gnu/opensc-pkcs11.so user@etakone
Enter PIN for 'HENKILOKORTTI (perustunnusluku)':
...syötä tähän PIN1 koodisi ..
etakone% # ! perillä ollaan
Tässä tapauksessa käytettiin kortilla sijaitsevaa salaista avainta, jota ei pitäisi voida pystyä kopioimaan. Vastapäässä oli julkinen avain, jonka avulla pystytään vahvistamaan autentikoitu yhteys. Salasanoja ei lähetetty verkon yli.