Näytetään tekstit, joissa on tunniste pki. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste pki. Näytä kaikki tekstit

2013-03-15

Polkuja älykorttien kanssa osa2 - Toimii

Kuinka älykortteja voidaan hyödyntää, ihan käytännössä? Kuinka niiden vaatimien ohjelmistojen asennus onnistuu ja mitkä palvelut tukevat älykortteja? Haistellaanpa HST-korttia. Näytän, että sitä voi todella käyttää ja se toimii. Esimerkkinä kirjaudun ssh-yhteydellä etäkoneelle käyttäen PIN-koodia ja HST-korttiani.
 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 tapaan
1.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.


2011-08-07

Polkuja älykorttien kanssa osa 1 - tarve

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Polkuja älykorttien kanssa osa 1 - tarve

Sain aloitettua pitkäaikaisen haaveeni älykorttien
hyötykäytöstä. Koska minulla on kortinlukija, miksen käyttäisi
sitä, kun korttejakin on kertynyt taskuun iso pino.
Älykorttihan on luottokortin kokoinen ja näköinen kortti, jossa
on sisällä prosessori, muistia ja kontaktipinta, sellainen
kultainen chip, päällimmäisenä. Yritän tässä käydä läpi mitä
älykorteille kuuluu, miksi niitä ei ole käytössä ja miten
minun kohdalla älykortti voi toimia ja mitä hyötyä siitä on.
Tulen myös testaamaan omien sähköisten avaimieni siirtämistä
älykortille.

Minusta älykortteja pidetään jotenkin mystisenä kaikkivoipana
ratkaisuna kun puhutaan sähköisestä vahvasta tunnistuksesta tai
salaamisesta. Tottakai älykortti on vahvempi ja turvallisempi
tapa monessa paikassa, mutta käytettävyys kärsii usein
verrattuna tavalliseen käyttäjätunnus-salasanapariin ja
tarvitaan se salasana myös älykorttiin. Toisaalta seinästä on
saanut rahaa vuosikymmenet älykortilla ja sitä ennen
magneettinauhakortilla salasanan kanssa. Mikä siinä niin
vaikeaa on?

Vaikeus ei edes piileskele missään, vaan siihen törmää heti,
kun yrittää löytää tietokoneesta sitä paikkaa, johon sen kortin
työntäisi. Kotipäätelaitteita, johon sen kortin voi tunkea on
aika paljon. Korttityyppejäkin on monta. Kortinlukulaitteessa,
joka keskustelee älykortin kanssa, voi olla eri-ikäisiä
ohjelmistoja, samoin tietokoneessa voi olla eri ohjelmistoja ja
versioita tietokoneen ja lukijalaitteen väliseen yhteyteen.
Tämän kaiken jälkeen tieto, mikä saadaan turvallisesti ulos
kortista jää hyödyntämättä itse loppupalveluissa. Kuinka moneen
web-palveluun on mahdollista syöttää rekisteröityesssä
SATU-tunnus (SÄhköinen TUnnus), jotta HST-korttia voisi
hyödyntää esim. kirjautumiseen?

Turvallisuudesta puhuttaessa on sitten vielä määrittelykysymys
pitääkö avaimen, tässä älykortin kanssa käyttää salasanaa ja
täytyykö sen haltijalla vielä olla jokin biometrinen olemus
(sormenjäljet, käsiala, kasvonpiirteet), mutta termi "vahva
tunnistus" määrittelee, että käytetään ainakin kahta
ominaisuutta kolmen setistä 1) Omistus fyysiseen avaimeen tai
koodiin, 2) Salasana ja 3) Biometrinen ominaisuus. Moni
olisi valmis pelkkään yhden ominaisuuden käyttöön, kuten
joskus kulunvalvonta ja oven avaus RFID-avaimen kanssa.
Talon ympäri kulkiessa olisi aika turhauttavaa syöttää joka
pisteeseen pin-koodeja, mutta esim. ulko-ovella voidaan
käyttää numerosarjan kyselyä.


Voisiko käytön vähyys johtua siitä, että vaikka websivuja on
miljardeja ja niiden tekijöitä miljoonia, on palvelinalustoissa
jätetty tarjoamatta helppo tapa ottaa käyttöön kortit tai muut
henkilökohtaiset vahvat tunnisteet? Jos teet web-sivun tai
kirjoitat blogia, ei sinulla ole välttämättä mitään pääsyä
siihen osaan sivustoa, joka määrittelee pääsynvalvontaa. Tai
voi ollakin, riippuu vähän ohjelmistosta.

Kieltämättä korttejakaan ei ole monella käytössä, vielä
vähemmän kortinlukulaitteita, mutta ne joilla nämä on eivät
niitä pääse hyödyntämään. Harmin paikka. Otan siis
syystavoitteekseni, että siirrän ainakin osan minun
hallinnassani olevista tunnistuspalveluista älykortilla
toimivaksi vaikkakin vain todisteena, että se on mahdollista.
Sen jälkeen, kun olen kortenut kantanut muurahaiskekoon, voin
maukua vahvemmin siitä, miten maailma ei makaa niin kuin
pitäisi.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Use GnuPG with Firefox : http://firegpg.com (Version: 0.8)

iEYEARECAAYFAk4+sP8ACgkQfwlELCNtlAD+5wCfVtY7XiRagmCr8RVwRzEh5TpV
ohIAoIXJlq3WvHKdXK/64/rJcKPKIl1k
=IBaK
-----END PGP SIGNATURE-----