特别推荐:

支付网址导航

联行号查询系统

支付牌照查询

MCC查询

二清POS查询

首页 >> 支付数据 >> 内容
HCE技术实战分析,HCE安全技术实战!

时间:2015-3-17 1:26:21

google开始放出hce的支持后,掀起了巨大的反响。 摆脱了swp-sim对运营商的依赖,摆脱了ese对手机厂商的依赖,其对于产业生态的影响不言而喻。网上基于hce的前景和应用讨论的不亦乐乎,但技术层面的资料却乏善可陈。现我们就通过一个具体的实现来揭秘hce,同时给出一个技术层面的理解。

    首先,需要的环境:

        一个支持android 4.4.2 sdk的开发环境:可以是eclipse插件或者adt工具。可以到google的网站上去下载:http://developer.android.com/sdk/index.html 。 (此处攻略漫天飞,搞不定的同学自己搜)

        一个支持hce的测试手机:目前可以确定使用了nxp pn547作为clf的nfc手机已经打通了hce。市面上可见的目前有sony xperia z2 和 samsung galaxy s5。本次测试使用xperia z2。(clf芯片不包含在手机发布的资料里,最终确定z2的clf芯片还是依靠网上流出的拆机图)

        一份参考资料:http://developer.android.com/guide/topics/connectivity/nfc/hce.html 里面写的非常细致,我摘要一下:

        1. hce工作在iso 7816-4也就是iso-dep层面。(想模拟mifare标签的同学洗洗睡吧)

        2.命令的派发是基于系统接管selectbyname指令,以及hce服务注册到系统的aid来完成的。hce的派发高于se,不支持logic channel,也不支持gp的aid部分匹配。

        3.hce以android服务的方式启动,通过接口函数响应apdu。可以配置多个aid(aid group),可以配置类型--支付类或者其它类,该类型用于aid冲突时系统的策略。支付类是通过设置默认应用,而其它类则是ui弹出选择提示。

        4.屏幕关闭的状态下hce不可用,屏幕锁定状态下hce可以选择支持,也可以选择提示用户解锁再支持。

        5.在终端只有hce没有se的情况下,iso 14443-3的非接参数由android接管,uid使用随机数,请勿使用hce实现任何基于uid的id卡。

        6.open mobile api并不能向访问se一样访问hce。

    然后,我们开始编码了,首先实现service:

  1. package com.broadthinking.hcedemo;  
  2.   
  3. import android.nfc.cardemulation.hostapduservice;  
  4. import android.os.bundle;  
  5. import android.util.log;  
  6.   
  7. public class myhostapduservice extends hostapduservice {  
  8.   
  9.     private int messagecounter = 0;  
  10.   
  11.     @override  
  12.     public byte[] processcommandapdu(byte[] apdu, bundle extras) {  
  13.         if (selectaidapdu(apdu)) {  
  14.             log.i("hcedemo""application selected");  
  15.             return getwelcomemessage();  
  16.         }  
  17.         else {  
  18.             log.i("hcedemo""received: " + new string(apdu));  
  19.             return getnextmessage();  
  20.         }  
  21.     }  
  22.   
  23.     private byte[] getwelcomemessage() {  
  24.         return "hello desktop!".getbytes();  
  25.     }  
  26.   
  27.     private byte[] getnextmessage() {  
  28.         return ("message from android: " + messagecounter++).getbytes();  
  29.     }  
  30.   
  31.     private boolean selectaidapdu(byte[] apdu) {  
  32.         return apdu.length >= 2 && apdu[0] == (byte)0 && apdu[1] == (byte)0xa4;  
  33.     }  
  34.   
  35.     @override  
  36.     public void ondeactivated(int reason) {  
  37.         log.i("hcedemo""deactivated: " + reason);  
  38.     }  
  39. }  

其中:processcommandapdu用以重载传入接收到的capdu,函数返回值作为rapdu。但此接口的调用使用程序主栈,如果处理时间较长(比如基于云的处理),则需要启动处理线程,并返回null,并在处理线程结束后主动调用sendresponseapdu来发送rapdu。

>>信用卡积分查询

>>POS错误码查询

>>支付监管机构列表

>>POS代理商查询

>>POS代理商QQ群

>>批发市场白名单

>>全国企业信用查询

>>银行卡BIN查询

>>征信查询

>>POS裸机批发

>>招聘网站列表

>>POS交易通道

>>POS代理商推荐

>>POS流量卡批发

分享到:微信QQ好友QQ空间新浪微博腾讯微博人人网百度贴吧百度新首页一键分享复制网址
  • 上一篇:HCE如何改变银行卡以及POS市场?
  • 下一篇:贵州省POS机达118277台,去年新增3.5万台POS
  • 返回顶部
    0.38秒到带积分,高分润秒结!
    立即联系