Host Card Emulation (HCE) ve Mobil Temassız Ödeme

Mobil telefonlar, teknoloji olarak her geçen gün farklı ve daha gelişmiş fonksiyonlar geliştirilmesi ile birlikte kaçınılmaz olarak hayatımızın büyük bir parçası haline geldi. Günümüzde telefonları bir kimlik doğrulama aracı ya da bir ödeme aracı olarak kullanmaktayız. Son dönemlerde yaygın olarak hem sanal pos cihazı kullanılırken hem de telefonlar birer temassız ödeme aracı olarak kullanılmaktadır. Bu fonksiyonun kullanımı cihaz üzerinde bulunan NFC teknolojisi ile geliştirilen finans. ödeme uygulamaları ve akıllı kartlar sayesinde mümkün hale gelmektedir.



Akıllı Kartlar, kimlik kartlarından depo kartlarına kadar pek çok yararlı işleve sahiptir ve her türlü veriyi yönetmek için esnek, güvenli ve taşınabilir bir araç sunmaktadır.


Bu yazımızda bir akıllı kartı taklit etmek veya okumak için Android telefonun, NFC'yi nasıl kullandığını inceleyeceğiz. Ancak bundan önce akıllı kartların nasıl çalıştığını ve okuyucularla nasıl iletişim kurduğunu ve NFC teknolojisini anlamak çok önemlidir.


NFC, 13.56 MHz bandında radyo frekansları ile iletişim kurulması esasına dayalı temassız bir iletişim teknolojisidir. NFC hakkında daha detaylı bilgi almak için linkte yer alan yazıya göz atabilirsiniz. Android NFC (Read, Write)


Akıllı Kartlar, mikro işlemciler ve bellek içeren mini bilgisayarlardır. Tıpkı normal bir bilgisayar gibi, karmaşık işlemler yapabilen ve verilere güvenli erişim sağlayan bir işletim sistemi ve çalışan uygulamalara sahip olabilirler.

Akıllı Kart Yapısı

Akıllı Kartlar "Temaslı", "Temassız" veya her ikisi olabilir. Temassız kartların güçlendirilmesi ve iletişime hazır olması için okuyucu ile doğrudan temas halinde olması gerekir. Ancak temassız kartlarla, maksimum 10 cm mesafeden 13,56 MHz Radyo Dalgaları kullanılarak iletişim kurulabilir. Bu tür iletişimi sağlayan bir anten içerirler.


Akıllı Kartlar veri yapılandırmalarını ISO7816 ile düzenlemektediler. ISO / IEC 7816, elektronik kimlik kartları, özellikle akıllı kartlar ve daha yakın zamanda, Uluslararası Standartlar Örgütü ve Uluslararası Elektroteknik Komisyonu tarafından ortaklaşa yönetilen temassız mobil cihazlar ile ilgili uluslararası bir standarttır. (Ayrıtılı bilgi için bakınız.)


ISO7816 ayrıca Akıllı Kartlar (temaslı ve temassız) ile haberleşme protokolünü tanımlar. Kartla iletişim kurmak için, okuyucunun karta bir "APDU Cevabı" ile yanıt verecek bir "APDU Komutu" (Application Protocol Data Unit Command) göndermesi gerekir.


APDU komutları, aşağıdakileri içeren bayt dizileridir:

CLA: Sınıf baytı, komutun ISO7816 ile ne ölçüde uyumlu olduğunu ve uyumlu ise ne tür "Güvenli Mesajlaşma" kullanılacağını belirtmek için kullanılır.


INS: Talimat baytı hangi yöntemi çalıştırmak istediğimizi belirtmek için kullanılır, bu çeşitli yöntemler olabilir: Bir Dosya veya Uygulama Seçmek için "A4", İkili Okumak için "B0", İkili Yazmak için "D0" … (Talimatların tam listesine buradan bakın.)


