首页> 中国专利> 程序验证装置、程序验证方法和程序验证程序

程序验证装置、程序验证方法和程序验证程序

摘要

必要信息提取部(120)提取由对象程序(101)使用的变量中的输出变量,其中,该输出变量设定由输出函数列表(182)中定义的输出函数输出的输出信息。必要信息提取部(120)提取由对象程序(101)使用的变量中的密码变量,其中,该密码变量设定由密码函数列表(183)中定义的加密函数加密后的密码信息。保护状态分析部(130)参照对象程序(101)中包含的赋值语句,提取被代入密码信息的密码状态变量。脆弱性判定部(140)判定密码状态变量与输出变量是否为相同的变量,基于判定结果,输出程序验证结果(197)。

著录项

  • 公开/公告号CN104662553A

    专利类型发明专利

  • 公开/公告日2015-05-27

    原文格式PDF

  • 申请/专利权人 三菱电机株式会社;

    申请/专利号CN201380049331.8

  • 发明设计人 山本匠;

    申请日2013-08-30

  • 分类号

  • 代理机构北京三友知识产权代理有限公司;

  • 代理人李辉

  • 地址 日本东京都

  • 入库时间 2023-12-18 09:04:05

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-14

    未缴年费专利权终止 IPC(主分类):G06F21/57 授权公告日:20170901 终止日期:20190830 申请日:20130830

    专利权的终止

  • 2017-09-01

    授权

    授权

  • 2015-06-24

    实质审查的生效 IPC(主分类):G06F21/57 申请日:20130830

    实质审查的生效

  • 2015-05-27

    公开

    公开

说明书

技术领域

本发明涉及例如验证程序的可靠性的程序验证装置、程序验证方法和程序验证程序。

背景技术

在验证程序的可靠性的技术中存在如下方法:找出机密信息或个人信息等重要信息通过程序而流出到外部(互联网、其它程序、其它文件或数据库等)这样的脆弱性。

在以往技术中,仅关注数据的流动而分析程序,因此会将向外部发送被适当加密后的信息的情况也误检测为脆弱性。

基于程序开发者的立场,不希望从实施了安全安装的程序中误检测出脆弱性。另一方面,基于用户的立场,存在希望确认在程序内自身的重要信息是否被适当地处理这样的需求。

在此所谓“重要信息被适当地处理”是指满足以下的条件。

■重要信息没有以明文的形态从程序输出到外部。

■在重要信息被加密的情况下,用于加密的密钥没有在程序内被硬编码(常量化)。

现有技术文献

专利文献

专利文献1:日本特表2010-507165号公报

专利文献2:日本特表2008-502046号公报

非专利文献

非专利文献1:中田育男、「コンパイラの構成と最適化」、朝倉書店、1999年9月、ISBN4-254-12139-3

发明内容

发明要解决的课题

本发明的目的在于,例如验证由作为验证对象的对象程序输出的信息是否是被加密后输出的信息。

用于解决课题的手段

本发明的程序验证装置具有:

程序输入部,其输入使用变量、输出函数和加密函数且包含赋值语句的程序;

输出变量提取部,其从所述程序提取设定由所述输出函数输出的输出信息的输出变量;

密码变量提取部,其从所述程序提取设定由所述加密函数加密后的密码信息的密码变量;

密码状态变量提取部,其参照所述程序中包含的赋值语句从所述程序提取密码状态变量,其中,该密码状态变量被代入由所述密码变量提取部提取出的所述密码变量中设定的所述密码信息;

密码状态判定部,其判定由所述密码状态变量提取部提取出的所述密码状态变量与由所述输出变量提取部提取出的所述输出变量是否为相同的变量;以及

验证结果输出部,其基于所述密码状态判定部的判定结果,输出所述程序的验证结果。

发明效果

根据本发明,例如能够验证由作为验证对象的对象程序输出的信息是否是被加密后输出的信息。

附图说明

图1是实施方式1的程序验证装置100的结构图。

图2是实施方式1的必要信息提取部120的结构图。

图3是实施方式1的保护状态分析部130的结构图。

图4是实施方式1的脆弱性判定部140的概要图。

图5是示出实施方式1的程序验证装置100的程序验证方法的流程图。

图6是示出实施方式1的必要信息提取处理(S120)的流程图。

图7是示出实施方式1的对象程序101的一例的图。

图8是示出实施方式1的信息取得函数列表181的一例的图。

图9是示出实施方式1的保护对象提取列表191的一例的图。

图10是示出实施方式1的输出函数列表182的一例的图。

图11是示出实施方式1的输出函数提取列表192的一例的图。

图12是示出实施方式1的对象程序101的一例的图。

图13是示出实施方式1的密码函数列表183的一例的图。

图14是示出实施方式1的密码函数提取列表193的一例的图。

图15是示出实施方式1的对象程序101的一例的图。

图16是示出实施方式1的变量信息提取列表194的一例的图。

图17是示出实施方式1的保护状态分析处理(S130)的流程图。

图18是示出实施方式1的保护对象状态取得处理(S200)的一例的流程图。

图19是示出实施方式1的保护对象提取列表191的一例的图。

图20是示出实施方式1的保护对象状态管理表195的初始化的一例的图。

图21是示出实施方式1的保护对象状态管理表195的一例的图。

图22是示出实施方式1的对象程序101的一例的图。

图23是示出实施方式1的保护对象状态管理表195的一例的图。

图24是示出实施方式1的保护对象状态管理表195的一例的图。

图25是示出实施方式1的密码函数提取列表193的一例的图。

图26是示出实施方式1的保护对象状态管理表195的一例的图。

图27是示出实施方式1的对象程序101的一例的图。

图28是示出实施方式1的保护对象提取列表191的一例的图。

图29是示出实施方式1的密码函数提取列表193的一例的图。

图30是示出实施方式1的保护对象状态管理表195的一例的图。

图31是示出实施方式1的密钥状态取得处理(S300)的一例的流程图。

图32是实施方式1的密钥状态管理表196的结构图。

图33是示出实施方式1的密码函数提取列表193的一例的图。

图34是示出实施方式1的变量信息提取列表194的一例的图。

图35是示出实施方式1的对象程序101的一例的图。

图36是示出实施方式1的密钥状态管理表196的一例的图。

图37是示出实施方式1的密钥变量分析处理(S350)的流程图。

图38是示出实施方式1的脆弱性判定处理(S140)的一例的流程图。

图39是示出实施方式1的输出函数提取列表192的一例的图。

图40是示出实施方式1的密钥状态管理表196的一例的图。

图41是示出实施方式1的程序验证装置100的硬件资源的一例的图。

具体实施方式

实施方式1

对用于验证作为验证对象的对象程序是否为将保护对象信息适当地加密后输出的程序的方式进行说明。

图1是实施方式1的程序验证装置100的结构图。

基于图1,对实施方式1的程序验证装置100进行说明。

程序验证装置100是验证作为验证对象的程序是否为通过加密对作为保护对象的信息进行保护后输出的高可靠性的程序的计算机。信息也称作数据(以下相同)。

