iPhoneからキヌチェヌンにバンクカヌドをロヌドする方法



毎幎、たすたす倚くの䌁業がInternet of ThingsIoTに関連するプロゞェクトに関心を瀺しおいたす。 



この蚘事では、私たちが䜜成したIoTプラットフォヌム、銀行カヌドをりェアラブルデバむスにロヌドする方法、Core NFC iOSフレヌムワヌクの機胜、およびNFCを搭茉したスマヌトフォンを䜿甚した䞍正スキヌムの可胜性に぀いお説明したす。



この蚘事は、補品マネヌゞャヌ、技術者、iOS開発者、モバむル決枈に埓事するQA゚ンゞニア、および芖野を広げるためのfintechテクノロゞヌに関心のある人に圹立ちたす。



こんにちは、Habr



私の名前はマキシムです。私は2005幎から産業開発を行っおいたす。私は2013幎からWalletで働いおおり、2015幎からは、郚門の責任者ずしお䌚瀟のビゞネスが新しいfintechサヌビスを開発するのを支揎しおいたす。



Walletでは、私たちのチヌムが倚くの革新的な補品を発売したした。これは、非接觊支払いの可胜性を備えた䞖界初の完党仮想銀行カヌドの1぀でありロシアでのApple Payの発売の1幎前、Apple Cardの発売のずっず前、スマヌトフォンで最初のトランスポヌトカヌド、最初のファンカヌド、最初のキャンパスカヌドです。 ..。



昚幎、Mastercardず共同でWalletPayサヌビスを開始したしたアナログずは異なり、スマヌトフォンのメヌカヌやオペレヌティングシステムに関係なく機胜する䞖界で唯䞀のサヌビスです。たずえば、Pay Walletは、GoogleサヌビスがないHuaweiスマヌトフォンで動䜜したす。



謝蟞



蚘事を曞く動機を䞎え、出版の準備を手䌝っおくれたKolyaAshanin。



私の監督䞋で、蚘事に蚘茉されおいる調査を実斜したSashaPryimak。



たた、

Katya Turkina、Anton Davydov、Lesha Ershov、DashaAlekseenkoの参加ずサポヌトに感謝したす。



IoTプラットフォヌム



珟圚、私のチヌムず私は、Payサヌビスを䜿甚する既存の゚クスペリ゚ンスを補完および拡匵し、私たちが通垞持ち歩くもの、いわゆるりェアラブルデバむスに支払いおよびその他の識別サヌビスを実装できるInternet ofThingsプラットフォヌムの立ち䞊げに取り組んでいたす。 



Internet of Thingsは、倖郚環境たたは盞互に察話するためのテクノロゞヌを備えた、身近な物理オブゞェクトの抂念です。 



この抂念では、物事の䜿い慣れたナヌスケヌスが自動化によっお再構築されたす。



りェアラブルデバむスの䟋ずしおは、スマヌトりォッチ、フィットネスブレスレット、リング、キヌフォブがありたす。



以前は矎しさや象城性のために指茪を着甚しおいた堎合、今ではモノのむンタヌネットの抂念では、指茪は支払い手段、アクセス制埡パスずしお機胜したす、他のスマヌトデバむスのリモヌトコントロヌルなど。このように、身近なものに新しい䟿利なナヌスケヌスが登堎したす。



スマヌトなものは今や䞖界的なトレンドです。これは、さたざたな䞖界の機関によっお収集された統蚈デヌタによっお蚌明されおいたす蚘事の最埌にあるリンクを参照しおください。 



この蚘事では、IoTプラットフォヌムの開発における調査の䟋を䜿甚しお、Walletアプリケヌションのfintechの方向性がどのタスクで機胜するか、どのような問題に盎面するか、カヌド業界の実瞟のあるテクノロゞヌを䜿甚しお新補品を䜜成する方法に぀いお説明したす。



たず、プラットフォヌムの基盀ずなるテクノロゞヌに぀いお簡単に説明したす。これらのテクノロゞヌに぀いお詳しく知りたい堎合は、蚘事の最埌にリンクがありたす。 



  1. , Secure Element — , 5-20 . , -, , - , . , SIM-, . ( ).



    , — . , .
  2. GlobalPlatform Card Specification — , .
  3. TSM  (Trusted Service Manager) — . .
  4. EMV — ( ), . , - , , .


プラットフォヌムに配眮した、スマヌトフォンずデバむス自䜓の盞互䜜甚の䞻なシナリオは次のずおりですすべおのシナリオで、ナヌザヌはスマヌトフォンのモバむルアプリケヌションのむンタヌフェむスを介しおりェアラブルデバむスを制埡したす。 



最初のシナリオは、アクティブなりェアラブルデバむスずの盞互䜜甚です。りェアラブルデバむスは、独自のバッテリヌバッテリヌなどを備えたアクティブデバむスず呌ばれたす。原則ずしお、モノには独自のオペレヌティングシステムがあり、スマヌトフォンず通信するためのBLEモゞュヌルがありたす。デバむスの補造元は、セキュリティ芁玠ず察話するためのSDKずアクセスキヌを提䟛しおいたす。 



これが、非接觊支払い機胜を備えたすべおのスマヌトりォッチずフィットネスブレスレットの仕組みです。すべおがシンプルで明確です。私たちはそれを取り入れお実行したす。 



2番目のシナリオはもっず興味深いですパッシブりェアラブルデバむスずの盞互䜜甚です。りェアラブルデバむスは、独自のバッテリヌを持たないパッシブデバむスず呌ばれたす。これらのデバむスは、配眮する必芁のある倖郚磁堎から電力を䟛絊されたす。これは、非接觊端末リヌダヌの電磁界たたはスマヌトフォンのNFCアンテナである可胜性がありたす。したがっお、非接觊バンクカヌドは安党にパッシブりェアラブルデバむスず呌ぶこずができたす。 



問題は、スマヌトフォンのアプリケヌションからパッシブりェアラブルデバむスにバンクカヌドをロヌドする必芁があるこずです。



スマヌトフォンの皮類に応じお、条件付きでこのシナリオを砎りたす。



  1. NFCのないスマヌトフォン
  2. NFCを搭茉したAndroidスマヌトフォン
  3. NFCを搭茉したiPhone


最初のタむプでは、特別なパヌ゜ナラむズ端末にある倖郚リヌダヌを䜿甚したす。぀たり、パヌ゜ナラむズ端末ずスマヌトフォンのモバむルアプリケヌションは、䞡方のクラむアントを同期する同じバック゚ンドに接続されおいたす。トヌクンはパヌ゜ナラむズ端末を介しおロヌドされ、ナヌザヌはモバむルアプリケヌションむンタヌフェむスに結果を衚瀺したす。



パヌ゜ナラむズ端末の実装は異なる堎合がありたす。BLEたたはUSBを介しお倖郚スマヌトカヌドリヌダヌに接続された同じナヌザヌのスマヌトフォン、たたは自埋型倖郚デバむスリヌダヌが接続された本栌的なコンピュヌタヌ、むンタヌネットアクセスおよび制埡゜フトりェアの堎合がありたす。 ..。



2番目のタむプAndroidずNFCの堎合、実装は明確です。この堎合、スマヌトフォンを端末ずしお䜿甚し、NFCアンテナからパッシブデバむスに電力を䟛絊し、バンクカヌドトヌクンをロヌドするこずができたす。



私たちの研究では、3番目のタむプのスマヌトフォンNFCを搭茉したiPhoneでどのように䜜業したかに぀いお詳しく説明したす。りェアラブルデバむスずしお、パむロットを開始するパヌトナヌであるISBCのキヌフォブを䜿甚したした。



研究の目的



iOS Wallet ナヌザヌが自分のバンクカヌドをiPhoneに接続しお、りェアラブルデバむスにロヌドできるようにするこずはできたすか



぀たり



  1. アプリケヌション「Wallet」のナヌザヌが自分の銀行カヌドのデヌタを入力したす
  2. ナヌザヌはりェアラブルデバむスをiPhoneの背面に立おかけたす
  3. バンクカヌドがりェアラブルデバむスにロヌドされたす


したがっお、技術的なタスクは、ISO / IEC 7816プロトコルT = CLを介しお、通垞のiPhoneずそのNFCアンテナを䜿甚しお倖郚セキュリティ芁玠Secure Elementにバンクカヌドをロヌドできるかどうかを刀断するこずです。  远加のタスク







  1. リヌダヌからチップを取り倖さずにチップのATRAnswer To Resetを取埗したす
  2. チップのUID䞀意の識別子を取埗したす


このデヌタは、サヌビスプロバむダヌのシステムでチップを識別し、チップアプリケヌションの機密デヌタからキヌを倚様化するためによく䜿甚されるため、圹立ちたす。



私たちが持っおいるもの



  • iOS13.5を搭茉したiPhone8
  • りェアラブルデバむスのテスト-統合されたJCOP3 EMV P60チップずNXPからロヌドされたアプリレットを備えたISBCキヌフォブ PPSEおよびM /チップアドバンスを実装するアップルト-カヌド仕様支払いおよびデヌタストレヌゞv1.1;

  • 発行者セキュリティドメむンチップからのキヌ。


決定



最初に、メむンタスクを分解したす。぀たり、完党に通垞のキヌチェヌンほがを本栌的な支払い手段に倉えるために必芁な手順を決定したす。



  1. チップずiPhoneのNFCモゞュヌル間の接続を確立する
  2. Mastercard M / ChipAdvanceおよびPPSEアプリレットのチップぞのむンストヌル
  3. アプリレットのパヌ゜ナラむズ 


接続の確立



ここでは、iOS13で远加されたCoreNFCフレヌムワヌクの機胜に぀いお説明したす。

ちなみに、iOS 14では、蚘事の䞻題に関しお倧きな倉曎は行われおいないため、説明されおいるすべおが圌女に関連しおいたす。



そのため、Apple OSの13番目のバヌゞョンでは、iOS 12の堎合のようにNFCタグからデヌタを読み取るだけでなく以前はiOS 11より前ではなく、NFCを介した察話はApple Pay内でのみ可胜でした、それらを曞き蟌むこずも可胜になりたした。たた、APDUコマンド蚀語で、次のいずれかの芏栌に準拠するチップず通信したす。





この目的のために、2぀の新しいクラスNFCNDEFReaderSessionずNFCTagReaderSessionがコアNFCに远加されたした。 1぀目はNDEFタグずの察話に䜿甚され、2぀目は他のすべおにそれぞれ䜿甚されたす。 私たちの堎合、これはGlobalPlatformカヌド仕様2.2.1ずISO / IEC 7816暙準をサポヌトするチップです。぀たり、2番目のクラスを䜿甚したす。ドキュメントはあなたがISO 7816に埓ったチップずの通信を開始するもちろん、コヌドを曞く以倖に䜕をする必芁があるかず蚀いたす















  • アプリのinfo.plistファむルのNFCReaderUsageDescriptionキヌに空でない文字列を指定したす。
  • アプリでサポヌトされおいるアプリケヌション識別子のリストを

    com.apple.developer.nfc.readersession.iso7816.select-identifiers情報プロパティリストキヌに远加したす。


しかし、以䞋にはそのような興味深い制限があり たす。それが正確に䜕を意味するのかを孊び、それを「感じ」たいだけです。info.plistファむルのNFCReaderUsageDescription キヌに「AllowNFCconnection」などの行を远加したす。たた、このキヌの他の倀でも機胜したす。 



Important

Core NFC doesn't support payment-related Application IDs.













[ここで、巊偎の列では、キヌ自䜓ではなく、その説明で、XCodeは正匏な名前を非衚瀺にしたす]



次に、ISO / IEC 7816デバむスのようにチップず察話する堎合は、com.apple.developer.nfc.readersessionキヌの倀で。 iso7816.select-identifiers ã¯ã€ã‚¢ãƒ—リケヌションが察話するすべおのappletApplication IdentifierたたはAIDのIDのリストを指定したす。                          





ここで、これらの識別子は単なるランダムな文字のセットではないこずを明確にする䟡倀がありたす。

これらは、割り圓おられおいるアプリケヌションに関する情報を含む16進文字列です。



AIDの長さは5〜16バむトです1行あたり2文字= 1バむト。これらは2぀の郚分で構成され、1぀目はアプリケヌションプロバむダヌを識別しMastercardの堎合は「A000000004」、2぀目はこのプロバむダヌがどのような補品であるかを瀺したすMastercardずいう名前の補品の堎合は「1010」、たずえばMaestroの堎合は「3060」です。 "。 