P1 ve P2: Bu iki Parametre baytı, Talimatın daha fazla özelleştirilmesi için kullanılır, bunlar kartın hangi özel komutları belirttiğine bağlıdır. (Olası durumların listesi için buraya tıklayın)


Lc: gönderilecek verinin uzunluğudur


Veri: Talimat için gerçek verilerdir


Le: beklenen yanıtın uzunluğudur


Kart komutu aldıktan sonra, aşağıdaki gibi bir APDU yanıtı ile yanıt verecektir.


Data Field: Yanıtın gövdesi


SW1 ve SW2: Ayrılmış durum byte'larıdır. Bunun nedeni bazı durumlarda ilk byte bize gerçek durumu söyleyebilir ve ikinci byte bu durum hakkında bize daha fazla bilgi verebilir.

Örneğin yanlış pin ile pin doğrulamak için bir komut kullandığımızda kart bize 63 cx durumunu döner. Burada x dediğimiz deneme sayısıdır. Böylelikle okuyucu uygulama ilk byte icin durumu ikinci byte icin kalan deneme sayısını kolayca kontrol edebilir.


Akıllı telefonunuzla herhangi bir NFC kart okuyucusuna dokunduğunuzda, veri alışverişi başlar. NFC denetleyicisi denen şey, okuyucudan gelen veri çerçevelerini alır onları bir şeye yönlendirir ve ardından okuyucuya yanıt verir.


Bu durumda yukarıda bahsettiğimiz şey nedir? İki seçenek bulunmaktadır. Bunlar Secure Element (SE) ve Host Card Emulation (HCE)'dir.



SE ve HCE


NFC kart emülasyonu güvenli bir öğe kullanılarak sağlandığından, benzetilecek kart, bir Android uygulaması aracılığıyla cihazdaki güvenli öğeye sağlanır. Bu, kart okuyucuyla kendi başına iletişim kurabilen bir çiptir. Daha sonra, kullanıcı cihazı bir NFC terminali üzerinden tuttuğunda, cihazdaki NFC kontrolönü, okuyucudan gelen tüm verileri doğrudan güvenli öğeye yönlendirir.


Secure Element (SE) ile NFC Kart Emülasyonu

Güvenli öğenin kendisi, NFC terminaliyle iletişimi gerçekleştirir ve işleme hiçbir Android uygulaması dahil değildir. İşlem tamamlandıktan sonra, bir Android uygulaması işlem durumu için doğrudan güvenli öğeyi sorgulayabilir ve kullanıcıyı bilgilendirebilir.


Cihaz üzerinde tutulan ödemeye ilişkin verilerin gizliliğini sağlanması için bu verilerin güvenliğinden emin olunan ortamlarda tutulması gerekmektedir. Bu sebeple mobil temassız ödemelerin ilk uygulamaları mobil telefon operatörlerinin sahipliğinde olan cihaz içindeki SIM kart içerisinde ayrılmış bir güvenli alanda (Secure Element- SE) bu operasyonların yürütülmesi şeklindeydi. Bu yöntem SIM Secure Element Based NFC olarak adlandırılıyordu.

SE'ler kurcalamaya karşı dayanıklıdır, bu nedenle onlardan herhangi bir veri almak oldukça zordur. Ayrıca, işletim sistemi ile iletişim kurmadıkları için (unutmayın - NFC denetleyicisi veri çerçevelerini doğrudan SE'ye yönlendirir, bu çerçeveler işletim sistemi üzerinden geçmez), tehlikeye atılmış işletim sistemi olan cihazda bile okuyucu ile akıllı telefon güvende olacaktır.


Ayrıca cihaza yapıştırılan stickerlar içerisine gömülü vaziyette, mobil cihazın üreticisi tarafından donanım içerisinde sağlanan veya işletim sistemi üzerinde oluşturulmuş TEE (Trusted Execution Environment) ortamının da Secure Element olarak kullanılması söz konusu.