以下,设作为验证对象的程序为“对象程序101”,设作为保护对象的信息为“保护对象信息”。

程序验证装置100(程序验证装置的一例)具有程序输入部110、必要信息提取部120、保护状态分析部130、脆弱性判定部140和验证装置存储部190。

以下,对程序验证装置100的各结构的概要进行说明。程序验证装置100的各结构的详细情况将在后面记述。

程序输入部110(程序输入部的一例)输入对象程序101。

必要信息提取部120(输出变量提取部、密码变量提取部、保护对象变量提取部、密钥变量提取部的一例)从程序输入部110输入的对象程序101提取验证所需的各种信息。

必要信息提取部120生成保护对象提取列表191、输出函数提取列表192、密码函数提取列表193和变量信息提取列表194作为各种信息的提取结果。

保护对象提取列表191是保护对象信息用变量的变量名的一览表。

输出函数提取列表192是输出信息的输出函数的函数名的一览表。

密码函数提取列表193是对信息对进行加密(或解密)的密码函数的函数名的一览表。

变量信息提取列表194是变量的变量名的一览表。

保护状态分析部130(密码状态变量提取部、密钥内容判定部、密钥状态判定部的一例)基于必要信息提取部120对各种信息的提取结果,针对保护对象信息的保护状态而分析对象程序101。

保护状态分析部130基于分析结果,生成保护对象状态管理表195和密钥状态管理表196。

保护对象状态管理表195是按照保护对象信息用的每个变量示出保护对象信息是否被加密的一览表。

密钥状态管理表196是按照在加密中使用的每个加密密钥示出加密密钥是否被保护的一览表。

脆弱性判定部140(密码状态判定部、保护对象判定部、验证结果输出部的一例)基于保护状态分析部130对对象程序101的分析结果,判定对象程序101中包含的脆弱要素,将判定结果作为程序验证结果197输出。

未被适当地加密而输出的保护对象信息越多,则对象程序101越脆弱,未被适当地加密而输出的保护对象信息越少,则对象程序101的可靠性越高。

验证装置存储部190(列表存储部的一例)存储在程序验证装置100中使用的数据。

例如,验证装置存储部190存储以下的数据。

验证装置存储部190存储程序输入部110输入的对象程序101。

验证装置存储部190预先存储信息取得函数列表181、输出函数列表182、密码函数列表183和哈希函数列表184。

验证装置存储部190存储由必要信息提取部120生成的保护对象提取列表191、输出函数提取列表192、密码函数提取列表193和变量信息提取列表194。

验证装置存储部190存储由保护状态分析部130生成的保护对象状态管理表195和密钥状态管理表196。

验证装置存储部190存储由脆弱性判定部140生成的程序验证结果197。

信息取得函数列表181(信息取得函数列表的一例)是定义取得保护对象信息的信息取得函数的一览表,被用于生成保护对象提取列表191。

输出函数列表182(输出函数列表的一例)是定义输出信息的输出函数的一览表,被用于生成输出函数提取列表192。

密码函数列表183(加密函数列表的一例)是定义对信息进行加密(或解密)的密码函数的一览表,被用于生成密码函数提取列表193。

哈希函数列表184是通常能够使用的密码学上的哈希函数(SHA1、MD5等)的一览表,被用于生成密钥状态管理表196。

图2是实施方式1的必要信息提取部120的结构图。

基于图2,对实施方式1的必要信息提取部120的结构进行说明。

必要信息提取部120具有保护对象提取部121、输出函数提取部122、密码函数提取部123和变量信息提取部124。

以下,对必要信息提取部120的各结构的概要进行说明。必要信息提取部120的各结构的详细情况将在后面记述。

保护对象提取部121(保护对象变量提取部的一例)基于信息取得函数列表181,从对象程序101提取保护对象信息用的变量,生成将提取出的变量作为一览的保护对象提取列表191。

输出函数提取部122(输出变量提取部的一例)基于输出函数列表182,从对象程序101提取输出函数,生成将提取出的输出函数作为一览的输出函数提取列表192。

密码函数提取部123(密码变量提取部、密钥变量提取部的一例)基于密码函数列表183,从对象程序101提取密码函数,生成将提取出的密码函数作为一览的密码函数提取列表193。

变量信息提取部124从对象程序101提取变量,生成将提取出的变量作为一览的变量信息提取列表194。

图3是实施方式1的保护状态分析部130的结构图。

基于图3,对实施方式1的保护状态分析部130的结构进行说明。

保护状态分析部130具有保护对象状态取得部131和密钥状态取得部132。

以下,对保护状态分析部130的各结构的概要进行说明。保护状态分析部130的各结构的详细情况将在后面记述。

保护对象状态取得部131(密码状态变量提取部的一例)基于保护对象提取列表191和密码函数提取列表193来分析对象程序101,生成保护对象状态管理表195,该保护对象状态管理表195按照保护对象信息用的每个变量示出变量中设定的保护对象信息是否被加密。

密钥状态取得部132(密钥内容判定部、密钥状态判定部的一例)基于密码函数提取列表193、变量信息提取列表194和哈希函数列表184来分析对象程序101,生成按照在加密中使用的每个加密密钥示出加密密钥是否被保护的密钥状态管理表196。

图4是实施方式1的脆弱性判定部140的概要图。

基于图4,对实施方式1的脆弱性判定部140的概要进行说明。

脆弱性判定部140(密码状态判定部、保护对象判定部、验证结果输出部的一例)基于输出函数提取列表192、保护对象状态管理表195和密钥状态管理表196,判定对象程序101中包含的脆弱要素,输出表示判定结果的程序验证结果197。

图5是示出实施方式1的程序验证装置100的程序验证方法的流程图。

基于图5,对实施方式1的程序验证装置100的程序验证方法进行说明。

首先,对程序验证装置100的程序验证方法的概要进行说明。

在S110中,程序输入部110输入对象程序101。

在S120中,必要信息提取部120从对象程序101提取各种信息,生成各种信息的提取列表。

在S130中,保护状态分析部130基于各种信息的提取列表,针对保护对象信息的保护状态而分析对象程序101。

在S140中,脆弱性判定部140基于对象程序101的分析结果,判定对象程序101中包含的脆弱要素,生成表示判定结果的程序验证结果197并输出生成的程序验证结果197。

接下来,对S110~S140的各处理的详细情况进行说明。

在S110中,利用者使用键盘或鼠标等输入装置向程序验证装置100指定希望验证的程序(对象程序101)。

程序验证装置100的程序输入部110输入被指定的对象程序101。

对象程序101以源代码的形式输入。在对象程序101为编译完成的字节码的情况下,程序输入部110将对象程序101反编译成源代码。

例如,预先将对象程序101存储到辅助存储装置,程序输入部110从辅助存储装置输入对象程序101。“输入”例如是指存储到存储器(验证装置存储部190)的规定的存储区域。

在S110之后,进入S120。

图6是示出实施方式1的必要信息提取处理(S120)的流程图。

基于图6,对实施方式1的必要信息提取处理(S120)进行说明。

在必要信息提取处理(S120)中,必要信息提取部120的各结构从起始行到最终行参照在S101中输入的对象程序101,按以下方式生成各种列表。

必要信息提取处理(S120)由S121~S124的各处理构成。

在S121中,保护对象提取部121从验证装置存储部190取得信息取得函数列表181。

保护对象提取部121基于取得的信息取得函数列表181,从在S110中输入的对象程序101提取设定保护对象信息的变量。以下,将设定保护对象信息的变量称作“保护对象变量”。

保护对象提取部121生成将提取出的保护对象变量作为一览的保护对象提取列表191。

在S121之后,进入S122。

图7是示出实施方式1的对象程序101的一例的图。

图8是示出实施方式1的信息取得函数列表181的一例的图。

图9是示出实施方式1的保护对象提取列表191的一例的图。

基于图7~图9,对保护对象提取处理(S121)的一例进行说明。

信息取得函数列表181A(参照图8)是取得保护对象信息的信息取得函数的一览表。预先生成信息取得函数列表181A并将其存储到验证装置存储部190。

信息取得函数列表181A对应地包含有“函数名”和“保护对象信息”。

“函数名”表示信息取得函数的函数名。

“保护对象信息”表示由信息取得函数取得的保护对象信息的内容。

图8的信息取得函数列表181A例如示出如下情况:信息取得函数“getProfile”是用于取得保护对象信息“头像”的函数。

保护对象提取部121基于信息取得函数列表181A(参照图8),从对象程序101A(参照图7)提取使用信息取得函数的行。

例如,在图7的对象程序101A的第1行使用信息取得函数“getProfile”。

保护对象提取部121基于使用信息取得函数的行和信息取得函数列表181A,生成保护对象提取列表191A(参照图9)。

保护对象提取列表191A对应地包含有“变量名”、“位置(行编号)”、“保护对象信息”和“信息的状态”。

“变量名”表示保护对象变量的变量名,其中,该保护对象变量设定由信息取得函数取得的保护对象信息。

“位置(行编号)”表示在保护对象变量中设定保护对象信息的行的编号。

“保护对象信息”表示保护对象变量中设定的保护对象信息的内容。

“信息的状态”表示保护对象变量中设定的保护对象信息是被加密的状态(密文)和未被加密的状态(明文)中的哪个状态。保护对象提取部121在“信息的状态”栏中设定“明文”作为初始值。

图9的保护对象提取列表191A例如示出如下情况:在对象程序101A(参照图7)的第1行,对保护对象变量“profile”设定保护对象信息“头像”。

返回到图6,从S122起继续进行必要信息提取处理(S120)的说明。

在S122中,输出函数提取部122从验证装置存储部190取得输出函数列表182。

输出函数提取部122基于取得的输出函数列表182,从在S110中输入的对象程序101提取输出函数。

输出函数提取部122生成将提取出的输出函数作为一览的输出函数提取列表192。

在S122之后,进入S123。

图10是示出实施方式1的输出函数列表182的一例的图。

图11是示出实施方式1的输出函数提取列表192的一例的图。

基于图7、图10和图11,对输出函数提取处理(S122)的一例进行说明。

输出函数列表182A(参照图10)是输出信息的输出函数的一览表。预先生成输出函数列表182A并将其存储到验证装置存储部190。

输出函数列表182A对应地包含有“函数名”、“输出内容”和“输出的状态”。

“函数名”表示输出函数的函数名。

“输出内容”表示输出函数的内容。例如,文件输出用的函数、通信用的函数、程序间通信用的函数和数据库写入用的函数为输出函数的一例。

“输出的状态”表示“密文”或“明文”。“密文”是指输出函数输出加密后的信息,“明文”是指输出函数以不加密的方式输出信息。

图10的输出函数列表182A例如示出如下情况:输出函数“output”以不加密的方式输出文件。

输出函数提取部122基于输出函数列表182A(参照图10),从对象程序101A(参照图7)提取使用输出函数的行。

例如,在图7的对象程序101A的第9行使用输出函数“output”。

输出函数提取部122基于使用输出函数的行和输出函数列表182A,生成输出函数提取列表192A(参照图11)。

输出函数提取列表192A对应地包含有“函数名”、“位置(行编号)”、“实际自变量”和“输出的状态”。

“函数名”表示由对象程序101A使用的输出函数的函数名。

“位置(行编号)”表示使用输出函数的行的编号。

“实际自变量”表示输出函数的自变量即由输出函数输出的输出信息用的变量。自变量是变量的一种(以下相同)。以下,将由输出函数输出的输出信息用的变量称作“输出变量”。

“输出的状态”表示由输出函数输出的输出信息的状态(明文或密文)。

图11的输出函数提取列表192A例如示出如下情况:输出函数“output”在对象程序101A(参照图7)的第9行以“明文”的状态输出输出变量“name”、“age”、“sex”的设定值(输出信息)。

返回到图6,从S123起继续进行必要信息提取处理(S120)的说明。

在S123中,密码函数提取部123从验证装置存储部190取得密码函数列表183。

密码函数提取部123基于取得的密码函数列表183,从在S110中输入的对象程序101提取密码函数。

密码函数提取部123生成将提取出的密码函数作为一览的密码函数提取列表193。

在S123之后,进入S124。

图12是示出实施方式1的对象程序101的一例的图。

图13是示出实施方式1的密码函数列表183的一例的图。

图14是示出实施方式1的密码函数提取列表193的一例的图。

基于图12~图14,对密码函数提取处理(S123)的一例进行说明。

密码函数列表183B(参照图13)是对信息进行加密或解密的密码函数的一览表。以下,将对信息进行加密的密码函数称作“加密函数”,将对信息进行解密的密码函数称作“解密函数”。

预先生成密码函数列表183B并将其存储到验证装置存储部190。

密码函数列表183B对应地包含有“函数名”、“密钥的位置”和“处理内容”。

“函数名”表示密码函数的函数名,“密钥的位置”表示密码函数的自变量中设定加密密钥或解密密钥的自变量的自变量名。“处理内容”表示密码函数的处理是加密和解密中的哪个处理。

图13的密码函数列表183B例如示出如下情况:加密函数“enc”使用“第2自变量”的信息作为加密密钥来进行“加密”处理。

密码函数提取部123基于密码函数列表183B(参照图13),从对象程序101B(参照图12)提取使用密码函数的行。

例如,在图12的对象程序101B的第9行使用加密函数“enc”。

密码函数提取部123基于使用密码函数的行和密码函数列表183B,生成密码函数提取列表193B(参照图14)。

密码函数提取列表193B对应地包含有“函数名”、“位置(行编号)”、“函数的实际自变量”、“密钥用的实际自变量”、“输出用的变量”和“输出的状态”。

“函数名”表示密码函数的函数名。

“位置(行编号)”表示使用密码函数的行的编号。

“函数的实际自变量”表示密码函数中设定的自变量。

“密钥用的实际自变量”表示密码函数中设定的自变量中设定加密密钥的自变量。

“输出用的变量”表示设定由密码函数处理后的信息的变量。以下,将设定由密码函数处理后的信息的变量称作“密码变量”。

“输出的状态”表示由密码函数处理后的信息处于被加密的状态和被解密的状态中的哪个状态。

图14的密码函数提取列表193B例如示出如下情况:加密函数“enc”在对象程序101B(参照图12)的第9行中使用自变量“key”中设定的加密密钥对自变量“tel”中设定的信息进行加密,以及在密码变量“enc_tel”中设定加密函数“enc”加密后的信息。

返回到图6,从S124起继续进行必要信息提取处理(S120)的说明。

在S124中,变量信息提取部124从在S110中输入的对象程序101提取变量,生成将提取出的变量作为一览的变量信息提取列表194。

此时,变量信息提取部124可以使用作为编译器的通常的代码优化技术而公知的常量传播作为用于提取变量的处理(参照非专利文献1)。

通过S124,必要信息提取处理(S120)结束。

图15是示出实施方式1的对象程序101的一例的图。

图16是示出实施方式1的变量信息提取列表194的一例的图。

基于图15和图16,对变量信息提取处理(S124)的一例进行说明。

变量信息提取部124从图15的对象程序101C提取赋值语句的赋值目标(左边)或作为函数的自变量使用的6个变量“profile”、“name”、“age”、“key”、“h_key”、“enc_tel”。

变量信息提取部124将提取出的变量的信息设定到变量信息提取列表194C(参照图16)。

变量信息提取列表194C对应地包含有“变量名”、“位置(行编号)”、“变量的内容”。

“变量名”表示由对象程序101C使用的变量。

“位置(行编号)”表示使用变量的行的编号。

“变量的内容”表示变量中设定的值是“可变”还是“不变”(常量)。

不过,变量也可以分成“可变”和“不变”这2种以外的类型。

例如,也可以在变量的类型中增加外部输入函数的输出值“输入变量”或时间取得函数的输出值“时间变量”。

例如,在函数仅包含“不变”的变量作为自变量的情况下,设定该函数的输出值的变量的内容为“不变”。在函数包含“输入变量”作为自变量的情况下,设定该函数的输出值的变量的内容为“输入变量”。在函数不包含“输入变量”作为自变量而包含“时间变量”作为自变量的情况下,设定该函数的输出值的变量的内容为“时间变量”。此外,在函数不包含“输入变量”或“时间变量”作为自变量而包含“可变”的变量作为自变量的情况下,设定该函数的输出值的变量的内容为“可变”。

例如,由图15的对象程序101C使用的变量的内容如下所示。

在第1行~第3行中,被代入不具有自变量的函数(getProfile()等)的输出值的赋值目标的变量“profile”、“name”、“age”的内容为“可变”。

在第4行中,设定常量“12345”的变量“key”的内容为“不变”。

在第5行中,设定仅包含不变的变量作为自变量的函数(hash)的输出值的变量“h_key”的内容为“不变”。

在第6行中,设定包含可变的变量(name)作为自变量的函数(enc)的输出值的变量“enc_tel”的内容为“可变”。

图16的变量信息提取列表194C例如示出如下情况:在对象程序101C的第1行使用可变的变量“profile”,以及在对象程序101C的第4行~第6行使用不变的变量“key”。

在图6中说明的必要信息提取处理(S120)的S121~S124的各处理可以改变顺序而执行,也可以并行地执行。

在必要信息提取处理(S120)之后,进入保护状态分析处理(S130)(参照图5)。

图17是示出实施方式1的保护状态分析处理(S130)的流程图。

基于图17,对实施方式1的保护状态分析处理(S130)进行说明。

保护状态分析处理(S130)由S200和S300的各处理构成。

在S200中,保护对象状态取得部131基于在S121(参照图6)中生成的保护对象提取列表191和在S123(参照图6)中生成的密码函数提取列表193来分析对象程序101。

然后,保护对象状态取得部131基于分析结果,生成保护对象状态管理表195。

保护对象状态取得处理(S200)的一例将在后面记述。

在S200之后,进入S300。

在S300中,密钥状态取得部132基于在S123(参照图6)中生成的密码函数提取列表193、在S124(参照图6)中生成的变量信息提取列表194和预先存储在验证装置存储部190的哈希函数列表184来分析对象程序101。

然后,密钥状态取得部132基于分析结果,生成密钥状态管理表196。

密钥状态取得处理(S300)的一例将在后面记述。

通过S300,保护状态分析处理(S130)结束。

在图17中说明的保护状态分析处理(S130)的S200和S300可以改变顺序而执行,也可以并行地执行。

图18是示出实施方式1的保护对象状态取得处理(S200)的一例的流程图。

基于图18,对实施方式1的保护对象状态取得处理(S200)的一例进行说明。

保护对象状态取得处理(S200)由S210~S261的各处理构成。

在S210中,保护对象状态取得部131生成表示对象程序101的处理流程的流程图。

流程图是指使用表示程序内的一个命令(和行编号)的节点和按照处理顺序使节点彼此连接而成的线来表示程序的全部处理路径(处理顺序)的曲线图的数据。

例如,保护对象状态取得部131利用现有的工具生成对象程序101的流程图。

在S210之后,进入S220。

在S220中,保护对象状态取得部131生成保护对象状态管理表195,基于保护对象提取列表191,对保护对象状态管理表195进行初始化。

在S220之后,进入S230。

图19是示出实施方式1的保护对象提取列表191的一例的图。

图20是示出实施方式1的保护对象状态管理表195的初始化的一例的图。

基于图19和图20,对管理表初始化处理(S220)的一例进行说明。

保护对象状态管理表195D(参照图20)对应地包含有“行编号”、“明文”和“密文”。

“行编号”表示对象程序101的行编号。

“明文”表示未被加密的保护对象变量。以下,将未被加密的保护对象变量称作“明文状态变量”。

“密文”表示被加密的保护对象变量。以下,将被加密的保护对象变量称作“密码状态变量”。

图19的保护对象提取列表191D示出如下情况:在对象程序101的第1行设定“明文”状态的保护对象变量“profile”,在对象程序101的第2行设定“明文”状态的保护对象变量“name”。

因此,如图20所示,保护对象状态取得部131在与保护对象状态管理表195D的行编号“第1行”对应的“明文”栏设定保护对象变量“profile”。

此外,保护对象状态取得部131在与保护对象状态管理表195D的行编号“第2行”对应的“明文”栏设定保护对象变量“name”。

即,保护对象状态取得部131基于保护对象提取列表191D,与设定有保护对象变量的行的编号和保护对象变量的状态对应地,将保护对象变量的变量名设定到保护对象状态管理表195D。

图20所示的保护对象状态管理表195D为基于图19所示的保护对象提取列表191D而初始化后的状态。

返回到图18,从S230起继续进行保护对象状态取得处理(S200)的说明。

在S230中,保护对象状态取得部131利用处理指针指定在S210中生成的流程图的起始节点。在此,处理指针指定要处理的节点。

在S230之后,进入S231。

在S231中,保护对象状态取得部131根据在S210中生成的流程图,将由处理指针指定的节点读入到存储器。

以下,设在S231中读入的节点为“关注节点”,设在S231中读入的节点表示的命令为“关注节点命令”。

此外,保护对象状态取得部131基于流程图,确定关注节点的前一节点,从保护对象状态管理表195取得与和确定的节点相同的行编号对应的明文状态变量和密码状态变量。

然后,确认取得的明文状态变量和密码状态变量没有被关注节点命令覆写。如果关注节点命令为赋值语句且赋值语句的左边为明文状态变量或密码状态变量,则该明文状态变量或密码状态变量已被覆写。

如果没有被覆写,则保护对象状态取得部131将取得的明文状态变量和密码状态变量与和关注节点相同的行编号对应地追加到保护对象状态管理表195。

例如,在保护对象状态管理表195D为图20所示的状态的情况下,保护对象状态取得部131将关注节点的前一行编号“第1行”的明文“profile”追加到关注节点的行编号“第2行”的明文。由此,保护对象状态管理表195D成为图21所示的状态。

图21是示出实施方式1的保护对象状态管理表195的一例的图。

在S231之后,进入S232。

在S232中,保护对象状态取得部131判定在S231中读入的关注节点表示的关注节点命令是否为赋值语句。

在关注节点命令为赋值语句的情况下(是),进入S240。

在关注节点命令不是赋值语句的情况下(否),进入S260。

在S240中,保护对象状态取得部131按照以下的(1)、(2)这样对关注节点命令(赋值语句)的右边(代入源)进行分析。

(1)保护对象状态取得部131分析关注节点命令的右边是否包含在保护对象状态管理表195设定的保护对象变量。

(2)保护对象状态取得部131参照密码函数提取列表193,分析关注节点命令的右边是否为密码函数提取列表193中设定的加密函数和保护对象状态管理表195中设定的密码状态变量中的任意一个。

在S240之后,进入S250。

在S250中,保护对象状态取得部131基于S240的分析结果,判定关注节点命令(赋值语句)的右边(代入源)是否包含保护对象变量。

在关注节点命令的右边包含保护对象变量的情况下(是),进入S251。

在关注节点命令的右边不包含保护对象变量的情况下(否),进入S260。

在S251中,保护对象状态取得部131基于S240的分析结果,判定关注节点命令(赋值语句)的右边(代入源)是否为加密函数和密码状态变量中的任意一个。

在关注节点命令的右边为加密函数和密码状态变量中的任意一个的情况下(是),进入S252。

在关注节点命令的右边既不是加密函数也不是密码状态变量的情况下(否),进入S253。

在S252中,保护对象状态取得部131将关注节点命令(赋值语句)的左边(代入目标)的变量名与关注节点的行编号对应地追加到保护对象状态管理表195的项目“密文”。保护对象状态管理表195的项目“密文”中追加的变量是密码状态变量的一例。

此外,在关注节点命令的右边是加密函数的情况下,保护对象状态取得部131与追加的密码状态变量对应地,设定加密函数的函数名和使用加密函数的行的编号。

此外,保护对象状态取得部131从密码函数提取列表193取得该加密函数的密钥变量名,将取得的密钥变量名与关注节点的行编号对应地追加到保护对象状态管理表195的项目“明文”。保护对象状态管理表195的“明文”项目中追加的密钥变量是明文状态变量的一例。

例如,图22所示的对象程序101D的第7行(赋值语句)的右边为加密函数“enc(name1、key)”,密钥变量为“key”。

在关注节点的行编号是第7行的情况下,保护对象状态取得部131将对象程序101D的第7行的左边的变量名“enc_name”与关注节点的行编号“第7行”对应地追加到保护对象状态管理表195D的项目“密文”。

此外,保护对象状态取得部131与追加的变量名“enc_name”对应地,将加密函数名“enc”和行编号“第7行”设定到保护对象状态管理表195D。

此外,保护对象状态取得部131将密钥变量名“key”与关注节点的行编号“第7行”对应地追加到保护对象状态管理表195D的项目“明文”。

由此,保护对象状态管理表195D成为图23的状态。

图22是示出实施方式1的对象程序101的一例的图。

图23是示出实施方式1的保护对象状态管理表195的一例的图。

在S252之后,进入S260。

在S253中,保护对象状态取得部131将关注节点命令(赋值语句)的左边(代入目标)的变量名与关注节点的行编号对应地追加到保护对象状态管理表195的项目“明文”。保护对象状态管理表195的项目“明文”中追加的变量是明文状态变量的一例。

此外,在关注节点命令的右边为解密函数的情况下,保护对象状态取得部131与追加的明文状态变量对应地设定解密函数的函数名和使用解密函数的行的编号。

例如,图22所示的对象程序101D的第3行(赋值语句)的右边是未被加密的保护对象变量“name”。

在关注节点的行编号是第3行的情况下,保护对象状态取得部131将对象程序101的第3行的左边的变量名“name1”与关注节点的行编号“第3行”对应地追加到保护对象状态管理表195D的项目“明文”。

由此,保护对象状态管理表195D成为图24的状态。

图24是示出实施方式1的保护对象状态管理表195的一例的图。

在S253之后,进入S260。

在S260中,保护对象状态取得部131判定由处理指针指定的关注节点是否为流程图的最终节点。

在关注节点是最终节点的情况下(是),进入S261。

在关注节点不是最终节点的情况下(否),保护对象状态取得部131利用处理指针指定关注节点的下一节点作为新的关注节点。然后,返回到S231。

在S261中,保护对象状态取得部131判定保护对象状态管理表195是否发生了变化。即,判定在S231~S260的循环中是否执行了S252或S253。如果执行了S252或S253,则保护对象状态管理表195发生了变化。

例如,保护对象状态取得部131在执行了S252或S253时,在变化标志中设定表示“保护对象状态管理表195发生变化”的变化标志值。然后,保护对象状态取得部131判定在变化标志中是否设定了变化标志值。在判定后,保护对象状态取得部131用表示保护对象状态管理表195没有变化的无变化标志值对变化标志进行初始化。

不过,保护对象状态取得部131也可以在S230中复制保护对象状态管理表195,对复制的保护对象状态管理表195与当前的保护对象状态管理表195进行比较,由此判定保护对象状态管理表195是否发生了变化。

保护对象状态管理表195没有变化例如是指对流程图的全部节点结束了处理,即,对流程图的全部处理路径结束了处理。

因此,保护对象状态取得部131也可以判定是否对流程图的全部节点结束了处理,即,判定是否对流程图的全部处理路径结束了处理,以替代判定保护对象状态管理表195是否发生了变化。

在保护对象状态管理表195发生了变化的情况下(是),返回到S230,从S230起反复进行处理。

在保护对象状态管理表195没有变化的情况下(否),保护对象状态取得处理(S200)结束。

图25是示出实施方式1的密码函数提取列表193的一例的图。

图26是示出实施方式1的保护对象状态管理表195的一例的图。

通过保护对象状态取得处理(S200)(参照图18),保护对象状态取得部131基于图22所示的对象程序101D、图19所示的保护对象提取列表191D和图25所示的密码函数提取列表193D,生成图26所示的保护对象状态管理表195D。

图27是示出实施方式1的对象程序101的一例的图。

图28是示出实施方式1的保护对象提取列表191的一例的图。

图29是示出实施方式1的密码函数提取列表193的一例的图。

图30是示出实施方式1的保护对象状态管理表195的一例的图。

通过保护对象状态取得处理(S200)(参照图18),保护对象状态取得部131基于图27所示的对象程序101E、图28所示的保护对象提取列表191E和图29所示的密码函数提取列表193E,生成图30所示的保护对象状态管理表195E。

图31是示出实施方式1的密钥状态取得处理(S300)的一例的流程图。

基于图31,对实施方式1的密钥状态取得处理(S300)的一例进行说明。

密钥状态取得处理(S300)由S310~S370的各处理构成。

在S310中,密钥状态取得部132生成对象程序101的流程图。不过,密钥状态取得部132也可以不生成对象程序101的流程图而使用由保护对象状态取得部131生成的流程图(参照图18的S210)。

在S310之后,进入S320。

在S320中,密钥状态取得部132生成密钥状态管理表196来进行初始化。

在S320之后,进入S330。

图32是实施方式1的密钥状态管理表196的结构图。

基于图32,对实施方式1的密钥状态管理表196的结构进行说明。

密钥状态管理表196对应地包含有“位置(行编号)”、“密钥变量”、“运算符(函数名)”和“内容”。

“位置(行编号)”表示使用加密函数的行的编号。

“密钥变量”表示作为加密密钥使用的密钥变量。

“运算符(函数名)”表示被用于生成密钥变量的运算符和函数。

“内容”表示密钥变量中设定的值是“可变”还是“不变”。

初始化后的密钥状态管理表196是没有被设定任何信息的状态(参照图32)。

返回到图31,从S330起继续进行密钥状态取得处理(S200)的说明。

在S330中,密钥状态取得部132利用处理指针指定密码函数提取列表193的起始行。在此,处理指针指定密码函数提取列表193的行。

在S330之后,进入S331。

在S331中,密钥状态取得部132从密码函数提取列表193将由处理指针指定的行读入到存储器。以下,设在S331中读入的行为“关注行”。

在S331之后,进入S340。

在S340中,密钥状态取得部132从密码函数提取列表193的关注行取得密钥变量的变量名,从变量信息提取列表194取得由取得的变量名识别的密钥变量的内容(可变或不变)。

例如,在图33所示的密码函数提取列表193F的序号“1”为关注行的情况下,密钥状态取得部132从图34所示的变量信息提取列表194F取得与和密钥用的实际自变量“key2”(密钥变量)相同的变量名对应的内容“可变”。

图33是示出实施方式1的密码函数提取列表193的一例的图。

图34是示出实施方式1的变量信息提取列表194的一例的图。

在S340之后,进入S350。

在S350中,密钥状态取得部132针对关注行的密钥变量而分析流程图,取得被用于生成关注行的密钥变量的运算符和函数作为分析结果。

关于密钥变量分析处理(S350)的详细情况将在后面记述。

在S350之后,进入S360。

在S360中,密钥状态取得部132将密码函数提取列表193中设定的关注行的行编号、在S340中取得的密钥变量的内容和在S350中取得的分析结果(运算符和函数)登记到密钥状态管理表196。

在S360之后,进入S370。

在S370中,密钥状态取得部132判定当前的关注行是否为密码函数提取列表193的最终行。

在当前的关注行是密码函数提取列表193的最终行的情况下(是),密钥状态取得处理(S300)结束。

在当前的关注行不是密码函数提取列表193的最终行的情况下(否),密钥状态取得部132利用处理指针指定当前的关注行的下一行作为新的关注行。然后,返回到S331。

图35是示出实施方式1的对象程序101的一例的图。

图36是示出实施方式1的密钥状态管理表196的一例的图。

在图35所示的对象程序101F中,加密变量“enc”的密钥变量“key2”是使用运算符“xor”(第6行)、哈希函数“hash”(第5行)和运算符“+”(第5行)生成的。

通过密钥状态取得处理(S300)(参照图31),密钥状态取得部132基于图35所示的对象程序101F、图33所示的密码函数提取列表193F、图34所示的变量信息提取列表194F,生成图36所示的密钥状态管理表196F。

在此,假定哈希函数列表184包含“hash”作为哈希函数的函数名。

图37是示出实施方式1的密钥变量分析处理(S350)的流程图。

基于图37,对密钥状态取得处理(S300)(参照图31)的密钥变量分析处理(S350)进行说明。

密钥变量分析处理(S350)由S351~S356的各处理构成。

在S351中,密钥状态取得部132从变量信息提取列表194取得使用密码函数提取列表193的关注行的密钥变量的各行的行编号,从流程图选择表示由取得的行编号识别的行的节点中的、表示设定关注行的密钥变量的赋值语句的节点。在此,设选择出的节点为“关注节点”。

例如,在关注行的密钥变量为“key2”的情况下,密钥状态取得部132从图34所示的变量信息提取列表194F取得与密钥变量“key2”对应的行编号“6”、“7”。然后,密钥状态取得部132选择行编号“6”、“7”中的设定密钥变量“key2”的赋值语句的行编号“6”(参照图35的第6行)。在该情况下,表示第6行的赋值语句的节点为关注节点。

在S351之后,进入S352。

在S352中,密钥状态取得部132从在S351中选择出的关注节点(赋值语句)的右边(代入源)取得变量名、运算符和函数名(例如哈希函数列表184中包含的哈希函数名)。

例如,密钥状态取得部132从图35所示的对象程序101F的第6行的赋值语句(关注节点)取得在右边使用的变量名“key1”、“seed2”和运算符“xor”。

在S352之后,进入S353。

在S353中,密钥状态取得部132从在S352中取得的变量名选择1个未选择的变量名。

在S353之后,进入S354。

在S354中,密钥状态取得部132针对由在S353中选择出的变量名识别的变量,与关注行的密钥变量同样地分析流程图。

换言之,密钥状态取得部132将关注行的密钥变量名置换成在S353中选择出的变量名,执行密钥变量分析处理(S350)。

即,密钥状态取得部132针对用于设定密钥变量的变量,递归地执行密钥变量分析处理(S350)。

例如,密钥状态取得部132针对在图35所示的对象程序101F的设定密钥变量“key2”的赋值语句(第6行)中使用的变量“key1”,执行密钥变量分析处理(S350)。

此外,密钥状态取得部132针对在设定变量“key1”的赋值语句(第5行)中使用的变量“in”,执行密钥变量分析处理(S350)。

