JP5726385B2 - プログラム検証装置、プログラム検証方法およびプログラム検証プログラム - Google Patents

プログラム検証装置、プログラム検証方法およびプログラム検証プログラム Download PDF

Info

Publication number
JP5726385B2
JP5726385B2 JP2014538305A JP2014538305A JP5726385B2 JP 5726385 B2 JP5726385 B2 JP 5726385B2 JP 2014538305 A JP2014538305 A JP 2014538305A JP 2014538305 A JP2014538305 A JP 2014538305A JP 5726385 B2 JP5726385 B2 JP 5726385B2
Authority
JP
Japan
Prior art keywords
variable
program
encryption
key
output
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.)
Expired - Fee Related
Application number
JP2014538305A
Other languages
English (en)
Other versions
JPWO2014050431A1 (ja
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2014538305A priority Critical patent/JP5726385B2/ja
Application granted granted Critical
Publication of JP5726385B2 publication Critical patent/JP5726385B2/ja
Publication of JPWO2014050431A1 publication Critical patent/JPWO2014050431A1/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)

Description

本発明は、例えば、プログラムの信頼性を検証するプログラム検証装置、プログラム検証方法およびプログラム検証プログラムに関するものである。
プログラムの信頼性を検証する技術において、機密情報や個人情報等の重要な情報がプログラムによって外部(インターネット、他のプログラム、他のファイルまたはデータベースなど)へ流れ出る、という脆弱性を突き止める手法がある。
従来技術では、データの流れのみに注目してプログラムを解析するため、適切に暗号化された情報が外部に送出されるケースも脆弱性として誤検出してしまう。
プログラム開発者の立場としては、安全な実装を施したプログラムから脆弱性が誤検出されることは望ましくない。一方、ユーザの立場としては、プログラム内で自らの重要な情報が適切に取り扱われているか否かを確認したいというニーズがある。
ここでいう「重要な情報が適切に取り扱われている」とは以下の条件を満たすことをいう。
・重要な情報が平文のままプログラムから外部に出力されない。
・重要な情報が暗号化された場合において、暗号化に利用する鍵がプログラム内でハードコード(定数化)されていない。
特表2010−507165号公報 特表2008−502046号公報
中田育男、「コンパイラの構成と最適化」、朝倉書店、1999年9月、ISBN4−254−12139−3
本発明は、例えば、検証する対象である対象プログラムによって出力される情報が暗号化された後に出力される情報であるか否かを検証することを目的とする。
本発明のプログラム検証装置は、
変数と出力関数と暗号化関数とを使用すると共に代入文を含むプログラムを入力するプログラム入力部と、
前記出力関数によって出力される出力情報が設定される出力変数を前記プログラムから抽出する出力変数抽出部と、
前記暗号化関数によって暗号化された暗号情報が設定される暗号変数を前記プログラムから抽出する暗号変数抽出部と、
前記プログラムに含まれる代入文を参照し、前記暗号変数抽出部によって抽出された前記暗号変数に設定された前記暗号情報が代入される暗号状態変数を前記プログラムから抽出する暗号状態変数抽出部と、
前記暗号状態変数抽出部によって抽出された前記暗号状態変数と前記出力変数抽出部によって抽出された前記出力変数とが同じ変数であるか否かを判定する暗号状態判定部と、
前記暗号状態判定部の判定結果に基づいて前記プログラムの検証結果を出力する検証結果出力部とを備える。
本発明によれば、例えば、検証する対象である対象プログラムによって出力される情報が暗号化された後に出力される情報であるか否かを検証することができる。
実施の形態1におけるプログラム検証装置100の構成図。 実施の形態1における必要情報抽出部120の構成図。 実施の形態1における保護状態解析部130の構成図。 実施の形態1における脆弱性判定部140の概要図。 実施の形態1におけるプログラム検証装置100のプログラム検証方法を示すフローチャート。 実施の形態1における必要情報抽出処理(S120)を示すフローチャート。 実施の形態1における対象プログラム101の一例を示す図。 実施の形態1における情報取得関数リスト181の一例を示す図。 実施の形態1における保護対象抽出リスト191の一例を示す図。 実施の形態1における出力関数リスト182の一例を示す図。 実施の形態1における出力関数抽出リスト192の一例を示す図。 実施の形態1における対象プログラム101の一例を示す図。 実施の形態1における暗号関数リスト183の一例を示す図。 実施の形態1における暗号関数抽出リスト193の一例を示す図。 実施の形態1における対象プログラム101の一例を示す図。 実施の形態1における変数情報抽出リスト194の一例を示す図。 実施の形態1における保護状態解析処理(S130)を示すフローチャート。 実施の形態1における保護対象状態取得処理(S200)の一例を示すフローチャート。 実施の形態1における保護対象抽出リスト191の一例を示す図。 実施の形態1における保護対象状態管理表195の初期化の一例を示す図。 実施の形態1における保護対象状態管理表195の一例を示す図。 実施の形態1における対象プログラム101の一例を示す図。 実施の形態1における保護対象状態管理表195の一例を示す図。 実施の形態1における保護対象状態管理表195の一例を示す図。 実施の形態1における暗号関数抽出リスト193の一例を示す図。 実施の形態1における保護対象状態管理表195の一例を示す図。 実施の形態1における対象プログラム101の一例を示す図。 実施の形態1における保護対象抽出リスト191の一例を示す図。 実施の形態1における暗号関数抽出リスト193の一例を示す図。 実施の形態1における保護対象状態管理表195の一例を示す図。 実施の形態1における鍵状態取得処理(S300)の一例を示すフローチャート。 実施の形態1における鍵状態管理表196の構成図。 実施の形態1における暗号関数抽出リスト193の一例を示す図。 実施の形態1における変数情報抽出リスト194の一例を示す図。 実施の形態1における対象プログラム101の一例を示す図。 実施の形態1における鍵状態管理表196の一例を示す図。 実施の形態1における鍵変数解析処理(S350)を示すフローチャート。 実施の形態1における脆弱性判定処理(S140)の一例を示すフローチャート。 実施の形態1における出力関数抽出リスト192の一例を示す図。 実施の形態1における鍵状態管理表196の一例を示す図。 実施の形態1におけるプログラム検証装置100のハードウェア資源の一例を示す図。
実施の形態1.
検証する対象である対象プログラムが、保護対象情報を適切に暗号化した後に出力するプログラムであるか否かを検証するための形態について説明する。
図1は、実施の形態1におけるプログラム検証装置100の構成図である。
実施の形態1におけるプログラム検証装置100について、図1に基づいて説明する。
プログラム検証装置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の構成図である。
実施の形態1における必要情報抽出部120の構成について、図2に基づいて説明する。
必要情報抽出部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の構成図である。
実施の形態1における保護状態解析部130の構成について、図3に基づいて説明する。
保護状態解析部130は、保護対象状態取得部131および鍵状態取得部132を備える。
以下に、保護状態解析部130の各構成の概要について説明する。保護状態解析部130の各構成の詳細については後述する。
保護対象状態取得部131(暗号状態変数抽出部の一例)は、保護対象抽出リスト191と暗号関数抽出リスト193とに基づいて対象プログラム101を解析し、保護対象情報用の変数毎に変数に設定される保護対象情報が暗号化されるか否かを示す保護対象状態管理表195を生成する。
鍵状態取得部132(鍵内容判定部、鍵状態判定部の一例)は、暗号関数抽出リスト193と変数情報抽出リスト194とハッシュ関数リスト184とに基づいて対象プログラム101を解析し、暗号化で使用される暗号鍵毎に暗号鍵が保護されるか否かを示す鍵状態管理表196を生成する。
図4は、実施の形態1における脆弱性判定部140の概要図である。
実施の形態1における脆弱性判定部140の概要について、図4に基づいて説明する。
脆弱性判定部140(暗号状態判定部、保護対象判定部、検証結果出力部の一例)は、出力関数抽出リスト192と保護対象状態管理表195と鍵状態管理表196とに基づいて対象プログラム101に含まれる脆弱な要素を判定し、判定結果を示すプログラム検証結果197を出力する。
図5は、実施の形態1におけるプログラム検証装置100のプログラム検証方法を示すフローチャートである。
実施の形態1におけるプログラム検証装置100のプログラム検証方法について、図5に基づいて説明する。
まず、プログラム検証装置100のプログラム検証方法の概要について説明する。
S110において、プログラム入力部110は対象プログラム101を入力する。
S120において、必要情報抽出部120は対象プログラム101から各種情報を抽出し、各種情報の抽出リストを生成する。
S130において、保護状態解析部130は各種情報の抽出リストに基づいて保護対象情報の保護状態について対象プログラム101を解析する。
S140において、脆弱性判定部140は対象プログラム101の解析結果に基づいて対象プログラム101に含まれる脆弱な要素を判定し、判定結果を示すプログラム検証結果197を生成し、生成したプログラム検証結果197を出力する。
次に、S110からS140の各処理の詳細について説明する。
S110において、利用者は、キーボードやマウスなどの入力装置を用いて、検証したいプログラム(対象プログラム101)をプログラム検証装置100に対して指定する。
プログラム検証装置100のプログラム入力部110は、指定された対象プログラム101を入力する。
対象プログラム101はソースコードの形式で入力される。対象プログラム101がコンパイル済みのバイトコードである場合、プログラム入力部110は対象プログラム101をソースコードに逆コンパイルする。
例えば、対象プログラム101は補助記憶装置に予め記憶され、プログラム入力部110は補助記憶装置から対象プログラム101を入力する。入力とは、例えば、メモリ(検証装置記憶部190)の所定の記憶領域に記憶することである。
S110の後、S120に進む。
図6は、実施の形態1における必要情報抽出処理(S120)を示すフローチャートである。
実施の形態1における必要情報抽出処理(S120)について、図6に基づいて説明する。
必要情報抽出処理(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の一例を示す図である。
保護対象抽出処理(S121)の一例について、図7から図9に基づいて説明する。
情報取得関数リスト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に戻り、必要情報抽出処理(S120)の説明をS122から続ける。
S122において、出力関数抽出部122は、検証装置記憶部190から出力関数リスト182を取得する。
出力関数抽出部122は、取得した出力関数リスト182に基づいて、S110で入力された対象プログラム101から出力関数を抽出する。
出力関数抽出部122は、抽出した出力関数を一覧にした出力関数抽出リスト192を生成する。
S122の後、S123に進む。
図10は、実施の形態1における出力関数リスト182の一例を示す図である。
図11は、実施の形態1における出力関数抽出リスト192の一例を示す図である。
出力関数抽出処理(S122)の一例について、図7、図10および図11に基づいて説明する。
出力関数リスト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に戻り、必要情報抽出処理(S120)の説明をS123から続ける。
S123において、暗号関数抽出部123は、検証装置記憶部190から暗号関数リスト183を取得する。
暗号関数抽出部123は、取得した暗号関数リスト183に基づいて、S110で入力された対象プログラム101から暗号関数を抽出する。
暗号関数抽出部123は、抽出した暗号関数を一覧にした暗号関数抽出リスト193を生成する。
S123の後、S124に進む。
図12は、実施の形態1における対象プログラム101の一例を示す図である。
図13は、実施の形態1における暗号関数リスト183の一例を示す図である。
図14は、実施の形態1における暗号関数抽出リスト193の一例を示す図である。
暗号関数抽出処理(S123)の一例について、図12から図14に基づいて説明する。
暗号関数リスト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」が暗号化した情報を暗号変数「enc_tel」に設定することを示している。
図6に戻り、必要情報抽出処理(S120)の説明をS124から続ける。
S124において、変数情報抽出部124は、S110で入力された対象プログラム101から変数を抽出し、抽出した変数を一覧にした変数情報抽出リスト194を生成する。
このとき、変数情報抽出部124は、コンパイラの一般的なコード最適化技術として知られている定数伝播を、変数を抽出するための処理として利用することができる(非特許文献1参照)。
S124により、必要情報抽出処理(S120)は終了する。
図15は、実施の形態1における対象プログラム101の一例を示す図である。
図16は、実施の形態1における変数情報抽出リスト194の一例を示す図である。
変数情報抽出処理(S124)の一例について、図15および図16に基づいて説明する。
変数情報抽出部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は、例えば、可変の変数「profile」が対象プログラム101Cの1行目に使用されていること、及び、不変の変数「key」が対象プログラム101Cの4から6行目に使用されていることを示している。
図6で説明した必要情報抽出処理(S120)のS121からS124の各処理は、順番を入れ替えて実行しても、並行して実行しても構わない。
必要情報抽出処理(S120)の後、保護状態解析処理(S130)に進む(図5参照)。
図17は、実施の形態1における保護状態解析処理(S130)を示すフローチャートである。
実施の形態1における保護状態解析処理(S130)について、図17に基づいて説明する。
保護状態解析処理(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)の一例を示すフローチャートである。
実施の形態1における保護対象状態取得処理(S200)の一例について、図18に基づいて説明する。
保護対象状態取得処理(S200)は、S210からS261の各処理で構成される。
S210において、保護対象状態取得部131は、対象プログラム101の処理の流れを表すフローグラフを生成する。
フローグラフとは、プログラム内の一つの命令(および行番号)を表すノードと、ノード同士を処理順につなぐエッジとを用いて、プログラムの全ての処理経路(処理順序)を表すグラフのデータである。
例えば、保護対象状態取得部131は、既存のツールを利用して対象プログラム101のフローグラフを生成する。
S210の後、S220に進む。
S220において、保護対象状態取得部131は、保護対象状態管理表195を生成し、保護対象抽出リスト191に基づいて保護対象状態管理表195を初期化する。
S220の後、S230に進む。
図19は、実施の形態1における保護対象抽出リスト191の一例を示す図である。
図20は、実施の形態1における保護対象状態管理表195の初期化の一例を示す図である。
管理表初期化処理(S220)の一例について、図19および図20に基づいて説明する。
保護対象状態管理表195D(図20参照)は、「行番号」「平文」および「暗号文」を対応付けて含んでいる。
「行番号」は対象プログラム101の行番号を示す。
「平文」は暗号化されていない保護対象変数を示す。以下、暗号化されていない保護対象変数を「平文状態変数」という。
「暗号文」は暗号化された保護対象変数を示す。以下、暗号化された保護対象変数を「暗号状態変数」という。
図19の保護対象抽出リスト191Dは、「平文」状態の保護対象変数「profile」が対象プログラム101の1行目で設定され、「平文」状態の保護対象変数「name」が対象プログラム101の2行目で設定されていることを示している。
そこで、保護対象状態取得部131は、図20に示すように、保護対象状態管理表195Dの行番号「1行目」に対応付けられた「平文」の欄に保護対象変数「profile」を設定する。
また、保護対象状態取得部131は、保護対象状態管理表195Dの行番号「2行目」に対応付けられた「平文」の欄に保護対象変数「name」を設定する。
つまり、保護対象状態取得部131は、保護対象抽出リスト191Dに基づいて、保護対象変数が設定されている行の番号と保護対象変数の状態とに対応付けて保護対象変数の変数名を保護対象状態管理表195Dに設定する。
図20に示す保護対象状態管理表195Dは、図19に示す保護対象抽出リスト191Dに基づいて初期化した状態である。
図18に戻り、保護対象状態取得処理(S200)の説明をS230から続ける。
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で読み込んだ注目ノードが表す注目ノード命令が代入文であるか否かを判定する。
注目ノード命令が代入文である場合(YES)、S240に進む。
注目ノード命令が代入文でない場合(NO)、S260に進む。
S240において、保護対象状態取得部131は、注目ノード命令(代入文)の右辺(代入元)を以下の(1)(2)のように解析する。
(1)保護対象状態取得部131は、保護対象状態管理表195に設定された保護対象変数が注目ノード命令の右辺に含まれているか否かを解析する。
(2)保護対象状態取得部131は、暗号関数抽出リスト193を参照し、注目ノード命令の右辺が暗号関数抽出リスト193に設定された暗号化関数と保護対象状態管理表195に設定された暗号状態変数とのいずれかであるかを解析する。
S240の後、S250に進む。
S250において、保護対象状態取得部131は、S240の解析結果に基づいて、保護対象変数が注目ノード命令(代入文)の右辺(代入元)に含まれているか否かを判定する。
保護対象変数が注目ノード命令の右辺に含まれている場合(YES)、S251に進む。
保護対象変数が注目ノード命令の右辺に含まれていない場合(NO)、S260に進む。
S251において、保護対象状態取得部131は、S240の解析結果に基づいて、注目ノード命令(代入文)の右辺(代入元)が暗号化関数と暗号状態変数とのいずれかであるか否かを判定する。
注目ノード命令の右辺が暗号化関数と暗号状態変数とのいずれかである場合(YES)、S252に進む。
注目ノード命令の右辺が暗号化関数と暗号状態変数とのいずれでもない場合(NO)、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は、処理ポインタで指定されている注目ノードがフローグラフの最終ノードであるか否かを判定する。
注目ノードが最終ノードである場合(YES)、S261に進む。
注目ノードが最終ノードでない場合(NO)、保護対象状態取得部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が変化した場合(YES)、S230に戻り、S230から処理を繰り返す。
保護対象状態管理表195が変化していない場合(NO)、保護対象状態取得処理(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)の一例を示すフローチャートである。
実施の形態1における鍵状態取得処理(S300)の一例について、図31に基づいて説明する。
鍵状態取得処理(S300)は、S310からS370の各処理で構成される。
S310において、鍵状態取得部132は、対象プログラム101のフローグラフを生成する。但し、鍵状態取得部132は、対象プログラム101のフローグラフを生成せず、保護対象状態取得部131によって生成されるフローグラフ(図18のS210参照)を使用しても構わない。
S310の後、S320に進む。
S320において、鍵状態取得部132は鍵状態管理表196を生成して初期化する。
S320の後、S330に進む。
図32は、実施の形態1における鍵状態管理表196の構成図である。
実施の形態1における鍵状態管理表196の構成について、図32に基づいて説明する。
鍵状態管理表196は、「位置(行番号)」「鍵変数」「演算子(関数名)」および「内容」を対応付けて含んでいる。
「位置(行番号)」は暗号化関数が使用されている行の番号を示す。
「鍵変数」は暗号鍵として使用される鍵変数を示す。
「演算子(関数名)」は鍵変数を生成するために使用される演算子および関数を示す。
「内容」は鍵変数に設定される値が「可変」であるか又は「不変」であるかを示す。
初期化された鍵状態管理表196は、情報が何も設定されていない状態である(図32参照)。
図31に戻り、鍵状態取得処理(S200)の説明をS330から続ける。
S330において、鍵状態取得部132は、暗号関数抽出リスト193の先頭行を処理ポインタで指定する。ここで、処理ポインタとは暗号関数抽出リスト193の行を指定するものである。
S330の後、S331に進む。
S331において、鍵状態取得部132は、暗号関数抽出リスト193から処理ポインタで指定された行をメモリに読み込む。以下、S331で読み込んだ行を「注目行」とする。
S331の後、S340に進む。
S340において、鍵状態取得部132は、暗号関数抽出リスト193の注目行から鍵変数の変数名を取得し、取得した変数名で識別される鍵変数の内容(可変または不変)を変数情報抽出リスト194から取得する。
例えば、図33に示す暗号関数抽出リスト193FのNo「1」が注目行である場合、鍵状態取得部132は、鍵用の実引数「key2」(鍵変数)と同じ変数名に対応付けられた内容「可変」を図34に示す変数情報抽出リスト194Fから取得する。
図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の最終行である場合(YES)、鍵状態取得処理(S300)は終了する。
現在の注目行が暗号関数抽出リスト193の最終行でない場合(NO)、鍵状態取得部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)を示すフローチャートである。
鍵状態取得処理(S300)(図31参照)の鍵変数解析処理(S350)について、図37に基づいて説明する。
鍵変数解析処理(S350)は、S351からS356の各処理で構成される。
S351において、鍵状態取得部132は、暗号関数抽出リスト193の注目行の鍵変数が使用されている各行の行番号を変数情報抽出リスト194から取得し、取得した行番号で識別される行を表すノードのうち注目行の鍵変数を設定する代入文を表すノードをフローグラフから選択する。ここで、選択したノードを「注目ノード」とする。
例えば、注目行の鍵変数が「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で未選択の変数名が残っているか否かを判定する。
未選択の変数名が残っている場合(YES)、S353に戻る。
未選択の変数名が残っていない場合(NO)、鍵変数解析処理(S350)は終了する。
図38は、実施の形態1における脆弱性判定処理(S140)の一例を示すフローチャートである。
実施の形態1における脆弱性判定処理(S140)(図5参照)について、図38に基づいて説明する。
脆弱性判定処理(S140)は、S141からS149の各処理で構成される。
S141において、脆弱性判定部140は、S122(図6参照)で生成された出力関数抽出リスト192の先頭行を処理ポインタで指定する。ここで、処理ポインタとは出力関数抽出リスト192の行を指定するものである。
S141の後、S142に進む。
S142において、脆弱性判定部140は、出力関数抽出リスト192から処理ポインタで指定された行をメモリに読み込む。以下、S142で読み込んだ行を「注目行」とする。
S142の後、S143に進む。
S143において、脆弱性判定部140は、出力関数抽出リスト192の注目行を参照し、注目行の項目「出力の状態」が「平文」であるか否かを判定する。
例えば、図39に示す出力関数抽出リスト192DのNo「1」が注目行である場合、注目行の項目「出力の状態」は「平文」である。
図39は、実施の形態1における出力関数抽出リスト192の一例を示す図である。
注目行の項目「出力の状態」が「平文」である場合(YES)、S144に進む。
注目行の項目「出力の状態」が「平文」でない場合、つまり、注目行の項目「出力の状態」が「暗号文」である場合(NO)、S148に進む。
S144において、脆弱性判定部140は、出力関数抽出リスト192の注目行から出力変数(出力関数の実引数)を一つ選択する。
例えば、図39に示す出力関数抽出リスト192DのNo「1」が注目行である場合、注目行の出力変数(実引数)は「enc_name」である。
S144の後、S145に進む。
S145において、脆弱性判定部140は、S144で選択した出力変数がS200(図17参照)で生成された保護対象状態管理表195に含まれる保護対象変数と同じ変数であるか否かを判定する。
例えば、出力変数「enc_name」は図26に示す保護対象状態管理表195Dに含まれる保護対象変数である。
出力変数が保護対象変数である場合(YES)、S146−1に進む。
出力変数が保護対象変数でない場合(NO)、S148に進む。
S146−1において、脆弱性判定部140は、S144で選択した出力変数(保護対象変数)が保護対象状態管理表195の項目「暗号文」に含まれる暗号状態変数であるか否かを判定する。
例えば、出力変数「enc_name」は図26に示す保護対象状態管理表195Dの項目「暗号文」に含まれる暗号状態変数である。
出力変数が暗号状態変数である場合(YES)、S146−2に進む。
出力変数が暗号状態変数でない場合、つまり、出力変数が平文状態変数である場合(NO)、S147に進む。
S146−2において、脆弱性判定部140は、保護対象状態管理表195から出力変数(暗号状態変数)に対応付けて設定された暗号化関数の行番号を取得する。
また、脆弱性判定部140は、取得した暗号化関数の行番号に対応付けられた鍵変数の内容(可変または不変)をS300(図17参照)で生成された鍵状態管理表196から取得する。
そして、脆弱性判定部140は、取得した鍵変数の内容が可変であるか否かを判定する。
例えば、脆弱性判定部140は、出力変数「enc_name」に対応付けられた暗号化関数「enc」の行番号「7行目」を図26に示す保護対象状態管理表195Dから取得する。
また、脆弱性判定部140は、取得した行番号「7行目」に対応付けられた鍵変数「key」の内容「不変」を図40に示す鍵状態管理表196Dから取得する。
図40は、実施の形態1における鍵状態管理表196の一例を示す図である。
鍵変数の内容が可変である場合(YES)、S146−3に進む。
鍵変数の内容が可変でない場合、つまり、鍵変数の内容が不変である場合(NO)、S147に進む。
S146−3において、脆弱性判定部140は、鍵状態管理表196を参照し、鍵変数に設定される暗号鍵がハッシュ関数または「xor」などの所定の秘匿演算によって生成される秘匿値であるか否かを判定する。所定の秘匿演算は、第三者によって推測されず、第三者に対して秘匿される秘匿値を算出するための演算である。
例えば、図36に示す鍵状態管理表196Fは鍵変数「key2」が「xor」およびハッシュ関数「hash」を用いて生成されることを示している。この場合、脆弱性判定部140は鍵変数「key2」が保護されていると判定する。
鍵変数が保護されている場合(YES)、S148に進む。
鍵変数が保護されていない場合(NO)、S147に進む。
S147において、脆弱性判定部140は、プログラム検証結果197に判定結果を追加する。
例えば、脆弱性判定部140は、プログラム検証結果197に以下のような判定結果を追加する。
S146−1において出力変数が暗号状態変数でない場合(NO)、脆弱性判定部140は出力変数の情報(変数名、行番号など)および出力変数が平文状態であること(保護対象情報が暗号化されずに出力されること)を示す情報をプログラム検証結果197に追加する。
S146−2において鍵変数が可変でない場合(NO)、脆弱性判定部140は鍵変数の情報(関数名、変数名、行番号など)および鍵変数が不変(定数)であること(保護対象情報が適切に暗号化されずに出力されること)を示す情報をプログラム検証結果197に追加する。
S146−3において鍵変数が保護されていない場合(NO)、脆弱性判定部140は鍵変数の情報(関数名、変数名、行番号など)および鍵変数が保護されていないこと(保護対象情報が適切に暗号化されずに出力されること)を示す情報をプログラム検証結果197に追加する。
S147の後、S148に進む。
S148において、脆弱性判定部140は、S144で未選択の出力変数が残っているか否かを判定する。
未選択の出力変数が残っている場合(YES)、S144に戻る。
未選択の出力変数が残っていない場合(NO)、S149に進む。
S149において、脆弱性判定部140は、現在の注目行が出力関数抽出リスト192の最終行であるか否かを判定する。
現在の注目行が出力関数抽出リスト192の最終行である場合(YES)、脆弱性判定部140はプログラム検証結果197をディスプレイまたはプリンタなどの出力装置に出力する。そして、脆弱性判定処理(S140)は終了する。
現在の注目行が出力関数抽出リスト192の最終行でない場合(NO)、脆弱性判定部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(コンピュータの一例)は、CPU901(Central Processing Unit)を備えている。CPU901は、バス902を介してROM903、RAM904、通信ボード905(通信装置)、ディスプレイ911(表示装置)、キーボード912、マウス913、ドライブ914、磁気ディスク装置920などのハードウェアデバイスと接続され、これらのハードウェアデバイスを制御する。ドライブ914は、FD(Flexible Disk)、CD(Compact Disc)、DVD(Digital Versatile Disc)などの記憶媒体を読み書きする装置である。
ROM903、RAM904、磁気ディスク装置920およびドライブ914は記憶装置の一例である。キーボード912、マウス913、通信ボード905および記憶装置は入力装置の一例である。ディスプレイ911、通信ボード905および記憶装置は出力装置の一例である。
通信ボード905は、有線または無線で、LAN(Local Area Network)、インターネット、電話回線などの通信網に接続している。
磁気ディスク装置920には、OS921(オペレーティングシステム)、プログラム群922、ファイル群923が記憶されている。
プログラム群922には、実施の形態において「〜部」として説明する機能を実行するプログラムが含まれる。プログラム(例えば、プログラム検証プログラム)は、CPU901により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。
ファイル群923には、実施の形態において説明する「〜部」で使用される各種データ(入力、出力、判定結果、計算結果、処理結果など)が含まれる。
実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。
フローチャートなどに基づいて説明する実施の形態の処理はCPU901、記憶装置、入力装置、出力装置などのハードウェアを用いて実行される。
実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
実施の形態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 プログラム検証結果、901 CPU、902 バス、903 ROM、904 RAM、905 通信ボード、911 ディスプレイ、912 キーボード、913 マウス、914 ドライブ、920 磁気ディスク装置、921 OS、922 プログラム群、923 ファイル群。

Claims (8)

  1. 変数と出力関数と暗号化関数とを使用すると共に代入文を含むプログラムを入力するプログラム入力部と、
    前記出力関数によって出力される出力情報が設定される出力変数を前記プログラムから抽出する出力変数抽出部と、
    前記暗号化関数によって暗号化された暗号情報が設定される暗号変数を前記プログラムから抽出する暗号変数抽出部と、
    前記プログラムに含まれる代入文を参照し、前記暗号変数抽出部によって抽出された前記暗号変数に設定された前記暗号情報が代入される暗号状態変数を前記プログラムから抽出する暗号状態変数抽出部と、
    前記暗号状態変数抽出部によって抽出された前記暗号状態変数と前記出力変数抽出部によって抽出された前記出力変数とが同じ変数であるか否かを判定する暗号状態判定部と、
    前記暗号状態判定部の判定結果に基づいて前記プログラムの検証結果を出力する検証結果出力部と
    を備えることを特徴とするプログラム検証装置。
  2. 前記プログラム検証装置は、
    前記プログラムで使用されている変数のうち、情報取得関数によって取得された保護対象情報が設定される保護対象変数を抽出する保護対象変数抽出部と、
    前記保護対象変数抽出部によって抽出された前記保護対象変数と前記出力変数抽出部によって抽出された前記出力変数とが同じ変数であるか否かを判定する保護対象判定部とを備え、
    前記検証結果出力部は、前記保護対象判定部の判定結果と前記暗号状態判定部の判定結果とに基づいて前記プログラムの前記検証結果を出力する
    ことを特徴とする請求項1記載のプログラム検証装置。
  3. 前記プログラム検証装置は、
    前記プログラムで使用されている変数のうち、前記暗号化関数によって使用される暗号鍵が設定される鍵変数を抽出する鍵変数抽出部と、
    前記プログラムに含まれる代入文を参照し、前記鍵変数抽出部によって抽出された前記鍵変数に前記暗号鍵として代入される値が可変値であるか否かを判定する鍵内容判定部とを備え、
    前記検証結果出力部は、前記鍵内容判定部の判定結果と前記保護対象判定部の判定結果と前記暗号状態判定部の判定結果とに基づいて前記プログラムの前記検証結果を出力する
    ことを特徴とする請求項2記載のプログラム検証装置。
  4. 前記プログラム検証装置は、
    前記プログラムに含まれる代入文を参照し、前記鍵変数抽出部によって抽出された前記鍵変数に前記暗号鍵として代入される値が秘匿演算によって秘匿される秘匿値であるか否かを判定する鍵状態判定部を備え、
    前記検証結果出力部は、前記鍵状態判定部の判定結果と前記鍵内容判定部の判定結果と前記保護対象判定部の判定結果と前記暗号状態判定部の判定結果とに基づいて前記プログラムの前記検証結果を出力する
    ことを特徴とする請求項3記載のプログラム検証装置。
  5. 前記プログラム検証装置は、
    前記プログラムで使用されている変数のうち、前記暗号化関数によって使用される暗号鍵が設定される鍵変数を抽出する鍵変数抽出部と、
    前記プログラムに含まれる代入文を参照し、前記鍵変数抽出部によって抽出された前記鍵変数に前記暗号鍵として代入される値が可変値であるか否かを判定する鍵内容判定部とを備え、
    前記検証結果出力部は、前記鍵内容判定部の判定結果と前記暗号状態判定部の判定結果とに基づいて前記プログラムの前記検証結果を出力する
    ことを特徴とする請求項1記載のプログラム検証装置。
  6. 前記プログラム検証装置は、
    前記プログラムで使用されている変数のうち、前記暗号化関数によって使用される暗号鍵が設定される鍵変数を抽出する鍵変数抽出部と、
    前記プログラムに含まれる代入文を参照し、前記鍵変数抽出部によって抽出された前記鍵変数に前記暗号鍵として代入される値が秘匿演算によって秘匿される秘匿値であるか否かを判定する鍵状態判定部を備え、
    前記検証結果出力部は、前記鍵状態判定部の判定結果と前記暗号状態判定部の判定結果とに基づいて前記プログラムの前記検証結果を出力する
    ことを特徴とする請求項1記載のプログラム検証装置。
  7. プログラム入力部と、出力変数抽出部と、暗号変数抽出部と、暗号状態変数抽出部と、暗号状態判定部と、検証結果出力部とを備えるコンピュータを用いるプログラム検証方法であって、
    前記プログラム入力部が、変数と出力関数と暗号化関数とを使用すると共に代入文を含むプログラムを入力し、
    前記出力変数抽出部が、前記出力関数によって出力される出力情報が設定される出力変数を前記プログラムから抽出し、
    前記暗号変数抽出部が、前記暗号化関数によって暗号化された暗号情報が設定される暗号変数を前記プログラムから抽出し、
    前記暗号状態変数抽出部が、前記プログラムに含まれる代入文を参照し、前記暗号変数抽出部によって抽出された前記暗号変数に設定された前記暗号情報が代入される暗号状態変数を前記プログラムから抽出し、
    前記暗号状態判定部が、前記暗号状態変数抽出部によって抽出された前記暗号状態変数と前記出力変数抽出部によって抽出された前記出力変数とが同じ変数であるか否かを判定し、
    前記検証結果出力部が、前記暗号状態判定部の判定結果に基づいて前記プログラムの検証結果を出力する
    ことを特徴とするプログラム検証方法。
  8. 請求項7記載のプログラム検証方法をコンピュータに実行させるためのプログラム検証プログラム。
JP2014538305A 2012-09-26 2013-08-30 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム Expired - Fee Related JP5726385B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014538305A JP5726385B2 (ja) 2012-09-26 2013-08-30 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2012211991 2012-09-26
JP2012211991 2012-09-26
JP2014538305A JP5726385B2 (ja) 2012-09-26 2013-08-30 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム
PCT/JP2013/073316 WO2014050431A1 (ja) 2012-09-26 2013-08-30 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム

Publications (2)

Publication Number Publication Date
JP5726385B2 true JP5726385B2 (ja) 2015-05-27
JPWO2014050431A1 JPWO2014050431A1 (ja) 2016-08-22

Family

ID=50387840

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014538305A Expired - Fee Related JP5726385B2 (ja) 2012-09-26 2013-08-30 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム

Country Status (5)

Country Link
US (1) US9501646B2 (ja)
EP (1) EP2902939A4 (ja)
JP (1) JP5726385B2 (ja)
CN (1) CN104662553B (ja)
WO (1) WO2014050431A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10657262B1 (en) * 2014-09-28 2020-05-19 Red Balloon Security, Inc. Method and apparatus for securing embedded device firmware
US10050798B2 (en) * 2015-02-06 2018-08-14 Mitsubishi Electric Corporation Cryptographic block identification apparatus, cryptographic block identification method, and non-transitory computer readable recording medium storing cryptographic block identification program
FR3094515B1 (fr) * 2019-03-28 2021-09-10 Ingenico Group procédé d’exécution de code sécurisé, dispositifs, système et programmes correspondants
US11405215B2 (en) * 2020-02-26 2022-08-02 International Business Machines Corporation Generation of a secure key exchange authentication response in a computing environment
US11310036B2 (en) 2020-02-26 2022-04-19 International Business Machines Corporation Generation of a secure key exchange authentication request in a computing environment
US11489821B2 (en) 2020-02-26 2022-11-01 International Business Machines Corporation Processing a request to initiate a secure data transfer in a computing environment
US11502834B2 (en) 2020-02-26 2022-11-15 International Business Machines Corporation Refreshing keys in a computing environment that provides secure data transfer
US11184160B2 (en) 2020-02-26 2021-11-23 International Business Machines Corporation Channel key loading in a computing environment
US11546137B2 (en) 2020-02-26 2023-01-03 International Business Machines Corporation Generation of a request to initiate a secure data transfer in a computing environment
US11652616B2 (en) 2020-02-26 2023-05-16 International Business Machines Corporation Initializing a local key manager for providing secure data transfer in a computing environment
US20230134937A1 (en) * 2020-04-24 2023-05-04 Nec Corporation Security inspection apparatus, security inspection method, and program
CN111757176B (zh) * 2020-06-11 2021-11-30 青岛海信传媒网络技术有限公司 流媒体文件安全播放方法及显示设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008502046A (ja) * 2004-06-04 2008-01-24 フォーティファイ ソフトウェア, インコーポレイテッド セキュアーソフトウェアを開発し、テストし、監視するための装置および方法
JP2009129206A (ja) * 2007-11-22 2009-06-11 Toshiba Corp 情報処理装置、プログラム検証方法及びプログラム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09101880A (ja) 1995-10-04 1997-04-15 Fujitsu Ltd プログラム分析装置
JP4547861B2 (ja) 2003-03-20 2010-09-22 日本電気株式会社 不正アクセス防止システム、不正アクセス防止方法、および不正アクセス防止プログラム
JP4164036B2 (ja) 2004-02-05 2008-10-08 トレンドマイクロ株式会社 ネットワークを介して提供されるプログラムに対する受信装置上でのセキュリティの確保
US20050268326A1 (en) 2004-05-04 2005-12-01 Microsoft Corporation Checking the security of web services configurations
US7559080B2 (en) 2004-05-04 2009-07-07 Microsoft Corporation Automatically generating security policies for web services
US7975306B2 (en) 2004-06-04 2011-07-05 Hewlett-Packard Development Company, L.P. Apparatus and method for monitoring secure software
US20050273860A1 (en) 2004-06-04 2005-12-08 Brian Chess Apparatus and method for developing, testing and monitoring secure software
US7207065B2 (en) 2004-06-04 2007-04-17 Fortify Software, Inc. Apparatus and method for developing secure software
US20050273859A1 (en) 2004-06-04 2005-12-08 Brian Chess Apparatus and method for testing secure software
JP4628073B2 (ja) 2004-11-30 2011-02-09 株式会社エヌ・ティ・ティ・ドコモ アクセス制御装置及びアクセス制御方法
US20070107057A1 (en) 2005-11-10 2007-05-10 Docomo Communications Laboratories Usa, Inc. Method and apparatus for detecting and preventing unsafe behavior of javascript programs
JP4587976B2 (ja) 2006-02-27 2010-11-24 日立ソフトウエアエンジニアリング株式会社 アプリケーションの脆弱性検査方法および装置
WO2008047351A2 (en) 2006-10-19 2008-04-24 Checkmarx Ltd. Locating security vulnerabilities in source code
JP4512083B2 (ja) 2006-12-20 2010-07-28 トレンドマイクロ株式会社 ネットワークを介して通信端末に提供されるプログラムに対する伝送経路上でのセキュリティの確保
JP4951416B2 (ja) 2007-06-01 2012-06-13 株式会社 日立システムアンドサービス プログラム検証方法、プログラム検証装置
JP5171907B2 (ja) * 2010-09-13 2013-03-27 株式会社東芝 情報処理装置、情報処理プログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008502046A (ja) * 2004-06-04 2008-01-24 フォーティファイ ソフトウェア, インコーポレイテッド セキュアーソフトウェアを開発し、テストし、監視するための装置および方法
JP2009129206A (ja) * 2007-11-22 2009-06-11 Toshiba Corp 情報処理装置、プログラム検証方法及びプログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNJ201210010033; 山本 匠 Takumi Yamamoto: 'Webアプリケーション入出力解析システムの評価' 電子情報通信学会2012年総合大会講演論文集 情報・システム1 PROCEEDINGS OF THE 2012 IEICE GENERA , 20120306, p.33 *
JPN6013055146; 山本 匠 Takumi Yamamoto: 'Webアプリケーション入出力解析システムの評価' 電子情報通信学会2012年総合大会講演論文集 情報・システム1 PROCEEDINGS OF THE 2012 IEICE GENERA , 20120306, p.33 *