Bunun yanında bağlantıyı halletmenin başka bir yolu daha bulunmaktadır. Bu bağlantı yöntemi ise Host Card Emulation (HCE)'dir. HCE, Ana Bilgisayar Kartı Emülasyonu anlamına gelmektedir. Kısaca ana bilgisayarın işletim sisteminde çalışan kod ile kartı taklit etmesidir.


HCE ile NFC Kart Emülasyonu

Mobil telefonlar veya diğer giyilebilir nesnelerin ödeme kartı bilgilerini kendi üzerlerinde tutmadan bulut tabanlı bir yapıda temassız ödeme yapabilme olanağını sağlayan teknoloji


HCE (Host Card Emulation) olarak tanımlanmaktadır.


HCE teknolojisinin kullanımı ile birlikte NFC antene sahip , Android işletim sistemi versiyonu 4.4 ve üzeri ile çalışan cihazlar donanımsal olarak SE’e sahip olmalarına gerek kalmadan temassız işlem yapabilir hale gelmişlerdir. HCE teknolojisi iletişim protokolü olarak NFC teknolojisini kullanmaktadır.


Kodunuzda HCE'yi uygulamak için yapmanız gereken, HostApduService adlı sınıfı genişletmek ve processCommandApdu(byte [] commandApdu, Bundle extras) adlı yöntemini geçersiz kılmaktır.


HCE teknolojisi hakkında artık fikrimiz oluştuğuna göre küçük bir demo üstünden temel konulara bakmaya başlayabiliriz. Demo olarak ele alacağımız uygulamaya buradan ulaşabilirsiniz.


Ekleyeceğimiz ilk şey, NFC'yi kullanmak için Manifest izin beyanıdır, AndroidManifest.xml içersinde önce şunu eklemeliyiz.



Daha sonra, uygulamanın yalnızca HCE'yi çalıştırabilen telefonlara yüklenmesi için HCE donanımı gereksinimini eklenmelidir önceki satırın hemen altına şu satırı ekleyelim.



Bu donanım gereksinimi eklemek yerine ikinci bir yöntem olarak da AndroidManifest üstünde bu beyanda bulunmayıp, HCE kontrollerini kullanacağımız class üstünde gerçekleştirmektir. Demomuzda ise ikinci yöntem kullanılmıştır. Bunun için demomuzda MainActivity içerisinde aşağıdaki kontrol yapılmaktadır.



Ardından, HCE hizmetimizi <application> etiketi içerisinde açıklamamız gerekmektedir:



