NFC işlevi sunan Android destekli birçok cihaz zaten NFC'yi desteklemektedir kart emülasyonu. Çoğu durumda kart, güvenli öğe adı verilen bir cihazdır. Kablosuz operatörler tarafından sağlanan birçok SIM kart bir güvenlik unsuru da içerir.
Android 4.4 ve sonraki sürümler, kart emülasyonu için ek bir yöntem sunar. Ana makineye dayalı kart emülasyonu adı verilen bir güvenli öğe içermez. Bu herhangi bir Android uygulamasının kart emüle etmesine ve doğrudan NFC ile iletişim kurmasına izin verir yardımcı olur. Bu bölümde, ana makine tabanlı kart emülasyonunun (HCE) Android ve bunu kullanarak NFC kart emülasyonu yapan bir uygulamayı nasıl geliştirebileceğiniz tekniği inceleyelim.
Güvenlik unsuru içeren kart emülasyonu
NFC kart emülasyonu bir güvenlik unsuru kullanılarak sağlandığında, emülasyon, cihazdaki güvenlik öğesine bir Android cihaz üzerinden bir uygulamadır. Ardından, kullanıcı cihazı bir NFC terminalinin üzerinde tuttuğunda NFC cihazdaki denetleyici, tüm verileri okuyucudan gelen tüm verileri doğrudan güvenli öğesine dokunun. Şekil 1’de bu kavram gösterilmiştir:
Şekil 1. Güvenlik unsuru içeren NFC kartı emülasyonu.
Güvenli öğenin kendisi NFC terminaliyle iletişimi gerçekleştirir ve İşlemde hiçbir Android uygulaması yer almamaktadır. İşlem, bir Android uygulaması güvenli öğeyi doğrudan işlem durumunu özetleyip kullanıcıyı bilgilendirebilirsiniz.
Ana makineye dayalı kart emülasyonu
Bir NFC kartı, ana makine tabanlı kart emülasyonu kullanılarak emüle edildiğinde veriler yönlendirilir. bir güvenli öğeye yönlendirilmek yerine doğrudan ana makinenin CPU'suna gönderilir. 2. Şekil ana makine tabanlı kart emülasyonunun nasıl çalıştığını gösterir:
Şekil 2. Güvenlik unsuru içermeyen NFC kart emülasyonu.
Desteklenen NFC kartları ve protokoller
Şekil 3. Android'in HCE protokol yığını.
NFC standartları birçok farklı protokol için destek sunar ve çeşitli kart türleri oluşturabilirsiniz.
Android 4.4 ve sonraki sürümler piyasada yaygın olan çeşitli protokolleri destekler
. Mevcut temassız kartların çoğu zaten bu protokolleri temel alır.
(ör. temassız ödeme kartları) Bu protokoller ayrıca,
Şu anda piyasada olan NFC okuyucular (şu anda piyasadaki NFC okuyucular).
(bkz. IsoDep
sınıfı). Bu sayede, Google Cloud'un özelliklerini kullanarak uçtan uca bir NFC çözümü derleyip
HCE'yi yalnızca Android destekli cihazlarda kullanabilirsiniz.
Özellikle Android 4.4 ve sonraki sürümler NFC-Forum ISO-DEP spesifikasyonu (ISO/IEC 14443-4'e göre) ve işlem ISO/IEC 7816-4'te tanımlandığı şekilde Uygulama Protokolü Veri Birimleri (APDU'lar) bakın. Android, ISO-DEP'nin yalnızca Nfc-A'nın üzerinde emülasyonunu zorunlu kılıyor (ISO/IEC 14443-3 Tür A) teknolojisi. Nfc-B desteği (ISO/IEC 14443-4 Tip B) teknolojisi isteğe bağlıdır. Şekil 3'te, tüm bu katmanların katmanları özellikler.
HCE hizmetleri
Android'deki HCE mimarisi, Android tabanlıdır.
Service
bileşenleri (HCE olarak bilinir)
hizmetleri) tıklayın. Bir hizmetin temel avantajlarından biri
herhangi bir kullanıcı arayüzü içermeyen arka plan. Bu, birçok HCE için doğaldır.
veya toplu taşıma kartları gibi toplu taşıma kartı gibi
kullanmak için bir uygulama başlatın. Bunun yerine, cihazı NFC okuyucuya doğru dokunmak
çalışmıyorsa ve işlemi yürütüyorsa doğru hizmet
arka planda çalışır. Tabii ki isteğe bağlı olarak ek kullanıcı arayüzü (örneğin,
kullanıcı bildirimleri) gönderebilirsiniz.
Hizmet seçimi
Kullanıcı bir cihazı NFC okuyucuya dokunduğunda Android sisteminin bunu bilmesi gerekir. NFC okuyucunun iletişim kurmak istediği HCE hizmetiyle birlikte çalışır. ISO/IEC 7816-4 spesifikasyonlar, uygulama seçiminde kullanılacak bir yöntem tanımlar ve Uygulama kimliği (AID). Bir AID en fazla 16 bayttan oluşur. Emülasyon kullanıyorsanız mevcut bir NFC okuyucu altyapısına ilişkin kartlar, bu okuyucuların kullandığı AID'ler kullanıcılar genellikle iyi bilinen ve herkese açık olarak tescil edilir (örneğin, Visa ve MasterCard gibi ödeme ağlarının yardımları).
Kendi uygulamanız için yeni bir okuyucu altyapısı dağıtmak istiyorsanız kendi AID'lerinizi kaydetmelisiniz. AID'ler için kayıt prosedürü şu şekilde tanımlanmıştır: ISO/IEC 7816-5 spesifikasyonuna uymalısınız. 7816-5 uyarınca bir AID kaydetmenizi öneririz. çakışmaları önleyeceği için Android için HCE uygulaması dağıtıyorsanız entegre eder.
AID grupları
Bazı durumlarda, bir HCE hizmetinin birden fazla AID kaydetmesi ve uygulamak üzere tüm AID'ler için varsayılan işleyiciyi bir uygulamadır. Gruptaki bazı AID'lerin başka bir hizmete gitmesi desteklenmiyor.
Birlikte tutulan AID'lerin listesine AID grubu adı verilir. Bir AID grubu, Android aşağıdakilerden birini garanti eder:
- Gruptaki tüm AID'ler bu HCE hizmetine yönlendirilir.
- Gruptaki hiçbir AID bu HCE hizmetine yönlendirilmez (örneğin, kullanıcı, grubunuzda bir veya daha fazla AID isteyen başka bir hizmeti tercih etti de başvurabilirsiniz).
Başka bir deyişle, gruptaki bazı AID'lerin, iki veya daha fazla bazılarına başka bir HCE hizmetine yönlendirilir.
AID grupları ve kategorileri
Her AID grubunu bir kategoriyle ilişkilendirebilirsiniz. Bu, Android'in HCE hizmetlerini kategoriye göre birlikte sunar. Bu da, kullanıcının varsayılan olarak AID düzeyi yerine kategori düzeyinde ayarlanır. AID'lerden bahsetmeyin herhangi bir anlama gelmediğinden emin olun. 10 kat daha fazla.
Android 4.4 ve sonraki sürümler iki kategoriyi destekler:
CATEGORY_PAYMENT
(endüstri standardı ödeme uygulamalarını kapsar)CATEGORY_OTHER
(diğer tüm HCE uygulamaları için)
Bir HCE hizmeti uygulayın
Ana makine tabanlı kart emülasyonu kullanarak bir NFC kartı emüle etmek için bir
NFC işlemlerini işleyen Service
bileşeni.
HCE desteğini kontrol edin
Uygulamanız,
FEATURE_NFC_HOST_CARD_EMULATION
özelliğini kullanabilirsiniz. <uses-feature>
'ı kullanma
uygulamanızın HCE'yi kullandığını beyan etmek için uygulamanızın manifest dosyasında
ve uygulamanın çalışması için gerekli olup olmadığı.
Hizmet uygulaması
Android 4.4 ve sonraki sürümler, kullanabileceğiniz kolaylık sağlayan bir Service
sınıfı sunar.
bir temel olarak kullanıma sunun:
HostApduService
sınıfı.
İlk adım, aşağıdaki kodda gösterildiği gibi HostApduService
öğesini uzatmaktır.
örnek:
Kotlin
class MyHostApduService : HostApduService() { override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray { ... } override fun onDeactivated(reason: Int) { ... } }
Java
public class MyHostApduService extends HostApduService { @Override public byte[] processCommandApdu(byte[] apdu, Bundle extras) { ... } @Override public void onDeactivated(int reason) { ... } }
HostApduService
, geçersiz kılmanız gereken iki soyut yöntem tanımlar ve
yardımcı olur. Bunlardan biri,
processCommandApdu()
Bir NFC okuyucu, Uygulama Protokolü Veri Birimi (APDU) gönderdiğinde çağrılır.
hizmetinize eklendi. APDU'lar, ISO/IEC 7816-4 spesifikasyonunda tanımlanmıştır. APDU'lar
NFC okuyucu ile arasında gidip gelen uygulama düzeyinde paketler
HCE hizmetiniz. Bu uygulama düzeyindeki protokol yarı çift yönlüdür: NFC okuyucu
size bir APDU komutu gönderir ve sizin de cihazınızda yanıt APDU'su göndermenizi bekler.
dön.
Daha önce belirtildiği gibi Android, AID'yi kullanarak
konuşmak istediği
bir kitaptır. Genellikle, bir NFC okuyucunun cihazınıza gönderdiği ilk APDU
Cihazın SELECT AID
APDU olduğundan emin olun. Bu APDU, okuyucunun istediği AID'yi içeriyor
konuşmayı da öğreteceğim. Android, AID'yi APDU'dan ayıklar ve bir HCE'ye dönüştürür.
ve ardından bu APDU'yu çözümlenen hizmete yönlendirir.
APDU yanıtının bayt değerini döndürerek
processCommandApdu()
Bu yöntemin ana iş parçacığında çağrıldığını unutmayın
kullanmanızı öneririm. Hesaplama yapamıyor ve geri dönemiyorsanız
hemen yanıt APDU, null döndürme. Sonra da cihaz üzerinde
ve
sendResponseApdu()
yöntem kullanıldığında, yanıt göndermek için HostApduService
sınıfında tanımlanan
tamamlandı.
Android, şunlar olur:
- NFC okuyucu başka bir
SELECT AID
APDU gönderir ve işletim sistemi bunu bir farklı bir hizmet. - NFC okuyucu ile cihazınız arasındaki NFC bağlantısı bozuk.
Her iki durumda da sınıfınızın
onDeactivated()
uygulaması, bu iki durumdan hangisinin gerçekleştiğini belirten bir bağımsız değişkenle çağrılır.
Mevcut okuyucu altyapısıyla çalışıyorsanız okuyucuların HCE hizmetinizde beklediği mevcut uygulama düzeyinde protokol.
Kendi kontrolünüzdeki yeni okuyucu altyapısını dağıtıyorsanız kendi protokolünüzü ve APDU dizinizi tanımlayabilirsiniz. APDU miktarını sınırlamaya çalışın ve değiştirilecek verilerin boyutunu belirler. Böylece, kullanıcılarınızın cihazlarını NFC okuyucunun üzerinde kısa bir süre tutmalarını isteyebilir. CEVAP Makul üst sınır, yaklaşık 1 KB veridir. Bu veriler genellikle değer değişimi.
Hizmet manifesti beyanı ve AID kaydı
Hizmetinizi manifest dosyasında her zamanki gibi bildirmeniz gerekir ancak ek parçalar şunları da eklemeniz gerekir:
Platforma bunun bir HCE hizmeti olduğunu belirtmek için
HostApduService
arayüzü için bir intent filtresi ekleyin.SERVICE_INTERFACE
bir işlem olduğunu unutmayın.Platforma bu hizmet tarafından hangi AID gruplarının isteneceğini bildirmek için aşağıdakileri ekleyin: CANNOT TRANSLATE
SERVICE_META_DATA
Hizmet bildirimindeki, bir XML'e işaret eden<meta-data>
etiketi kaynağı oluşturun.android:exported
özelliğinitrue
olarak ayarlayın ve Hizmet beyanınızdaandroid.permission.BIND_NFC_SERVICE
izni. İlki, hizmetin harici uygulamalara bağlı olmasını sağlar. İkinci yapılandırma ise yalnızcaandroid.permission.BIND_NFC_SERVICE
izni, hizmetinize bağlanabilir.android.permission.BIND_NFC_SERVICE
bir sistem izni olduğundan, bu hizmetinize yalnızca Android işletim sisteminin bağlanabilmesini etkili bir şekilde zorunlu kılar.
Aşağıda bir HostApduService
manifest beyanı örneği verilmiştir:
<service android:name=".MyHostApduService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE"> <intent-filter> <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/> </intent-filter> <meta-data android:name="android.nfc.cardemulation.host_apdu_service" android:resource="@xml/apduservice"/> </service>
Bu meta veri etiketi, bir apduservice.xml
dosyasına işaret ediyor. Bu,
iki tane içeren tek bir AID grup bildirimi içeren böyle bir dosya örneği
özel AID'ler:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/servicedesc" android:requireDeviceUnlock="false"> <aid-group android:description="@string/aiddescription" android:category="other"> <aid-filter android:name="F0010203040506"/> <aid-filter android:name="F0394148148100"/> </aid-group> </host-apdu-service>
<host-apdu-service>
etiketi bir <android:description>
özelliği içermelidir
hizmetin kullanıcı dostu bir açıklamasını içeren
kullanıcı arayüzü. Şunları belirtmek için requireDeviceUnlock
özelliğini kullanabilirsiniz:
APDU'ları işlemek için bu hizmeti çağırmadan önce cihazın kilidi açılır.
<host-apdu-service>
bir veya daha fazla <aid-group>
etiketi içermelidir. Her biri
<aid-group>
etiketi, şunları yapmak için gereklidir:
- Kullanıcı dostu bir ürün içeren
android:description
özelliği içermelidir. kullanıcı arayüzünde görüntülenmeye uygun olan AID grubunun açıklaması. android:category
özelliği, AID'nin kategorisini belirtecek şekilde ayarlanmış olmalıdır. grubu (ör.CATEGORY_PAYMENT
ile tanımlanan dize sabitleri) veyaCATEGORY_OTHER
.- Her biri tek bir AID içeren bir veya daha fazla
<aid-filter>
etiketi içermelidir. AID'yi onaltılık biçimde belirtin ve eşit bir karakter sayısı.
Başvurunuz ayrıca
NFC
:
HCE hizmeti.
AID çakışma çözümü
Tek bir cihaza birden fazla HostApduService
bileşeni yüklenebilir ve
aynı AID birden fazla hizmet tarafından kaydedilebilir. Android, AID'yi çözer
AID'in ait olduğu kategoriye bağlı olarak farklı şekillerde çakışır. Her biri
kategorisinin farklı bir anlaşmazlık çözümü politikası olabilir.
Kullanıcı, ödeme gibi bazı kategorilerde varsayılan bir seçim yapabilir.
hizmeti ile ilgili daha fazla bilgi edinebilirsiniz. Diğer kategoriler için politika
kullanıcıya her zaman çakışma durumunda hangi hizmetin çağrılacağını sormalıdır. Daha fazla bilgi için
belirli bir kategori için ihtilaf çözümü politikasının nasıl sorgulanacağı hakkında
getSelectionModeForCategory()
.
Hizmetinizin varsayılan hizmet olup olmadığını kontrol edin
Uygulamalar, HCE hizmetlerinin bir web sitesi için varsayılan hizmet olup olmadığını
kullanarak belirli bir kategoriyi
isDefaultServiceForCategory()
API'ye gidin.
Hizmetiniz varsayılan değilse varsayılan olarak ayarlanmasını isteyebilirsiniz
kullanarak
ACTION_CHANGE_DEFAULT
.
Ödeme uygulamaları
Android, ödeme kategorisini kullanarak ödeme yaparsınız. Android 4.4 ve sonraki sürümler bir üst düzey Ayarlar menü girişi dokun ve pay gibi bir değer, izin verilmez. Bu ayarlar menüsünde, kullanıcı ödeme noktasına dokunulduğunda çağrılacak varsayılan ödeme uygulaması.
Ödeme uygulamaları için gerekli öğeler
Görsel açıdan daha çekici bir kullanıcı deneyimi sunmak için, HCE ödeme uygulamaları bir hizmet banner'ı sağlaması gerekir.
Android 13 ve sonraki sürümler
Ayarlar arayüzündeki varsayılan ödeme seçimi listesine daha iyi sığması için banner gerekliliği anlamına gelir. İdeal olarak, bu URL'nin uygulama başlatıcı simge tasarımı. Bu düzenleme, daha fazla tutarlılık ve temiz bir görünüm elde edersiniz.
Android 12 ve önceki sürümler
Hizmet banner'ının boyutunu 260x96 dp olarak ayarlayın, ardından hizmet banner'ının boyutunu belirleyin.
android:apduServiceBanner
özelliğini
<host-apdu-service>
etiketi, çekilebilir kaynağı işaret eder. İlgili içeriği oluşturmak için kullanılan
Örnek:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/servicedesc" android:requireDeviceUnlock="false" android:apduServiceBanner="@drawable/my_banner"> <aid-group android:description="@string/aiddescription" android:category="payment"> <aid-filter android:name="F0010203040506"/> <aid-filter android:name="F0394148148100"/> </aid-group> </host-apdu-service>
Ekran kapalı ve kilit ekranı davranışı
HCE hizmetlerinin davranışı, için geçerlidir.
Android 12 ve sonraki sürümler
Android 12 (API düzeyi 31) ve sonraki sürümleri hedefleyen uygulamalarda NFC'yi etkinleştirebilirsiniz
cihazın ekranı kapalıyken yapılan ödemeleri
requireDeviceScreenOn
-
false
.
Android 10 ve sonraki sürümler
Android 10 (API düzeyi 29) veya sonraki sürümleri destekleyen cihazlar
Güvenli
NFC'ye dokunun. Güvenli Halde
NFC açık, tüm kart emülatörleri (ana makine uygulamaları ve ana makine dışı uygulamalar)
cihaz ekranı kapalıyken kullanılamaz. Güvenli NFC kapalıyken ana makine dışında
uygulamalar, cihaz ekranı kapalıyken kullanılabilir. Chrome Web Mağazası'ndaki
Güvenli NFC desteğini
isSecureNfcSupported()
.
Android 10 ve sonraki sürümleri çalıştıran cihazlarda
android:requireDeviceUnlock
- true
, cihazlarda olduğu gibi geçerlidir
yalnızca Güvenli NFC kapalıyken çalışır. Yani,
Güvenli NFC açık, HCE hizmetleri kilit ekranından çalışamaz
android:requireDeviceUnlock
ayarının ayarından bağımsız olarak.
Android 9 ve önceki sürümler
Android 9 (API düzeyi 28) ve önceki sürümleri çalıştıran cihazlarda NFC kumanda ve uygulama işlemcisi tamamen kapatılırsa ve Cihaz kapatıldı. Bu nedenle HCE hizmetleri ekran kapalıyken çalışmaz.
Ayrıca, Android 9 ve önceki sürümlerde HCE hizmetleri kilit ekranından çalışabilir.
Ancak bu, android:requireDeviceUnlock
HCE hizmetinizin <host-apdu-service>
etiketi. Varsayılan olarak, cihaz kilidinin açılması
gerekmez ve cihaz kilitli olsa bile hizmetiniz çağrılır.
HCE'niz için android:requireDeviceUnlock
özelliğini true
olarak ayarlarsanız
aşağıdaki durumlarda Android kullanıcıdan cihazın kilidini açmasını ister:
ne olur?
- Kullanıcı NFC okuyucuya dokunur.
- NFC okuyucu, hizmetinize çözümlenen bir AID seçer.
Kilidin açılmasından sonra Android, kullanıcının şunu yapmak için tekrar dokunmasını isteyen bir iletişim kutusu gösterir. tamamlanması gerekir. Bu, kullanıcı taşıma işlemini gerçekleştirmiş olabileceği için gereklidir. cihazı NFC okuyucudan uzaklaştırarak kilidini açın.
Güvenlik unsuru kartlarıyla birlikte kullanım
Bu bölüm, uygulama dağıtan geliştiriciler içindir kart emülasyonu için bir güvenlik unsuru temel alır. Android'in HCE uygulaması kart yerleştirmenin diğer yöntemleriyle paralel çalışacak şekilde tasarlanmıştır. emülasyonuna izin verir.
Bu birlikte kullanım, AID yönlendirme adlı bir ilkeye dayanır. NFC denetleyici, (sonlu) bir yönlendirme listesinden oluşan bir yönlendirme tablosu tutar kurallar. Her yönlendirme kuralı bir AID ve bir hedef içerir. Hedef, Android uygulamalarının çalıştığı ana makinenin CPU'su veya bağlı bir güvenli öğesine dokunun.
NFC okuyucu SELECT AID
içeren bir APDU gönderdiğinde NFC denetleyici
AID'lerin, yönlendirme tablosundaki herhangi bir AID ile eşleşip eşleşmediğini kontrol eder. Eğer
bu APDU ve bunu takip eden tüm APDU'lar hedefe gönderilir.
başka bir SELECT AID
APDU veya NFC alınana kadar, AID ile ilişkili
bağlantı bozuk.
Şekil 4'te bu mimari gösterilmektedir:
Şekil 4. Android, hem güvenli öğe hem de ana makine kartı emülasyonu ile çalışır.
NFC kumandası genellikle APDU'lar için varsayılan bir rota da içerir. Bir AID, yönlendirme tablosunda bulunamadı, varsayılan rota kullanılıyor. Bu ayar cihazdan cihaza değişebilir, Android cihazlar gerekiyor ve uygulamanızın kaydettiği AID'lerin ana bilgisayar.
Bir HCE hizmeti uygulayan veya güvenlik unsuru kullanan Android uygulamaları Yönlendirme tablosunu yapılandırma ve Google’ın Android otomatik olarak. Android'in yalnızca hangi AID'lerin kullanılabileceğini bilmesi gerekir. güvenlik unsuru tarafından ele alınabilen öğeleri içerir. Yönlendirme tablosu, hangi hizmetlerin yüklü olduğuna ve Kullanıcının tercih edilen olarak yapılandırdığı
Aşağıdaki bölümde, kart emülasyonu için güvenli öğe.
Güvenlik unsuru AID kaydı
Kart emülasyonu için bir güvenlik unsuru kullanan uygulamalar bir ana makine dışı hizmete eklemelerini isteyin. Bu tür bir hizmetin beyanı, HCE hizmetinin beyanıyla neredeyse aynıdır. İstisnalar şunlardır: şöyle olur:
- Amaç filtresinde kullanılan işlem şuna ayarlanmalıdır:
SERVICE_INTERFACE
. - Meta veri adı özelliği şuna ayarlanmalıdır:
SERVICE_META_DATA
. Meta veri XML dosyası,
<offhost-apdu-service>
kök etiketini kullanmalıdır.<service android:name=".MyOffHostApduService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE"> <intent-filter> <action android:name="android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE"/> </intent-filter> <meta-data android:name="android.nfc.cardemulation.off_host_apdu_service" android:resource="@xml/apduservice"/> </service>
Aşağıda, karşılık gelen apduservice.xml
dosyasına bir örnek verilmiştir
iki AID kaydetme:
<offhost-apdu-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/servicedesc"> <aid-group android:description="@string/subscription" android:category="other"> <aid-filter android:name="F0010203040506"/> <aid-filter android:name="F0394148148100"/> </aid-group> </offhost-apdu-service>
android:requireDeviceUnlock
özelliği, barındırma dışı hizmetler için geçerli değildir.
işleme ana makine CPU'su dahil olmadığından
Cihaz etkinken güvenlik öğesinin işlemleri yürütmesini
kilitli.
android:apduServiceBanner
özelliği, ana makine dışı hizmetler için gereklidir
ve varsayılan ödeme yöntemi olarak seçilebilecek
bir uygulamadır.
Ana makine dışı hizmet çağrısı
Android, "ana makine dışı" olarak belirtilen bir hizmeti asla başlatmaz veya bağlamaz. çünkü gerçek işlemler güvenli öğe tarafından değil, Android hizmeti. Hizmet beyanı, uygulamaların yalnızca şunları yapmasına izin verir: güvenlik unsurunda bulunan AID'leri kaydetmelidir.
HCE ve güvenlik
HCE mimarisi, güvenliğin bir parçasını sağlar:
tarafından korunmaktadır.
BIND_NFC_SERVICE
yalnızca işletim sistemi hizmetinize bağlanabilir ve onunla iletişim kurabilir.
Böylece, aldığınız APDU'ların gerçekte Google tarafından
geri gönderdiğiniz APDU'nun yalnızca cihaza gittiğini ve
APDU'ları doğrudan NFC denetleyicisine yönlendiren işletim sistemi.
Kalan son soru, uygulamanızın gönderdiği verileri aldığınız yerdir. NFC okuyucuya aktarın. Bu, HCE tasarımında kasıtlı olarak ayrıştırılmıştır; yapar nereden geldiğine bakılmaz, yalnızca verilerin güvenli bir şekilde NFC denetleyiciye ve NFC okuyucuya taşınır.
HCE'nizden göndermek istediğiniz verileri güvenli bir şekilde depolamak ve almak için hizmeti için örneğin, Android Uygulama Korumalı Alanı'ndan yararlanabilirsiniz. Uygulamanızın verilerini diğer uygulamalardan ayırır. Android hakkında daha fazla bilgi için Güvenlik ipuçları bölümünü inceleyin.
Protokol parametreleri ve ayrıntıları
Bu bölüm hangi protokolü anlamak isteyen geliştiriciler için önemlidir cihazlarındaki çarpışma önleme ve aktivasyon aşamalarında kullanılan HCE NFC protokollerini yazın. Bu sayede benzersiz bir okuyucu altyapısı oluşturabilirsiniz. Android HCE cihazlarla uyumludur.
Nfc-A (ISO/IEC 14443 tip A) protokolü çarpışma önleme ve etkinleştirme
Nfc-A protokolünün etkinleştirilmesi kapsamında birden fazla kare değişimi yapılır.
Exchange'in ilk bölümünde HCE cihazı, UID'sini sunar; HCE cihazları rastgele bir UID'nin olduğu varsayılmalıdır. Yani her dokunuşta UID rastgele oluşturulmuş bir UID'dir. İşte bu sebeple NFC okuyucular, HCE cihazlarının UID'sini aşağıdaki gibi kullanmamalıdır: kimlik doğrulama veya tanımlama.
NFC okuyucu, daha sonra bir SEL_REQ
göndererek HCE cihazını seçebilir.
komutuna ekleyin. HCE cihazının SEL_RES
yanıtı en az 6. bite sahip
(0x20) olarak ayarlanır. Bu değer, cihazın ISO-DEP'yi desteklediğini gösterir. Bu dosyadaki diğer bitlerin
SEL_RES
değeri de ayarlanabilir. Bu, örneğin NFC-DEP'nin desteklendiğini gösterir.
(p2p) protokolüyle uyumlu şekilde çalışır. Başka bitler de ayarlanmış olabileceğinden,
HCE cihazları, yalnızca 6. biti açıkça kontrol etmeli, karşılaştırma yapmamalıdır.
0x20 değerinde tam SEL_RES
değerini girin.
ISO-DEP etkinleştirme
Nfc-A protokolü etkinleştirildikten sonra NFC okuyucu ISO-DEP'yi başlatır protokolü etkinleştirmesi gerekir. RATS (Request for Answer To Select) gönderir komutuna ekleyin. NFC denetleyici, RATS yanıtını, yani ATS'yi oluşturur; ATS ne değildir tarafından yapılandırılabilir. Ancak, HCE uygulamalarının NFC Forum'a uyması gerekir. Böylece NFC okuyucular bu parametrelere güvenebilir. tüm HCE cihazların NFC Forum şartlarına uygun olarak ayarlanması gerekir.
Aşağıdaki bölümde ATS'nin bağımsız baytları hakkında daha fazla ayrıntı verilmiştir. HCE cihazında NFC denetleyicisi tarafından sağlanan yanıt:
- Özet: ATS yanıtının uzunluğu. 20'den büyük bir uzunluk belirtmemelidir bayt olarak kabul edilir.
- T0: Tüm HCE cihazlarda TA(1), TB(1) değerini belirten bit 5, 6 ve 7 ayarlanmalıdır ve TC(1) ATS yanıtına dahil edilir. 1 ile 4 arasındaki bitler FSCI'yı belirtir. maksimum kare boyutunu kodlamayı içerir. HCE cihazlarda FSCI değeri şöyle olmalıdır: 0-8 saat arasında.
- T(A)1: okuyucu ile emülatör arasındaki bit hızlarını ve asimetriktir. HCE cihazları için bit hızı şartı veya garantisi yoktur.
- T(B)1: 1'den 4'e kadar olan bitler Başlangıç Çerçeve Koruması zaman Tamsayısını (SFGI) belirtir. Şu tarihte: HCE cihazlarda, SFGI 8 saat veya daha kısa olmalıdır. 5 ile 8 arasındaki bitler Çerçeve Bekliyor değerini gösterir zaman Tamsayısı (FWI) oluşturur ve Kare Bekleme Süresi'ni (FWT) kodlar. HCE cihazlarda, FWI 8 saatten küçük olmalıdır.
- T(C)1: bit 5 "Gelişmiş Protokol özellikleri" desteğini gösterir. HCE cihazları "Gelişmiş Protokol özelliklerini" destekleyebilir veya desteklemeyebilir. Bit 2, desteği gösterir DID için. HCE cihazları DID'yi destekleyebilir veya desteklemeyebilir. Bit 1, şunun desteklendiğini gösterir: NAD. HCE cihazları, NAD'yi desteklememeli ve bit 1'i sıfır olarak ayarlamalıdır.
- Geçmiş baytlar: HCE cihazları, 15 geçmiş bayta kadar döndürebilir. NFC HCE hizmetleriyle etkileşime geçmek isteyen okuyucuların bu konuda hiçbir geçmiş baytların içeriği veya bunların varlığı.
Birçok HCE cihazının büyük olasılıkla protokol gereksinimleriyle uyumlu hale getirildiğini unutmayın. EMVCo'da birleşmiş ödeme ağlarının "Temassız" bölümünde belirttiği İletişim Protokolü" bakın. Özellikle:
- T0'daki FSCI, 2 saat ile 8 saat arasında olmalıdır.
- T(A)1, 0x80 olarak ayarlanmalıdır. Bu, yalnızca 106 kbit/sn bit hızının olduğunu gösterir desteklenir ve okuyucu ile emülatör arasındaki asimetrik bit hızları desteklenir.
- T(B)1 için FWI <= 7 saat olmalıdır.
APDU veri alışverişi
Daha önce belirtildiği gibi, HCE uygulamaları yalnızca tek bir mantıksal kanalı destekler. Uygulamaları farklı mantıksal kanallardan seçmeye çalışmak HCE cihazı olabilir.