Elektronik kimlik kartındaki bazı alanları kart erişim cihazı (KEC) ile okuyabilmek için rol doğrulama işleminin yapılması gerekli. Rol doğrulamadan önce ise KEC'in GEM donanımı ile Rol Sahibi (RS) arasında bir güvenli iletişim kanalı kurulmalı. Bahsedilenler, TS 13681 numaralı standartın bir özeti.

Burada 3'lü bir yapı söz konusu:

RS <----> Uygulama <----> GEM

Akış, uygulama tarafından yönetilmekte. RS ve KEC'in işlemleri gerçekleştirebilmesi için bazı metotları sağlaması gerekmekte.

1. Uygulama, getCvc ve getCaCvc metotlarını çağırarak, RS ve KEC'den Güvenli İletişim (Gİ) CV (Card Verifiable) sertifikalarını ve bu sertifikaların alt kök (caCVC) CV sertifikasını ister. Uygulama, VerifyCvcChain metodunu RS üzerinde GEM’den aldığı sertifikalar ile, KEC üzerinde ise RS’den aldığı sertifikalar ile çağırır. Bu metotlar CVC’lerin geçerli bir kökten türediklerini ve tarihlerinin eskimemiş olduğunu denetlemelidir.

2. Uygulama, KEC vasıtasıyla GEM’den, GEM seri numarasını ve 8 byte’lık rastgele sayı (GEM.RND) alır. GEM Seri No ile GEM.RND birleştirilir. RS’deki SignAndEncrypt metoduna gönderilir. ISO9796-2 Scheme 1 imzalama, Sha256 digest ve RSA kullanılarak, implicit trailer ile uygulanmalı.Bu imzalama metodu kurtarılabilir ve imza içine eklenen verinin geri elde edilebilir olduğu bir yöntem. RS, SignAndEncrypt metoduna gelen verinin içinden son 8 byte’ı GEM.RND olarak o güvenli iletişim oturumu için saklamalı. Daha sonra 32 byte uzunluğunda bir kROL rastgele değeri üretmeli ve aynı oturum değerinde saklamalı. kROL değeri imzaya kurtarılabilir veri olarak dahil edilmeli. RSA-2048 sertifikalar 256 byte’lık bir blok genişliğine sahip.  Trailer(2 byte), kROL (32 byte), imzalanacak veri (16 byte) boyutundan geri kalanlar rastgele sayıyla (pRND1) doldurulmalıdır. İmzalama gerçekleştikten sonra Minimum bulma fonksiyonu olarak RS.Gİ sertifikası modulus değeri - imza değeri, imza değerinden daha küçükse, imza değeri olarak o seçilmelidir. Aksi halde imza değerinin kendisi kullanılmalıdır. Daha sonra elde edilen imza değerinin GEM.Gİ sertifikası ile şifrelenmesi gerekir.

3. Uygulama, RS’in SignAndEncrypt metodundan elde ettiği değeri KEC vasıtasıyla GEM’de doğrulamalıdır.

Daha sonra, uygulama aynı işlemlerin GEM üzerinde yapılması için RS’in GetSerialNumber ve GetRandom metotları ile değerleri alır, birleştirir ve GEM üzerinde SignAndEncrpyt metodunu çalıştırır. RS üzerindeki imzalama yöntemini kullanarak veriyi GEM.Gİ sertifikası ile imzalar ve RS.Gİ sertifikası ile şifreler. Standart üzerinde, üretilen imzanın hep implicit trailer (‘6A’…’BC’) sahip olacağı anlaşılmasına rağmen kullandığım test GEM’inin her zaman explicit trailer ile imza ürettiğini farkettim. Bu da, RS tarafında imzayı doğrularken öncelikle imzayı validate edip, içinden trailer’ın ne olduğunu öğrenip daha sonra BouncyCastle’a geçmemi gerektirdi. İki kez imza doğrulamaya ait RSA işlemini yapmamak için önbellekleyen bir cipher yazılması düşünülebilir.

 

Elektronik kimlik kartında bulunan Kimlik Doğrulama Uygulaması (0x3D00), PİN ile kimlik doğrulama yapılabilmesini sağlar. Kimlik doğrulama için 32 byte'lık rastgele oluşturulmuş bir veri kullanılmalı. Bu veri kart üzerinde PkcsPss-Sha256 yöntemi ile imzalanır. İmzalanan veri Kimlik Doğrulama X.509 Sertifikası (0x2F10) ile doğrulanır.

Kimlik doğrulama sertifikası, kök ve alt kök makam ile imzalanan bir sertifikadır. http://depo.tckk.gov.tr adresinden bu sertifikalar indirilir ve sertifika doğrulamalarında kullanılır.

Doğrulamada önce kartın kök klasörü seçilir. Sonra Verify (0x20) komutu P1=0x00 ve P2=0x01 olarak hazırlanacak. Data parametresi PİN'in ASCII encoded hali olacak şekilde hazırlanacak ve karta gönderilecek.

Geçersiz PİN gönderilmesi halinde kart'a PİN+PEN şeklinde gönderim yapılmalı.

Daha sonra Kimlik Doğrulama Uygulaması seçilmeli.

PkcsPss-Sha256 imzalama işlemi için kart hazırlanır.

0x22 komutunun P1=0x41, P2=0xB6 olacak ve Data parametresi:

{0x80, 0x01, algorithm, 0x84, 0x01, key}

olacak şekilde hazırlanır. "algorithm" değişkeni PkcsPss-Sha256 için:

0x81 | 16

olmalıdır. "key" değişkeni 0x81 olmalıdır.

Kart üzerinde imzalayı başlatmak için 0x22 komutunun P1=0x9E P2=0x9A olacak ve Data parametresi imzalanacak veri olarak ayarlanacak. Komut başarılı olursa (StatusWord=0x9000) geriye imzalı veri dönecek.

Önceki makale: Elektronik Kimlik Kartı - Bölüm 1

Elektronik kimlik kartında 3 ana uygulama bulunmakta.

  • Elektronik kimlik uygulaması (0x3D10)
  • Kimlik doğrulama uygulaması (0x3D00)
  • Elektronik imza uygulaması (0x3D01)

Elektronik kimlik uygulaması içinde kartın sahibine ait bilgiler bulunmakta. Bir standart kart okuyucu kullanarak bu bilgilerden Kimlik Bilgisi Dizini (0x3D20) altında bulunan:

  • T.C. Kimlik Numarası (0x2F10)
  • Ad, soyad (0x2F11)
  • Kart seri numarası (0x2F1A)

ASN.1 yapısında okunabilmekte. Ayrıca bu bilgilerin değişikliğe uğrayıp uğramadığı, kartın ana dizinindeki 0x2F54 adresinde bulunan ASN.1 formatlı VGN okunarak, hash kontrolü yapılabilmekte.

Örnek olarak VGN bir ASN sequence alınırsa:

  • 0. index içinde T.C. kimlik numarasının ve salt değerinin Sha256 hash değeri
  • 1. index içinde kişinin ad ve soyad bilgisi ile salt değerinin Sha256 hash değeri
  • 10. index içinde kart seri numarası bilgisi ve salt değerinin Sha256 hash değeri 

bulunmakta. VGN'de bir değişiklik olup olmadığını öğrenmek için öncelikle Kimlik Doğrulama Uygulaması'ndaki Kimlik Doğrulama X.509 yapısında bulunan sertifika (0x2F10) okunmalı. Bu sertifika içindeki SDO (Oid: 2.16.792.1.2.1.1.5.2.200.1) 'ya ait son 32 byte'lık veri VGN ve Salt bilgisinin Sha256 hash değerini verir.

Elektronik kimlik uygulaması içindeki diğer bilgilere geçerli bir GEM kartına KEC cihazı ve ilgili ROL sertifikası ile ulaşılabilmekte.

Sonraki makale: Elektronik Kimlik Kartı - Bölüm 2