HCE hizmetimiz için belirttiğimiz beyanname içerisindeki alanlara bakacak olursak

  • Name: Servis callbacklerimizi uygulayacak sınıfın adıdır. (Demomuzda bu sınıf: PaymentHostApduService'dir)

  • Exported: Servisimizin diğer uygulamalar tarafından erişilebilir olması için kullanılmaktadır. Bu alanın değeri false ise hiçbir dış uygulama servisimiz ile etkileşime giremez.

  • Permission: Servisin NFC'yi kullanabilmesi için NFC hizmetine bağlanmasını gerçekleştirmektedir.

  • Intent Filter: Android sistemi harici bir Kart Okuyucunun bir kartı okumaya çalıştığını algıladığında, bir HOST_APDU_SERVICE eylemi başlatır. Bu eyleme kayıtlı olan servisimiz çağrılır ve sonra gerekli işlemlerimizi yapmamızı sağlar.

  • Meta-data: Sistemin, okuyucunun hangi AID ile iletişim kurmaya çalıştığına bağlı olarak hangi servisleri arayacağını bilmesi için, "meta-data" etiketini beyan etmemiz ve bir XML kaynağına işaret etmemiz gerekmektedir.

Şimdi meta-data için beyan ettiğimiz "apduservice" XML dosyamızı oluşturmamız gerekmektedir. Bunun için projenizde yer alan res klasörüne sağ tıklayıp ardından New -> Directory seçip, yeni dizinimize "xml" adını verelim ve ardından bu yeni dizin içerisinde "apduservice" adlı yeni bir xml yaratalım.



Buradaki en önemli kısım, AID bir kart okuyucu tarafından seçiliyorsa, hizmetimizin ateşlenmesini kaydeden AID filtresidir.


Uzak bir NFC cihazı hizmetinizle konuşmak istediğinde, ISO / IEC 7816-4 spesifikasyonunda tanımlandığı gibi "SELECT AID" olarak adlandırılan bir APDU gönderir. AID, ISO / IEC 7816-4'te tanımlanan bir uygulama tanımlayıcısıdır.AID'ler için kayıt prosedürü ISO / IEC 7816-5 spesifikasyonunda tanımlanmıştır. Bir AID kaydetmek istemiyorsanız, tescilli aralıktaki AID'leri kullanabilirsiniz: ilk baytın 8-5 bitlerinin her biri '1' olarak ayarlanmalıdır. Örneğin, "0xF00102030405" tescilli bir AID'dir. Tescilli AID'ler kullanırsanız, tescilli AID'leri kullanan diğer uygulamalarla çarpışma riskini azaltmak için en az 6 baytlık bir AID seçmeniz önerilir.

Bazı durumlarda, bir hizmetin belirli bir uygulamayı uygulamak için birden fazla AID kaydetmesi gerekebilir ve tüm bu AID'ler için varsayılan işleyici olduğundan emin olması gerekir.


Bir AID grubu, işletim sistemi tarafından birbirine ait olduğu düşünülen AID'lerin bir listesidir. Bir AID grubundaki tüm AID'ler için, İşletim Sistemi aşağıdakilerden birini garanti eder:

  • Gruptaki tüm AID'ler bu hizmete yönlendirilir

  • Gruptaki hiçbir AID bu hizmete yönlendirilmedi

Başka bir deyişle, gruptaki bazı AID'lerin bu hizmete ve bazılarının da diğerine yönlendirilebildiği arada bir durum yoktur.


Her bir AID grubu bir kategori ile ilişkilendirilebilir. Bu, Android işletim sisteminin hizmetleri sınıflandırmasına izin verir ve kullanıcının varsayılanları AID seviyesi yerine kategori seviyesinde ayarlamasına izin verir.


Platforma bu hizmet tarafından hangi AID gruplarının talep edildiğini söylemek için , hizmet beyanına bir SERVICE_META_DATA girişi dahil edilmelidir.


Yukarıda demomuzda belirtilen AID'lerin karşılığı temassız ödeme teknolojilerinde kullanılmaktadır ve aşağıdaki gibidir:


## Supported EMV Paycards
* Mastercard (PayPass); AID: A0000000041010
* Maestro (PayPass); AID: A0000000043060
* Visa (PayWave); AID: A0000000031010
* Visa Electron (PayWave); AID: A0000000032010

HostApduService tek bir cihaza birden çok bileşen kurulabilir ve aynı AID birden fazla hizmet tarafından kaydedilebilir. Android platformu, bir AID'nin ait olduğu kategoriye bağlı olarak AID çakışmalarını çözer. Her kategorinin farklı bir çakışma çözme politikası olabilir.

Örneğin, bazı kategoriler için (ödeme gibi) kullanıcı, Android ayarları arayüzünde varsayılan bir hizmet seçebilir. Diğer kategoriler için politika, kullanıcıya her zaman bir çelişki durumunda hangi hizmetin çalıştırılacağını sormak olabilir.


Uygulamalar, isDefaultServiceForCategory(ComponentName, String) API'yi kullanarak HCE hizmetlerinin belirli bir kategori için varsayılan hizmet olup olmadığını kontrol edebilir.

Hizmetiniz varsayılan değilse, varsayılan yapılmasını isteyebilirsiniz.


Şimdi ise PaymentHostApduService sınıfımıza bakalım.


Farklı bir AID seçildiğinde veya NFC bağlantısı kesildiğinde "onDeactiveted" yöntemi çağrılacaktır.


"ProcessCommandApdu" yöntemi, bir kart okuyucu bildirim filtremiz tarafından filtrelenen bir APDU komutu gönderdiği zaman çağrılacaktır.


Mevcut Android uygulamaları, cihazın ekranı kapatıldığında NFC denetleyicisini ve uygulama işlemcisini tamamen kapatır. Bu nedenle, HCE hizmetleri ekran kapalıyken çalışmayacaktır.


HCE hizmetleri kilit ekranından çalışabilir ancak bu, HCE hizmetinizin <host-apdu-service>. etiketindeki android:requireDeviceUnlock niteliği tarafından kontrol edilir. Varsayılan olarak, cihaz kilidi açma gerekli değildir ve cihaz kilitli olsa bile hizmetiniz başlatılır. HCE hizmetiniz için android:requireDeviceUnlock niteliği "true" olarak ayarlarsanız, Android, hizmetinize çözümlenen bir AID seçen bir NFC okuyucuya dokunduğunuzda kullanıcıdan cihazın kilidini açmasını ister. Kilidi açtıktan sonra Android, kullanıcının işlemi tamamlamak için tekrar dokunmasını isteyen bir iletişim kutusu gösterecektir. Bu gereklidir, çünkü kullanıcı, kilidini açmak için cihazı NFC okuyucudan uzaklaştırmış olabilir.


Daha ayrıntılı incelemek isterseniz kod reposuna buradan erişebilirsiniz.



EMV ( Europay, MasterCard, Visa)


Çipli kredi kartları ve telefon ödemeleri tartışmalarında duyacağınız iki moda kelime EMV ve NFC'dir. EMV, Europay Mastercard Visa kelimelerinin kısaltmasından oluşur. Ödeme kartlarında yonga-çip teknolojisinin standartlarını oluşturmak üzere, 1994 yılında MasterCard International’ın da dahil olduğu EMV adında bir çalışma grubu başlatılmış ve bu başlangıç, EMV standartlarının geliştirilmesi ile sonuçlanmıştır.

NFC en çok cep telefonu ödemeleriyle ilişkilendirilse de ve EMV çoğunlukla çipli kartlarla ilişkilendirilse de, her iki teknoloji de aslında her iki ödeme seçeneğinde de kullanılabilir. Cep telefonlarındaki NFC çipi temassız çipli kartlar için de kullanılabilir ve her ikisinde de ödeme bilgilerini koruyan şifreleme EMV standartıdır. EMV standartları, üzerinde çip taşıyan MasterCard ve Maestro kartların dünyada tüm terminallerde sorunsuz olarak kullanılabilmesi için alınan önlemlerin temel taşıdır. EMV spesifikasyonlarının yönetilmesi ve geliştirilmesi için bu amaçla EMVCo adlı bir şirket kurulmuştur. Akıllı kartlar ödeme ve ATM işlemlerinde manyetik şeritli kartların yerini almaya başlamıştır.


EMV uygulamasında kart kullanıcıları, kredi ve debit işlemleri için şatış işleminin yapıldığı terminalden PIN girerek kimlik denetimini gerçekleştirirler. PIN, terminal ile sayısal sertifika yöntemini kullanarak kimlik denetimini gerçekleştiren akıllı kart tarafından doğrulanır. İşlem detayları, kart kullanıcısı ile kartı kullanıcıya veren banka arasında paylaşılmış olan simetrik anahtar ile MAC (mesaj kimlik denetimi kodu) kullanılarak kimlik denetiminden geçirilir.


EMV ile ilgili daha detaylı bilgiye EMVCo ve EmvLab üstünden erişebilirsiniz.



Referans ve daha fazla detay için:


#hce #hostcardemulation #mobilepayment #paymentsystems #emv

0 yorum

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın