Blog'a dön
•
ByteGurus

Akıllı Kart Sistemleri ve Gömülü Güvenlik: Geliştirici Rehberi

Akıllı kart sistemlerinin güvenlik mimarisi: güvenli eleman, JavaCard uygulamacıkları, APDU iletişimi, anahtar yönetimi, PIN ve kullanım alanları.

Akıllı Kart Güvenlik Gömülü Sistemler

Banka kartları, kimlik kartları, toplu taşıma kartları ve bina giriş kartları aynı teknolojiye dayanır: içinde kendi işlemcisi ve güvenli belleği olan bir çip. Bu yazı akıllı kartların neden güvenli olduğunu ve geliştiricinin onlarla nasıl çalıştığını anlatıyor.

Akıllı kart nedir

Akıllı kart, plastik bir kartın içine gömülü küçük bir bilgisayardır: işlemci, bellek, çoğu zaman kriptografik yardımcı işlemci ve dış dünyaya açılan sınırlı bir arayüz. Temaslı kartlar ISO/IEC 7816, temassız kartlar ISO/IEC 14443 standardıyla konuşur.

Kartı manyetik şeritten ayıran şey, gizli anahtarın kartın dışına hiç çıkmamasıdır. Kart veriyi kendisi imzalar ya da şifreler; okuyucu yalnız sonucu görür.

Neden güvenli

  • Anahtar kartta kalır: özel anahtar okunamaz, kopyalanamaz; işlem kartın içinde yapılır
  • Fiziksel saldırı direnci: güvenli elemanlar (secure element) yan kanal ve hata enjeksiyonu saldırılarına karşı tasarlanır, sertifikalı ürünler Common Criteria gibi değerlendirmelerden geçer
  • Sahip olma ve bilme: kart (sahip olunan) ile PIN (bilinen) birlikte iki faktörlü doğrulama sağlar
  • Deneme sınırı: yanlış PIN belirli sayıda girildiğinde kart kendini kilitler

Gömülü güvenlik mimarisi

Bir akıllı kart sisteminin katmanları:

  1. Güvenli eleman: anahtarları saklayan ve kriptografik işlemleri yapan çip
  2. Kart işletim sistemi ve uygulamacıklar: çoğunlukla JavaCard ya da GlobalPlatform üzerinde çalışan, kartın ne yapabileceğini belirleyen küçük programlar
  3. Okuyucu ve ara katman: PC/SC ya da mobil NFC arayüzleri
  4. Arka uç: kart yaşam döngüsünü, anahtarları ve işlemleri yöneten sunucu tarafı

Geliştirici için adımlar

1. Uygulamacığı tasarlayın

JavaCard uygulamacığı, okuyucudan gelen komutları (APDU) işler:

import javacard.framework.*;

public class SecureAuthApplet extends Applet {
    private static final byte INS_VERIFY_PIN = (byte) 0x20;
    private static final byte INS_GET_DATA   = (byte) 0x30;
    private final OwnerPIN pin = new OwnerPIN((byte) 3, (byte) 8); // 3 deneme, en fazla 8 hane

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new SecureAuthApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    }

    public void process(APDU apdu) {
        if (selectingApplet()) return;
        byte[] buf = apdu.getBuffer();
        switch (buf[ISO7816.OFFSET_INS]) {
            case INS_VERIFY_PIN: verifyPin(apdu); break;
            case INS_GET_DATA:
                if (!pin.isValidated()) ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
                sendData(apdu);
                break;
            default: ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }
    }

    private void verifyPin(APDU apdu) { /* PIN'i karşılaştır; hatada kalan deneme sayısını döndür */ }
    private void sendData(APDU apdu)  { /* yalnız doğrulanmış oturumda veri gönder */ }
}

2. Okuyucuyla iletişim kurun

Masaüstünde PC/SC üzerinden kartla konuşulur. Uygulamacığı seçmek için SELECT komutu, uygulamacığın kimliğini (AID) taşımalıdır:

import javax.smartcardio.*;

CardTerminal terminal = TerminalFactory.getDefault().terminals().list().get(0);
Card card = terminal.connect("*");
CardChannel channel = card.getBasicChannel();

byte[] aid = {(byte) 0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x0C, 0x06, 0x01};
ResponseAPDU r = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid));
if (r.getSW() != 0x9000) throw new CardException("Uygulamacık seçilemedi");

Hassas komutlar düz metin gitmemelidir: GlobalPlatform güvenli kanal protokolleri (SCP03 gibi) kart ile arka uç arasında karşılıklı doğrulama ve şifreli iletişim sağlar.

3. Anahtar yönetimi

Anahtarlar kartta üretilir ya da güvenli bir kişiselleştirme ortamında yüklenir; asla düz metin olarak taşınmaz. Arka uç tarafındaki ana anahtarlar donanım güvenlik modülünde (HSM) tutulur.

4. PIN koruması

PIN kartta doğrulanır, deneme sayısı kartta tutulur. Kart kaybolsa bile PIN bilinmeden hassas işlem yapılamaz.

Kullanım alanları

Ödeme: çipli ve temassız banka kartları (EMV), dolandırıcılığa karşı her işlem için kartta üretilen kriptogram.

Kimlik: elektronik kimlik kartları; Türkiye’deki çipli T.C. kimlik kartı da kimlik doğrulama ve elektronik imza için bu teknolojiyi kullanır.

Elektronik imza: nitelikli elektronik sertifikalar akıllı kart ya da USB token üzerinde taşınır; 5070 sayılı Kanun’a göre güvenli elektronik imza ıslak imzayla aynı hukuki sonucu doğurur.

Kurumsal erişim: bina girişi, bilgisayar oturumu ve hassas kaynaklara erişim, denetim kaydıyla.

Ulaşım: temassız toplu taşıma kartları.

Zorluklar

Sınırlı kaynak: kart belleği ve işlem gücü kısıtlıdır; uygulamacıklar küçük ve hesaplı yazılmalıdır.

Kart yaşam döngüsü: üretim, kişiselleştirme, dağıtım, yenileme ve iptal ayrı süreçler ister.

Uyumluluk: farklı kart ve okuyucu üreticileri arasında uyumu test etmek zaman alır.

Sertifikasyon: ödeme ve kimlik kartları için EMV ya da Common Criteria sertifikasyonu uzun ve pahalı bir süreçtir; mimariyi baştan buna göre kurun.

İyi uygulamalar

  1. Anahtarları kartın dışına çıkarmayın
  2. Kart ile arka uç arasında güvenli kanal kullanın
  3. PIN deneme sınırı ve kilitleme koyun
  4. Her işlemi arka uçta kaydedin ve anormallikleri izleyin
  5. Uygulamacık kodunu bağımsız güvenlik incelemesinden geçirin
  6. Kaybolan ya da çalınan kartları hızla iptal edebilecek bir süreç kurun

Sonuç

Akıllı kartlar, anahtarı fiziksel olarak korunan bir çipin içinde tutarak dijital güvenliğin en sağlam yapı taşlarından birini sunar. Doğru kurulduğunda ödeme, kimlik ve imza gibi en kritik işlemleri güvenle taşır.

Akıllı kart ya da gömülü güvenlik projeniz varsa bize yazın.

B

ByteGurus

Yazar

Tüm yazılara dön
Başlamaya hazır mısınız?

Projenize başlamaya hazır mısınız?

Fikirlerinizi hayata geçirmek için size nasıl yardımcı olabileceğimizi konuşalım.