Akıllı Kartlar

İçindekiler

  1. Tarihçe
    1. Güvenlik
    2. Akıllı Kartlar
  2. Fiziksel Yapı
    1. Boyutlar
    2. Veri İletişimi
    3. Temassız Kartlar
    4. İç Yapı
      1. Bellek Kartları
      2. Mikroişlemcili Kartlar
      3. Java Kartları
  3. Yazılım Özellikleri
    1. Dosya Sistemi
      1. Dosya Yapıları
    2. Erişim Komutları
      1. ATR
      2. APDU
      3. Komutlar
    3. PKI Uygulamaları
  4. Linux
    1. Kart Okuyucular
    2. Karta Erişim
    3. Üst Düzey Uygulamalar
  5. Kaynaklar

1. Tarihçe

Plastik kartların kullanımı Amerika'da 1950'lerde başlıyor. PVC (Polyvinyl chloride) ile ucuza üretilebilen, dayanıklı ve uzun ömürlü kartlar, kağıt ve karton kartların yerini almaya başlıyor.

Genel kullanıma sunulan ilk plastik ödeme kartı Diners Club'a ait. Bu kart bir statü sembolü olup, kart sahibinin para yerine ismiyle ödeme yapmasını sağlıyor.

Visa ve MasterCard'ın plastik kredi kartlarıyla birlikte bu ödeme şekli yaygınlaşıyor. Seyahat sırasında kolaylık sağlaması, hırsızlığa karşı güvenceli olması, çok büyük miktarlarda seri olarak üretilebilmesi gibi avantajları sayesinde plastik kartlar tüm dünyada yaygınlaşıyorlar.

Güvenlik

İlk üretilen kartlar taklit ve kurcalamaya dayanıklı basit kimlik kartları özelliğinde. Kart sahibinin adı ve kart numarası gibi kişisel bilgileri karta kabartma ile basılmış durumda. Bir imza alanı var. Taklide karşı koruma ise baskıdaki incelikler ile sağlanıyor. Kart kullanımının artmasıyla bu önlemler organize suçlular karşısında yetersiz kalıyor.

Önlem olarak, görsel bilgiye ek olarak, makine tarafından okunabilecek formda ek bilgiler taşıyan bir manyetik şerit, kartın arkasına ekleniyor. Bu yenilikle birlikte, önceden gerekli olan imzalı kağıt faturaların yerine, yeni bir kimlik doğrulama yöntemi ortaya çıkıyor. Kişisel tanımlama numarası (Personal Identification Number - PIN) girerek mali işlem yapma, banka otomatlarında (Automated Teller Machine - ATM) yaygın olarak kullanılıyor.

Manyetik şeritlerin de bir zayıflığı var. Gerekli aygıtlara erişimi olan herkes şeritin üzerinde kayıtlı veriyi okuyabilir, silebilir yada değiştirebilir. Bu sebeple gizli verileri (mesela PIN kontrolü için gereken) şerit üzerinde saklamak tehlikeli, bu da okuyucuların doğrulama için sürekli merkezle bağlantı kurmasını gerekli kılıyor.

Akıllı Kartlar

Elektronikteki gelişmelerle birlikte, veri depolama ve işleme yapabilecek, birkaç milimetre karelik tümleşik devrelerin yapılabilmesi olanaklı hale gelince, akıllı kartların ilk adımları atılıyor. Fransa ve Almanya'da seksenlerde telekomünikasyon alanında bu tür kartların ilk denemeleri ve kullanımı başlıyor. Telefon kartları alanındaki başarı, sayısal cep telefonu GSM ağlarında da bu teknolojinin kullanılmasında etken oluyor.

Kartların işlem kapasiteleri ve kriptografideki gelişmeler, akıllı kartların, süreçlerin kapalılığına dayanmayan ve gücü matematiksel olarak hesaplanabilecek güvenlik algoritmalarını kullanabilmelerini sağlıyor.

Europay, MasterCard ve Visa'nın ortak çalışmasıyla 1994 te çıkan EMV spesifikasyonu ile, mikroçipli banka kartlarının ortak çalışma standartları belirleniyor.

Akıllı kartlar bugün mali işlemler ve telekomünikasyon dışında, elektronik bilet olarak toplu taşımada, ve özellikle temazsız kartlarla birlikte çeşitli kimlik uygulamalarında yaygın olarak kullanılıyorlar.

2. Fiziksel Yapı

Bağlantı biçimi, içindeki birimler, çalışma şekli, boyutu gibi bir çok parametreye göre akıllı kartları sınıflandırmak mümkün. Temelde hepsi ISO nun bu konuda getirdiği biçimsel ve iletişimsel standartları destekliyor, böylece farklı kartlar ve okuyucular bir arada kullanılabiliyor.

Boyutlar

Temel kart biçimi ve boyutu ISO 7810 standardında tanımlanan ID-1 dir. Bu manyetik ve çipli tüm kredi kartlarının uyduğu ortak boyut olup, aşağıdaki özellikleri taşımaktadır:

ID-1 kart ön yüz ID-1 kart arka yüz

Kartın ön yüzündeki birinci alan kabartma olarak kart numarası için ayrılmıştır. İkinci alan ise gene kabartma olarak kart sahibine ilişkin isim ve adres gibi bilgiler içindir. Arka yüzdeki manyetik şerit, üç ayrı iz halinde ayrılmıştır. İlk iki iz okunabilir, üçüncü iz ise hem okunabilir hem yazılabilir bilgi taşır. Manyetik şeritin kapasitesi 1000 bit civarında olmakla birlikte, kabartmalardaki bilgileri taşımak için fazlasıyla yeterlidir. Kart üzerindeki çip gene sabit bir konumda bulunmakta ve belirli noktalardaki temas yüzeyleri aracılığıyla iletişim kurmaktadır.

Bu kart boyutunun cep telefonları için büyük kalması nedeniyle GSM kartları için ID-000 adlı daha ufak bir biçim de standartlaştırılmıştır. Kartın sık değişmediği ortamlar için tasarlanan bu boyut dışında bir de iki boyut arasında ID-00 mini-card standardı vardır. ID-1 boyutundaki temaslı çip kartları kesilerek mini boyuttaki kartlar elde edilebilir.

ID-1 ID-00 ve ID-000 boyutları

Veri İletişimi

Akıllı kartla temel iletişim yolu, kart üzerindeki belirli temas noktalarından elektrik akımı yoluyla yapılan seri iletişimdir. Sekiz adet temas noktası belirlenmiştir. Bunların iki tanesi (AUX1, AUX2) ilerde kullanılabileceği gerekçesiyle ayrılmış, şu anda kullanılmayan bağlantılar oldukları için, bazı akıllı kartlarda yalnızca altı adedi bulunmaktadır.

ISO/IEC 7816-2 standardına göre tanımlanan bağlantı noktaları şunlardır:

Akıllı kart temas noktaları
Vcc Besleme voltajı GND Toprak
RST Reset girişi Vpp Programlama voltajı
CLK Saat sinyali I/O Seri iletişim için giriş/çıkış noktası
AUX1 Ayrılmış nokta 1 AUX2 Ayrılmış nokta 2

Önceden EEPROM ları programlayabilmek ve silmek için gerekli olan programlama voltajı, artık çip içinde oluşturulduğu için gereksiz hale gelmiştir. Artık bir işlevi olmayan bu nokta, kullanılmadan durmaktadır.

Besleme voltajı, ilk olarak 5 volt olarak belirlenmiştir. Mobil aygıtların güç kullanımını azaltma ihtiyaçlarıyla birlikte, 5 volt, 3 volt, 1.8 volt olmak üzere üç ayrı sınıf oluşturulmuştur. Kart okuyucu, doğru voltajı seçmek için, üç değeri de dener, karttan yanıt aldığında gelen yanıta göre, kartın istediği voltaj, yada cevap alınabilen ilk voltaj seçilir.

Gelecekteki durumlara uyumluluk açısından, desteklenmeyen bir voltajdan besleme yapıldığında, kartın mikroişlemcisinin zarar görmemesi, bir gerek olarak standarda konmuştur.

Temassız Kartlar

