Ana makineye dayalı kart emülasyonuna genel bakış

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:


Bir güvenli öğeden bilgi almak için NFC denetleyiciden geçen NFC okuyucunun gösterildiği şema Ş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:


CPU'dan bilgi almak için NFC denetleyiciden geçen NFC okuyucunun gösterildiği şema Şekil 2. Güvenlik unsuru içermeyen NFC kart emülasyonu.

Desteklenen NFC kartları ve protokoller


HCE protokol yığınını gösteren şema Ş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:

ziyaret edin.

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:

  1. 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.

  2. 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.

  3. android:exported özelliğini true olarak ayarlayın ve Hizmet beyanınızda android.permission.BIND_NFC_SERVICE izni. İlki, hizmetin harici uygulamalara bağlı olmasını sağlar. İkinci yapılandırma ise yalnızca android.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) veya CATEGORY_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:


Hem güvenlik unsuruyla hem de CPU ile iletişim kuran NFC okuyuculu şema Ş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.