CN105530088A - 一种安全的java卡密钥存储方法 - Google Patents
一种安全的java卡密钥存储方法 Download PDFInfo
- Publication number
- CN105530088A CN105530088A CN201510555329.9A CN201510555329A CN105530088A CN 105530088 A CN105530088 A CN 105530088A CN 201510555329 A CN201510555329 A CN 201510555329A CN 105530088 A CN105530088 A CN 105530088A
- Authority
- CN
- China
- Prior art keywords
- key
- escape way
- enc
- dek
- card
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种安全的JAVA卡密钥存储方法,包括以下步骤:卡片初始化,写入发行方安全域的安全通道初始密钥,并创建安全通道初始密钥对象;使用加密的ENC密钥和MAC密钥设置安全通道初始密钥中的ENC密钥和MAC密钥;使用DEK密钥加密安全通道初始密钥中的DEK密钥;将PUT?KEY命令中加密后的安全通道密钥值存储在密钥对象中,并将公钥值存至公钥对象中。采用本发明所述的方法,提高密钥存储时的封装性和安全性,并节省密钥使用时的时间。
Description
技术领域
本发明涉及智能卡技术领域,尤其涉及一种安全的JAVA卡密钥存储方法。
背景技术
JAVA卡技术是通过对JAVA技术的裁剪,使采用JAVA语言编写的程序可以运行在智能卡或者是资源受限设备上的一种技术。目前,JAVA卡技术已经被广泛应用在金融、电信等行业,在JAVA卡上,往往承载着很多有关使用者的机密信息,所以人们也越来越关心JAVA卡本身的安全性。
在JAVA卡中,为了进行一些运算,往往需要保存一些密钥,密钥是JAVA卡中极为重要的敏感数据,必须要保证其存储的安全性。
GlobalPlatform是一个全球性的组织,它致力于提供一个通用的安全和卡片管理架构,目前市场上的JAVA卡绝大多数也是基于这一架构的,GlobalPlatform组织制定的一系列规范也逐步成为了智能卡行业公认的标准。
在GlobalPlatform的规范中,存在一个发行方安全域,负责对卡片的管理,同时提供安全、通信等需求的支持,发行方安全域是安装在卡片上的第一个应用,它直接继承了卡片的生命周期状态,在卡片进入OP_READY生命周期状态时,必须已经具备了发行方安全域,并且发行方安全域中必须已经具有了安全通道初始密钥。
在随后的卡片运行过程中,要想向发行方安全域中增加安全通道密钥,必须通过PUTKEY命令完成。
除发行方安全域以外的其他安全域如果想具有自己的安全通道密钥,也必须通过PUTKEY命令来完成。
如果其他安全域还需要具有一些与自身权限相关的密钥,也可以通过PUTKEY命令写入。
PUTKEY命令是GlobalPlatform的规范中定义的一个标准的命令,该命令可以用来:
1.添加新的密钥;
2.使用新密钥替换旧密钥。
当替换密钥时,新的密钥将与已经存在卡上密钥具有相同的格式,也就是说,不能改变已存在密钥所占空间的大小和加密算法。
当使用这个命令加载和替换对称密钥时,密钥的值将被加密,用于加密密钥值的密钥是当前安全通道会话中的S-DEK会话密钥。
当使用这个命令加载公钥时,公钥使用明文的方式表示。
在GlobalPlatform的规范中,未定义将密钥读出的命令,也就是说,在该规范中,密钥值是不允许被读出的,但是仅通过这种方式保证密钥值不被泄露显然是不够的,必须要从多方面保证密钥不被卡外的攻击者获取。
常见的密钥在卡内的存储方式可以是以数组方式存储,也可以是以密钥对象的方式存储,以数组的方式存储显然是最不安全的存储方式,如果采用这种方式存储,则卡片的安全性只能通过GlobalPlatform的规范中不允许读取密钥这一点来保证,但攻击者很有可能通过暴力破解或者逻辑攻击等方式得到密钥值。
采用密钥对象的方式存储,显然比数组方式更加安全,它将密钥值存放在密钥对象中,用户不能直接访问到密钥的实际值,在卡内密钥也是以密钥对象的形式传输的,提高了封装性,但是由于密钥值是通过PUTKEY的命令传到卡上的,并且命令中的密钥值是已经被加密过的,要将其存放到密钥对象中,只能先解密密钥值,再使用密钥值设置密钥对象的操作,在这些操作中,密钥值很有可能通过命令的数组被泄露。
发明内容
本发明实施例提供了一种安全的JAVA卡中密钥存储方法,用以提高密钥存储时的封装性和安全性,并节省密钥使用时的时间。
本发明提供了一种安全的JAVA卡中密钥存储方法,包括:
步骤一:在卡片初始化时,发行方安全域的安全通道初始密钥的密钥值通过初始化脚本写入卡内,其中发行方安全域的安全通道初始密钥中的ENC密钥和MAC密钥的密钥值是使用DEK密钥进行加密后的密文值,DEK密钥采用明文方式存储;
步骤二:创建发行方安全域的实例,同时创建发行方安全域的安全通道初始密钥对象:ENC密钥、MAC密钥和DEK密钥,将这三个密钥都创建为KeyEncryption接口类型;
步骤三:使用初始化脚本中写入卡内的ENC密钥和MAC密钥的密文值设置发行方安全域的安全通道初始密钥中的ENC密钥和MAC密钥,同时因为这两个密钥是KeyEncryption接口类型的,在设置密钥值之前,要先使用DEK密钥设置ENC密钥和MAC密钥的密钥加密对象(keyCipher),说明ENC密钥和MAC密钥是使用DEK(DataEncryptionKey)密钥进行加密的;
步骤四:将发行方安全域的安全通道初始密钥中的DEK密钥使用它本身进行加密,并存储在KeyEncryption接口类型的密钥对象中;
步骤五:在使用PUTKEY命令向卡片存储安全域的安全通道密钥时,密钥是使用当前安全通道的会话密钥S-DEK密钥被加密的,保持密钥的加密状态,直接将命令中的加密后的ENC密钥、MAC密钥和DEK密钥分别存储到三个KeyEncryption接口类型的密钥对象中;
步骤六:在使用PUTKEY命令向卡片存储公钥时,命令中的公钥是以明文方式存在的,直接将其存储到公钥对象中。
本发明实施例提供的JAVA卡中密钥存储的方法,可以保证无论是发行方安全域的安全通道初始密钥、发行方安全域的其他安全通道密钥还是其他安全域的安全通道密钥都是采用相同的方式存储的,可以保证在存储方式上的一致性,另外,在存储的过程中,不需要显式的对密钥值进行解密,减少了在解密过程中密钥被泄露的风险,对密钥值解密的操作由底层的加密库来完成,避免上层用户直接接触到密钥值。本实施例中还提供了对公钥的存储方式,这种方式可以提高卡片的执行效率。
附图说明
图1为本发明实施例的实施方案流程图;
具体实施方式
下面结合附图和实施例对本发明提供的JAVA卡密钥存储方法进行更详细地说明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中提供的JAVA卡密钥存储方法,如图1所示,该方法步骤包括:
S101、卡片初始化时写入发行方安全域的安全通道初始密钥;
S102、创建发行方安全域的安全通道初始密钥对象;
S103、使用加密的ENC密钥和MAC密钥设置发行方安全域的安全通道初始密钥中的ENC(Encryption)密钥和MAC(MessageAuthenticationCode)密钥;
S104、使用DEK密钥加密它本身来设置发行方安全域的安全通道初始密钥中的DEK密钥;
S105、将PUTKEY命令中的加密后的安全通道密钥直接存储在keyEncryption接口类型的密钥对象中;所述安全通过密钥为除发行方安全域的安全通道初始密钥以外的发行方安全域的其他安全通道密钥和其他安全域的安全通道密钥;
S106、将PUTKEY命令中的公钥值直接存放到公钥对象中。
具体地说,在步骤S101中,在卡片初始化时,使用初始化脚本将发行方安全域的安全通道初始密钥写入卡内,为了保证密钥传输过程中的安全性,发行方安全域的安全通道初始密钥中的ENC密钥和MAC密钥的密钥值采用密文的方式存储到卡内,用于加密ENC密钥和MAC密钥的密钥是DEK密钥,由于在安全通道的安全通信过程中,只会使用到ENC密钥和MAC密钥,所以保证了这两个密钥的安全性,就保证了安全通道的安全通信过程的安全性,DEK密钥采用明文方式存储到卡内;
在步骤S102中,创建发行方安全域的实例,在此过程中,创建发行方安全域的安全通道初始密钥,初始密钥包括三个:ENC密钥、MAC密钥和DEK密钥,为了保证这三个密钥的存储安全,将这三个密钥都存放在密钥对象中,在创建密钥对象存储这三个密钥时,需要将这三个密钥都创建为是KeyEncryption接口类型的,这样可以保证密钥在传输过程中是加密的,从而保证安全性:
在步骤S103中,由于发行方安全域的ENC密钥、MAC密钥和DEK密钥被创建为是KeyEncryption接口类型的,所以在设置密钥时,要首先设置用于加密ENC密钥和MAC密钥的密钥,ENC密钥和MAC密钥的密文值是通过使用DEK密钥对ENC密钥和MAC密钥进行加密得到的,使用DEK密钥来设置ENC密钥和MAC密钥这两个KeyEncryption接口类型密钥对象的keyCipher,保证密钥在底层存储时被正确的解密;
在步骤S104中,设置用于加密DEK密钥的密钥,通过使用DEK密钥对DEK密钥本身进行加密得到的密文值,使用DEK密钥来设置DEK密钥KeyEncryption接口类型密钥对象的keyCipher,保证密钥在底层存储时被正确的解密;
在步骤S105中,除发行方安全域的安全通道初始密钥以外的发行方安全域的其他安全通道密钥和其他安全域的安全通道密钥都是通过PUTKEY命令由卡外发送到卡上的,在发送过程中,命令中的安全通道初始密钥是使用当前安全通道的会话密钥S-DEK被加密的,在命令处理时,保持安全通道密钥的加密状态,直接将命令中的加密后的ENC密钥、MAC密钥和DEK密钥分别存储在三个密钥对象中,这三个密钥对象都是KeyEncryption接口类型的,使用当前安全通道的会话密钥S-DEK来设置这三个KeyEncryption接口类型密钥对象的keyCipher,保证密钥在底层存储时被正确的解密;
在步骤S106中,在使用PUTKEY命令向卡片存放非对称密钥中的公钥时,由于公钥是公开的,所以在命令中公钥是以明文的方式出现在命令中的,在卡内对其进行存储时,也不需要对其进行加密后再存储,将其直接存放到一个公钥对象中,这样在使用过程中,可以直接使用该公钥对象,不需要重复设置公钥对象的模数和指数,提高程序的执行效率。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明涉及的技术范围内,可以轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (6)
1.一种安全的JAVA卡密钥存储方法,其特征在于包括以下步骤:
卡片初始化,写入发行方安全域的安全通道初始密钥,并创建安全通道初始密钥对象;
使用加密的ENC密钥和MAC密钥设置安全通道初始密钥中的ENC密钥和MAC密钥;
使用DEK密钥加密安全通道初始密钥中的DEK密钥;
将PUTKEY命令中加密后的安全通道密钥值存储在密钥对象中,并将公钥值存至公钥对象中。
2.根据权利要求1所述的方法,其特征在于,所述卡片初始化,写入发行方安全域的安全通道初始密钥,包括:
使用初始化脚本将发行方安全域的安全通道初始密钥写入卡内,发行方安全域的安全通道初始密钥中的ENC密钥和MAC密钥的密钥值采用密文的方式存储到卡内,DEK密钥采用明文方式存储到卡内;其中,DEK密钥用于加密ENC密钥和MAC密钥。
3.根据权利要求2所述的方法,其特征在于,所述创建安全通道初始密钥对象包括:
创建发行方安全域的安全通道初始密钥,初始密钥包括三个:ENC密钥、MAC密钥和DEK密钥,创建安全通道初始密钥对象,保存这三个密钥。
4.根据权利要求4所述的方法,其特征在于,所述使用加密的ENC密钥和MAC密钥设置安全通道初始密钥中的ENC包括:
在设置密钥时,要首先设置用于加密ENC密钥和MAC密钥的密钥,ENC密钥和MAC密钥的密文值是通过使用DEK密钥对ENC密钥和MAC密钥进行加密得到的。
5.根据权利要求1至4任一所述的方法,其特征在于,所述将PUTKEY命令中加密后的安全通道密钥值存储在密钥对象中,包括:
PUTKEY命令中的安全通道初始密钥通过安全通道的会话密钥S-DEK被加密的,在PUTKEY命令处理时,保持安全通道密钥的加密状态,直接将PUTKEY命令中的加密后的ENC密钥、MAC密钥和DEK密钥分别存储在三个密钥对象中,使用安全通道的会话密钥S-DEK来设置这三个密钥对象的keyCipher。
6.根据权利要求5所述的方法,其特征在于,所述将公钥值存至公钥对象中,包括:
在使用PUTKEY命令向卡片存放非对称密钥中的公钥时,公钥以明文的方式出现在PUTKEY命令中,在卡内对其进行存储时,将其直接存放到一个公钥对象中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510555329.9A CN105530088A (zh) | 2015-09-01 | 2015-09-01 | 一种安全的java卡密钥存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510555329.9A CN105530088A (zh) | 2015-09-01 | 2015-09-01 | 一种安全的java卡密钥存储方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105530088A true CN105530088A (zh) | 2016-04-27 |
Family
ID=55772102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510555329.9A Pending CN105530088A (zh) | 2015-09-01 | 2015-09-01 | 一种安全的java卡密钥存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105530088A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406932A (zh) * | 2016-08-26 | 2017-02-15 | 北京中电华大电子设计有限责任公司 | 一种改进的Java卡初始化方法和Java卡 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010014157A1 (en) * | 2000-02-14 | 2001-08-16 | Kabushiki Kaisha Toshiba | Method and system for distributing programs using tamper resistant processor |
CN101042736A (zh) * | 2006-03-24 | 2007-09-26 | ***股份有限公司 | 一种智能卡及智能卡中存取对象的方法 |
CN104239755A (zh) * | 2014-10-11 | 2014-12-24 | 浪潮电子信息产业股份有限公司 | 一种drm签名验证方法 |
-
2015
- 2015-09-01 CN CN201510555329.9A patent/CN105530088A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010014157A1 (en) * | 2000-02-14 | 2001-08-16 | Kabushiki Kaisha Toshiba | Method and system for distributing programs using tamper resistant processor |
CN101042736A (zh) * | 2006-03-24 | 2007-09-26 | ***股份有限公司 | 一种智能卡及智能卡中存取对象的方法 |
CN104239755A (zh) * | 2014-10-11 | 2014-12-24 | 浪潮电子信息产业股份有限公司 | 一种drm签名验证方法 |
Non-Patent Citations (4)
Title |
---|
DANIEL LARSSON: "Specifying Java Card API in OCL", 《ELECTRONIC NOTES IN THEORETICAL COMPUTER SCIENCE》 * |
何利明: "JAVA卡动态多应用数据管理研究与设计", 《中国优秀硕士学位论文-信息科技辑》 * |
张旭: "基于JavaCard的智能存储卡多行业应用研究", 《中国优秀硕士学位论文-信息科技辑》 * |
王晓亮: "Java智能卡Applet安全下载机制的研究与实现", 《中国优秀硕士学位论文-信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406932A (zh) * | 2016-08-26 | 2017-02-15 | 北京中电华大电子设计有限责任公司 | 一种改进的Java卡初始化方法和Java卡 |
CN106406932B (zh) * | 2016-08-26 | 2020-01-07 | 北京中电华大电子设计有限责任公司 | 一种改进的Java卡初始化方法和Java卡 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106301774B (zh) | 安全芯片、其加密密钥生成方法和加密方法 | |
CN105722067B (zh) | 移动终端上数据加/解密方法及装置 | |
CN204595860U (zh) | 一种存储设备加密桥接器 | |
CN104468627B (zh) | 一种通过服务器进行终端数据备份的数据加密方法及*** | |
CN104090853A (zh) | 一种固态盘加密方法和*** | |
CN104852922B (zh) | 基于分布式文件***的大数据加解密方法 | |
CN103378971B (zh) | 一种数据加密***及方法 | |
CN101196855A (zh) | 移动加密存储设备及密文存储区数据加解密处理方法 | |
CN112989356B (zh) | 空白安全芯片烧录方法、***、空白安全芯片及存储介质 | |
CN103580852A (zh) | 嵌入式安全元件的初始化 | |
CN103458400A (zh) | 一种语音加密通信***中的密钥管理方法 | |
CN209402526U (zh) | 安全芯片的密钥存储装置 | |
CN107315966B (zh) | 固态硬盘数据加密方法及*** | |
CN110474767A (zh) | 一种离线状态下的芯片密钥烧录方法及*** | |
CN104866784A (zh) | 一种基于bios加密的安全硬盘、数据加密及解密方法 | |
CN104200137A (zh) | 一种保护java程序自身安全的方法 | |
CN103853943A (zh) | 程序保护方法及装置 | |
CN104601820A (zh) | 一种基于tf密码卡的手机终端信息保护方法 | |
CN104978542B (zh) | 安全存储数据和访问数据的方法及*** | |
CN102332077A (zh) | 手持设备数据加解密方法及其手持设备外设 | |
CN104618380A (zh) | 一种适用于物联网的密钥更新方法 | |
CN105515757A (zh) | 基于可信执行环境的安全性信息交互设备 | |
CN103370718B (zh) | 使用分布式安全密钥的数据保护方法、设备和*** | |
CN105825135A (zh) | 一种加密芯片、加密***、加密方法及解密方法 | |
CN113722741A (zh) | 数据加密方法及装置、数据解密方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
DD01 | Delivery of document by public notice |
Addressee: Gai Ana Document name: Notification of Acceptance of Patent Application |
|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160427 |
|
WD01 | Invention patent application deemed withdrawn after publication |