Bir diğer yol ise, kart ve okuyucu arasında elektriksel temas olmadan, radyo frekansı ile elektromanyetik iletişim kurmaktır. Bu tür kartlar okuyucuya takmaya gerek kalmadan, kart sahibinin elinde veya cüzdanındayken de kullanılabildiği için, kişilerin hızlı bir şekilde tanınabilmesinin önemli olduğu, kuyruklar, toplu taşıma, bilet kontrolleri gibi yerlerde çok faydalı olmaktadır. Temas olmadığı için, temas noktalarının aşınması, yüksek voltajlı statik elektrik boşalmaları gibi problemleri de yoktur.

İletişimde araya girilmesi, farkedilmeden işlem yapılması gibi olasılıklardan dolayı ise banka kartları gibi uygulamalara pek uygun değildirler.

Akıllı kartlara batarya yerleştirilmesiyle ilgili pratik sorunlar hala çözülemediğinden, kartın çalışması için gereken enerji, pasif bir biçimde, okuyucunun elektromanyetik alanından sağlanmaktadır. Bu da kullanım uzaklığını oldukça kısıtlamaktadır.

Hem temaslı hem temassız arabirim sağlayan, çift arabirimli kartlar da mevcuttur.

İç Yapı

Akıllı kartlar iç yapılarına göre üç ana grupta sınıflandırılabilir:

Bellek Kartları

Basit bir adresleme ve güvenlik devresi ile, verilerin depolandığı EEPROM dan oluşur. Güvenlik devresi belli bellek alanlarına yazmayı engelleme gibi basit özelliklere sahiptir. Genellikle belli bir uygulamaya özel tasarlanmış olmakla birlikte, çok ucuz oldukları için telefon ve sigorta kartlarında yaygın kullanılmaktadırlar.

Mikroişlemcili Kartlar

Bunların içinde EEPROM dışında, bir mikroişlemci, işletim sistemini saklayan bir ROM ve ufak boyutta RAM çipleri bulunmaktadır.

Güvenlik amaçlı kullanılan kartlarda, bunlardan başka, kripto algoritmalarını donanım yoluyla yürütebilen kripto işlemcileri, algoritmalarda kullanılan temel işlemleri hızlandıracak matematik işlemcileri yada rastgele sayı üreteçleri de bulunabilmektedir.

ROM da bulunan işletim sistemi, kart üzerindeki depolama alanını bir dosya sistemi yapısıyla yönetir, kartın rastgele sayı üretmek, sayısal imza atmak gibi özel donanım işlevlerini bağlanan okuyuculara sunar, erişim ve yetki denetimi işlemlerini yürütür.

Java Kartları

Bu tip kartlarda, işletim sistemi dışında, bağlanan bilgisayardan yüklenen Java uygulamaları da çalışabilmektedir. Genellikle Java sanal makinesini çalıştırmak için özelleştirilmiş mikroişlemciler taşıyan bu kartlar, standart kartlara göre daha esnek uygulamalar geliştirilebilmesini sağlamakla birlikte, Java kodlarını çalıştırmak ve birbirlerinden yalıtarak güvenliği sağlamak için gereken donanım ve işletim sistemi özellikleri yüzünden daha karmaşık ve pahalı olmaktadırlar.

Java yerine başka özel uygulama geliştirme platformları kullanan bazı kartlar da mevcuttur.

3. Yazılım Özellikleri

Dosya Sistemi

Akıllı kartlar temel olarak bir veri depolama ortamıdır. İlk kartlarda direk olarak adreslenen bellek alanları bulunurken, işletim sistemleri ile birlikte artık, hiyerarşik ve donanımdan bağımsız sembolik adresleme kullanan dosya sistemleri kullanılmaktadır.

ISO/IEC 7816-4 standardı akıllı kartlar için bir dosya sistemi yapısı tanımlar. Bu dosya sistemi kartların yapısına uygun olarak, makineler tarafından kolayca işlenebilecek, bellekte en az yer kaplayacak biçimde tasarlanmıştır.

Temel olarak iki tip dosya vardır. Başka dosyaları içeren DF (dedicated file) dizin dosyaları, ve veri içeren EF (elementary files) veri dosyaları. EF dosyaları kullanıcıların çalışma verilerini içeren working EF ve kartın dahili verilerini içeren internal EF olmak üzere iki çeşittir. Hiyerarşinin en üstündeki DF dosyası, MF (master file) ana dizin olarak adlandırılır. DF dosyaları içinde, EF dosyaları ve başka DF dosyaları bulunabilir.

Kart üzerindeki her dosyanın iki baytlık bir dosya tanımlayıcı FID (file identifier) değeri vardır. Bu değer kullanılarak kart içindeki tüm dosyalara erişilebilir. MF dosyasının FID değeri 3F00 olarak sabittir. Diğer dosyaların değerleri ise karta ve kullanılan uygulamalara bağlı olarak değişmektedir.

Modern kartlardaki bir başka adresleme yolu ise, dosya isimler, kullanmaktır. Kartlara genellikle sadece makineler de ulaşsa, esnekliği açısından isimler FID lere tercih edilebilir.

Bir dosyaya yapılacak işlemlerden önce o dosyanın seçilmesi gerekmektedir. MF dosyasının FID i sistemde tek olduğu için her yerden direk olarak seçilebilir. Diğer dosyalar için önce o dosyanın içinde bulunduğu DF yi, yada dosya ile aynı seviyede bir başka dosyayı seçmek gerekmektedir. Seçimlerde karışıklığa yol açmasın diye, aynı dizin içindeki dosyalar veya içiçe dizinler aynı FID numaralarını taşıyamaz, bir dizin içindeki EF, bir üst yada bir alt dizinin FID numarasını taşıyamaz.

Dosya Yapıları

Bilgisayarlardaki dosyalardan farklı olarak, akıllı kart dosyaları özel iç yapılara sahip olabilirler. Bu yapılar kart tarafından en uygun şekilde işletildikleri için daha hızlı ve verimlidirler.

Transparan dosyaların özel bir yapısı yoktur. Çalıştırılabilir tipli olanları dışardan uygulama yükleyip çalıştıran kartlarda bulunur.

Kayıt tabanlı dosyalar, bir kayıt numarası ile ilişkilendirilmiş kayıtlar tutarlar. Veriler kayıt bazında okunup yazılabilir. Sabit boyutta olmayan kayıtları yönetebilmek için ekstra bilgiler tutmak gerektiğinden, bazı kartlar yalnızca sabit boylu yapı sunarlar. Çevrimsel biçimde kayıt sayısı sınırlıdır, kayıtlar sırayla yazılır ve son kayıt yazıldıktan sonra yazma işlemi ilk kayıttan devam eder. Kütük dosyası gibi amaçlarla kullanılır.

Veritabanı yapısı, ISO 7816-7 de tanımlanan, SCQL (smart card query language) sorgu dilinin işleyeceği tipte veri tutmak içindir.

Veri nesnesi yapısı, PUT DATA ve GET DATA komutlarıyla erişilen TLV formunda özel veri nesnelerini tutar.

Erişim Komutları

Akıllı kart ile okuyucu arasındaki iletişim, tek bir giriş çıkış hattıyla yapıldığından, yarım çift yönlüdür (half-duplex). Kart ve okuyucu sıra ile hattı kullanırlar. İletişim her zaman okuyucu tarafından başlatılır, okuyucudan komutu alan kart, gerekli işlemi yapar ve okuyucuya cevap iletir. Kart hiç bir zaman okuyucuya komut yollamaz.

Kart ve okuyucu arasındaki iletişim, OSI katman modeli ile gösterilebilir. En altta temaslı ve temassız kartlar ile elektriksel iletişimi sağlayan fiziksel katman (OSI 1 Physical Layer) bulunur.

Bunun üzerinde, veri aktarımını düzenleyen bağlantı katmanı (OSI 2 Link Layer) vardır. Bu katmanda T=0 ve T=1 olmak üzere iki yaygın protokol kullanılmaktadır. T=0 bayt bazlı iletişim sağlarken, T=1 blok bazlı çalışmaktadır.

En üstteki katman ise, komutların ve yanıtların taşınmasıyla ilgilenen uygulama katmanıdır (OSI 7 Application Layer).

Elektriksel bağlantı kurulduktan sonra, okuyucu karta reset sinyali gönderir, kart ise buna bir ATR (Answer To Reset) ile yanıt verir. Bundan sonra iletişim kartın desteklediği protokol ile bir komut bir cevap biçiminde kart etkinsizleştirilene kadar sürer.

ATR

ATR içinde iletişimle ilgili bilgiler bulunan, en fazla 33 bayt uzunluğunda bir bayt dizisidir. Baytların anlamları:

TS Başlangıç baytı, yalnızca 3B yada 3F değerini taşıyabilir.
T0 İçerik biçimi, ilk dört bit hangi protokol baytlarının, son dört bit kaç tane tarihsel baytın peşinden geldiğini belirtir.
TA1, TB1, TC1, TD1 İsteğe bağlı, iletişim parametresi bilgileri.
T1, T2, ..., Tk İsteğe bağlı tarihsel baytlar, özel bir biçimi yoktur, genellikle ASCII olarak kartın işletim sistemi ve sürüm bilgisini içerirler.
TCK Denetleme baytı, T=1 protokolünde denetleme toplamı değeri içerir.

APDU

Uygulama katmanında, kart ve okuyucu arasındaki tüm iletişim, uygulama protokolü veri birimleri (APDU, Application Protocol Data Unit) adı verilen yapılarla gerçekleşir. Uygulamalar bunlarla, alttaki protokolden bağımsız olarak kartla iletişim kurabilir.

APDU komut yapısı:
CLA Komut sınıfı.
INS Komut.
P1 Birinci parametre.
P2 İkinci parametre.
Lc Veri uzunluğu.
Data Gönderilecek veri.
Le Beklenen yanıt uzunluğu.

CLA ve INS baytları karta gönderilecek komutu seçer. P1 ve P2 ise bu komuta bağlı olarak değişik anlamlar taşıyan birer baytlık parametrelerdir. Bu dört bayt komut APDU sunun başlık kısmını oluşturur.

Komut sınıfının değeri onaltılık olarak 0x0n biçiminde ise ISO/IEC 7816-4/7/8 komutlarını, 0x8n biçiminde ise uygulama yada karta özel komutlardan birini belirtir.

Sınıf baytının ikinci yarısının düşük değerli iki biti ise, hangi mantıksal kanalın kullanıldığını kodlar. Mantıksal kanallar iki ayrı uygulamanın aynı anda karta ulaşmasına imkan verir. Her kanal o anki seçili dosya, güvenlik durumu vb gibi değerleri ayrı ayrı tutmak zorunda olduğu için bu destek genellikle bellek ve işlem kapasitesi yüksek kartlarda bulunmaktadır.

Eğer komutla birlikte bir veri gönderilmesi gerekiyorsa, başlığı takiben bir baytlık uzunluk değeri, ve verinin kendisi eklenir.

Le isteğe bağlı olarak eklenen, ve dönecek yanıtın ne kadar bayt veri içermesi gerektiğini söyleyen bir baytlık değerdir. Sıfır değeri ile alınabilecek tüm veri istenebilir.

Lc, Data ve Le baytları komut APDU sunun isteğe bağlı gövde kısmını oluşturur.

APDU yanıt yapısı:
Data İstenen veri, bir hata durumunda yada veri istenmemesi halinde olmayabilir.
SW1 Yanıt değeri.
SW2 Yanıt değeri.

SW1 ve SW2 ile dönen değer, işlemin başarıyla sonuçlanıp sonuçlanmadığını bildirir. ISO tarafından çeşitli hata durumları için birçok değer tanımlanmış olmakla birlikte, uygulamalar genellikle kafalarına göre kodlar kullandıklarından, işlemin başarıyla tamamlandığını gösteren onaltılı SW1=0x90 ve SW2=0x00 değerleri dışındaki değerlerin anlamı için kartın belgesine bakmak faydalı olacaktır.

Komutlar

Akıllı kartlarda kullanılan komutların büyük bölümü ISO/IEC 7816-4 içinde tanımlanmıştır. Finansal işlemlerde kullanılan EMV spesifikasyonu da arkasındaki firmaların pazar gücünden dolayı aynı önemdedir. Bellek ve işlemci kapasitelerindeki sınırlardan dolayı, akıllı kartlar genellikle bu komut setlerinin sınırlı bir alt kümesini desteklerler. Ayrıca üreticiye ve uygulamalara göre değişen özel komutlar da kullanılmaktadır.

Belli başlı komutları kullanım alanlarına göre gruplarsak:

PKI Uygulamaları

Akıllı anahtarlar, sayısal sertifikaların, açık ve gizli anahtarların taşınması için ideal bir platform oluşturmaktadır. Bilgisayar giriş (login) sistemleri, sayısal imza uygulamaları, ve diğer benzeri güvenlik uygulamalarının uyum içinde bu bilgileri kullanabilmeleri için RSA tarafından PKCS-15 adıyla bir standart geliştirilmiştir. Bu standart içinde akıllı kart ortamında, güvenlik bilgilerinin depolanabileceği bir dosya ve dizin yapısı tanımlanmaktadır.

Kartta bulunabilecek güvenlik nesneleri:

Tüm bu nesneler ASN.1 standardı DER kodlaması ile kodlanmış transparan biçimli ikili dosyalar olarak bulunurlar.

PKCS-15 yapıları dosya sisteminde, MF altında bir dizin (DF) olarak bulunurlar. Seçimli olarak MF altındaki 2F00 FID ine sahip bir dosya içinde kart üzerinde hangi uygulamaların bulunduğuna, ve bunların hangi dizin içinde olduğuna dair bir liste bulunabilir.

PKCS-15 yapısındaki bir dizin içinde şu dosyalar bulunabilir:
Dosya FID Açıklama
ODF 5031 Temel indeks, diğer nesnelerin listesini ve hangi dosyalarda olduklarını içerir.
TokenInfo 5032 Kartın seri numarası, desteklenen algoritmalar, vb gibi genel bilgileri içerir.
UnusedSpace 5033 Seçimli bir dosyadır. Varsa, oluşturulmuş PKCS dosyaları içindeki boş alanları listeler.
AODF ODF içinde Kimlik doğrulama nesnelerinin (PIN, vb) indeksini içerir.
PrKDF ODF içinde Özel anahtarların bilgilerini ve indeksini içerir.
PuKDF ODF içinde Açık anahtarların bilgilerini ve indeksini içerir.
SKDF ODF içinde Gizli anahtarların bilgilerini ve indeksini içerir.
CDF ODF içinde Sertifikaların bilgilerini ve indeksini içerir.
DODF ODF içinde Varsa uygulamaya özel veri nesnelerinin indeksini içerir.

Bir PKCS-15 uygulaması ODF den yola çıkarak, ihtiyacı olan tüm nesneleri bulabilir. Sertifika, açık anahtar gibi nesneler genellikle birer dosya içinde bulunmakta ve direk okunarak kullanılabilmektedir. Özel anahtarlar ise genellikle kartın dışına çıkarılamayacak biçimde kayıtlı olup, indeksten bulunduktan sonra referans yada dosya numarası MANAGE SECURITY ENVIRONMENT komutuyla verilip, PERFORM SECURITY OPERATION komutuyla imza atmak yada veri şifrelemek yoluyla kullanılır.

4. Linux

Linux tabanlı işletim sistemlerinde akıllı kart erişimi, kart okuyucuyu kullanabilmek için gereken alt düzey sürücü yazılımlarını, ve uygulamaların kullanacağı ISO 7816 ve PKCS desteklerini sağlayan ara katman yazılımını kurarak sağlanabilir. Çeşitli yazılımlar bu ara katmanlar yardımıyla akıllı kart desteği vermektedir.

Kart Okuyucular

Kart okuyucu konusundaki en yaygın standart PC/SC dir. Bu standartta akıllı kartlar ICC (Integrated Circuit Card, dahili entegreli kart), okuyucular ise IFD (Interface Device) olarak adlandırılmıştır. Standart, uygulamaların kullanacağı bir programlama arabirimi (API) tanımlar. Okuyucu üreticileri IFD handler adı verilen ufak modüllerle, okuyucularının özelliklerini bu arabirim ile eşleştirir.

Linux için bir PC/SC uyarlaması olarak pcsc-lite yazılımı kullanılabilir. Yazılım okuyucuları yöneten bir servis, ve uygulamaların bu servise bağlanmak için kullanacakları bir kitaplıktan oluşmaktadır. USB CCID (Chip/Smart Card Interface Devices) sınıfındaki USB aygıtlar direk olarak tanınmaktadır. Özel IFD handler gerektiren okuyucular, üreticinin Linux için hazırlamış olduğu bundle adı verilen arşiv internetten temin edilip, ilgili dizine (Pardus'ta öntanımlı /usr/lib/readers/usb) koyulduğunda otomatik olarak devreye gireceklerdir.

Bir başka alt düzey yazılım ise openct dir. PC/SC den farklı olarak Linux'a özel olan bu yazılım, daha temiz ve kullanışlı bir arabirim sunar. Gene bir servis olarak çalışmaktadır. USB CCID ve birkaç özel okuyucuyu direk desteklemekte, ayrıca bunları PC/SC altında birer IFD handler olarak da sunabilmektedir.

Bu iki yazılım da, kartlara APDU düzeyinde erişim sağlarlar, verdikleri arabirim yardımıyla, takılan kartları görmek, ATR değerlerine erişmek, karta APDU yollayıp dönüş değerini okumak mümkündür.

Karta Erişim

Okuyuculara erişen alt düzey yazılımlar yalnızda APDU düzeyinde basit iletişim sağlamaktadır. Bunun üzerinde, yazılımlara kapsamlı bir ISO 7816 ve PKCS-15 arabirimi sağlayan bir ara katman olan opensc yazılımı kullanılabilir. Hem pcsc-lite hem de openct yi destekleyen opensc, bir kitaplık ile çeşitli ufak araçlardan oluşmaktadır.

Ayrıca bir başka RSA standartdı olan PKCS-11 ile tanımlanmış standart bir programlama arabirimini sunan bir modül içermektedir. Bu standardı destekleyen Firefox, Thunderbird, wpa_supplicant gibi programlar opensc tarafından sağlanan akıllı kart desteğini ufak bir ayarla direk olarak kullanabilirler.

Modüler bir yapıda olan kitaplık (opensc kodu içinde src/libopensc), temel bir kart işlemleri gerçeklemesi (iso7816.c), standarda uymayan veya özel işlevler sağlayan kartlar için emülasyon modülleri (card-*.c), bir PKCS 15 gerçeklemesi (pkcs15.c), gene farklılık gösteren kartlar için PKCS 15 emülasyon modülleri (pkcs15-*.c), kart okuyucu modülleri (reader-*.c) ve ASN.1 gerçeklemesi (asn1.c) gibi genel bazı yardımcı modüllerden oluşmaktadır.

Kitaplığı kullanırken, önce sc_context_create() ile opensc'nin kendi durumunu tutacağı opak bir nesne oluşturulur. Okuyucular ve kart bilgileri sc_ctx_get_reader_count() ve sc_ctx_get_reader() ile taranabilir. Buradan alınan sc_reader_t tipinde opak kart okuyucu nesnesi ile sc_connect_card() ve sc_disconnect_card() fonksiyonları ile karta bağlanıp ayrılmak mümkündür. Bu fonksiyonların parametreleri ve detayları /usr/include/opensc/opensc.h içinde bulunabilir.

Karta bağlandıktan sonra, başlık dosyasında ISO-7816-n related functions bölümlerindeki sc_select_file(), sc_read_binary() gibi akıllı kart komutlarına karşılık gelen üst düzey fonksiyonlar kullanılabilir.

PKI uygulamaları için, pkcs15.h içinde tanımlı sc_pkcs15_bind() fonksiyonu ile kart içindeki PKCS 15 nesneleri okunarak başlık dosyası içinde veri yapılarına otomatik olarak çevrilirler. Bundan sonra sc_pkcs15_decipher() vb fonksiyonlarla karta kripto işlemleri yaptırılabilir.

Kartları incelemek, dosyalara erişmek, PKCS 15 yapıları oluşturmak yada imzalama, şifreleme gibi işlemler yapmak için çeşitli komut satırı araçları opensc ile birlikte gelmektedir. Bunların kullanımına basitçe bakarsak:

Alt düzey erişim testi ve işlemleri için opensc-tool komutu mevcuttur.

opensc-tool --atr
Bağlı bulunan kartları ve ATR değerlerini listeler.
opensc-tool --send-apdu 00:a4:00:00:02:3f:00
Verilen APDU komutunu karta yollayıp yanıtını alır, --send-apdu parametresi birden fazla verilerek bir seri işlem yapılabilir.

Bir kart içinde basit komutları olan özel bir kabuk ile dolaşmak için opensc-explorer kullanılabilir. Çalıştırdıktan sonra help yazarak komut listesini alabilirsiniz.

PKCS 15 nesnelerini görmek için pkcs15-tool komutu kullanılabilir.

pkcs15-tool --list-keys --list-public-keys --list-certificates
Kart üzerindeki özel ve açık anahtarları ve sertifikaları listeler.

Kripto işlemleri için pkcs15-crypt komutu kullanılabilir.

pkcs15-crypt -i DOSYA -o DOSYA.imza --sign --pin
DOSYA içindeki bilgiyi PIN sorarak imzalar.

Boş kartta PKCS 15 yapısı oluşturmak için pkcs15-init komutu mevcuttur.

Üst Düzey Uygulamalar

Temel bir akıllı kart uygulaması, kartları bilgisayara giriş için bir token olarak kullanmaktır. Hemen tüm Linux dağıtımlarında kullanıcı giriş işlemleri PAM (Pluggable Authentication Modules) adı verilen modüler altyapı ile yapılmaktadır. Farklı giriş yöntemleri sağlayan PAM modülleri /lib/security altında bulunmakta ve ayar dosyasından (genellikle /etc/pam.d/system-auth) etkinleştirilmektedir.

OpenSC kullanan iki ayrı PAM modülü mevcut. İlki olan pam_p11, basitçe kart üzerindeki sertifikayı, kullanıcı dizinindeki .eid/authorized_certificates ile eşleştirmekte, ve karta rastgele bir veriyi imzalatarak sertifikayı doğrulatmaktadır. Herhangi bir sertifika otoritesi (CA) denetimi yapmaz ve sertifika iptal listelerine bakmaz.

İkinci seçenek olan pam_pkcs11 modülü ise çevrimiçi ve çevrimdışı sertifika iptal listesi denetimi, CA denetimi, kullanıcı eşleştirme gibi geniş seçenekler sunmakta, ancak biraz uzunca bir ayar işlemi gerektirmektedir.

Tüm Mozilla uygulamaları OpenSC kullanabilmektedir. Firefox internet tarayıcısı ayarları için bu sayfaya bakabilirsiniz.

SSH yazılımı openssh, OpenSC desteği sunmakla birlikte, genellikle birçok dağıtımda bu desteği kapalı gelmektedir. Açmak için paketi --without-opensc seçeneğini yapılandırma çağrısından çıkarıp, yeniden derlemek yeterlidir.

Sanal özel ağ yazılımı OpenVPN, ve kablosuz iletişim şifreleme yazılımı wpa_supplicant OpenSC desteği sunmaktadır.

Şifreli elektronik posta göndermek için kullanılan GnuPG ise, OpenSC desteği sunmamakta, akıllı karta erişim için kendi kodunu kullanmaktadır.

5. Kaynaklar

Smart Card Handbook, 3rd edition, Wolfgang Rankl ve Wolfgang Effing, John Wiley & Sons. Akıllı kartlar üzerine, özellikle fiziksel yapıyı en detaylı biçimde anlatan sıkı bir kaynak kitap.

Smart Card Applications, Wolfgang Rankl, John Wiley & Sons. Aynı yazarın güncel ve enteresan bir başka kitabı.

PKCS-15, RSA tarafından geliştirilen ve akıllı kartlarda kriptografik verileri depolamak için kullanılan PKCS-15 standardının belgeleri.

OpenSC Project, Linux üzerinde geliştirilen akıllı kart erişim yazılımlarını kapsayan proje sitesi.

PCSC-Lite ana sayfası.

Yayın hakkı gerçek, 2006 gerçek, Gürer Özen gerçek, bu sayfalar gerçek, ve sayfalardan çalan çırpan lamer olarak damgalanır, bu da gerçek, çuf çuf çuf çuf çuf çuf...