Also Published As

Publication number Publication date
US20150302202A1 (en) 2015-10-22
EP2902939A4 (en) 2016-04-27
CN104662553A (zh) 2015-05-27
WO2014050431A1 (ja) 2014-04-03
CN104662553B (zh) 2017-09-01
EP2902939A1 (en) 2015-08-05
JPWO2014050431A1 (ja) 2016-08-22
US9501646B2 (en) 2016-11-22

Similar Documents

Publication Publication Date Title
JP5726385B2 (ja) プログラム検証装置、プログラム検証方法およびプログラム検証プログラム
US9576147B1 (en) Security policy application through data tagging
CN109075976A (zh) 取决于密钥认证的证书发布
KR20140099126A (ko) 소프트웨어를 보안하기 위하여 해시 함수를 이용한 소프트웨어 처리 방법, 그 장치 및 그 방법을 실행하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체
JP6073320B2 (ja) デジタル署名するオーソリティ依存のプラットフォームシークレット
JP2019502997A (ja) ウェブページ、ウェブアプリ、およびアプリケーションをセキュリティ保護すること
JP2004038939A (ja) 対称鍵暗号化に基づくデータの保存および検索
EP3035582B1 (en) Binding white-box implementation to reduced secure element
JP6451938B2 (ja) 暗号文照合システム、方法、およびプログラム
US20200228346A1 (en) Encrypted data generation device, digital signature generation device, digital signature-attached data generation device, and digital signature-attached data generation system
JP6738061B2 (ja) 暗号文照合システム、方法、および記録媒体
US8499357B1 (en) Signing a library file to verify a callback function
EP2286610B1 (en) Techniques for peforming symmetric cryptography
JP6423100B2 (ja) 暗号のシステム及び方法
WO2017216924A1 (ja) 鍵生成源特定装置、鍵生成源特定方法及び鍵生成源特定プログラム
Lee et al. Classification and analysis of security techniques for the user terminal area in the internet banking service
WO2017209228A1 (ja) 暗号化情報照合装置、暗号化情報照合方法、及び、暗号化情報照合プログラムが格納された記録媒体
JP2009169489A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
JP2011123229A (ja) プログラムコード暗号化装置及びプログラム
CN115668334A (zh) 隐匿信息处理系统、加密装置、加密方法和加密程序
Luo et al. A Usability Study of Cryptographic API Design
Wang et al. Automated security proof of cryptographic support commands in TPM 2.0
JP6752347B1 (ja) 情報処理装置、コンピュータプログラム及び情報処理方法
WO2020087381A1 (zh) 模型数据的载入方法、装置、设备和存储介质
WO2023021931A1 (ja) 情報処理プログラムおよび情報処理装置

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150303

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150331

R150 Certificate of patent or registration of utility model

Ref document number: 5726385

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees