ImageVerifierCode 换一换
格式:DOC , 页数:10 ,大小:33.79KB ,
资源ID:6529862      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/6529862.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(EMV Applet设计文档.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

EMV Applet设计文档.doc

1、EMV Applet系统设计说明 1.概述 本Applet是根据《EMV Integrated Circuit Card Specifications for Payment Systems v4.3》及《Visa Integrated Circuit Card Specification》系列国际规范,基于NXP的JCOP平台,开发的用于金融交易的软件产品。 本Applet运行的平台要求:支持JAVA CARD 2.2.1及以上版本、Global Platform v2.1.1及以上版本的JAVA 虚拟机。 个人化按照规范《EMV Card Personalization S

2、pecification v1.1》,采用《Global Platform Card Specification v2.1.1》规范中定义的Store data命令,使用DGI作为数据分组标识。能够达到快速发卡,可二次发卡的功能。 2.包(Package) 本Applet包的设计可以有两种方式供选择: 1. 单package设计:即所有类都在一个包中,优点是整个工程结构简单,程序运行时减少包与包之间变量传递等,减低效率损耗,缺点是文件系统部分没有单独做一个package,不能以

3、后直接拿出来给其它applet使用; 2. 双package设计:即文件系统单独做一个包,功能部分做另一个包,其优缺点跟单package是对应的,即可能会使结构复杂,增加效率损耗,优点是文件系统如果设计的比较全面,可以在以后其它applet中拿来直接使用。 在本Applet中,倾向于选择第一种,单package设计,因为以后的applet对文件系统的需求并不确定,目前设计文件系统不一定完全满足需求,或者不需要这么大的系统,反而生成的cap文件占用了较大的卡片空间。 以下对采用单Package设计包含的类结构进行大致描述: com.bhz.emv API Co

4、mmon EMVApplet RecordFile 图1 类结构图 以下将对各个类分别进行描述。 3.EMVApplet类 本类的声明如下: public class EMVApplet extends Applet implements Application,AppletEvent 本类是本软件中最重要的类。在本类中,要完成所有EEPROM空间的申请,包括文件创建和密钥体创建等;要对个人化写入的数据进行处理,分别写入对应的记录文件、数据对象或密钥对象中;此外,更重要的是,本类还要实现所有APDU命令的处

5、理。 3.1EMVApplet构造方法 EMVApplet构造方法定义本类中需要用到的全局变量,创建其它类的实例,创建所有文件和密钥、PIN都在此方法中完成。其中密钥方面,对称密钥(3DES密钥)可以直接使用buildkey进行创建,RSA密钥位数在Common类中已经进行配置,直接创建对象;此外,PIN值、长度、最大重试次数也已经在Common中定义了常量。 记录文件的创建也在此方法中完成,举例: RecordFile[] EF; EF[0] = new RecordFile((short)0x01,(short)800,(byte)UNDER_PSE); EF[1] = new

6、 RecordFile((short)0x02,(short)500,(byte)UNDER_ADF); 密钥对象的创建举例: RSA_PriK_Crt =(RSAPrivateCrtKey)KeyBuilder.buildKey( KeyBuilder.TYPE_RSA_CRT_PRIVATE, Common.RSA_KEY_LENGTH, false); 为了提高交易效率,以下个人化阶段写入的变量在本类中定义初始值: TAG 变量定义 9F36 Public byte[] ATC 9F13 Public byte[] LAST_ONLINE_ATC 9F27

7、Public byte CID 9F10 Public byte[] ISS_APP_DATA 表1 EMVApplet中定义的交易数据对象 3.2Process和ProcessData方法 Process方法是所有APDU的命令入口,进入各条命令处理之前,应用需要做一些卡片生命周期判断。 ProcessData主要是处理个人化阶段STORE DATA命令传递进来的数据,我们需要做的是接收数据,获取DGI标识,分别写入对应的记录或其它预先定义的变量中。对于RSA私钥和DES密钥,需要密文传入,卡内要知道此用于密钥解密的密钥,写入对象前解密。DGI与对象的对应表如下: DGI 名

8、称 类型 用途 0B01 PSE下DIR文件 记录,只有一条记录的记录文件中 写入DIR信息 0101 EF[0]第一条记录 记录 写交易数据,通过readrecord返回给终端 0102 EF[0]第二条记录 记录 写交易数据,通过readrecord返回给终端 0103 EF[0]第三条记录 记录 写交易数据,通过readrecord返回给终端 0201 EF[1]第一条记录 记录 写交易数据,通过readrecord返回给终端 0202 EF[1]第二条记录 记录 写交易数据,通过readrecord返回给终端 0203 EF[1]

9、第三条记录 记录 写交易数据,通过readrecord返回给终端 0204 EF[1]第四条记录 记录 写交易数据,通过readrecord返回给终端 0205 EF[1]第五条记录 记录 写交易数据,通过readrecord返回给终端 0206 EF[1]第六条记录 记录 写交易数据,通过readrecord返回给终端 0301 EF[2]第一条记录 记录 写交易数据,通过readrecord返回给终端 0302 EF[2]第二条记录 记录 写交易数据,通过readrecord返回给终端 0401 EF[3]第一条记录 记录 写交易数据,通

10、过readrecord返回给终端 0501 EF[4]第一条记录 记录 写交易数据,通过readrecord返回给终端 0502 EF[4]第二条记录 记录 写交易数据,通过readrecord返回给终端 8000 三条DES密钥密文 DES对象数据 解密后,分别写入三个密钥对象 9001 RSA私钥的P,密文 RSA私钥元素 解密后,写入RSA私钥对象 9002 RSA私钥的Q,密文 RSA私钥元素 解密后,写入RSA私钥对象 9003 RSA私钥的Dp,密文 RSA私钥元素 解密后,写入RSA私钥对象 9004 RSA私钥的Dq,密文

11、RSA私钥元素 解密后,写入RSA私钥对象 9005 RSA私钥的U,密文 RSA私钥元素 解密后,写入RSA私钥对象 表2 个人化数据分组标识 3.3所有命令的实现 本类中还包括一些命令实现,要实现的命令如下: 1、 SELECT命令(*编码规范中建议方法首字母小写,对process中处理命令的方法是否首字母大写以区分?) 声明:private void SelectFile(APDU apdu) 2、 READRECORD 声明:private void ReadRecord(APDU apdu) 3、 GETCHALLENGE 声明:private void

12、 GetChallenge(APDU apdu) 4、 VERIFY 声明:private void Verify(APDU apdu) 5、 GETDATA 声明:private void GetData(APDU apdu) 6、 APP_BLOCK 声明:private void AppBlock(APDU apdu) 7、 APP_UNBLOCK 声明:private void AppUnblock(APDU apdu) 8、 CARD_BLOCK 声明:private void CardBlock(APDU apdu) 9、 UPDATA_RECORD 声明:

13、private void UpdateRecord(APDU apdu) 10、GET_PROCESSING_OPTIONS 声明:private void GetProcessOption(APDU apdu) 11、GENERATE_AC 声明:private void GenerateAC(APDU apdu) 12、INTER_AUTH 声明:private void InterAuth(APDU apdu) 13、EXTER_AUTH 声明:private void ExterAuth(APDU apdu) 14、PIN CHANGE/UNBLOCK 声明:pri

14、vate void PinChangeUnblock(APDU apdu) 15、PUT_DATA 声明:private void PutData(APDU apdu) 对本命令,有以下两种情况: CLA值 命令描述 04 按照Visa规范处理。 80 用于个人化的私有命令,非个人化阶段,此命令无效。主要用于更新表1和表5定义的所有交易数据对象,其中P1,P2代表要修改的对象TAG,若TAG为1字节,则P1为00,P2为TAG值;若TAG为2字节,P1代表TAG第一字节,P2代表TAG第二字节。数据域为要修改的新值,不需要带MAC。由于此命令属于应用实现的私有命令,应该在第7

15、章的个人化流程结束后,进入应用后,执行此命令修改数据对象。 3.4其它主要方法 本小节描述本类中主要实现的方法,见下表: 主要方法 描述 protected EMVApplet(byte[] bArray, short bOffset, byte bLength) 构造方法 public void GAC1(APDU apdu) 第一条GAC命令的实现 Public void GAC2(APDU apdu) 第二条GAC命令的实现 private void buildReturnData(APDU apdu,byte[] inbuffer,short ModulusLen

16、) GAC命令返回响应数据的组织 表3 EMVApplet的主要方法 4.RecordFile类 本Applet出于高效的考虑,不创建文件系统,在使用选择命令选择PSE和ADF时,给出正确的响应即可。但记录文件类型的EF实体作为主要的数据载体还是要创建的。本类是记录文件的实现,其成员定义如下: 公有属性: short sfi,size;文件的SFI和大小; byte data[];记录内容; byte tag;在哪个ADF下标志,主要是处理不同DF下具有相同SFI的情况 构造方法如下: RecordFile(short SFI,short LEN,byte tag)

17、 { This.sfi = SFI; This.size = LEN; This.tag = 0;//编码时使用static final 常量定义在ADF下还是PSE下。 Data = new byte[LEN]; } 在RecordFile类中,各条记录长度不等,都按照LV的格式依次排列,物理结构上相当于二进制文件,Record长度统一使用1字节表示。举例: Record1长度 Record1值 Record2长度 Record1值 …… 其它主要方法: Public void updateRecord(short recnumer,byte[] buf,sh

18、ort offset,short recordlen) Public short readRecord(short recnumber,byte[] buf,short offset) 本类为每个记录文件分配一整段空间,在记录文件第一次执行updateRecord写记录内容时,将按照上表的方式,依次写入各条记录的长度和内容,如果某条记录已经被写入了内容,再次执行updateRecord,必须写入与原记录长度相等的数据,否则不允许写入。 5.API类 本类实现所有需要进行加密、签名、计算过程密钥的方法,除此外,还实现很多功能性方法,与类成员无关

19、可被静态调用的方法,譬如判断某字节某位是否为1的方法等,数量很多,这里不一一描述。 主要方法如下: 主要方法 描述 public generateSessionKey(DESKey mk) 根据输入的密钥生成过程密钥 public calculateMAC(byte[] inBuff,short inOffset,short inLength) 计算MAC public short rsaSignature(byte[] inBuff,short inOffset,short inLength,byte[] outBuff,short outOffset) 计算RSA签名

20、 public short des(DESKey key,byte[] inbuf,short,inoff,byte[] outbuf,short outoff,boolean tag) DES加密和解密 public boolean isBitTrue(byte bByte, byte bitnumber ) 判断某字节某位是否为1 表4 Algorithm的主要方法 6.Common类 本类定义了常用的变量,其它类使用静态调用的方法调用本类成员和方法。同时,本类还起到配置文件的作用,

21、当有定制需求时,一些配置项可以在本类定义的静态常量进行设置。主要定义内容举例如下: public static final byte[] PSE = { byte)0x31,(byte)0x50,(byte)0x41,(byte)0x59, (byte)0x2E,(byte)0x53,(byte)0x59,(byte)0x53, (byte)0x2E,(byte)0x44,(byte)0x44,(byte)0x46, (byte)0x30,(byte)0x31}; public static final byte[] ADF = { (byte)0xA0,(byte)0x00,(byt

22、e)0x00,(byte)0x03, (byte)0x33,(byte)0x10, (byte)0x10}; public static final short RSA_KEY_LENGTH = (short)1024; public static final short PIN_LENGTH = (short)3; public static final short PIN_TRY_TIMES = (short)3; public static final byte[] PIN = {(byte)0x24,(byte)0x12,(byte)0x34}; 为了方便代码搜索,状态码需要

23、自定义的也在本类中进行定义,举例如下: Public static final short WRONG_6F01 = (short)0x6F01; 直接对数据对象的访问能大大提高交易速度,因此,针对某一种发卡模板,在代码中直接定义下列数据对象的值,如果改为其它模板的发卡,使用私有命令PUT_TRANSDATA修改即可。定义举例如下: public byte[] AIP ={(byte)0x7C,(byte)0x00}; public byte[] AFL= {(byte}0x08,(byte)0x01,(byte)0x03,(byte)0x00,(byte)0x10,(byte)0x

24、01,(byte)0x03,(byte)0x01); 本表格总结所有需要在本类中定义的交易数据对象: TAG 对象声明 9F55 Public static byte GEO_INDICATOR 82 Public static byte[] AIP 94 Public static byte[] AFL 87 Public static byte APP_PRIORITY_INDICATOR 9F08 Public static byte[] APP_VERSION_NUM 9F56 Public static byte ISS_AUTH_INDICATOR

25、 8C Public static byte[] CDOL1 8D Public static byte[] CDOL2 9F0D Public static byte[] ISS_ACTION_CODE_DEFAULT 9F0E Public static byte[] ISS_ACTION_CODE_DENIAL 9F0F Public static byte[] ISS_ACTION_CODE_ONLINE 5F28 Public static byte[] ISS_COUNTRY_CODE 5F2D Public static byte[] LANGUAGE

26、PREFRENCE 9F51 Public static byte[] APP_CURRENCY_CODE 50 Public static byte[] APP_LABLE 9F07 Public static byte[] AUC 8E Public static byte[] CVM_LIST 9F49 Public static byte[] DDOL 9F52 Public static byte[] ADA 5F34 Public static byte PAN_SEQUENCE_NUMBER 5F30 Public static byte[] S

27、ERVICE_CODE 5F24 Public static byte[] APP_EFFECTIVE_DATE 5F25 Public static byte[] APP_EXPIRATION_DATE 9F14 Public static byte LOWER_CON_OFFLINE_LIMIT 9F23 Public static byte UPPER_CON_OFFLINE_LIMIT 表5 Common定义的数据交易对象 7.个人化数据处理 7.1卡片处理

28、本节主要介绍个人化过程中,数据传入后,Applet内部的处理流程,主要是以下两个步骤: 1、 在EMVApplet中先创建记录文件,每个文件被分配了一整块连续空间,详情见第4章。 在ProcessData中,接收STORE DATA命令传进来的命令,先辨别DGI,按照DGI第一个字节为SFI,第二字节为记录号的方式,调用RecordFile类中的updateRecord方法,示例代码如下: EF[0]. updateRecord((short)0x01, buf,(short)offset ,(short)recordlen ) 2、 除了要写入记录中的数据,还包括RSA私钥、DES密

29、钥、DF的FCI等数据,这些也需要预先在EMVApplet类构造函数中提前分配EEPROM空间,辨别到对应的DGI后,为各对象写值。 7.2个人化流程 整个个人化流程使用《Global Platform Card Specification v2.1.1》中定义的以下命令,不需要在应用中实现。直到Store Data最后一条,个人化结束,进入应用。 1、 Select Card Manager 本命令是选择卡片管理器命令,卡片管理器作为卡片的管理枢纽,被规划为具备多重职责。选择成功后,即可为应用打开一些全局服务,APDU如下: 00A4040008A000000003000000 命令执行成功后,返回9000和响应数据 2、Initilize Update 3、External Authenticate 这两个命令先后执行,在安全通道初始化过程中,起到主机认证并决定后续命令安全级别的作用。 4、Install for personalization (GP v2.1.1及以上版本) 此命令数据域为某一个应用的AID,后续的STORE DATA命令将为此应用进行个人化。 5、Store Data命令 此命令用来向上一条命令中指定的应用传递个人化数据。 6、Put Data 应用私有个人化命令 修改指定数据对象。 10

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服