さらに、たずえば、チップ䞊に同じプロバむダヌからの2぀の同䞀のアプリケヌションがあり、バンクが異なる堎合など、AIDに远加情報を入力する必芁がある堎合がありたす。このために、Long AIDたたはExtended AIDがサポヌトされおいたす。AIDの長さが16バむトを超えない限り、䜕でも曞き蟌むこずができたす。たずえば、Mastercard AIDを取埗し、最埌に「TEST」を远加するず、結果は「A0000000041010BB5445535401」になりたす。



リストにない唯䞀のAIDは「325041592E5359532E444446303101」です。

実際、これは通垞の16進圢匏のみ、プレヌンテキストの文字列「2PAY.SYS.DDF01」です。これはAIDPPSEであり、それ自䜓は支払いアップルではありたせん。支払いアプリケヌションに必芁な環境デヌタのみが含たれおいたす。



アプリレットのむンストヌル



チップにアプリレットをむンストヌルするには、安党な接続Secure Channel ProtocolたたはSCPが必芁です。埓来のPC / SCリヌダヌずCardsmobileTSMプラットフォヌムを䜿甚しお舞台裏でそれを行いたした。



ただし、これらのいずれも持っおいない堎合でも、独自のアップルトをチップにむンストヌルしおみるこずができたす。仮想のものだけです。



JCOPシェルをサポヌトするIDEずJavaCard゚ミュレヌタヌが必芁になりたす䟋これ。



空のプロゞェクトを䜜成し、目的のAIDたずえば、0000000000を指定しお実行したす。



次に、手順を理解したす。



  1. / card

    ATRを取埗し、IDなしでSELECTを送信しお、CardManagerが遞択されるようにしたす。





  2. auth

    , ;



  3. ls ()

    , /;





  4. install [packageAID] [appletAID] [instanceAID]

    :



    packageAID — (Module), , «0000000000»

    appletAID — (Load File), , «000000000000»

    instanceAID — , , , «A0000000041010»;





  5. ls

    , :







実際、リンゎのパヌ゜ナラむズは非垞に簡単です。必芁なのは、必芁な支払いデヌタをロヌドするこずだけです。これを行うには、AIDでSELECTコマンドを䜿甚しおアップルトを遞択し、安党な接続を確立しお、遞択したアップルトにデヌタを含むSTOREDATAコマンドを送信する必芁がありたす。



ここで、info.plistファむル内のAIDのリストに戻りたしょう-なぜそれが必芁なのか、そしおCore NFCはどのアップルトず察話するかをどのように正確に遞択するのですか



次のようになりたす。



  1. プログラムはリストを䞊から䞋に移動したす。
  2. AIDごずに、SELECTコマンドを生成しお送信したす。
  3. 「9000」ず応答した最初のアップルトのAID成功した応答のステヌタス。これはすべおの可胜な応答のリストですは、怜出されたチップの配列に入れられるNFCISO7816TagタむプのオブゞェクトのinitialSelectedAIDフィヌルドに蚘録されたす。


@available(iOS 13.0, *)

public protocol NFCISO7816Tag : NFCNDEFTag, __NFCTag {

   /**

    * @property initialSelectedAID The Hex string of the application identifier (DF name) selected by the reader when the tag is discovered.

    *                              This will match one of the entries in the «com.apple.developer.nfc.readersession.iso7816.select-identifiers»

    *                              in the Info.plist.

    */

   @available(iOS 13.0, *)

   var initialSelectedAID: String { get }


さらに、アレむからそのようなオブゞェクトを遞択し、sendCommandメ゜ッドを䜿甚しお、遞択したアップルトにAPDUコマンドを送信できたす。



次に、この制限に぀いお説明したす。

 

Core NFC doesn't support payment-related Application IDs.


぀たり、コアNFCは、支払いAID、぀たり支払い端末が機胜する戊闘AIDをサポヌトしおいたせん。



もちろん、支払いAIDをinfo.plistリストに远加するこずはできたすが、Core NFCはそれを無芖し、SELECTを送信したせんちなみに、䜿甚されおいるすべおのAIDのリストは次のずおりです。これは、AppleがApple Payテクノロゞヌを保護する方法であり、サヌドパヌティの開発者がiPhoneの支払い機胜およびそれに関連するすべおのものにアクセスするのを防ぎたす。



回避策



最初に頭に浮かぶのは、支払いアップルのAIDではなくAIDカヌドマネヌゞャヌカヌドマネヌゞャヌは、カヌドを管理するチップのオペレヌティングシステム内のサヌビスのグルヌプであり、管理ずセキュリティを担圓したすをinfo.plistに远加できるかどうかです。次に、目的のアップルトのAIDを指定しおSELECTコマンドを手動で送信したすか



ここで最初の萜ずし穎に遭遇したした-コアNFCは、info.plistに登録されおいないAIDを含むSELECTコマンドの送信を蚱可しおいたせん。



さお、A0000000041010を远加したしたが、これも倱敗です。コアNFCは、info.plistにあるかどうかに関係なく、支払いAIDを含むSELECTコマンドの送信を蚱可したせん。



ID制限がどのように機胜するかを芋おみたしょう。



info.plistでは、次のAIDを指定しおいたす。



1. A000000001510000                        	- GlobalPlatform Card Manager AID
2. 325041592E5359532E444446303101      - Proximity Payment System Environment (PPSE) 
3. A0000000041010                             	- Mastercard Credit/Debit (Global)
4. A00000000401                                 	- Mastercard PayPass
5. A00000000410101213                    	- Mastercard Credit
6. A00000000410101215                    	- Mastercard Credit
7. A00000000410101214                    	-   AID                 
8. A00000000410101216                    	-   AID 
9. A0000000041010121F                    	-   AID 
10. A0000000041010BB5445535401 	        -   Long AID
11. A0000000041010BB5445535405 	        -   Long AID
12. A000000004101FBB5445535401 	        -    AID                
13. A000000004101F1213                    	-    AID                 
14. A00000000F1010                             	-    AID
15. A0000000040F                                     -    AID


異なるAIDアむテム2〜11-支払いAIDを持぀14個の支払いアプリレットをむンストヌルし、これらのAIDのそれぞれでカヌドマネヌゞャヌのSELECTコマンドを送信しようずしたした。



番号12-15が答えたした。  



特定のAIDプレフィックスに制限が課されおおり、その存圚によっお、それが支払い識別子であるかどうかが決たりたす。



残念ですが、この方法は無効になりたした。GlobalPlatformが



提䟛する2番目のパヌ゜ナラむズオプションは、INSTALL [パヌ゜ナラむズ甚]コマンドです。





カヌドマネヌゞャヌに送信され、パヌ゜ナラむズする必芁のあるアップルトのAIDが含たれおいたす。



次に、STOREDATAコマンドをCardManagerに送信できたす。これにより、それらがタヌゲットアプリケヌションに転送されたす。



ただし、1぀の制限がありたす。アップルトがこの皮のパヌ゜ナラむズをサポヌトするには、org.globalplatform.Applicationむンタヌフェむスを実装する必芁がありたす。



カヌドマネヌゞャヌは、NXPからM / Chip Advanceアップルに割り圓おられたMastercard Credit / DebitGlobalAIDを䜿甚したINSTALL [for personalization]コマンドに察しお、゚ラヌ「6985」䜿甚条件が満たされおいないで応答したした。 これは、実装されおいるかどうかを確認する必芁があるこずを意味したす。それがアプリケヌションむンタヌフェむスであるかどうか。







これを行うために、このむンタヌフェむスを実装する単玔なダミヌアプリケヌションを䜜成したした。予想通り、INSTALL [パヌ゜ナラむズ甚]で「9000」ず答えたした。



しかし、アプリケヌションが実装されたむンタヌフェヌスからアプリケヌションが削陀されるず、M / Chip Advanceアップルレットの堎合ず同様に、このコマンド「6985」に応答し始めたした。



したがっお、問題は、NXPアプリケヌションがこのタむプのパヌ゜ナラむズに必芁なむンタヌフェむスを実装しおいないこずです。この方法もなくなりたす。



远加のタスク



  1. チップのUIDの取埗

    これは非垞に簡単な方法で実行できたす。NFC

    セッションの開始時に、モゞュヌルはチップを探したす。チップのAIDはinfo.plistに登録されおおり、それらを配列に远加したす。 その埌、そこからそれらのいずれかを取埗できたす。そのタむプがNFCISO7816Tagの堎合、チップのUIDを含む識別子フィヌルドがありたす。





    /**
      * @discussion The hardware UID of the tag.
    */
    var identifier: Data { get }


  2. 取埗ATRのチップを

    しかし、ず思われるコアNFCを受け取るこずができないATRを、このための独立したツヌルはフレヌムワヌクに存圚しないため、そしおあなたが埗るこずができないATRを䜿甚したAPDUコマンドを。


結論



䞀番䞋の行は䜕ですか



  1. ISO/IEC 7816 ( UID), Core NFC;
  2. , Apple ;
  3. , , iPhone, , Application — ;
  4. , AID — .


最初に提起された質問に答えお、りォレットナヌザヌに銀行カヌドをiPhoneに接続しおキヌフォブにロヌドする機䌚を䞎えるこずができたすかいいえ、これはただ可胜ではありたせん。



タスクの䞀環ずしお、倖郚BLEリヌダヌを䜿甚しお、iPhoneからパッシブりェアラブルデバむスにバンクカヌドトヌクンをロヌドするこずにしたした。



うたくいけば、将来的には、AppleはNFC Coreの機胜を拡匵しお、これず、サヌドパヌティアプリケヌションでのその他のトヌクン化および支払いタスクの範囲を実珟する予定です。しかし、最近のニュヌスは、これが近い将来に起こる可胜性が䜎いこずを瀺しおいたす。



研究の副䜜甚



䜜業の過皋で、Appleスマヌトフォンでは再珟できない朜圚的な詐欺スキヌムが生たれたしたが、NFCサポヌトずホストカヌド゚ミュレヌションテクノロゞヌを備えたAndroidスマヌトフォンを介しお実装するこずは可胜です。



結論は次のずおりです。 



  • 最初のスマヌトフォンは端末ずしお䜿甚されたす。぀たり、銀行カヌドに接続し、支払いアプリレットず察話したす。
  • 2番目のスマヌトフォン-支払い手段ずしおチェックアりト時には、スマヌトフォンでの通垞の支払いのように芋えたす。


このスキヌムを䜿甚するず、チェヌンバンクカヌド-スマヌトフォン-スマヌトフォン-支払い端末を䜜成できたす。



  1. 最初のスマヌトフォンはどの銀行カヌドにも接続されおいたす。
  2. 2番目は支払い端末に適甚されたす。
  3. 2番目のスマヌトフォンは、端末から最初のスマヌトフォンに送信されたAPDUコマンドを送信するこずにより、銀行カヌドを゚ミュレヌトしたす。
  4. 最初のスマヌトフォンはこれらのコマンドを接続された銀行カヌドに送信し、その応答を2番目のスマヌトフォンに送信したす。
  5. 2番目のスマヌトフォンは受信した応答を端末に送信したす。
  6. 支払いが完了したした。


぀たり、詐欺垫がスマヌトフォンをポケットに入れお賌入代金を支払う可胜性がありたす。泚意しおください



このような䞍正なスキヌムの犠牲になるこずを避けるために、たずえば、銀行カヌドをスマヌトフォンに転送し、プラスチックを携垯しないようにするこずができたす。



結論の代わりに



䞻題分野の甚語を深く掘り䞋げずに、簡単な蚀語で蚘事を曞こうずしたした。その䞭で、私たちが取り組んでいる革新的なプロゞェクトの1぀である䞻題分野ず、iOS CoreNFCフレヌムワヌクの新機胜に関する少しの研究に぀いお説明したした。



質問、レビュヌ、コメント、远加、建蚭的な批刀など、あらゆるフィヌドバックを歓迎したす。



䟿利なリンク



この蚘事で説明されおいるトピックに興味がある堎合は、以䞋に、より詳现な調査のためのいく぀かのリンクを瀺したす。



  1. I. M. Goldovsky「の著曞銀行マむクロプロセッサカヌド」

  2. コンセプトEMV支払いトヌクン化

  3. IoT垂堎の分析を含む蚘事 




All Articles