CN104915602A - 一种Android平台下的PIN码保护方法 - Google Patents
一种Android平台下的PIN码保护方法 Download PDFInfo
- Publication number
- CN104915602A CN104915602A CN201510192517.XA CN201510192517A CN104915602A CN 104915602 A CN104915602 A CN 104915602A CN 201510192517 A CN201510192517 A CN 201510192517A CN 104915602 A CN104915602 A CN 104915602A
- Authority
- CN
- China
- Prior art keywords
- layer
- class example
- storage class
- password storage
- pin code
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/82—Protecting input, output or interconnection devices
- G06F21/83—Protecting input, output or interconnection devices input devices, e.g. keyboards, mice or controllers thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3226—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using a predetermined code, e.g. password, passphrase or PIN
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3226—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using a predetermined code, e.g. password, passphrase or PIN
- H04L9/3228—One-time or temporary data, i.e. information which is sent for every authentication or authorization, e.g. one-time-password, one-time-token or one-time-key
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/031—Protect user input by software means
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Medical Informatics (AREA)
- Databases & Information Systems (AREA)
- Telephone Function (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种Android平台下的PIN码保护方法,属于信息安全领域。所述方法包括Java层接收到上层调用后向C层传入启动事件,C层接收到启动事件后通过JNI调用Java层生成密码存储类实例,并在接收到Java层返回的句柄后再次调用Java层使Java层监听用户输入,Java层监听到用户输入PIN码数据时存储PIN码数据到实例内存,更新存储位置标识,向C层传入加密事件,监听到用户输入确认信息时向C层传入确认事件;C层接收到加密事件时通过句柄访问实例对PIN码数据加密,接收到确认事件时通过句柄访问实例对实例内存中的加密数据进行解密得到PIN码。本发明的有益效果在于提高了Android平台下的PIN码的安全性。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种Android平台下的PIN码保护方法。
背景技术
Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。Android采用了软件堆层的架构,其底层Linux内核只提供基本功能,中间层包括函数库和虚拟机,最上层是各种应用软件,大部分应用软件在使用时需要输入PIN码,为了提高PIN码的安全性,一般的方法是对PIN码进行加密,由于Android平台下的用户界面UI是采用容易被反编译分析的Java语言编写的,因此为了进一步提高PIN码的安全性,现有技术中将对PIN码进行加密的逻辑放在了应用程序中不易被破解和反编译分析难度较大的C层,当用户输入PIN码时,Java层将PIN码传入到C层进行加密,但上述方法至少存在PIN码在从Java层传入到C层的过程中容易被截获的缺陷。
发明内容
本发明的目的是克服现有技术的缺陷,提供一种Android平台下的PIN码保护方法。
本发明方法是通过下述技术方案实现的:一种Android平台下的PIN码保护方法,包括:
步骤S1、Java层通过JNI调用C层,向C层传入启动事件;
步骤S2、所述C层接收到启动事件后通过JNI调用所述Java层;
步骤S3、所述Java层生成密码存储类实例,并通过JNI向所述C层返回密码存储类实例的句柄;
步骤S4、所述C层接收到密码存储类实例的句柄后通过JNI调用所述Java层;
步骤S5、所述Java层监听用户输入,若监听到用户输入PIN码数据则将用户当前输入的PIN码数据存储到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,通过JNI调用C层,向所述C层传入加密事件,执行步骤S6;若监听到用户输入确认信息则通过JNI调用C层,向所述C层传入确认事件,执行步骤S7;
步骤S6、所述C层通过所述密码存储类实例的句柄访问所述密码存储类实例,根据所述密码存储类实例中的存储位置标识查找用户当前输入的PIN码数据,对查找到的用户当前输入的PIN码数据进行加密得到当前加密数据,保存所述当前加密数据到所述密码存储类实例的数据内存中,并删除所述查找到的用户当前输入的PIN码数据,返回步骤S5;
步骤S7、所述C层根据所述密码存储类实例的句柄访问所述密码存储类实例,对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码。
上述方法中,步骤S5之前还可以包括:所述Java层生成密码键盘类实例,关联所述密码键盘类实例和所述密码存储类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面;
或者,步骤S5之前还包括:所述Java层生成密码键盘类实例,关联所述密码键盘类实例和所述密码存储类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面;所述Java层监听用户输入,具体为:所述Java层的所述密码键盘类实例监听用户输入;所述Java层将用户当前输入的PIN码数据存储到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,具体为:所述Java层的所述密码键盘类实例调用所述密码存储类实例,将用户当前输入的PIN码数据保存到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识。
或者,所述步骤S1中还包括:所述Java层生成密码键盘类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面;所述步骤S5之前还包括,所述Java层关联所述密码键盘类实例和所述密码存储类实例;所述Java层监听用户输入,具体为:所述Java层的所述密码键盘类实例监听用户输入;所述Java层将用户当前输入的PIN码数据存储到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,具体为:所述Java层的所述密码键盘类实例调用所述密码存储类实例,将用户当前输入的PIN码数据保存到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识。
上述方法中,所述步骤S5中还可以包括:若Java层监听到用户输入的取消信息则通过JNI调用C层,向所述C层传入取消事件;所述C层接收到取消事件后根据所述密码存储类实例的句柄访问所述密码存储类实例,清除所述密码存储类实例的数据内存中的全部加密数据;
进一步地,所述步骤S7之后还可以包括:所述C层通过JNI调用所述Java层,所述Java层释放所述密码存储类实例;所述C层根据所述密码存储类实例的句柄访问所述密码存储类实例,清除所述密码存储类实例的数据内存中的全部加密数据之后,还包括:通过JNI调用所述Java层,所述Java层释放所述密码存储类实例。
上述方法中,所述步骤S5中还可以包括:若所述Java层监听到用户输入的删除消息,则将所述密码存储实例中的存储位置标识递减后,根据所述存储位置标识查找并删除用户最新输入的PIN码数据,返回步骤S5。
上述方法中,所述对查找到的用户当前输入的PIN码数据进行加密,可以具体包括:对查找到的用户当前输入的PIN码数据填充随机数后,使用预先存储的密钥根据预设算法进行加密;所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密,具体包括:对所述密码存储类实例的数据内存中存储的全部加密数据使用所述预先存储的密钥根据所述预设算法进行解密。
上述方法中,所述C层接收到启动事件后还可以包括:生成当前密钥;
所述对查找到的用户当前输入的PIN码数据进行加密,具体包括:对查找到的用户当前输入的PIN码数据填充随机数后,使用所述当前密钥根据预设算法进行加密;
所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密,具体包括:对所述密码存储类实例的数据内存中存储的全部加密数据使用所述当前密钥根据所述预设算法进行解密;
所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还包括清除所述当前密钥。
上述方法中,所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还可以包括将所述用户输入的PIN码发送给智能密钥设备进行验证。
上述方法中,所述保存所述当前加密数据到所述密码存储类实例的数据内存中,并删除所述查找到的用户当前输入的PIN码数据,可以具体包括:用所述当前加密数据覆盖所述查找到的用户当前输入的PIN码数据。
上述方法中,所述Java层通过JNI调用C层,向所述C层传入加密事件之前,还可以包括:所述Java层判断待加密数据长度是否达到预设长度,是则执行所述调用C层,向所述C层传入加密事件,否则返回所述步骤S5;
所述Java层保存用户当前输入的PIN码数据到所述密码存储类实例的数据内存中之后,还包括:更新所述待加密数据长度;
所述Java层通过JNI调用C层,向所述C层传入确认事件之后,还包括所述Java层初始化所述待加密数据长度。
上述方法中,所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还可以包括:清除所述全部加密数据;
进一步地,所述清除所述全部加密数据具体为:将所述密码存储类实例的数据内存中存储的全部加密数据更新为预设数据或随机数。
本发明方法的有益效果在于:本发明方法在现有技术的基础上,利用JNI机制,在Java层和C层之间只进行事件的交互,而不进行PIN码的传输,避免了PIN码在从Java层传入到C层的过程中被截获的风险,提高了Android平台下的PIN码的安全性。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种Android平台下的PIN码保护方法的流程图;
图2为本发明实施例二提供的一种Android平台下的PIN码保护方法的流程图;
图3为本发明实施例三提供的一种Android平台下的PIN码保护方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明中所述的Java层包含Java虚拟机和用Java代码所生成的程序;C层包含C/C++代码所生成的程序。在一般Android平台下,用Java代码所生成的程序包含在dex文件中,C/C++代码所生成的程序包含在so文件中。
实施例一
本发明实施例一提供一种Android平台下的PIN码保护方法,如图1所示,所述方法具体包括:
步骤S1、Java层通过JNI调用C层,向C层传入启动事件;
步骤S2、所述C层接收到启动事件后通过JNI调用所述Java层;
步骤S3、所述Java层生成密码存储类实例,并通过JNI向所述C层返回密码存储类实例的句柄;
步骤S4、所述C层接收到密码存储类实例的句柄后通过JNI调用所述Java层;
步骤S5、所述Java层监听用户输入,若监听到用户输入PIN码数据则将用户当前输入的PIN码数据存储到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,通过JNI调用C层,向所述C层传入加密事件,执行步骤S6;若监听到用户输入确认信息则通过JNI调用C层,向所述C层传入确认事件,执行步骤S7;
步骤S6、所述C层通过所述密码存储类实例的句柄访问所述密码存储类实例,根据所述密码存储类实例中的存储位置标识查找用户当前输入的PIN码数据,对查找到的用户当前输入的PIN码数据进行加密得到当前加密数据,保存所述当前加密数据到所述密码存储类实例的数据内存中,并删除所述查找到的用户当前输入的PIN码数据,返回步骤S5;
步骤S7、所述C层根据所述密码存储类实例的句柄访问所述密码存储类实例,对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码。
本实施例中,对查找到的用户当前输入的PIN码数据进行加密,可以具体包括:对查找到的用户当前输入的PIN码数据填充随机数后,使用预先存储的密钥根据预设算法进行加密;相应地,对所述密码存储类实例的数据内存中存储的全部加密数据进行解密,具体包括:对所述密码存储类实例的数据内存中存储的全部加密数据使用所述预先存储的密钥根据所述预设算法进行解密;
或者,本实施例中,对查找到的用户当前输入的PIN码数据进行加密,可以具体包括:对查找到的用户当前输入的PIN码数据填充随机数后,使用所述当前密钥根据预设算法进行加密;相应地,C层接收到启动事件后还包括:生成当前密钥;对所述密码存储类实例的数据内存中存储的全部加密数据进行解密,具体包括:对所述密码存储类实例的数据内存中存储的全部加密数据使用所述当前密钥根据所述预设算法进行解密;对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还包括清除所述当前密钥。
进一步地,步骤S5之前还可以包括:所述Java层通过调用所述密码存储类实例中的显示函数显示用户输入界面;相应地,所述Java层监听用户输入具体为:所述Java层的所述密码存储类实例监听用户输入;
或者,步骤S5之前还包括:所述Java层生成密码键盘类实例,关联所述密码键盘类实例和所述密码存储类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面;相应地,所述Java层监听用户输入具体为:所述Java层的所述密码键盘类实例监听用户输入;所述Java层保存用户当前输入的PIN码数据到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,可以具体为:所述Java层的所述密码键盘类实例调用所述密码存储类实例,将用户当前输入的PIN码数据保存到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识;
或者,所述步骤S1中还包括:所述Java层生成密码键盘类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面;相应地,所述步骤S5之前还包括,所述Java层关联所述密码键盘类实例和所述密码存储类实例;所述Java层监听用户输入可以具体为:所述Java层的所述密码键盘类实例监听用户输入;所述Java层保存用户当前输入的PIN码数据到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,可以具体为:所述Java层的所述密码键盘类实例调用所述密码存储类实例,将用户当前输入的PIN码数据保存到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识。
实施例二
本发明实施例二提供一种Android平台下的PIN码保护方法,如图2所示,所述方法具体包括:
步骤101、当接收到上层应用调用时,Java层通过JNI调用C层,向C层传入启动事件;
JNI(Java Native Interface,Java本地编程接口),它使得在Java虚拟机内部运行的Java代码能够与用其它编程语言(如C、C++和汇编语言)编写的应用程序和库进行相互操作。
具体地,Java层向C层传入事件可以为Java层向C层传入相应的事件数据,事件数据的类型可以有多种实现方式,其数据的值也是可以任意定义的,只要Java层和C层可按此约定进行工作即可;
例如,本实施例涉及的各事件为Java层和C层预先定义好的一系列jint类型数据,其中,启动事件定义为jint类型的整数1,加密事件定义为jint类型的整数2,确认事件定义为jint类型的整数3,取消事件定义为jint类型的整数4。
步骤102、C层生成当前密钥,通过JNI调用Java层;
本实施例中,C层生成预设长度的随机数作为当前密钥。
步骤103、Java层生成密码存储类实例;
本实施例中,步骤102至步骤103可以具体为:C层通过调用JNI的NewObject函数使Java层根据密码存储类生成一个密码存储类实例,密码存储类实例中包括存储用户输入数据的逻辑和通过JNI向C层传入事件的逻辑。
步骤104、Java层通过JNI向C层返回密码存储类实例的句柄;
步骤105、C层通过JNI调用Java层;
步骤106、Java层生成密码键盘类实例,关联密码键盘类实例和密码存储类实例,显示用户输入界面;
本实施例中,具体地,Java层通过调用密码存储类中的的初始化函数生成一个密码键盘类的实例;通过对密码键盘类实例中的密码存储类实例的句柄进行赋值来关联密码键盘类实例和密码存储类实例;
本实施例中,Java层可以通过调用密码键盘类实例中的显示函数显示用户输入界面,输入界面通常包含输入框和键盘,输入框和键盘可以是自定义的,也可以是系统自带或第三方实现的,当输入框和键盘为系统自带或第三方实现的时,密码键盘类实例的显示函数通过调用这些实现的显示接口来显示输入界面。
步骤107、Java层监听用户输入,若监听到用户输入PIN码数据则执行步骤108,若监听到用户输入确认信息则执行步骤112,若监听到用户输入取消信息则执行步骤117;
本实施例中,具体由Java层的密码键盘实例监听用户输入;
进一步地,步骤107中还可以包括:若监听到用户输入删除信息,则将密码存储实例中的存储位置标识递减后,根据存储位置标识查找并删除用户最新输入的PIN码数据。
步骤108、Java层将用户当前输入的PIN码数据保存到密码存储类实例的数据内存中,并更新密码存储类实例中的存储位置标识;
其中,密码存储类实例的数据内存用于存储用户输入的PIN码数据以及对用户输入的PIN码数据进行加密得到的加密数据等数据;存储位置标识为密码存储类实例中用于表示数据内存中存储用户当前输入的PIN码数据的位置的变量;
本实施例中,具体由Java层的密码键盘类实例调用与其关联的密码存储类实例将用户当前输入的PIN码数据保存到密码存储类实例的数据内存中,以及更新密码存储类实例中的存储位置标识;
具体地,用来存储用户输入的PIN码数据的内存结构可以是任意方式实现,本实施例中,优选地,采用二维数组方式;
例如,密码存储类实例的数据内存具体为二维数组pin[8][8],其中,pin[8][8]的第0列用于存储用户输入的数据,若存储位置标识为p_current,用户当前输入的PIN码数据为0x31(即用户触发数字键1),则Java层将用户当前输入的PIN码数据0x31存储到二维数组的pin[p_current][0]处,并更新存储位置标识p_current=p_current+1。
步骤109、Java层通过JNI调用C层,向C层传入加密事件;
进一步地,本实施例中,执行步骤109之前还可以包括:Java层判断待加密数据长度是否达到预设长度,是则执行步骤109,否则返回步骤107;相应地,步骤108中还包括更新待加密数据长度,步骤106和步骤109中均还包括初始化待加密数据长度。
步骤110、C层通过密码存储类实例的句柄访问密码存储类实例,获取存储位置标识;
步骤111、C层根据存储位置标识查找存储在密码存储类实例的数据内存中的用户当前输入的PIN码数据,对查找到的用户当前输入的PIN码数据进行加密得到当前加密数据,保存当前加密数据到密码存储类实例的数据内存中,删除查找到的用户当前输入的PIN码数据,返回步骤107;
具体地,对用户当前输入的PIN码数据进行加密的方法可以是任意方式实现,本实施例中,优选地,采用对用户当前输入的PIN码数据填充随机数后整体使用当前密钥根据RC4算法进行加密的方式;
例如,密码存储类实例的数据内存具体为二维数组pin[8][8],pin[8][8]的第0列用于存储用户输入的数据,若存储位置标识为p_current,则pin[p_current-1][0]处存储的为用户当前输入的PIN码数据,对用户当前输入的PIN码数据进行加密,得到当前加密数据,保存当前加密数据到密码存储类实例的数据内存中,删除用户当前输入的PIN码数据可以包括:在pin[p_current-1][1]至pin[p_current-1][7]中填充随机数,根据密钥对pin[p_current-1][0]至pin[p_current-1][7]中的数据采用RC4加密算法进行加密,得到当前加密数据,将当前加密数据存储于pin[p_current-1][0]至pin[p_current-1][7]中。
步骤112、Java层通过JNI调用C层,向C层传入确认事件;
步骤113、C层根据密码存储类实例的句柄访问密码存储类实例,读取密码存储类实例的数据内存中存储的全部加密数据,对读取到的加密数据进行解密,得到用户输入的PIN码;
在前文所述的示例中,即密码存储类实例的数据内存具体为二维数组pin[8][8],pin[8][8]的第0列用于存储用户输入的数据,用对用户当前输入的PIN码数据进行加密得到的加密数据覆盖用户当前输入的PIN码数据存储于当前行的第0列至第7列,若存储位置标识为p_current,则C层读取pin[0][0]至pin[p_current-1][7]中的数据得到全部加密数据,根据密钥对pin[0][0]至pin[p_current-1][7]中的数据采用RC4加密算法进行解密,得到用户输入的PIN码。
进一步地,C层得到用户输入的PIN码之后还包括对用户输入的PIN码进行相应操作,具体如何操作,取决于所实现应用的具体场景,本实施例不做具体限定,例如可以是将用户所输入的PIN码发给智能密钥设备进行验证等。
步骤114、C层清除当前密钥,通过密码存储类实例的句柄访问密码存储类实例,清除密码存储类实例的数据内存中存储的全部加密数据;
在前文所述的示例中,即密码存储类实例的数据内存具体为二维数组pin[8][8],pin[8][8]的第0列用于存储用户输入的数据,用对用户当前输入的PIN码数据进行加密得到的加密数据覆盖用户当前输入的PIN码数据存储于当前行的第0列至第7列,若存储位置标识为p_current,则C层清除pin[0][0]至pin[p_current-1][7]中的数据;其中,清除pin[0][0]至pin[p_current-1][7]中的数据可以是将pin[0][0]至pin[p_current-1][7]中的数据全部更新为0,还可以是用随机数填充pin[0][0]至pin[p_current-1][7],本实施例中,优选地,用随机数填充pin[0][0]至pin[p_current-1][7]。
步骤115、C层清除当前密钥,通过JNI调用Java层;
步骤116、Java层释放密码存储类实例,结束;
本实施例中,步骤115至步骤116具体为:C层以密码存储类实例的句柄为参数调用JNI的DeleteGlobalRef函数,使Java层释放密码存储类实例。
步骤117、Java层通过JNI调用C层,向C层传入取消事件;
步骤118、C层通过密码存储类实例的句柄访问密码存储类实例,清除密码存储类实例的数据内存中存储的全部加密数据;
步骤119、C层通过JNI调用Java层;
步骤120、Java层释放密码存储类实例,结束。
本实施例中,步骤119至步骤120具体为:C层以密码存储类实例的句柄为参数调用JNI的DeleteGlobalRef函数,使Java层释放密码存储类实例。
实施例三
本实施例三提供一种Android平台下的PIN码保护方法,如图3所示,所述方法具体包括:
步骤201、当接收到上层应用调用时,Java层生成密码键盘类实例,显示用户输入界面;
本实施例中,具体地,Java层通过调用密码存储类中的的初始化函数生成一个密码键盘类的实例;
本实施例中,Java层可以通过调用密码键盘类实例中的显示函数显示用户输入界面,输入界面通常包含输入框和键盘,输入框和键盘可以是自定义的,也可以是系统自带或第三方实现的,当输入框和键盘为系统自带或第三方实现的时,密码键盘类实例的显示函数通过调用这些实现的显示接口来显示输入界面。
步骤202、Java层通过JNI调用C层,向C层传入启动事件;
步骤203、C层通过JNI调用Java层;
步骤204、Java层生成密码存储类实例;
本实施例中,步骤203至步骤204可以具体为:C层通过调用JNI的NewObject函数使Java层根据密码存储类生成一个密码存储类实例,密码存储类实例中包括存储用户输入数据的逻辑和通过JNI向C层传入事件的逻辑。
步骤205、Java层通过JNI向C层返回密码存储类实例的句柄;
步骤206、C层生成当前密钥,通过JNI调用Java层;
本实施例中,C层生成预设长度的随机数作为当前密钥。
步骤207、Java层关联密码键盘类实例和密码存储类实例;
本实施例中,具体地,Java层通过对密码键盘类实例中的密码存储类实例的句柄进行赋值来关联密码键盘类实例和密码存储类实例。
步骤208、Java层监听用户输入,若监听到用户输入PIN码数据则执行步骤209,若监听到用户输入确认信息则执行步骤213,若监听到用户输入取消信息则执行步骤218;
本实施例中,具体由Java层的密码键盘类实例监听用户输入;
进一步地,步骤208中还可以包括:若监听到用户输入删除信息,则将密码存储类实例中的存储位置标识递减后,根据存储位置标识查找并删除用户最新输入的PIN码数据。
步骤209、Java层将用户当前输入的PIN码数据保存到密码存储类实例的数据内存中,并更新密码存储类实例中的存储位置标识;
其中,密码存储类实例的数据内存用于存储用户输入的PIN码数据以及对用户输入的PIN码数据进行加密得到的加密数据等数据;存储位置标识为密码存储类实例中用于表示数据内存中存储用户当前输入的PIN码数据的位置的变量;
本实施例中,具体由Java层的密码键盘类实例调用与其关联的密码存储类实例将用户当前输入的PIN码数据保存到密码存储类实例的数据内存中,以及更新密码存储类实例中的存储位置标识;
具体地,用来存储用户输入的PIN码数据的内存结构可以是任意实现,本实施例不做具体限定。
步骤210、Java层通过JNI调用C层,向C层传入加密事件;
进一步地,本实施例中,执行步骤210之前还可以包括:Java层判断待加密数据长度是否达到预设长度,是则执行步骤210,否则返回步骤208;相应地,步骤209中还包括更新待加密数据长度,步骤207和步骤210中均还包括初始化待加密数据长度。
步骤211、C层通过密码存储类实例的句柄访问密码存储类实例,获取存储位置标识;
步骤212、C层根据存储位置标识查找存储在密码存储类实例的数据内存中的用户当前输入的PIN码数据,对查找到的用户当前输入的PIN码数据进行加密得到当前加密数据,保存当前加密数据到密码存储类实例的数据内存中,删除查找到的用户当前输入的PIN码数据,返回步骤208;
具体地,对用户当前输入的PIN码数据进行加密的方法可以是任意方式实现。
步骤213、Java层通过JNI调用C层,向C层传入确认事件;
步骤214、C层根据密码存储类实例的句柄访问密码存储类实例,读取密码存储类实例的数据内存中存储的全部加密数据,对读取到的加密数据进行解密,得到用户输入的PIN码;
进一步地,C层得到用户输入的PIN码之后还包括对用户输入的PIN码进行相应操作,具体如何操作,取决于所实现应用的具体场景,本实施例不做具体限定。
步骤215、C层清除当前密钥,通过密码存储类实例的句柄访问密码存储类实例,清除密码存储类实例的数据内存中存储的全部加密数据;
步骤216、C层通过JNI调用Java层;
步骤217、Java层释放密码存储类实例,结束;
本实施例中,步骤216至步骤217具体为:C层以密码存储类实例的句柄为参数调用JNI的DeleteGlobalRef函数,使Java层释放密码存储类实例。
步骤218、Java层通过JNI调用C层,向C层传入取消事件;
步骤219、C层通过密码存储类实例的句柄访问密码存储类实例,清除密码存储类实例的数据内存中存储的全部加密数据;
步骤220、C层通过JNI调用Java层;
步骤221、Java层释放密码存储类实例,结束。
本实施例中,步骤220至步骤221具体为:C层以密码存储类实例的句柄为参数调用JNI的DeleteGlobalRef函数,使Java层释放密码存储类实例。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (16)
1.一种Android平台下的PIN码保护方法,其特征在于,所述方法包括:
步骤S1、Java层通过JNI调用C层,向C层传入启动事件;
步骤S2、所述C层接收到启动事件后通过JNI调用所述Java层;
步骤S3、所述Java层生成密码存储类实例,并通过JNI向所述C层返回密码存储类实例的句柄;
步骤S4、所述C层接收到密码存储类实例的句柄后通过JNI调用所述Java层;
步骤S5、所述Java层监听用户输入,若监听到用户输入PIN码数据则将用户当前输入的PIN码数据存储到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,通过JNI调用C层,向所述C层传入加密事件,执行步骤S6;若监听到用户输入确认信息则通过JNI调用C层,向所述C层传入确认事件,执行步骤S7;
步骤S6、所述C层通过所述密码存储类实例的句柄访问所述密码存储类实例,根据所述密码存储类实例中的存储位置标识查找用户当前输入的PIN码数据,对查找到的用户当前输入的PIN码数据进行加密得到当前加密数据,保存所述当前加密数据到所述密码存储类实例的数据内存中,并删除所述查找到的用户当前输入的PIN码数据,返回步骤S5;
步骤S7、所述C层根据所述密码存储类实例的句柄访问所述密码存储类实例,对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码。
2.如权利要求1所述的方法,其特征在于,所述步骤S5之前还包括:所述Java层通过调用所述密码存储类实例中的显示函数显示用户输入界面;
所述Java层监听用户输入具体为:所述Java层的所述密码存储类实例监听用户输入。
3.如权利要求1所述的方法,其特征在于,所述步骤S5之前还包括:所述Java层生成密码键盘类实例,关联所述密码键盘类实例和所述密码存储类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面。
4.如权利要求1所述的方法,其特征在于,所述步骤S1中还包括:所述Java层生成密码键盘类实例,调用所述密码键盘类实例中的显示函数显示用户输入界面;
所述步骤S5之前还包括,所述Java层关联所述密码键盘类实例和所述密码存储类实例。
5.如权利要求3或4所述的方法,其特征在于,所述Java层监听用户输入,具体为:所述Java层的所述密码键盘类实例监听用户输入;
所述Java层将用户当前输入的PIN码数据存储到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识,具体为:所述Java层的所述密码键盘类实例调用所述密码存储类实例,将用户当前输入的PIN码数据保存到所述密码存储类实例的数据内存中,并更新所述密码存储类实例中的存储位置标识。
6.如权利要求1所述的方法,其特征在于,所述步骤S5中还包括:若Java层监听到用户输入的取消信息则通过JNI调用C层,向所述C层传入取消事件;所述C层接收到取消事件后根据所述密码存储类实例的句柄访问所述密码存储类实例,清除所述密码存储类实例的数据内存中的全部加密数据。
7.如权利要求6所述的方法,其特征在于,所述步骤S7之后还包括:所述C层通过JNI调用所述Java层,所述Java层释放所述密码存储类实例;
所述C层根据所述密码存储类实例的句柄访问所述密码存储类实例,清除所述密码存储类实例的数据内存中的全部加密数据之后,还包括:通过JNI调用所述Java层,所述Java层释放所述密码存储类实例。
8.如权利要求1所述的方法,其特征在于,所述步骤S5中还包括:若所述Java层监听到用户输入的删除消息,则将所述密码存储实例中的存储位置标识递减后,根据所述存储位置标识查找并删除用户最新输入的PIN码数据,返回步骤S5。
9.如权利要求1所述的方法,其特征在于,所述对查找到的用户当前输入的PIN码数据进行加密,具体包括:对查找到的用户当前输入的PIN码数据填充随机数后,使用预先存储的密钥根据预设算法进行加密;
所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密,具体包括:对所述密码存储类实例的数据内存中存储的全部加密数据使用所述预先存储的密钥根据所述预设算法进行解密。
10.如权利要求1所述的方法,其特征在于,所述C层接收到启动事件后还包括:生成当前密钥;
所述对查找到的用户当前输入的PIN码数据进行加密,具体包括:对查找到的用户当前输入的PIN码数据填充随机数后,使用所述当前密钥根据预设算法进行加密;
所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密,具体包括:对所述密码存储类实例的数据内存中存储的全部加密数据使用所述当前密钥根据所述预设算法进行解密;
所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还包括清除所述当前密钥。
11.如权利要求1所述的方法,其特征在于,所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还包括将所述用户输入的PIN码发送给智能密钥设备进行验证。
12.如权利要求1所述的方法,其特征在于,所述保存所述当前加密数据到所述密码存储类实例的数据内存中,并删除所述查找到的用户当前输入的PIN码数据,具体包括:用所述当前加密数据覆盖所述查找到的用户当前输入的PIN码数据。
13.如权利要求1所述的方法,其特征在于,所述Java层通过JNI调用C层,向所述C层传入加密事件之前,还包括:所述Java层判断待加密数据长度是否达到预设长度,是则执行所述调用C层,向所述C层传入加密事件,否则返回所述步骤S5;
所述Java层保存用户当前输入的PIN码数据到所述密码存储类实例的数据内存中之后,还包括:更新所述待加密数据长度;
所述Java层通过JNI调用C层,向所述C层传入确认事件之后,还包括所述Java层初始化所述待加密数据长度。
14.如权利要求1所述的方法,其特征在于,所述对所述密码存储类实例的数据内存中存储的全部加密数据进行解密得到用户输入的PIN码之后,还包括:清除所述全部加密数据。
15.如权利要求14所述的方法,其特征在于,所述清除所述全部加密数据具体为:将所述密码存储类实例的数据内存中存储的全部加密数据更新为预设数据。
16.如权利要求14所述的方法,其特征在于,所述清除所述全部加密数据具体为:将所述密码存储类实例的数据内存中存储的全部加密数据更新为随机数。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510192517.XA CN104915602B (zh) | 2015-04-22 | 2015-04-22 | 一种Android平台下的PIN码保护方法 |
PCT/CN2016/077585 WO2016169395A1 (zh) | 2015-04-22 | 2016-03-28 | Android平台下的PIN码保护方法 |
US15/710,590 US10628607B2 (en) | 2015-04-22 | 2017-09-20 | Method for protecting pin code on android platform |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510192517.XA CN104915602B (zh) | 2015-04-22 | 2015-04-22 | 一种Android平台下的PIN码保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104915602A true CN104915602A (zh) | 2015-09-16 |
CN104915602B CN104915602B (zh) | 2017-08-11 |
Family
ID=54084662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510192517.XA Active CN104915602B (zh) | 2015-04-22 | 2015-04-22 | 一种Android平台下的PIN码保护方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10628607B2 (zh) |
CN (1) | CN104915602B (zh) |
WO (1) | WO2016169395A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016169395A1 (zh) * | 2015-04-22 | 2016-10-27 | 飞天诚信科技股份有限公司 | Android平台下的PIN码保护方法 |
CN108718317A (zh) * | 2018-06-12 | 2018-10-30 | 飞天诚信科技股份有限公司 | 一种个人识别码保护的方法及装置 |
CN109063519A (zh) * | 2018-07-24 | 2018-12-21 | 深圳享米科技有限公司 | Android密码安全输入键盘 |
CN109948333A (zh) * | 2019-03-08 | 2019-06-28 | 北京顺丰同城科技有限公司 | 一种账户攻击的安全防御方法及装置 |
CN116483760A (zh) * | 2023-06-16 | 2023-07-25 | 荣耀终端有限公司 | 交互方法、装置、芯片、键盘、电子设备及介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11204986B1 (en) * | 2018-11-28 | 2021-12-21 | American Megatrends International, Llc | Control of a prompt for a credential to unlock a storage device |
CN111222128A (zh) * | 2019-12-31 | 2020-06-02 | 北京握奇数据股份有限公司 | 一种安全输入和校验USBKey PIN码的方法及模块 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6945454B2 (en) * | 2003-04-22 | 2005-09-20 | Stmicroelectronics, Inc. | Smart card device used as mass storage device |
CN101383833A (zh) * | 2008-10-24 | 2009-03-11 | 北京飞天诚信科技有限公司 | 提高智能密钥装置pin码输入安全性的装置和方法 |
CN104092683A (zh) * | 2014-07-04 | 2014-10-08 | 飞天诚信科技股份有限公司 | 一种pin码保护方法及系统 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0024918D0 (en) * | 2000-10-11 | 2000-11-22 | Sealedmedia Ltd | Method of providing java tamperproofing |
US20050223392A1 (en) * | 2000-12-01 | 2005-10-06 | Cox Burke D | Method and system for integration of software applications |
US7516333B2 (en) * | 2003-08-01 | 2009-04-07 | Mamoon Yunis | Hybrid Java-C network appliance |
WO2005109360A1 (en) * | 2004-05-10 | 2005-11-17 | Hani Girgis | Secure pin entry using personal computer |
GB2410113A (en) * | 2004-11-29 | 2005-07-20 | Morse Group Ltd | A system and method of accessing banking services via a mobile telephone |
US8817984B2 (en) * | 2011-02-03 | 2014-08-26 | mSignia, Inc. | Cryptographic security functions based on anticipated changes in dynamic minutiae |
US8639938B2 (en) * | 2011-05-03 | 2014-01-28 | International Business Machines Corporation | Personal identification number security enhancement |
US9073164B2 (en) * | 2011-10-07 | 2015-07-07 | Bombardier Transportation Gmbh | Precision rail profiling device for railway crossovers |
EP2790993B1 (en) * | 2011-12-13 | 2020-02-19 | Dellner Couplers AB | Assembly of parts suitable to be used as part of a connecting device for connecting a first car of a multi-car vehicle with a second car of said vehicle |
KR20130143263A (ko) * | 2012-06-21 | 2013-12-31 | 에스케이플래닛 주식회사 | 트러스티드 플랫폼 기반의 개방형 아이디 인증 방법, 이를 위한 장치 및 시스템 |
CN104243144B (zh) * | 2013-06-08 | 2018-03-13 | 科大国盾量子技术股份有限公司 | 一种基于Android智能移动终端的通信密钥分配方法 |
US9842214B2 (en) * | 2013-09-10 | 2017-12-12 | Insyde Software Corp. | System and method to secure on-board bus transactions |
US9235714B1 (en) * | 2013-11-12 | 2016-01-12 | Amazon Technologies, Inc. | Preventing persistent storage of cryptographic information using signaling |
US9832207B2 (en) * | 2014-12-23 | 2017-11-28 | Mcafee, Inc. | Input verification |
CN104915602B (zh) * | 2015-04-22 | 2017-08-11 | 飞天诚信科技股份有限公司 | 一种Android平台下的PIN码保护方法 |
-
2015
- 2015-04-22 CN CN201510192517.XA patent/CN104915602B/zh active Active
-
2016
- 2016-03-28 WO PCT/CN2016/077585 patent/WO2016169395A1/zh active Application Filing
-
2017
- 2017-09-20 US US15/710,590 patent/US10628607B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6945454B2 (en) * | 2003-04-22 | 2005-09-20 | Stmicroelectronics, Inc. | Smart card device used as mass storage device |
CN101383833A (zh) * | 2008-10-24 | 2009-03-11 | 北京飞天诚信科技有限公司 | 提高智能密钥装置pin码输入安全性的装置和方法 |
CN104092683A (zh) * | 2014-07-04 | 2014-10-08 | 飞天诚信科技股份有限公司 | 一种pin码保护方法及系统 |
Non-Patent Citations (2)
Title |
---|
GOTZFRIED J等: "Analysing Android"s Full Disk Encryption Feature", 《JOWUA》 * |
黄可臻等: "基于Android的隐私数据安全保护系统", 《信息网络安全》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016169395A1 (zh) * | 2015-04-22 | 2016-10-27 | 飞天诚信科技股份有限公司 | Android平台下的PIN码保护方法 |
US10628607B2 (en) | 2015-04-22 | 2020-04-21 | Feitian Technologies Co., Ltd. | Method for protecting pin code on android platform |
CN108718317A (zh) * | 2018-06-12 | 2018-10-30 | 飞天诚信科技股份有限公司 | 一种个人识别码保护的方法及装置 |
CN109063519A (zh) * | 2018-07-24 | 2018-12-21 | 深圳享米科技有限公司 | Android密码安全输入键盘 |
CN109948333A (zh) * | 2019-03-08 | 2019-06-28 | 北京顺丰同城科技有限公司 | 一种账户攻击的安全防御方法及装置 |
CN116483760A (zh) * | 2023-06-16 | 2023-07-25 | 荣耀终端有限公司 | 交互方法、装置、芯片、键盘、电子设备及介质 |
CN116483760B (zh) * | 2023-06-16 | 2024-03-22 | 荣耀终端有限公司 | 交互方法、装置、芯片、键盘、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104915602B (zh) | 2017-08-11 |
US10628607B2 (en) | 2020-04-21 |
US20180025177A1 (en) | 2018-01-25 |
WO2016169395A1 (zh) | 2016-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104915602A (zh) | 一种Android平台下的PIN码保护方法 | |
CN103107995B (zh) | 一种云计算环境数据安全存储系统和方法 | |
CN105812332A (zh) | 数据保护方法 | |
CN204360381U (zh) | 移动设备 | |
US20150095652A1 (en) | Encryption and decryption processing method, apparatus, and device | |
CN110661748B (zh) | 一种日志的加密方法、解密方法及装置 | |
CN103713904A (zh) | 在移动终端工作区内安装应用的方法、相关装置和系统 | |
CN107196907B (zh) | 一种安卓so文件的保护方法及装置 | |
CN108429719A (zh) | 密钥保护方法及装置 | |
CN105718794A (zh) | 基于vtpm对虚拟机进行安全保护的方法及系统 | |
CN108418785A (zh) | 密码调用方法、服务器及存储介质 | |
CN111538977A (zh) | 云api密钥的管理、云平台的访问方法、装置及服务器 | |
CN107729760B (zh) | 基于Android系统的CSP实现方法及智能终端 | |
CN111241556A (zh) | 一种数据安全存储方法、装置、存储介质及终端 | |
CN107977581A (zh) | 数据处理方法、装置及计算机可读存储介质 | |
CN105574441A (zh) | 一种嵌入式固件保护的方法和装置 | |
US8798261B2 (en) | Data protection using distributed security key | |
CN109286604B (zh) | 实现容器服务的方法、装置以及电子设备 | |
CN111666558B (zh) | 密钥轮换方法、装置、计算机设备及存储介质 | |
CN109784072B (zh) | 一种安全文件管理方法和系统 | |
CN111625843A (zh) | 一种适用于大数据平台的数据透明加解密系统 | |
CN109598137B (zh) | 一种用于安全处理数据的方法及其系统 | |
CN110535642A (zh) | 一种分散存储密钥的方法、智能终端及存储介质 | |
CN102831360B (zh) | 个人电子文件安全管理系统及其管理方法 | |
CN110109717A (zh) | 一种安卓插件的加载控制方法、装置和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |