CN112507302B - 基于密码模块执行的调用方身份鉴别方法及装置 - Google Patents

基于密码模块执行的调用方身份鉴别方法及装置 Download PDF

Info

Publication number
CN112507302B
CN112507302B CN202011436271.3A CN202011436271A CN112507302B CN 112507302 B CN112507302 B CN 112507302B CN 202011436271 A CN202011436271 A CN 202011436271A CN 112507302 B CN112507302 B CN 112507302B
Authority
CN
China
Prior art keywords
target
program code
information
calling party
caller
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.)
Active
Application number
CN202011436271.3A
Other languages
English (en)
Other versions
CN112507302A (zh
Inventor
潘无穷
廖上明
金杯
林孝旦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202011436271.3A priority Critical patent/CN112507302B/zh
Publication of CN112507302A publication Critical patent/CN112507302A/zh
Application granted granted Critical
Publication of CN112507302B publication Critical patent/CN112507302B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/45Structures or tools for the administration of authentication
    • G06F21/46Structures or tools for the administration of authentication by designing passwords or checking the strength of passwords
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures

Abstract

本说明书实施例提供一种基于密码模块执行的调用方身份鉴别方法,该方法首先确定请求调用密码模块的目标调用方,其中密码模块中预置有若干合法调用方对应的若干验证信息,任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配;之后,主动获取目标调用方对应的目标程序代码;基于若干验证信息,验证目标程序代码中是否携带有对应的身份信息;根据验证结果确定目标调用方是否为合法调用方。该方法能够对调用方身份进行有效鉴别。

Description

基于密码模块执行的调用方身份鉴别方法及装置
技术领域
本说明书一个或多个实施例涉及数据安全技术领域,尤其涉及基于密码模块执行的调用方身份鉴别方法及装置。
背景技术
密码模块是数据安全体系建设的重要组成部分,承担了诸多密钥保护任务,在企业内网安全建设方面以及在金融、科研等诸多领域中,都起到了不可或缺的作用。密码模块可以分为硬件密码模块和软件密码模块,硬件密码模块可以是密码卡、密码机等,例如恩尼格玛密码机;软件密码模块即基于软件实现的密码模块,可以是能够对密钥等秘密数据加以保护的动态库或者进程。
密码模块的典型用途之一为保护应用程序等主体的密钥安全,由于应用程序等主体的安全防护能力较弱,一般会将密钥存储于相应的密码模块中,使用时通过调用密码模块来完成密钥计算。已有技术下,使用方(以下称为调用方)调用密码模块的场景中,存在一个固有问题:以应用程序作为调用方为例,应用在调用密码模块时,为防止恶意应用的非法调用,密码模块需要对应用的身份进行鉴别,而鉴别所用的身份凭据是需要应用自己进行安全存储的,例如口令或者密码等身份凭据需要应用自行解决安全存储问题,然而,应用一般是因为缺失安全存储能力才使用密码模块的,也就是应用一般是不具备对口令等身份凭据进行安全存储的能力。例如,一种已有方案中,在IoT(Internet of Things,物联网)设备、服务器等无人机交互的环境下,将口令明文存储在配置文件或者硬盘上,攻击者获取到口令后,就可以使用口令恶意访问密码模块。
鉴于此,需要提出一种改进方案以解决上述固有问题。
发明内容
本说明书一个或多个实施例描述了一种基于密码模块执行的调用方身份鉴别方法及装置,分别在密码模块和调用方的程序代码中预置相互匹配的验证信息和身份信息,实现了不依赖于口令或密码,也能对调用方身份进行有效鉴别。
根据第一方面,提供了一种基于密码模块执行的调用方身份鉴别方法,所述密码模块至少用于保护供合法调用方使用的密钥信息,所述方法包括:
确定请求调用所述密码模块的目标调用方;所述密码模块中预置有若干合法调用方对应的若干验证信息,其中任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配;
主动获取所述目标调用方对应的目标程序代码;
基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息;
根据验证结果确定所述目标调用方是否为合法调用方。
根据一种实施方式,主动获取所述目标调用方对应的目标程序代码,包括:主动获取所述目标调用方对应的进程信息,基于所述进程信息获取所述目标调用方对应的目标程序代码。
进一步的,在一个实施例中,可以通过调用操作系统应用程序接口API中的目标函数,获取所述目标调用方对应的进程ID作为上述进程信息;然后基于所述进程ID获取所述目标调用方对应的目标程序代码。
在一个具体例子中,操作系统为linux,在这样的情况下,获取目标程序代码可以包括:根据所述进程ID,确定在proc文件系统目录下相应进程对应的目标文件的文件路径;从所述目标文件包含的命令行中获取所述目标程序代码的存储路径,进而读取所述目标程序代码。
在另一实施例中,根据进程信息获取目标程序代码可以包括:根据所述进程信息,获取所述目标调用方对应的目标程序代码在相应进程占用的内存空间中的地址信息,进而读取所述目标程序代码。
在一个例子中,当所述目标调用方对应的源代码采用编译性语言编写时,主动获取所述目标调用方对应的目标程序代码,包括:主动获取所述目标调用方对应的可执行文件。
在另一例子中,所述目标调用方对应的源代码采用解释性语言编写时,主动获取所述目标调用方对应的目标程序代码,包括:主动获取所述目标调用方对应的源代码或中间代码,以及解析代码;所述解析代码用于将所述源代码或中间代码解析为计算机指令。
根据一个实施例,所述身份信息包括对相应的合法调用方对应的程序代码执行私钥签名而得到的签名结果;所述若干验证信息包括与所述私钥配对的公钥;所述私钥和所述公钥基于非对称加密算法生成;在这样的情况下,基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:基于所述公钥,验证所述目标程序代码中是否携带有所述签名结果。
在另一实施例中,所述身份信息包括相应的合法调用方对应的第一行为特征;所述若干验证信息包括行为特征列表,所述行为特征列表包括至少一条参考行为特征;在这样的情况下,基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:基于所述行为特征列表,验证所述目标程序代码中是否携带有与所述行为特征列表中的至少一条参考行为特征相匹配的第一行为特征。
进一步的,基于所述行为特征列表,验证所述目标程序代码中是否携带有与所述行为特征列表中的至少一条参考行为特征相匹配的第一行为特征,具体可以包括:从所述目标程序代码中提取所述目标调用方对应的目标行为特征;分别计算所述目标行为特征与所述行为特征列表中各个参考行为特征之间的相似度,将相似度超过预定阈值的目标行为特征确定为与相应的参考行为特征相匹配的第一行为特征。
更进一步的,所述密码模块包括至少一个供外部调用的接口;行为特征包括:调用所述密码模块的次数,和/或,调用所述密码模块各个接口的顺序。
在又一实施例中,所述身份信息包括嵌入于相应合法调用方对应的程序代码中的数字水印;所述若干验证信息包括用于对所述数字水印进行提取和验证的验证算法;在这样的情况下,验证所述目标程序代码中是否携带有对应的身份信息,包括:基于所述验证算法,验证所述目标程序代码中是否嵌入有所述数字水印。
在另一实施例中,所述身份信息包括用于标识相应合法调用方身份的第一标识符;所述若干验证信息包括与所述第一标识符相匹配的第二标识符;在这样的情况下,基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:基于所述第二标识符,验证所述目标程序代码中是否携带有所述第一标识符。
根据一种实施方式,基于所述若干验证信息,验证所述目标程序代码中是否携带有相应的身份信息,包括:检测所述目标程序代码中是否携带有与所述身份信息的数据格式相同的目标信息;在所述目标程序代码中携带有目标信息时,基于所述若干验证信息,验证所述目标信息是否为与所述若干验证信息中的至少一种相匹配的身份信息;根据验证结果确定所述目标调用方是否为合法调用方,包括:所述目标程序代码中未携带所述目标信息时,或者,所述目标程序代码中携带的所述目标信息与所述若干验证信息均未能匹配时,确定所述目标调用方为非法调用方;所述目标程序代码中携带有与所述若干验证信息中的至少一种相匹配的身份信息时,确定所述目标调用方为合法调用方。
在一种实施方式中,所述密码模块中还预置有所述若干合法调用方各自专属的第一存储密钥,所述第一存储密钥用于作为加密参数,对相应的合法调用方的所述密钥信息执行指定加密算法,获得密钥文件。
进一步的,所述密码模块可以用于对所述密钥信息执行白盒加密算法和白盒解密算法,所述第一存储密钥分别预置于所述白盒加密算法和白盒解密算法中。
在另一种实施方式中,密码模块对应于多个合法调用方,所述密码模块中预置有供多个合法调用方使用的同一根存储密钥;所述密码模块中预置有派生算法,所述派生算法用于基于所述根存储密钥和各合法调用方分别对应的身份信息,分别派生出各合法调用方专属的第二存储密钥;所述第二存储密钥用于作为加密参数对相应的合法调用方的密钥信息执行指定的加密算法,获得该合法调用方专用的密钥文件。
在以上实施例中,所述调用方包括应用程序和/或虚拟机监视器。
根据第二方面,提供了一种对调用方身份进行鉴别的密码装置,所述装置至少用于保护供合法调用方使用的密钥信息,所述装置包括:
确定单元,被配置为确定请求调用所述密码模块的目标调用方;所述密码装置中预置有若干合法调用方对应的若干验证信息,其中任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配;
获取单元,被配置为主动获取所述目标调用方对应的目标程序代码;
验证单元,被配置为基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息;根据验证结果确定所述目标调用方是否为合法调用方。
根据第三方面,本说明书实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,本说明书实施例提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
根据本说明书实施例提供的方法和装置,合法调用方对应的程序代码中携带有用于表征该合法调用方身份的身份信息,密码模块中预置有与合法调用方持有的身份信息相匹配的验证信息,对于试图调用密码模块的调用方,由该密码模块主动去获取该调用方的程序代码,检测其程序代码中是否携带有与自身模块持有的验证信息相匹配的身份信息,进而鉴别该调用方的身份是否合法,如此,无需使用口令或者密码也能实现密码模块对调用方身份的鉴别,进而无需考虑调用方对口令或者密码等身份凭据信息的安全存储问题;另外,密码模块鉴别所需要的身份信息不是调用方传送给密码模块的,而是密码模块主动获取的,相比于被动接收的方式,能够大幅降低身份信息被截获的风险。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出本说明书一个实施例中基于密码模块执行的调用方身份鉴别方法的系统框架图;
图2示出本说明书一个实施例中基于密码模块执行的调用方身份鉴别方法流程图;
图3示出本说明书一个实施例中抵抗合法调用方使用其他调用方密钥文件的一种可实施方式示意图;
图4示出本说明书一个实施例中抵抗合法调用方使用其他调用方密钥文件的另一种可实施方式示意图;
图5示出本说明书一个实施例中基于密码模块执行的调用方身份鉴别装置的结构示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
在内网访问控制、盘古加密、区块链平台等多个应用场景中,密码模块是用于保护密钥等秘密信息的重要工具。应用程序等密钥使用方一般缺乏安全防护能力,其使用的密钥多保存在密码模块中,例如保存在密码机、密码卡中。为了保证密钥在使用过程中的安全,应用程序等密钥使用方在使用密钥的时候一般不会将密钥从密码模块中完整取出,而是调用密码模块完成密钥计算。但该过程有一个非常重要的安全问题需要关注,就是密码模块如何对调用它的调用方身份进行鉴别,如果鉴别机制不够安全有效,那么恶意的应用也能调用密钥进行计算,无法起到保护作用。
已有技术下的一种方案,密码模块对调用方进行身份鉴别时,需要使用口令、私钥等秘密信息作为凭据,对于有人机交互能力的设备,可以通过交互界面录入用户输入的口令或者密码;对于不具备人机交互能力的服务器、IoT等设备,或者出于易用性考虑无需用户输入密码或口令,则应用程序等调用方只能自行保存用于身份鉴别的口令或密码等信息,但一般的应用程序是不具备安全存储能力的,而若借助其他安全模块去保护这些秘密信息,那么与其他安全模块之间也存在身份鉴别的需求。
密码模块按照服务接口,可以分为两种,一种是通过网络提供服务的密码模块,比如密码机;另一种是安装在设备本地,通过本地的接口提供服务。第一种一般通过密钥进行网络层面的身份鉴别,而该密钥一般保存在应用本地的密码模块中。因此,身份鉴别问题主要是应用与本地的密码模块之间的鉴别。进一步地,安装在设备本地的密码模块一般又分为硬件密码模块和软件密码模块,硬件密码模块一般一台设备只安装一个,设备上的所有应用程序共享一个硬件密码模块;而软件密码模块可以为每个应用程序配备一个。其中,本地硬件密码模块也可以通过密钥进行鉴别,而该密钥保存在应用程序专属的软件密码模块中,应用程序需要使用该密钥时,则需要调用其专属的软件密码模块,因此,身份鉴别的根本问题在于,软件密码模块如何对本地调用方的身份进行有效鉴别。
鉴于此,本说明书实施例提供一种基于密码模块执行的调用方身份鉴别方法,能够解决上述问题,该方法的应用场景之一即为应用程序与本地软件密码模块之间的身份鉴别,该方法同样适用于远程身份鉴别等应用场景。该方法提出了主动鉴别机制和个性化保护机制。下面先对主动鉴别机制展开说明。
本说明书实施例提出,将身份鉴别的思路从“应用程序拥有哪些秘密信息”,转变为“应用本身是什么”,例如,应用程序的可执行文件(二进制文件)是什么样的,或者说具有哪些特征,基于其可执行文件本身的特征属性对其加以鉴别。
具体地,参阅图1所示,以应用程序作为调用方为例,一应用程序通过合法途径获得了一个供其使用的密码模块(例如软件密码模块),在该应用程序对应的程序代码中预置用于进行身份鉴别的身份信息,该身份信息可以是数字水印,也可以是基于非对称加密算法生成的私钥对程序代码进行签名获得的签名结果等,相应地,在该密码模块中预置有与该身份信息匹配的验证信息,该验证信息可以是用于对数字水印进行验证的验证算法信息,也可以是用于对私钥签名结果进行验签的公钥等。这样,当密码模块发现有应用程序调用自身模块时,获取该应用程序对应的程序代码,例如通过系统API确定进程信息,再根据进程信息获取该应用程序的可执行代码。之后密码模块根据自身持有的验证信息,验证该程序代码中是否携带有身份信息、以及所携带的身份信息是否与自身持有的验证信息相匹配,进而获得鉴别结果,例如,匹配则判定该应用程序合法,进而允许该应用程序的调用,若不匹配或者根本未携带有身份信息,则判定该应用程序为非法的恶意应用。
在本说明书实施例中,调用方不仅限于应用程序,还可以是虚拟机监视器等,对密码模块发起调用请求的主体都可作为调用方,为便于描述,以下实施例中多以应用程序为例展开说明。密码模块一般多为软件密码模块,但不排除也可以是在硬件密码模块基础上配置有相应功能软模块的密码模块,例如,将软件密码模块与硬件密码模块相结合,硬件密码模块负责执行相应的加解密算法,而软模块用于执行对调用方身份的鉴别。密码模块用于对调用方需要使用的密钥信息进行保护。
参阅图2所示,该鉴别方法可以包括如下流程:
S201,确定请求调用密码模块的目标调用方,密码模块中预置有若干合法调用方对应的若干验证信息,任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配;S202,主动获取所述目标调用方对应的目标程序代码;S203,基于所述若干验证信息,验证目标程序代码中是否携带有对应的身份信息,根据验证结果确定目标调用方是否为合法调用方。
其中,一个密码模块可用于保护一个或多个应用程序的密钥信息,在密码模块中预置有对应于各应用程序的验证信息,而各应用程序的程序代码中携带有身份信息,对应于同一应用程序的身份信息与验证信息是互相匹配的。身份信息可以预置于相应的程序代码中或者可以从程序代码中提取而得。
具体地,预置身份信息与验证信息的方式有多种,下面列举几种可实施方式:
非对称加密算法方式:在应用程序开发阶段,首先获取基于非对称加密算法生成的密钥对,采用私钥对应用程序的程序代码进行私钥签名,例如对应用程序对应的可执行文件(二进制文件)进行签名,获得签名文件等形式的签名结果,然后将签名结果与应用程序一同发布,使得应用程序的程序代码中同时携带有该签名文件。相应地,将公钥作为验证信息预置于密码模块中,这样,在运行阶段,可以首先验证目标调用方对应的程序代码(为避免混淆,以下称为目标程序代码)中是否携带有签名结果,若未能携带有签名结果,则说明目标应用程序为非法应用,若携带有签名结果,则密码模块可以采用该公钥对签名结果进行验签,判别当前被验证的签名结果是否为采用与该公钥配对的私钥进行签名的签名结果,进而鉴别当前的应用程序是否合法。签名结果包括经私钥签名后获得的各种形式的密文数据,例如可以是对程序代码的明文先做哈希值然后采用私钥作为加密参数执行加密算法获得的签名文件。
其中,若公钥被篡改,将会使得密码模块对合法调用方的私钥签名结果验签不通过,将合法调用方误识别为非法调用方。而由于密码模块一般具有较强的安全防护能力,尤其是软件密码模块,一般通过代码混淆、指令虚拟化等技术,形成了一个坚固的安全边界,攻击者很难篡改其代码、或者窥探其运行状态,因此多数情形下,预置于密码模块中的公钥能够被非法应用篡改的可能性不高。在一个实施例中,公钥可以埋设于密码模块自身的程序代码中,进一步加大被篡改的难度。
数字水印方式:在应用开发阶段,基于预设的嵌入规则,在应用程序对应的程序代码中嵌入数字水印,在密码模块中添加验证该数字水印的验证信息,该验证信息可以包括用于对数字水印进行提取和验证的验证算法,验证算法与嵌入规则相对应。其中,该方式中的数字水印可以是任意一种软件水印,即能够加载于程序代码上并且能够对其进行提取或验证的软件水印都可应用于该方案中。数字水印的嵌入不应影响程序代码的正常执行,多数具有隐藏性质,外部难以发现。
例如,一种具体的可实施方式为,以汇编语言为例,设置一串二进制数字作为数字水印,用于表示应用程序的身份,然后在应用程序的程序代码中,采用互为等价指令的add和addc分别表示0和1,将该二进制数字串转换为add指令和addc指令,添加到程序代码中,add指令和addc指令的添加不应影响应用程序的正常运行。对应地,在验证阶段,验证算法中包含如何提取数字水印的规则信息,基于该规则信息,可以到目标调用方对应的程序代码中的指定位置读取add指令和addc指令,并根据“add”表示0,“addc”表示1的规则信息,将相应的指令转换为二进制数字串,通过比对数字串,可以鉴别当前的应用程序是否合法。当然,在软件上添加数字水印并对其进行验证的方式有多种,其他实现方式本说明书不逐一列举。
标识符方式:该方式中,采用一个标识符(以下称为第一标识符)来标识合法调用方的身份,作为该合法调用方的身份信息,与数字水印方式不同的是,该方式中,第一标识符直接以字符串明文的形式添加到程序代码中,密码模块中的验证信息包括与该第一标识符相同或者相匹配的第二标识符,还包含第一标识符在程序代码中的位置信息,在验证阶段,密码模块通过自身存储的第二标识符,以及第一标识符的位置信息,能够在获取到的目标程序代码中指定位置检测到与第二标识符一致或者匹配的第一标识符,则判定该应用程序合法。若目标程度代码的指定位置并不携带有第一标识符,则判定该应用程序不合法。该方式相比于其他方式的安全性较低,因为直接明文添加于程序代码中的第一标识符被非法应用获取的难度相对低些,但该方式仍具有一定的使用价值,其实用性在于,在本说明书披露的鉴别机制下,能够用于进行鉴别的身份信息和验证信息是多样化的,例如私钥签名、公钥验签方式,数字水印方式等等,非法应用无法预判密码模块与其对应的应用程序之间采用的哪种鉴别方式,并且,第一标识符虽然明文直接添加于程序代码中,但从程序代码中准确查找到该第一标识符仍然具有一定的难度,因此方式具备一定的可行性,其优势为易于实施,可应用于安全性要求相对较低的一些场景中。
行为特征方式:该方式中,基于应用程序的行为特征对其进行身份鉴别。程序代码中携带的身份信息可以包括相应的合法调用方对应的第一行为特征,而验证信息包括行为特征列表,行为特征列表包括至少一条参考行为特征。在验证时,将基于目标程序代码提取出来的第一行为特征与行为特征列表中的各条参考行为特征进行比对,基于比对结果判别相应的应用程序是否合法。例如,将第一行为特征分别与参考行为特征进行相似度计算,相似度较高则说明第一行为特征与该条参考行为特征对应的应用程序是否合法的属性是一致。参考行为特征可以是基于合法应用程序提取的行为特征,也可以是基于非法应用程序提取的行为特征,例如,当第一行为特征与合法的参考行为特征相似度较高时,则判定当前鉴别的应用程序为合法应用程序,当第一行为特征与非法的参考行为特征相似度较高时,则判定当前鉴别的应用程序为非法应用程序。
需要说明的是,与其他方式不同的是,应用程序的行为特征可以从该应用程序对应的程序代码中提取而得,例如在运行阶段,由密码模块在获取到目标程序代码之后,从其中提取出相应的行为特征。因此,在一个实施例中,与其他预置方式不同的是,在开发阶段,行为特征无需作为身份信息额外添加到程度代码中,而是程序代码本身携带着行为特征信息,因而可以在运行阶段基于程序代码进行提取。具体地,在运行阶段进行验证时,可以是由密码模块在获取到目标程序代码之后,从中提取出第一行为特征,然后将提取出的第一行为特征与预置于密码模块中的行为特征列表中的各条参考行为特征进行比对。
在一个实施例中,密码模块支持至少一种验证功能,密码模块具有至少一个供外部调用的接口,例如同一密码模块同时具有公钥验签接口、数字水印接口、行为特征验证接口等。行为特征包括该应用程序调用密码模块的次数,和/或,该应用程序调用密码模块各个接口的顺序。合法应用与非法应用在对密码模块进行调用的相关行为上,一般会表现出明显的差异,非法应用有时需要多次尝试调用密码模块,由于调用成功率不高,在一次调用失败后,会继续尝试其他接口;而合法应用一般尝试调用的接口类型相对固定,随机尝试的情形较少,因此应用程序对密码模块的调用行为特征可以从一个侧面反应其是否合法的属性。在其他例子中,行为特征还可以包括,应用程序代码调用系统API以及调用顺序,或者,应用程序调用的函数库以及调用顺序,等等。这些调用行为也可以反映出应用程序行为上的特点,从而用于区分合法应用程序和非法应用程序。
行为特征的区分方式,不足之处在于,鉴别的精准度会因个体化差异而降低,因为有个别合法应用程序由于其功能需求,可能会表现出非法应用的行为特征,因此,该种方式可以与其他方式结合使用,或者与现有技术中的口令或密码的鉴别方式结合使用。或者,在本地应用程序种类明确,不存在个体化差异明显的应用程序时,也可采用基于行为特征的验证方式,具体视实际应用场景而确定。
上述列举的几种方式仅为几个示例性说明,实际上,基于本说明书实施例提供的鉴别机制,还可设置其他多种身份信息与验证信息的预置方式,或者从中选择两种或以上进行组合,本说明书不逐一赘述。
需要说明的是,预置身份信息和验证信息的时机可以是在应用程序或密码模块的开发阶段,也可以是在对应用程序进行升级时,或者其他对应用程序的程序代码有更改权限的时机。
接下来阐述在运行阶段,具体如何对目标调用方的合法性进行鉴别。
在S201中,确定目标调用方,即首先要确定待鉴别的目标对象,确定方式可以是在密码模块启动后,主动去查询向自身模块发起过调用请求但暂未得到响应的调用方;或者在确定有调用方针对自身模块发起调用请求时,将该调用请求的发起方作为目标调用方。
在S202中,确定目标调用方之后,主动获取目标程序代码。在本说明书实施例中,主动获取指获取目标程序代码这个操作是由密码模块主动执行,而不是由调用方传送、由密码模块被动接收,获取的操作可以不依赖于调用方,例如密码模块在确定目标应用程序后,自行到系统的存储空间中读取所需的代码,即携带有身份信息的目标程序代码,并非是由应用程序等调用方传送给密码模块的。若用于鉴别的身份信息是调用方传给密码模块,则由于应用程序等调用方大多本身没有安全防护能力,身份信息被截获的风险较高,使得恶意应用在拿到身份信息后可以伪装为合法应用进而调用密码模块。
在一个实施例中,主动获取目标程序代码的一种可行方式为,先获得目标应用程序对应的进程信息,再基于进程信息获取目标程序代码。进程信息可以包括进程名称、进程ID或进程句柄。其中进程ID也可称为PID,即进程识别码,Process Identification。具体地,在一个实施例中,可以通过调用操作系统API(Application Programming Interface,应用程序接口)中的目标函数,获取该目标调用方对应的进程ID。其中,目标函数根据操作系统的类型或者操作系统的版本具体而定,并不唯一,例如,linux系统下,该目标函数为getpid()函数,可以通过调用getpid()函数,获知当前待鉴别的应用程序对应的进程ID。在windows系统下,可以通过调用GetWindowThreadProcessId函数来获得进程ID。
在一个实施例中,在linux系统下,基于进程信息获取目标程序代码可以采用如下方式:确定进程ID之后,根据该进程ID,确定在proc文件系统目录下相应进程对应的目标文件的文件路径;然后从该目标文件包含的命令行中查找目标程序代码的存储路径,即查找到存储有目标程序代码的文件对应的文件路径,进而读取所需的目标程序代码。在proc文件系统中,每一个目标应用程序对应的进程(以下简称目标进程)都有一个相应的进程文件,用于记录执行相关应用程序的命令行,该进程文件即为目标文件,其命令行中会包含相应目标程序代码的存储路径信息。
例如,以linux2.6版内核为例,proc文件系统下,目标文件的文件路径为:/proc/PID/cmdline,将其中的“PID”替换为具体进程的进程ID,即可得到目标进程对应的目标文件的文件路径,进而找到该目标文件。目标文件中包含的命令行中记录了目标程序代码在硬盘中的存储路径,根据该存储路径,密码模块可到硬盘中相应的文件夹下获取目标程序代码。
再例如,Windows2000系统下,在获得目标进程的进程信息之后,例如确定了目标进程的句柄后,可以通过调用GetModuleFileNameEx()来获得可执行文件的文件路径,可执行文件中包含可执行代码,可执行代码为本说明书实施例中目标程序代码中的一种,后续将对目标程序代码进行具体说明。在Windows XP x32或Windows XP x64系统下,则可以通过调用GetProcessImageFileName()来获得可执行文件的文件路径,在WindowsVista系统下,则可以通过调用QueryFullProcessImageName()来获得可执行文件的文件路径。
在不同的操作系统下,主动获取目标程序代码的方式会有所差异,本说明书实施例不逐一枚举。
本说明书实施例中,获取的目标程序代码,与应用程序的源代码所采用的编程语言类型有关。若目标应用程序的源代码采用编译性语言编写,则获取目标程序代码,包括获取源代码经编译器编译后得到的可执行代码,例如目标应用程序的源代码采用C/C++编写,则获取该源代码对应的可执行代码。具体可以是先确定可执行文件(即exe文件)的存储地址信息,然后打开该可执行文件并读取可执行代码。
若目标应用程序的源代码采用解释性语言编写,则获取目标程序代码,包括获取源代码或中间代码,以及获取解析代码。解析代码即解释器对应的代码,用于将源代码或中间代码解析为计算机指令,即解析为可执行代码。例如,若源代码基于Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB等解释性语言编写,则还需要获取解释器对应的解析代码。其中,对于java这种半编译、半解释型的语言,则不仅要获取其编译后的中间代码,还要获取用于解释中间代码的解析代码;对于仅需要解释的语言,则获取源代码和用于解释其源代码的解析代码。
例如,在linux系统下,当源代码基于java编写时,其用于存储解析代码的文件格式为JAR包,在获知目标文件的文件路径之后,不仅需要获取中间代码的存储路径,还需要获得解析代码也就是JAR包的存储路径。具体地,通过上述/proc/PID/cmdline文件路径能够获得中间代码的存储路径,之后通过/proc/PID/fd文件路径,能够查找该文件夹下的JAR包,进而获取相应的jar文件,jar文件中存储有解析代码。
需要补充说明的是,在一个实施例中,关于预置身份信息,对于编译性语言,将身份信息预置于合法调用方对应的可执行代码中;对于解释性语言,将身份信息预置于合法调用方对应的源代码或中间代码所在的文件以及解释器中,即不仅要在源代码或中间代码中预置身份信息,在解析代码中也要预置身份信息。
在本说明书实施例中,目标程序代码既可以从硬盘中获取,也可以从目标进程占用的内存空间中获取,上述方式中获得的存储路径多指硬盘存储路径。在一个实施例中,目标程序代码也可以从内存空间中获取,具体地,密码模块主动获取目标程序代码在目标进程占用的内存空间中的加载地址信息,进而读取目标程序代码。由于不同操作系统对于进程空间读写权限控制的机制不同,到进程空间中获取目标程序代码的方式并不唯一,具体可根据操作系统具体环境而定。需要说明的是,目标进程对应的内存空间中可能未完整加载可执行代码,在一个实施例中,当从进程空间中无法读取完整的目标程序代码时,则可以采用上述方式到硬盘中获取。
接下来,在S203中,密码模块根据自身持有的验证信息,对目标应用程序等目标调用方是否合法进行验证。
非法调用方对应的程序代码中,可能不携带有身份信息,也可能携带有伪造的身份信息,因此,在验证阶段,密码模块首先检测目标程序代码中是否携带有与合法调用方的身份信息的数据格式相同的目标信息,例如是否含有数字水印,是否含有签名结果等。在部分实施中,未含有身份信息,则直接判定该调用方为非法调用方。
若目标程序代码中含有相应格式的目标信息,例如含有签名结果,则进一步检测目标程序代码中携带的目标信息是否能够与密码模块持有的验证信息相匹配。多数实施例中,匹配则鉴别为合法调用方,不能匹配,则鉴别为非法调用方,例如基于数字水印以及基于非对称加密算法的验证方式下,匹配则说明目标调用方合法。
需要说明的是,与其他验证方式不同的是,对于基于行为特征的验证方式,合法调用方的程序代码中是可以不含有身份信息的,因此,对于基于行为特征的验证方式,目标程序代码中未含有身份信息时,则从目标程序代码中提取出目标调用方对应的行为特征以与验证信息进行比对。
在对行为特征进行验证时,还与其他验证方式不同的是,若行为特征列表中的参考行为特征为基于非法应用程序提取出的行为特征,则此时,基于目标程序代码提取出的第一行为特征与至少一个参考行为特征匹配,则鉴别该目标调用方为非法调用方,若参考行为特征基于合法应用程序提取,则当第一行为特征与至少一个参考行为特征相匹配时,则鉴别该目标调用方为合法调用方。
需要说明的是,基于本说明书实施例提出的鉴别机制,密码模块中需预置验证信息,在部分实施例中,一个密码模块中仅预置一个应用程序对应的验证信息,即每一个应用程序均需配置一个密码模块,实施成本较高;在另外的实施例中,为降低实施成本,可以在一个密码模块中预置多个应用程序的验证信息,验证阶段,可以将当前鉴别对象的身份信息与自身预置的多个验证信息分别进行匹配验证,当与其中的任一验证信息匹配时,可判定该应用程序为合法调用方。
基于本说明书实施例提出的上述鉴别机制,可以有多种身份信息和验证信息的预置方式,首先非法应用无法预判当前攻击的密码模块与其对应保护的应用程序之间,具体是采用的哪种预置或者说验证方式,因此也就无法针对该方式执行相应的攻击,即首先无法确定攻击目标采用的验证方式,也就无法确定攻击策略,多样化的方式本身就是一层保护。其次,在本说明书实施例提出的鉴别机制中,对应用程序等调用方身份的鉴别,是在调用方对应的程序代码基础上执行的,非法应用由于其自身的攻击行为也需要通过代码实现,无法完全伪装成合法调用方,例如私钥签名和公钥验签的方式中,非法应用即便窃取到私钥签名结果,然而公钥验签时,解密出的明文应该是合法应用的程序代码,而非法应用即便携带有私钥签名结果,其解密出的明文与其对应的程序代码也无法保持一致。而其他预置方式下,非法应用预获取合法应用中的身份信息难度会更高,例如对于数字水印的方式,嵌入于程序代码中的数字水印被提取的可能性很低,况且非法应用无法预判该合法调用方的程序代码中是否嵌入有数字水印。
以上对主动鉴别机制进行了描述。在此基础上,为了进一步提高秘密模块的安全性,还提出个性化保护机制。为便于理解个性化保护机制的作用,先阐述下相关的已有技术中的相关技术手段。已有技术下,应用程序使用的密钥在软件密码模块中运行,经软件密码保护后存储在文件系统中,而应用密钥一般是应用程序在获得软件密码模块之后生成的,所以一般也不会预置在软件密码模块中,通常都是以独立的密钥文件形式存储的,也就是对密钥进行加密后的密文一般是存储于密码模块之外,这就使得已有技术存在另一个隐患,攻击者有可能会直接利用密钥文件进行攻击。例如,考虑一种更为苛刻的攻击,攻击者本身也是一个合法应用,能够通过合法渠道获取一个供其调用的软件密码模块,然后该攻击者试图攻击另一个合法应用程序:将另一个合法应用程序的密钥文件拷贝到自己的软件密码模块下。因为攻击者是合法调用方,可以通过身份鉴别,攻击者可以通过调用该软件密码模块使用另一个合法应用程序的密钥信息。
针对上述问题,可以将密钥文件与应用程序身份关联起来,而如果仅仅是简单地将密钥文件与应用程序之间的对应关系存储在文件系统中,那么对应关系有可能被篡改。鉴于此,本说明书实施例针对上述问题,还披露一种个性化保护机制,具体地,该个性化保护机制包括如下两种方式:
方式一:为每一个合法调用方分配一个供其专属使用的第一存储密钥,不同的合法调用方对应于不同的第一存储密钥。在密码模块中,预置有合法调用方专属的第一存储密钥,采用该第一存储密钥作为加密参数对相应的合法调用方的密钥信息明文执行指定的加密算法,获得仅由该合法调用方可以使用的密钥文件,其他的合法调用方无法访问该合法调用方的密钥文件。在一个实施例中,该第一存储密钥以白盒化形式预置于密码模块中,也就是采用白盒加密技术,例如基于白盒DES(Data Encrytion Standard,数据加密标准)或白盒AES(Advanced Encryption Standard,高级加密标准),将该第一存储密钥预置于密码模块中,在密码模块的运行环境中,第一存储密钥不会完整地出现,安全性更高。
例如,参阅图3所示,应用程序a01至a0n分别对应专属的第一存储密钥k01至k0n,密码模块1至n中分别预置白盒加解密算法,分别以第一存储密钥k01至k0n作为加密参数,对供相应的合法应用程序使用的密钥信息执行白盒加密算法,分别获得密钥文件f01至f0n,该实施例中,一个应用程序对应分配一个密码模块。在其他实施例中,也可以多个应用程序共享一个密码模块,该密码模块针对多个应用程序,分别预置对应的第一存储密钥,获得其各自对应的密钥文件。
在一个实施例中,第一存储密钥白盒化预置于密码模块中的方式,可以是密码模块中采用白盒加密算法和白盒解密算法对密钥信息的明文分别进行加解密,而第一存储密钥的多个字节分散于白盒加密算法以及白盒解密算法中,也就是将第一存储密钥嵌入加解密算法的执行中,将其与其他数据混淆,使攻击者无法提取出完整的第一存储密钥。而不同的调用方使用的第一存储密钥是不同的,合法调用方之间无法互相使用密钥文件。
需要说明的是,在一个实施例中,白盒加解密的对象可以是密钥信息的明文,此时,获得的密钥密文为经过一次白盒加密保护的密文;在另一个实施例中,白盒加解密的对象可以是密钥文件,也就是对密钥信息的明文采用原有的加密算法执行一次加密之后,对一次加密后的初级密钥文件再次执行白盒加密,也就是执行二次加密,获得的密钥文件中的密文经过了两层加密算法处理,安全性更高。当然在其他实施例中,还可以执行三层甚至更多层加密。
如此,不同应用程序分别采用不同的专属存储密钥作为加密密钥,合法应用程序即便将另一个应用程序的密钥文件复制到密码模块中,由于加密密钥不同,也无法使用另一个应用程序的密钥信息。
方式二:该方式中,密码模块,用于基于根存储密钥和各合法调用方分别对应的身份信息,分别派生出各合法调用方专属的第二储存密钥。其中,此处的身份信息可以是能够区分不同应用程序的任意一种身份标识,例如可以是数字水印、行为特征等上述身份信息中的任意一种,该身份标识应基于安全途径获得。密码模块中可以预置派生算法,在确定合法调用方的身份信息后,基于不同的身份信息和根存储密钥派生出不同的第二存储密钥。该方式下,在一个实施例中,同一密码模块可以对应于多个合法调用方,该密码模块中预置有供多个合法调用方使用的同一根存储密钥。
例如,参阅图4所示,应用程序a01至a0n分别对应身份信息m01至m0n,基于各身份信息与同一根存储密钥,分别派生出第二存储密钥K01至K0n。其中,派生算法可以包括密码学中的各种密钥生成算法,例如在一个实施例中,可以将不同应用的身份信息转换为与根存储密钥格式相同的数据,然后将根存储密钥与身份信息对应的数据进行拼接,将拼接后的整体数据输入单向散列函数,然后将得到的散列值作为第二存储密钥。在其他实施例中,具体还可以根据身份信息的数据类型选择其他的密钥生成算法。
在一个实施例中,派生算法可以是对称加密算法,在运行阶段,可以根据当前应用的身份信息与根存储密钥派生出第二存储密钥,采用该第二存储密钥对密钥文件进行解密,获得密钥明文。不同的应用程序对应的身份信息是不同的,同一应用的身份信息一般不会发生变化,因此仅有该第二存储密钥对应的一个合法调用方能够使用该密钥文件。
同样地,在该方式中,也可以执行两层或以上的加密,例如,在另一个实施例中,也可以将第二存储密钥作为加密参数,对相应的一个合法调用方的密钥文件(经过一次加密的原始密钥文件)执行指定的加密算法,如此获得的密钥文件中的密钥密文经过了两层加密处理,安全性更高。
需要说明的是,方式一的安全性要高于方式二,因为根存储密钥是公共的,相比于专属密钥暴露的风险会更高,攻击者在获得合法调用方的身份信息之后,可以结合根存储密钥生成第二存储密钥,进而去攻击密钥文件。但这需要攻击者同时掌握根存储密钥、合法调用方的身份信息以及相应的加密算法,该三种信息同时被破解的可能性非常小,因此该方式二在一些应用场景中具有可行性。
上述实施例阐述的主动鉴别方法以及个性化保护方案,能够对发起调用请求的应用程序的身份进行有效鉴别,以抵抗恶意应用的攻击,并且能够有效对抗合法调用方攻击其他调用方密钥文件的问题。该方案不仅限应用于密码模块,还可以适用于其他安全模块。
另外,本说明书实施例提供的鉴别方法与现有的口令或者密码鉴别的方式具有兼容性,即本说明书实施例提出的鉴别方法的实施,无需以移除口令或者密码鉴别方式为前提,而是可以与原有的鉴别方式同时使用,形成多因素鉴别方案,安全性更好。当然,在一些应用场景中,本说明书实施例提供的鉴别方法也可独立使用。
参阅图5所示,本说明书实施例还提供一种对调用方身份进行鉴别的密码装置500,至少用于保护供合法调用方使用的密钥信息,该装置包括:
确定单元501,被配置为确定请求调用密码模块的目标调用方;密码模块中预置有若干合法调用方对应的若干验证信息,其中任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配。
获取单元502,被配置为主动获取目标调用方对应的目标程序代码。
验证单元503,被配置为基于若干验证信息,验证目标程序代码中是否携带有对应的身份信息;根据验证结果确定目标调用方是否为合法调用方。
根据一种实施方式,所述获取单元502具体配置为:主动获取所述目标调用方对应的进程信息,基于所述进程信息获取所述目标调用方对应的目标程序代码。
进一步的,在一个实施例中,获取单元502可以通过调用操作系统应用程序接口API中的目标函数,获取所述目标调用方对应的进程ID作为上述进程信息;然后基于所述进程ID获取所述目标调用方对应的目标程序代码。
在一个具体例子中,操作系统为linux,在这样的情况下,获取单元502获取目标程序代码可以包括:根据所述进程ID,确定在proc文件系统目录下相应进程对应的目标文件的文件路径;从所述目标文件包含的命令行中获取所述目标程序代码的存储路径,进而读取所述目标程序代码。
在另一实施例中,获取单元502根据进程信息获取目标程序代码可以包括:根据所述进程信息,获取所述目标调用方对应的目标程序代码在相应进程占用的内存空间中的地址信息,进而读取所述目标程序代码。
在一个例子中,当所述目标调用方对应的源代码采用编译性语言编写时,获取单元502主动获取所述目标调用方对应的目标程序代码,包括:主动获取所述目标调用方对应的可执行文件。
在另一例子中,所述目标调用方对应的源代码采用解释性语言编写时,获取单元502主动获取所述目标调用方对应的目标程序代码,包括:主动获取所述目标调用方对应的源代码或中间代码,以及解析代码;所述解析代码用于将所述源代码或中间代码解析为计算机指令。
根据一个实施例,所述身份信息包括对相应的合法调用方对应的程序代码执行私钥签名而得到的签名结果;所述若干验证信息包括与所述私钥配对的公钥;所述私钥和所述公钥基于非对称加密算法生成;在这样的情况下,验证单元503具体配置为:基于所述公钥,验证所述目标程序代码中是否携带有所述签名结果。
在另一实施例中,所述身份信息包括相应的合法调用方对应的第一行为特征;所述若干验证信息包括行为特征列表,所述行为特征列表包括至少一条参考行为特征;在这样的情况下,验证单元503具体配置为:基于所述行为特征列表,验证所述目标程序代码中是否携带有与所述行为特征列表中的至少一条参考行为特征相匹配的第一行为特征。
进一步的,验证单元503基于所述行为特征列表,验证所述目标程序代码中是否携带有与所述行为特征列表中的至少一条参考行为特征相匹配的第一行为特征,具体可以包括:从所述目标程序代码中提取所述目标调用方对应的目标行为特征;分别计算所述目标行为特征与所述行为特征列表中各个参考行为特征之间的相似度,将相似度超过预定阈值的目标行为特征确定为与相应的参考行为特征相匹配的第一行为特征。
更进一步的,所述密码模块包括至少一个供外部调用的接口;行为特征包括:调用所述密码模块的次数,和/或,调用所述密码模块各个接口的顺序。
在又一实施例中,所述身份信息包括嵌入于相应合法调用方对应的程序代码中的数字水印;所述若干验证信息包括用于对所述数字水印进行提取和验证的验证算法;在这样的情况下,验证单元503具体配置为:基于所述验证算法,验证所述目标程序代码中是否嵌入有所述数字水印。
在另一实施例中,所述身份信息包括用于标识相应合法调用方身份的第一标识符;所述若干验证信息包括与所述第一标识符相匹配的第二标识符;在这样的情况下,验证单元503具体配置为:基于所述第二标识符,验证所述目标程序代码中是否携带有所述第一标识符。
根据一种实施方式,验证单元503可以配置为:检测所述目标程序代码中是否携带有与所述身份信息的数据格式相同的目标信息;在所述目标程序代码中携带有目标信息时,基于所述若干验证信息,验证所述目标信息是否为与所述若干验证信息中的至少一种相匹配的身份信息;在所述目标程序代码中未携带所述目标信息时,或者,所述目标程序代码中携带的所述目标信息与所述若干验证信息均未能匹配时,确定所述目标调用方为非法调用方;在所述目标程序代码中携带有与所述若干验证信息中的至少一种相匹配的身份信息时,确定所述目标调用方为合法调用方。
在一种实施方式中,所述密码装置500中还预置有所述若干合法调用方各自专属的第一存储密钥,所述第一存储密钥用于作为加密参数,对相应的合法调用方的所述密钥信息执行指定加密算法,获得密钥文件。
进一步的,所述密码装置可以用于对所述密钥信息执行白盒加密算法和白盒解密算法,所述第一存储密钥分别预置于所述白盒加密算法和白盒解密算法中。
在另一种实施方式中,密码装置500对应于多个合法调用方,所述密码模块中预置有供多个合法调用方使用的同一根存储密钥;所述密码装置中预置有派生算法,所述派生算法用于基于所述根存储密钥和各合法调用方分别对应的身份信息,分别派生出各合法调用方专属的第二存储密钥;所述第二存储密钥用于作为加密参数对相应的合法调用方的密钥信息执行指定的加密算法,获得该合法调用方专用的密钥文件。
在以上实施例中,所述调用方可以包括应用程序和/或虚拟机监视器。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

Claims (21)

1.一种基于密码模块执行的调用方身份鉴别方法,所述密码模块至少用于保护供合法调用方使用的密钥信息,所述方法包括:
确定请求调用所述密码模块的目标调用方;所述密码模块中预置有若干合法调用方对应的若干验证信息,其中任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配;
主动获取所述目标调用方对应的目标程序代码;
基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息;
根据验证结果确定所述目标调用方是否为合法调用方。
2.根据权利要求1所述的方法,其中,主动获取所述目标调用方对应的目标程序代码,包括:
主动获取所述目标调用方对应的进程信息,基于所述进程信息获取所述目标调用方对应的目标程序代码。
3.根据权利要求2所述的方法,主动获取所述目标调用方对应的进程信息,包括:
调用操作系统应用程序接口API中的目标函数,获取所述目标调用方对应的进程ID;
基于所述进程信息获取所述目标调用方对应的目标程序代码,包括:
基于所述进程ID获取所述目标调用方对应的目标程序代码。
4.根据权利要求3所述的方法,其中,操作系统为linux时,基于所述进程ID获取所述目标调用方对应的目标程序代码,包括:
根据所述进程ID,确定在proc文件系统目录下相应进程对应的目标文件的文件路径;从所述目标文件包含的命令行中获取所述目标程序代码的存储路径,进而读取所述目标程序代码。
5.根据权利要求2所述的方法,基于所述进程信息获取所述目标调用方对应的目标程序代码,包括:
根据所述进程信息,获取所述目标调用方对应的目标程序代码在相应进程占用的内存空间中的地址信息,进而读取所述目标程序代码。
6.根据权利要求1所述的方法,其中,所述目标调用方对应的源代码采用编译性语言编写时,主动获取所述目标调用方对应的目标程序代码,包括:
主动获取所述目标调用方对应的可执行文件。
7.根据权利要求1所述的方法,其中,所述目标调用方对应的源代码采用解释性语言编写时,主动获取所述目标调用方对应的目标程序代码,包括:
主动获取所述目标调用方对应的源代码或中间代码,以及解析代码;所述解析代码用于将所述源代码或中间代码解析为计算机指令。
8.根据权利要求1所述的方法,其中,所述身份信息包括对相应的合法调用方对应的程序代码执行私钥签名而得到的签名结果;所述若干验证信息包括与所述私钥配对的公钥;所述私钥和所述公钥基于非对称密码算法生成;
基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:
基于所述公钥,验证所述目标程序代码中是否携带有所述签名结果。
9.根据权利要求1所述的方法,其中,所述身份信息包括相应的合法调用方对应的第一行为特征;所述若干验证信息包括行为特征列表,所述行为特征列表包括至少一条参考行为特征;
基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:
基于所述行为特征列表,验证所述目标程序代码中是否携带有与所述行为特征列表中的至少一条参考行为特征相匹配的第一行为特征。
10.根据权利要求9所述的方法,其中,基于所述行为特征列表,验证所述目标程序代码中是否携带有与所述行为特征列表中的至少一条参考行为特征相匹配的第一行为特征,包括:
从所述目标程序代码中提取所述目标调用方对应的目标行为特征;
分别计算所述目标行为特征与所述行为特征列表中各个参考行为特征之间的相似度,将相似度超过预定阈值的目标行为特征确定为与相应的参考行为特征相匹配的第一行为特征。
11.根据权利要求9所述的方法,其中,所述密码模块包括至少一个供外部调用的接口;所述行为特征包括以下中的一项或多项:
所述目标程序代码中调用所述密码模块的次数;
所述目标程序代码中调用所述密码模块各个接口的顺序;
所述目标程序代码中调用的系统API以及调用顺序;
所述目标程序代码中调用的函数库以及调用顺序。
12.根据权利要求1所述的方法,其中,所述身份信息包括嵌入于相应合法调用方对应的程序代码中的数字水印;所述若干验证信息包括用于对所述数字水印进行提取和验证的验证算法;
基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:
基于所述验证算法,验证所述目标程序代码中是否嵌入有所述数字水印。
13.根据权利要求1所述的方法,其中,所述身份信息包括用于标识相应合法调用方身份的第一标识符;所述若干验证信息包括与所述第一标识符相匹配的第二标识符;
基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息,包括:
基于所述第二标识符,验证所述目标程序代码中是否携带有所述第一标识符。
14.根据权利要求1所述的方法,其中,基于所述若干验证信息,验证所述目标程序代码中是否携带有相应的身份信息,包括:
检测所述目标程序代码中是否携带有与所述身份信息的数据格式相同的目标信息;在所述目标程序代码中携带有目标信息时,基于所述若干验证信息,验证所述目标信息是否为与所述若干验证信息中的至少一种相匹配的身份信息;
根据验证结果确定所述目标调用方是否为合法调用方,包括:
所述目标程序代码中未携带所述目标信息时,或者,所述目标程序代码中携带的所述目标信息与所述若干验证信息均未能匹配时,确定所述目标调用方为非法调用方;
所述目标程序代码中携带有与所述若干验证信息中的至少一种相匹配的身份信息时,确定所述目标调用方为合法调用方。
15.根据权利要求1所述的方法,其中,所述密码模块中,还预置有所述若干合法调用方各自专属的第一存储密钥,所述第一存储密钥用于作为加密参数,对相应的合法调用方的所述密钥信息执行指定加密算法,获得密钥文件。
16.根据权利要求15所述的方法,其中,
所述密码模块用于对所述密钥信息执行白盒加密算法和白盒解密算法,所述第一存储密钥分别预置于所述白盒加密算法和白盒解密算法中。
17.根据权利要求1所述的方法,其中,密码模块对应于多个合法调用方,所述密码模块中预置有供多个合法调用方使用的同一根存储密钥;
所述密码模块中预置有派生算法,所述派生算法用于基于所述根存储密钥和各合法调用方分别对应的身份信息,分别派生出各合法调用方专属的第二存储密钥;所述第二存储密钥用于作为加密参数对相应的合法调用方的密钥信息执行指定的加密算法,获得该合法调用方专用的密钥文件。
18.根据权利要求1-17任一项所述的方法,其中,所述调用方包括应用程序和/或虚拟机监视器。
19.一种对调用方身份进行鉴别的密码装置,所述装置至少用于保护供合法调用方使用的密钥信息,所述装置包括:
确定单元,被配置为确定请求调用密码模块的目标调用方;所述密码装置中预置有若干合法调用方对应的若干验证信息,其中任一合法调用方对应的验证信息,与该合法调用方的程序代码中携带的身份信息相匹配;
获取单元,被配置为主动获取所述目标调用方对应的目标程序代码;
验证单元,被配置为基于所述若干验证信息,验证所述目标程序代码中是否携带有对应的身份信息;根据验证结果确定所述目标调用方是否为合法调用方。
20.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-18中任一项的所述的方法。
21.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-18中任一项所述的方法。
CN202011436271.3A 2020-12-10 2020-12-10 基于密码模块执行的调用方身份鉴别方法及装置 Active CN112507302B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011436271.3A CN112507302B (zh) 2020-12-10 2020-12-10 基于密码模块执行的调用方身份鉴别方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011436271.3A CN112507302B (zh) 2020-12-10 2020-12-10 基于密码模块执行的调用方身份鉴别方法及装置

Publications (2)

Publication Number Publication Date
CN112507302A CN112507302A (zh) 2021-03-16
CN112507302B true CN112507302B (zh) 2024-04-19

Family

ID=74970483

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011436271.3A Active CN112507302B (zh) 2020-12-10 2020-12-10 基于密码模块执行的调用方身份鉴别方法及装置

Country Status (1)

Country Link
CN (1) CN112507302B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115630355B (zh) * 2022-10-31 2023-08-22 鼎铉商用密码测评技术(深圳)有限公司 密码模块的安全评测方法、安全评测设备以及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015180689A1 (zh) * 2014-05-30 2015-12-03 北京奇虎科技有限公司 验证信息的获取方法及装置
CN110990827A (zh) * 2019-10-28 2020-04-10 上海隔镜信息科技有限公司 一种身份信息验证方法、服务器及存储介质
CN111034120A (zh) * 2019-03-29 2020-04-17 阿里巴巴集团控股有限公司 基于身份信息的加密密钥管理
CN111090865A (zh) * 2019-12-17 2020-05-01 支付宝(杭州)信息技术有限公司 一种密钥授权方法和系统
CN111953705A (zh) * 2020-08-20 2020-11-17 全球能源互联网研究院有限公司 物联网身份认证方法、装置及电力物联网身份认证系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8479013B2 (en) * 2008-01-18 2013-07-02 Photonic Data Security, Llc Secure portable data transport and storage system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015180689A1 (zh) * 2014-05-30 2015-12-03 北京奇虎科技有限公司 验证信息的获取方法及装置
CN111034120A (zh) * 2019-03-29 2020-04-17 阿里巴巴集团控股有限公司 基于身份信息的加密密钥管理
CN110990827A (zh) * 2019-10-28 2020-04-10 上海隔镜信息科技有限公司 一种身份信息验证方法、服务器及存储介质
CN111090865A (zh) * 2019-12-17 2020-05-01 支付宝(杭州)信息技术有限公司 一种密钥授权方法和系统
CN111953705A (zh) * 2020-08-20 2020-11-17 全球能源互联网研究院有限公司 物联网身份认证方法、装置及电力物联网身份认证系统

Also Published As

Publication number Publication date
CN112507302A (zh) 2021-03-16

Similar Documents

Publication Publication Date Title
CN109923548B (zh) 通过监管进程访问加密数据实现数据保护的方法、系统及计算机程序产品
US11126754B2 (en) Personalized and cryptographically secure access control in operating systems
KR100996784B1 (ko) 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR101067399B1 (ko) 대칭 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
US9515832B2 (en) Process authentication and resource permissions
US20140223580A1 (en) Method of and apparatus for processing software using hash function to secure software, and computer-readable medium storing executable instructions for performing the method
US20080072066A1 (en) Method and apparatus for authenticating applications to secure services
JP2000151583A (ja) アクセス資格認証方法および装置ならびに証明用補助情報作成方法および装置
US20110271350A1 (en) method for protecting software
RU2740298C2 (ru) Защита использования содержимого хранилища ключей
JP4664055B2 (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
KR101107056B1 (ko) 클라우드 컴퓨팅 환경에서 가상 머신의 보안 정보 처리 방법
CN112507302B (zh) 基于密码模块执行的调用方身份鉴别方法及装置
US20230409700A1 (en) Systems and methods for managing state
Lee et al. Classification and analysis of security techniques for the user terminal area in the internet banking service
KR20150089696A (ko) 접근제어와 우선순위기반 무결성 검증 시스템 및 그 방법
US11157610B2 (en) Method for accessing a secure computer resource by a computer application
KR20160111798A (ko) Mtm 기반의 보안 서비스 제공 장치 및 방법
CN111046440A (zh) 一种安全区域内容的篡改验证方法及系统
Choi et al. Hardware-assisted credential management scheme for preventing private data analysis from cloning attacks
WO2022100660A1 (zh) 行为控制方法、装置、电子设备及存储介质
KR101839699B1 (ko) 인증정보가 노출되지 않는 안전한 보안 usb 시스템 및 방법
EP2138946A1 (en) Secure memory management system
CN114520735A (zh) 一种基于可信执行环境的用户身份鉴定方法、系统及介质
CN116244671A (zh) 认证方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40049161

Country of ref document: HK

GR01 Patent grant