此外,密钥状态取得部132针对用于设定密钥变量“key2”的其它变量“seed2”、“seed1”,也执行密钥变量分析处理(S350)。

在S354之后,进入S355。

在S355中,密钥状态取得部132将在S352中取得的运算符和函数名(包含在S354中递归地取得的运算符和函数名)登记到分析结果列表。分析结果列表是密钥变量分析处理(S350)的分析结果。

例如,密钥状态取得部132将图35所示的对象程序101F中包含的运算符和函数名中的设定密钥变量“key2”的赋值语句(第6行)的运算符“xor”、设定变量“key1”的赋值语句(第5行)的哈希函数名“hash”和运算符“+”登记到分析结果列表。

在S355之后,进入S356。

在S356中,密钥状态取得部132判定是否残留有在S353中未选择的变量名。

在残留有未选择的变量名的情况下(是),返回到S353。

在没有残留未选择的变量名的情况下(否),密钥变量分析处理(S350)结束。

图38是示出实施方式1的脆弱性判定处理(S140)的一例的流程图。

基于图38,对实施方式1的脆弱性判定处理(S140)(参照图5)进行说明。

脆弱性判定处理(S140)由S141~S149的各处理构成。

在S141中,脆弱性判定部140利用处理指针指定在S122(参照图6)中生成的输出函数提取列表192的起始行。在此,处理指针指定输出函数提取列表192的行。

在S141之后,进入S142。

在S142中,脆弱性判定部140将由处理指针指定的行从输出函数提取列表192读入到存储器。以下,设在S142中读入的行为“关注行”。

在S142之后,进入S143。

在S143中,脆弱性判定部140参照输出函数提取列表192的关注行,判定关注行的项目“输出的状态”是否为“明文”。

例如,在图39所示的输出函数提取列表192D的序号“1”是关注行的情况下,关注行的项目“输出的状态”为“明文”。

图39是示出实施方式1的输出函数提取列表192的一例的图。

在关注行的项目“输出的状态”是“明文”的情况下(是),进入S144。

在关注行的项目“输出的状态”不是“明文”的情况下,即,在关注行的项目“输出的状态”是“密文”的情况下(否),进入S148。

在S144中,脆弱性判定部140从输出函数提取列表192的关注行选择一个输出变量(输出函数的实际自变量)。

例如,在图39所示的输出函数提取列表192D的序号“1”是关注行的情况下,关注行的输出变量(实际自变量)为“enc_name”。

在S144之后,进入S145。

在S145中,脆弱性判定部140判定在S144中选择出的输出变量是否为与在S200(参照图17)中生成的保护对象状态管理表195中包含的保护对象变量相同的变量。

例如,输出变量“enc_name”是图26所示的保护对象状态管理表195D中包含的保护对象变量。

在输出变量是保护对象变量的情况下(是),进入S146-1。

在输出变量不是保护对象变量的情况下(否),进入S148。

在S146-1中,脆弱性判定部140判定在S144中选择出的输出变量(保护对象变量)是否为保护对象状态管理表195的项目“密文”中包含的密码状态变量。

例如,输出变量“enc_name”是图26所示的保护对象状态管理表195D的项目“密文”中包含的密码状态变量。

在输出变量是密码状态变量的情况下(是),进入S146-2。

在输出变量不是密码状态变量的情况下,即,在输出变量是明文状态变量的情况下(否),进入S147。

在S146-2中,脆弱性判定部140从保护对象状态管理表195,取得与输出变量(密码状态变量)对应地设定的加密函数的行编号。

此外,脆弱性判定部140从在S300(参照图17)中生成的密钥状态管理表196取得与取得的加密函数的行编号对应的密钥变量的内容(可变或不变)。

然后,脆弱性判定部140判定取得的密钥变量的内容是否为可变。

例如,脆弱性判定部140从图26所示的保护对象状态管理表195D取得与输出变量“enc_name”对应的加密函数“enc”的行编号“第7行”。

此外,脆弱性判定部140从图40所示的密钥状态管理表196D取得与取得的行编号“第7行”对应的密钥变量“key”的内容“不变”。

图40是示出实施方式1的密钥状态管理表196的一例的图。

在密钥变量的内容为可变的情况下(是),进入S146-3。

在密钥变量的内容不为可变的情况下,即,在密钥变量的内容为不变的情况下(否),进入S147。

在S146-3中,脆弱性判定部140参照密钥状态管理表196,判定密钥变量中设定的加密密钥是否为通过哈希函数或“xor”等规定的隐匿运算而生成的隐匿值。规定的隐匿运算是用于计算不能由第三者推测出而相对于第三者隐匿的隐匿值的运算。

例如,图36所示的密钥状态管理表196F示出使用“xor”和哈希函数“hash”而生成密钥变量“key2”的情况。在该情况下,脆弱性判定部140判定为密钥变量“key2”受到保护。

在密钥变量受到保护的情况下(是),进入S148。

在密钥变量未受到保护的情况下(否),进入S147。

在S147中,脆弱性判定部140将判定结果追加到程序验证结果197。

例如,脆弱性判定部140在程序验证结果197追加以下的判定结果。

在S146-1中输出变量不是密码状态变量的情况下(否),脆弱性判定部140将输出变量的信息(变量名、行编号等)和表示输出变量为明文状态(保护对象信息未被加密而输出)的信息追加到程序验证结果197。

在S146-2中密钥变量不为可变的情况下(否),脆弱性判定部140将密钥变量的信息(函数名、变量名、行编号等)和表示密钥变量为不变(常量)(保护对象信息未被适当加密而输出)的信息追加到程序验证结果197。

在S146-3中密钥变量未受到保护的情况下(否),脆弱性判定部140将密钥变量的信息(函数名、变量名、行编号等)和表示密钥变量未受到保护(保护对象信息未被适当加密而输出)信息追加到程序验证结果197。

在S147之后,进入S148。

在S148中,脆弱性判定部140判定是否残留有在S144中未选择的输出变量。

在残留有未选择的输出变量的情况下(是),返回到S144。

在没有残留未选择的输出变量的情况下(否),进入S149。

在S149中,脆弱性判定部140判定当前的关注行是否为输出函数提取列表192的最终行。

在当前的关注行是输出函数提取列表192的最终行的情况下(是),脆弱性判定部140将程序验证结果197输出到显示器或打印机等输出装置。然后,脆弱性判定处理(S140)结束。

在当前的关注行不是输出函数提取列表192的最终行的情况下(否),脆弱性判定部140利用处理指针指定当前的关注行的下一行作为新的关注行。然后返回到S142。

在图38中说明的脆弱性判定处理(S140)中,将不满足S146-1~S146-3的条件时的判定结果设定到程序验证结果197。

不过,也可以是,针对全部输出变量,按照每个输出变量,将S145的判定结果和S146-1~S146-3的各个判定结果中的至少任意一个判定结果设定到程序验证结果197。

此外,还可以是,针对全部输出变量中的全部保护对象变量,按照每个保护对象变量,将S146-1~S146-3中的至少任意一个判定结果设定到程序验证结果197。

图41是示出实施方式1的程序验证装置100的硬件资源的一例的图。

在图41中,程序验证装置100(计算机的一例)具有CPU 901(Central ProcessingUnit:中央处理器)。CPU 901经由总线902与ROM 903、RAM 904、通信板905(通信装置)、显示器911(显示装置)、键盘912、鼠标913、驱动器914、磁盘装置920等硬件设备连接,控制这些硬件设备。驱动器914是对FD(Flexible Disk:软磁盘)、CD(Compact Disc:紧凑型光盘)、DVD(Digital Versatile Disc:数字通用光盘)等存储介质进行读写的装置。

ROM 903、RAM 904、磁盘装置920和驱动器914是存储装置的一例。键盘912、鼠标913、通信板905和存储装置是输入装置的一例。显示器911、通信板905和存储装置是输出装置的一例。

通信板905以有线或无线方式与LAN(Local Area Network:局域网)、互联网、电话线路等通信网连接。

在磁盘装置920中存储有OS921(操作系统)、程序组922、文件组923。

程序组922包含执行在实施方式中作为“~部”说明的功能的程序。程序(例如程序验证程序)由CPU901读出并执行。即,程序使计算机作为“~部”发挥作用,此外,使计算机执行“~部”的顺序或方法。

文件组923包含由在实施方式中说明“~部”使用的各种数据(输入、输出、判定结果、计算结果、处理结果等)。

在实施方式中,结构图和流程图中包含的箭头主要表示数据或信号的输入/输出。

使用CPU 901、存储装置、输入装置、输出装置等硬件,执行基于流程图等说明的实施方式的处理。

在实施方式中,作为“~部”说明的部分可以是“~电路”、“~装置”、“~设备”,此外,也可以是“~步骤”、“~顺序”、“~处理”。即,作为“~部”说明的部分可以由固件、软件、硬件或它们的组合中的任意一个来实现。

通过实施方式1,例如能够起到以下的效果。

程序验证装置100能够通过静态分析,发现并警告如下情况:机密信息或个人信息等保护对象信息保持明文的形态或未经过适当的加密方法而流出到程序的外部。

即,程序验证装置100能够验证:“重要的信息没有以明文的形态从程序输出到外部”、“在重要的信息被加密的情况下,用于加密的密钥在程序内未被硬编码(常量化)”。

此外,能够防止在对象程序101是将保护对象信息适当地加密后输出的合适程序的情况下,程序验证装置100作出对象程序101存在脆弱性这样的误诊断。

加密用或解密用的密钥和密码是机密信息的一例,电话簿、住所、邮件、位置信息和活体信息是个人信息的一例。

程序的外部例如是指网络、其它程序、文件、数据库或可移动型存储介质等。

在实施方式1中,例如对以下的程序验证装置(100)进行了说明。将实施方式1的结构中对应结构的标号记载在括弧内。

程序验证装置(100)具有列表存储部(190)、程序输入部(110)、输出变量提取部(122)、密码变量提取部(123)、密码状态变量提取部(131)、密码状态判定部(140)和验证结果输出部(140)。

所述列表存储部存储:输出函数列表(182),其定义了输出特定的变量中设定的信息的输出函数;以及加密函数列表(183),其定义了对信息进行加密的加密函数。

所述程序输入部输入作为验证对象的程序,作为对象程序(101)(S110)。

所述输出变量提取部提取由所述对象程序使用的变量中的、设定由所述输出函数列表中定义的所述输出函数输出的信息作为输出信息的所述特定的变量,作为输出变量(S122)。

所述密码变量提取部提取由所述对象程序使用的变量中的、设定由所述加密函数列表中定义的所述加密函数加密后的信息作为密码信息的变量,作为密码变量(S123)。

所述密码状态变量提取部参照所述对象程序中包含的赋值语句,从所述对象程序提取被代入由所述密码变量提取部提取出的所述密码变量中设定的所述密码信息的变量,作为密码状态变量(S200)。

所述密码状态判定部判定由所述密码状态变量提取部提取出的所述密码状态变量与由所述输出变量提取部提取出的所述输出变量是否为相同的变量(S146-1)。

所述验证结果输出部输出基于所述密码状态判定部的判定结果的信息,作为所述对象程序的验证结果(S147)。

所述列表存储部存储定义了取得作为保护对象的保护对象信息的信息取得函数的信息取得函数列表(181)。

所述程序验证装置具有保护对象变量提取部(121)和保护对象判定部(140)。

所述保护对象变量提取部提取由所述对象程序使用的变量中的、设定由所述信息取得函数列表中定义的所述信息取得函数取得的所述保护对象信息的变量,作为保护对象变量(S121)。

所述保护对象判定部判定由所述保护对象变量提取部提取出的所述保护对象变量与由所述输出变量提取部提取出的所述输出变量是否为相同的变量(S145)。

所述验证结果输出部输出基于所述保护对象判定部的判定结果和所述密码状态判定部的判定结果的信息,作为所述对象程序的所述验证结果(S147)。

所述程序验证装置具有密钥变量提取部(123)和密钥内容判定部(132)。

所述密钥变量提取部提取由所述对象程序使用的变量中的、对所述加密函数作为设定有加密密钥的变量而指定的变量,作为密钥变量(S123)。

所述密钥内容判定部参照所述对象程序中包含的赋值语句,判定作为所述加密密钥而被代入由所述密钥变量提取部提取出的所述密钥变量的值是否为可变值(S300)。

所述验证结果输出部输出基于所述密钥内容判定部的判定结果、所述保护对象判定部的判定结果和所述密码状态判定部的判定结果的信息,作为所述对象程序的所述验证结果(S147)。

所述程序验证装置具有密钥状态判定部(132)。

所述密钥状态判定部参照所述对象程序中包含的赋值语句,判定作为所述加密密钥而被代入由所述密钥变量提取部提取出的所述密钥变量的值是否为隐匿值,其中,该隐匿值由于通过规定的隐匿运算生成而被隐匿(S300)。

所述验证结果输出部输出基于所述密钥状态判定部的判定结果、所述密钥内容判定部的判定结果、所述保护对象判定部的判定结果和所述密码状态判定部的判定结果的信息,作为所述对象程序的所述验证结果(S147)。

标号说明

100程序验证装置,101对象程序,110程序输入部,120必要信息提取部,121保护对象提取部,122输出函数提取部,123密码函数提取部,124变量信息提取部,130保护状态分析部,131保护对象状态取得部,132密钥状态取得部,140脆弱性判定部,181信息取得函数列表,182输出函数列表,183密码函数列表,184哈希函数列表,190验证装置存储部,191保护对象提取列表,192输出函数提取列表,193密码函数提取列表,194变量信息提取列表,195保护对象状态管理表,196密钥状态管理表,197程序验证结果,901CPU,902总线,903ROM,904RAM,905通信板,911显示器,912键盘,913鼠标,914驱动器,920磁盘装置,921OS,922程序组,923文件组。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号