JP2009169489A - 暗号化方法、復号化方法、暗号化装置、復号化装置 - Google Patents

暗号化方法、復号化方法、暗号化装置、復号化装置 Download PDF

Info

Publication number
JP2009169489A
JP2009169489A JP2008003968A JP2008003968A JP2009169489A JP 2009169489 A JP2009169489 A JP 2009169489A JP 2008003968 A JP2008003968 A JP 2008003968A JP 2008003968 A JP2008003968 A JP 2008003968A JP 2009169489 A JP2009169489 A JP 2009169489A
Authority
JP
Japan
Prior art keywords
instruction
encryption
decoding
jump
unit
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.)
Withdrawn
Application number
JP2008003968A
Other languages
English (en)
Inventor
Jun Nakajima
純 中嶋
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry 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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP2008003968A priority Critical patent/JP2009169489A/ja
Publication of JP2009169489A publication Critical patent/JP2009169489A/ja
Withdrawn legal-status Critical Current

Links

Images

Abstract

【課題】コンピュータプログラムの暗号化に際し、暗号ブロック連鎖を行うことのできる暗号化方法を得る。
【解決手段】プログラムを記憶装置から取得するステップと、プログラムの条件分岐命令と無条件ジャンプ命令のジャンプ先直前に、当該ジャンプ先へジャンプする命令を新たに挿入するジャンプ命令挿入ステップと、ジャンプ命令挿入ステップで新たなジャンプ命令を挿入したプログラムを、直前に暗号化した命令を暗号化に利用しながら連鎖的に暗号化する連鎖暗号化ステップと、をコンピュータに実行させ、連鎖暗号化ステップでは、暗号化する命令と、直前に暗号化した命令との排他的論理和をとった上で当該命令を暗号化し、暗号化する命令の直前の命令が条件分岐命令または無条件ジャンプ命令であった場合、当該命令の暗号化に際し、直前の命令を暗号化に利用することに代えて所定の初期値を暗号化に利用する。
【選択図】図1

Description

本発明は、暗号化方法および装置、復号化方法および装置に関するものである。
コンピュータのCPU(Central Processing Unit)上で実行されるプログラムを解析して不正にその内容を取得する攻撃手法として、CPUとメモリの間のデータバスに直接プローブを当て、ロジックアナライザを用いてCPUの実行する命令や、レジスタにロードされるデータなどを解析する、タンパリング攻撃というものがある。
また、このタンパリング攻撃に対する対策として、データバス上を暗号化する、on the fly暗号という技術がある。また、バス暗号化のための専用プロセッサも開発されている。
on the fly暗号では、1命令または1ワードのデータを1ブロックとして独立に暗号化を行う。この場合、暗号ブロックと平文ブロックは1対1に対応付けられ、暗号化強度はさほど高くない。
一方、通常のメッセージ暗号化では、暗号ブロックが次のブロックの暗号化に用いられる暗号ブロック連鎖を行う場合があり、この場合は暗号ブロックと平文ブロックは1対1には対応せず、上述の1対1に対応する場合と比較して、既知平文攻撃や選択暗号文攻撃に対する暗号化強度が高くなる。
上述のon the fly暗号において、暗号ブロック連鎖が行われないのは、暗号化対象の特性による。
コンピュータプログラムに対するタンパリング攻撃への対策として行われるon the fly暗号の暗号化対象は、攻撃対象となるコンピュータプログラムである。
コンピュータプログラムは、一般的な平文メッセージと異なり、条件分岐や繰り返し処理などが内在しており、各暗号ブロックの復号順序が一意に定められない。したがって、暗号ブロック連鎖のように暗号化時と復号化時の順序が一意である必要がある手法は、適用することができないのである。
上述の課題に関し、下記非特許文献1では、暗号ブロック連鎖を行うことに代えて、暗号ブロックの保存先であるメモリのアドレスをランダム化したり、そのアドレスを鍵として用いたりすることで、解読を困難にする手法が記載されている。
また、下記非特許文献2では、上述の非特許文献1に記載の技術の他、種々の耐タンパリング化手法について解説されている。
Markus G.Kuhn,"Cipher Instruction Search Attack on the BUS−Encryption Security Microcontroller DS5002FP",IEEE TRANSACTIONS ON COMPUTERS,VOL.47,NO.10,pp.1153−1157,OCTOBER 1998 門田暁人,Clark Thomborson,"ソフトウェアプロテクションの技術動向(後編)−ハードウェアによるソフトウェア耐タンパー化技術",情報処理,Vol.46,No.5,pp.558−563,2005.5
上述の非特許文献1に記載の技術は、Kuhnが弱点を発見している。
Kuhnは、適当なビット列を暗号化された命令としてCPUに入力し、そのときのCPUの挙動を観察することを繰り返し、暗号文命令と平文命令の対応テーブルを作った。そして、そのテーブルを元に、CPUからパラレルポートへメモリ上の全データを書き出す暗号化プログラムを得ることができた。
パラレルポートに出力されたデータは暗号化されていないため、平文と暗号文の対応表が作成可能であるということを利用したものである。
上述の弱点の原因は、暗号ブロックと平文が1対1に対応しているため、選択暗号文攻撃によって、所望の動作をする暗号化された状態のプログラムが得られることにある。
これを回避する1つの手法として、暗号ブロック連鎖を行うことが挙げられるが、先に説明したように、コンピュータプログラムを暗号化する際には、暗号ブロック連鎖を行うことができない。
そのため、コンピュータプログラムの暗号化に際し、暗号ブロック連鎖を行うことのできる暗号化方法および装置、その復号化方法および装置が望まれていた。
本発明に係る暗号化方法は、演算装置に条件分岐命令または無条件ジャンプ命令の少なくとも一方を実行させるプログラムを、コンピュータを用いて暗号化する方法であって、前記プログラムを記憶装置から取得するステップと、前記プログラムの条件分岐命令と無条件ジャンプ命令のジャンプ先直前に、当該ジャンプ先へジャンプする命令を新たに挿入するジャンプ命令挿入ステップと、前記ジャンプ命令挿入ステップで新たなジャンプ命令を挿入した前記プログラムを、直前に暗号化した命令を暗号化に利用しながら連鎖的に暗号化する連鎖暗号化ステップと、を前記コンピュータに実行させ、前記連鎖暗号化ステップでは、暗号化する命令と、直前に暗号化した命令との排他的論理和をとった上で当該命令を暗号化し、暗号化する命令の直前の命令が条件分岐命令または無条件ジャンプ命令であった場合、当該命令の暗号化に際し、直前の命令を暗号化に利用することに代えて所定の初期値を暗号化に利用するものである。
本発明に係る暗号化方法によれば、暗号化を行う前に、条件分岐命令または無条件ジャンプ命令のジャンプ先直前に、当該ジャンプ先へジャンプする命令を新たに挿入しておき、通常の命令は連鎖的に暗号化し、ジャンプ命令に関しては所定の初期値を暗号化に用いる。
そのため、条件分岐命令や無条件ジャンプ命令が存在する場合でも、これらのジャンプ先命令を暗号化する際には、所定の初期値が用いられていることが分かっているので、復号順序が一意でないことは問題にならない。
したがって、条件分岐命令や無条件ジャンプ命令が存在するコンピュータプログラムの暗号化に際しても、暗号ブロック連鎖を適用することができる。
実施の形態1.
図1は、本発明の実施の形態1に係る暗号化装置100の機能ブロック図である。
暗号化装置100は、ジャンプ先アドレス収集部110、ジャンプ命令収集部120、ジャンプ命令挿入部130、鍵保持部141、暗号化部142、排他的論理和演算器143、遅延部150、初期ベクトル記憶部160、初期化判定部170を備える。
また、図1では、暗号化装置100の周辺構成として、オリジナルコードメモリ300、変換コードメモリ400、命令メモリ500を併せて記載した。
ジャンプ先アドレス収集部110は、オリジナルコードメモリ300に格納されているプログラムコードより、条件分岐命令や無条件ジャンプ命令のジャンプ先アドレスを取得する。
なお、ここでいうプログラムコードとは、CPUの実行命令形式、または少なくとも実行単位がCPUの実効命令形式と等しい形式に変換されているものをいう。具体的には、マシンコードやアセンブラコードが相当する。以下同様である。
ジャンプ命令収集部120は、オリジナルコードメモリ300に格納されているプログラムコードより、条件分岐命令や無条件ジャンプ命令が存在する箇所を取得する。
ジャンプ命令挿入部130は、後述の図4で説明する手順により、オリジナルコードメモリ300に格納されているプログラムコードに新たなジャンプ命令を挿入し、変換コードメモリ400に格納する。ただし、挿入時にジャンプ命令収集部120を参照してすでに無条件ジャンプ命令や条件分岐命令が存在していることが分かった場合には挿入をしないとしても良い。
鍵保持部141は、暗号化鍵を保持する。
暗号化部142は、鍵保持部141が保持している暗号化鍵を用いて暗号化を行う。
遅延部150は、後述の図2で説明する構成を備えており、入力された命令を、次の命令が入力されたときに出力する。即ち、先に入力された命令を、1ステップ遅れて出力する機能を備える。
排他的論理和演算器143は、変換コードメモリ400と遅延部150より入力値を受け取り、その排他的論理和を暗号化部142に出力する。
初期ベクトル記憶部160は、後述の図4で説明する暗号化処理を行うための初期値(以後、初期ベクトルIVと呼ぶ)を格納している。
初期化判定部170は、変換コードメモリ400よりジャンプ命令挿入後のプログラムコードを取得し、条件分岐命令や無条件ジャンプ命令を検出すると、遅延部150にIV上書き信号を出力する。このときの動作は、後述の図4で説明する。
オリジナルコードメモリ300は、暗号化前のプログラムコードを格納している。
変換コードメモリ400は、ジャンプ命令挿入後のプログラムコードを格納する。
命令メモリ500は、暗号化後のプログラムコードを格納する。
図2は、遅延部150の機能ブロック図である。
遅延部150は、第1レジスタ151、マルチプレクサ152、第2レジスタ153を備える。
第1レジスタ151は、暗号化部142が出力する暗号化された命令を1命令分格納する。先に第1レジスタ151に格納されていた命令は、第2レジスタ153にコピーされる。
マルチプレクサ152は、第2レジスタ153に出力すべき命令を、第1レジスタ151から受け取るか、それとも初期ベクトル記憶部160が格納している初期ベクトルIVにするかを切り替える。切り替えは、初期化判定部170が出力するIV上書き信号の入力を契機に行われる。
第2レジスタ153は、マルチプレクサ152が出力する命令を受け取り、1命令分格納する。
なお、第2レジスタ153には、初期値として初期ベクトルIVが格納される。
本実施の形態1における「連鎖暗号化部」は、暗号化部142、遅延部150がこれに相当する。また、「初期値」は、初期ベクトルIVがこれに相当する。
ジャンプ先アドレス収集部110、ジャンプ命令収集部120、ジャンプ命令挿入部130、暗号化部142、排他的論理和演算器143、遅延部150、初期化判定部170は、これらの機能を実現する回路デバイスのようなハードウェアで構成することもできるし、CPUやマイコン等の演算装置と、その動作を規定するソフトウェアとで構成することもできる。また、必要に応じて、外部の記憶装置を用いることもできるし、記憶回路を内在することもできる。
鍵保持部141、初期ベクトル記憶部160は、フラッシュROM(Read Only Memory)のような記憶装置で構成することができる。これらを一体的に構成することもできる。
以上、本実施の形態1に係る暗号化装置100の構成について説明した。
次に、暗号化装置100の暗号化動作について説明する。
図1の構成の下では、プログラムコードの命令Ijは、下記(式1)により暗号命令Cjに暗号化される。
Figure 2009169489
上記(式1)は、命令Ijの暗号化に際し、先の命令の暗号化結果であるCj-1が用いられることを示している。即ち、暗号化部142は、上記(式1)を用いた暗号ブロック連鎖を行うものである。
しかし、先に説明したように、プログラムコードを暗号化すると、条件分岐や無条件ジャンプが発生した時点で、暗号の連鎖が途切れてしまう。
例えば、I1−>I2−>I3−>I4−>I5という命令列を暗号化して、C1−>C2−>C3−>C4−>C5という暗号命令列を得たとする。この暗号命令列を復号化して実行するとき、例えば暗号命令C2の復号を行うためには、C1が復号化処理部に入力されなければならない。
しかし、もしプログラムがI1−>I2−>I5−>I3−>I4というように、2番目の命令I2から5番目の命令I5へジャンプしている場合、暗号命令C5の復号を行うためには、C2が復号化処理部に入力されていなければならないが、C5の暗号化にはC4が用いられているため、正しい復号化を行うことができない。
そこで、本実施の形態1では、暗号化に際し以下のルールを設け、暗号化前にプログラムコードの変換を行う。
<暗号化ルール>
(1)プログラムコードの暗号化を行う前に、条件分岐命令または無条件ジャンプ命令のジャンプ先となる可能性のある命令(命令sと呼ぶ)の直前に、命令sへジャンプするジャンプ命令を、あらかじめ追加挿入しておく。
(2)既にジャンプ先の直前に無条件ジャンプ命令がある場合には、同様にジャンプ命令を挿入してもよいし、挿入を省略してもよい。
次に、図1の構成の下で上記暗号化ルールがどのように実現されるかを説明する。上記ルールにより暗号ブロック連鎖が可能となる理由については、後述の復号化処理の説明の際に、併せて説明する。
図3は、上記暗号化ルールに基づく変換を行う前のプログラムコードとその実行イメージを示すものである。ここでは読み易さの観点から、アセンブラコードを例にした。
図3(a)は変換前のアセンブラコードで、命令I1〜I9を有する。
命令I3では、条件分岐命令「jne:jump if not equal」が実行される。また、命令I5では、無条件ジャンプ命令「jmp:jump」が実行される。
図3(a)のプログラムコードにおいて、ジャンプ先の候補となるのは、命令I3で条件を満たしたときのジャンプ先である命令I6と、命令I5の無条件ジャンプ先である命令I8である。
ジャンプ先アドレス収集部110は、オリジナルコードメモリ100より図3(a)のプログラムコードを読み取り、上述のジャンプ先となる命令の位置を取得する。
また、ジャンプ命令収集部120は、オリジナルコードメモリ100より図3(a)のプログラムコードを読み取り、条件分岐命令や無条件ジャンプ命令の位置を取得する。
図4は、ジャンプ命令挿入後のプログラムコードとその暗号化結果を示すものである。
図4(a)はジャンプ命令挿入後のプログラムコード、図4(b)はその暗号化後のプログラムコードを示す。以下、各図の内容について、図1の構成と関連付けながら説明する。
ジャンプ命令挿入部130は、条件分岐命令や無条件ジャンプ命令のジャンプ先の候補となる命令の直前(1命令前)に、直下の命令へジャンプする無条件ジャンプ命令を新たに挿入する。
図4(a)の例では、ジャンプ先の候補となるのは命令I6と命令I8であるので、これらの直前に、直下の命令へジャンプする無条件ジャンプ命令を挿入することになる。
ただし、命令I6の直前には既に無条件ジャンプ命令I5が存在しているので、挿入は省略してよい。ここでは、命令I8の直前にのみ、無条件ジャンプ命令X1を挿入する。
次に、図4(b)を参照しながら、図4(a)のプログラムコードを暗号化する処理の過程を、図1の構成と関連付けてステップを追って説明する。
(1)遅延部150の初期化
遅延部150の第2レジスタ153には、初期値として、初期ベクトルIVを格納しておく。
(2)暗号化処理の開始
ジャンプ命令挿入部130は、図4(a)で説明したジャンプ命令挿入後のプログラムコードを、変換コードメモリ400に格納する。以後、変換コードメモリ400より図4(a)のプログラムコードが1命令ずつ取り出され、暗号化が行われる。
(3)1番目の命令の暗号化
初期化判定部170は、変換コードメモリ400より命令I1を取得する。命令I1は1番目の命令であるため、初期化判定部170はIV上書き信号を出力する。
遅延部150のマルチプレクサ152にIV上書き信号が入力されると、マルチプレクサ152の切替部は初期ベクトル記憶部160の側に倒れ、初期ベクトルIVが入力される。次に、第2レジスタ153に格納してあった初期ベクトルIVが、排他的論理和演算器143に出力される。
排他的論理和演算器143は、変換コードメモリ400より命令I1を取得し、また遅延部150より初期ベクトルIVを取得して、これらの排他的論理和を求め、暗号化部142に出力する。
暗号化部142は、排他的論理和演算器143の出力を、暗号化鍵Kを用いて暗号化し、暗号命令C1を出力する。これは、図4(b)の1行目の演算に相当する。
暗号命令C1は、命令メモリ500に格納されるとともに、遅延部150の第1レジスタ151に格納される。
(4)暗号化処理の継続
以後、図示しないプログラムカウンタが1つずつインクリメントされ、ステップ(3)と同様の手順により、命令I2以降の暗号化が行われる。
なお、初期化判定部170は、入力される命令が条件分岐命令または無条件ジャンプ命令であるときは、IV上書き信号を出力する。例えば、命令I3の暗号化を行う際には、同命令が条件分岐命令であるため、I3暗号化後、IV上書き信号を出力する。
IV上書き信号の出力により、第2レジスタ153には初期ベクトルIVが格納されるので、次の命令I4の暗号化を行う際には、初期ベクトルIVが用いられることになる。
(5)条件分岐命令または無条件ジャンプ命令の次の命令の暗号化
次に、本実施の形態1の暗号化処理の特徴である、ジャンプ命令の次の命令を暗号化する際の処理について説明する。ここでは、命令I4の暗号化を例に取り説明する。
排他的論理和演算器143に命令I4が入力される前の時点では、遅延部150の第1レジスタ151には命令C3が格納されている。
排他的論理和演算器143は、命令I4を変換コードメモリ400より取得し、また第2レジスタ153に格納されている初期ベクトルIVを取得して、これらの排他的論理和を求め、暗号化部142に出力する。
暗号化部142は、排他的論理和演算器143の出力を、暗号化鍵Kを用いて暗号化し、暗号命令C4を出力する。これは、図4(b)の4行目の演算に相当する。
暗号命令C4は、命令メモリ500に格納されるとともに、遅延部150の第1レジスタ151に格納される。
次の命令I5を暗号化する際には、暗号命令C4が用いられる。これは、図4(b)の5行目の演算に相当する。
(6)挿入したジャンプ命令とその次の命令の暗号化
図4(a)で新たに挿入した無条件ジャンプ命令X1は、直前の暗号命令C7を用いて暗号化されることになる。
次の命令I8を暗号化する際には、直前に暗号化対象であった命令が、無条件ジャンプ命令X1であるため、ステップ(5)と同様に、初期ベクトルIVを用いて暗号化されることになる。これは、図4(b)の9行目の演算に相当する。
このように、本実施の形態1に係る暗号化装置100では、条件分岐命令や無条件ジャンプ命令のジャンプ先直前に、無条件ジャンプ命令を挿入しておく。
そして、暗号化する命令の直前の命令が条件分岐命令や無条件ジャンプ命令であったときは、その暗号化に際し、直前の命令を用いることに代えて、初期ベクトルIVが用いられる。
したがって、条件分岐命令や無条件ジャンプ命令がどの命令にジャンプするのか一意に定まらない場合であっても、ジャンプ先の命令は初期ベクトルIVを用いて暗号化されることが常に確定しているので、暗号ブロックの連鎖が途切れることはない。
以上、暗号化装置100の暗号化動作について説明した。
次に、暗号化装置100が暗号化したプログラムコードの復号化について説明する。
図5は、本実施の形態1に係る復号化装置200の機能ブロック図である。
復号化装置200は、鍵保持部241、復号化部242、排他的論理和演算器243、遅延部250、初期ベクトル記憶部260、初期化判定部270を備える。
また、図5では、復号化装置200の周辺構成として、命令メモリ500、CPU600を併せて記載した。
鍵保持部241は、復号化鍵を保持する。
復号化部242は、鍵保持部241が保持している復号化鍵を用いて復号化を行う。
排他的論理和演算器243は、復号化部242と遅延部250より入力値を受け取り、その排他的論理和を、初期化判定部270とCPU600に出力する。
遅延部250、初期ベクトル記憶部260、初期化判定部270の機能は、暗号化装置100が備える同名の各部と概ね同様であるため、これらの説明は、後述の復号化処理の説明で併せて行う。
なお、遅延部250は、図2の構成と同様に、第1レジスタ251、マルチプレクサ252、第2レジスタ253を備えているものとする。
CPU600は、復号化されたプログラムコードを実行する。
本実施の形態1における「連鎖復号化部」は、復号化部242、遅延部250がこれに相当する。
復号化部242、排他的論理和演算器243、遅延部250、初期化判定部270は、これらの機能を実現する回路デバイスのようなハードウェアで構成することもできるし、CPUやマイコン等の演算装置と、その動作を規定するソフトウェアとで構成することもできる。また、必要に応じて、外部の記憶装置を用いることもできるし、記憶回路を内在することもできる。
鍵保持部241、初期ベクトル記憶部260は、フラッシュROMのような記憶装置で構成することができる。これらを一体的に構成することもできる。
図5の構成の下では、プログラムコードの暗号命令Cjは、下記(式2)により元の命令Ijに復号化される。
Figure 2009169489
上記(式2)は、暗号命令Cjの復号化に際し、先の命令の復号化結果であるCj-1が用いられることを示している。即ち、復号化部242は、上記(式2)を用いて、連鎖的に復号化を行うものである。
しかし、暗号化装置100が暗号化を行う際に、一部の命令の暗号化に初期ベクトルIVが用いられているため、この部分に関しては特別な処理をしなければならない。
図6は、暗号化後のプログラムコードとその復号化結果を示すものである。
図6(a)は暗号化後のプログラムコード、図6(b)はその復号化後のプログラムコードを示す。以下、図6(b)を参照しながら、図6(a)のプログラムコードを復号化する処理の過程を、図5の構成と関連付けてステップを追って説明する。
(1)遅延部250の初期化
遅延部250の第2レジスタ253には、初期値として、初期ベクトルIVを格納しておく。
(2)1番目の命令の復号化
復号化部242は、命令メモリ500より暗号命令C1を取得し、復号化鍵Kを用いて復号化する。復号結果として、命令I1と初期ベクトルIVの排他的論理和が得られ、排他的論理和演算器243に出力される。
また、暗号命令C1は、遅延部250にも出力され、第1レジスタ251に格納される。
排他的論理和演算器243は、復号化部242の復号結果を取得し、また、遅延部250の第2レジスタ253より初期ベクトルIVを取得して、これらの排他的論理和を求める。その結果として、初期ベクトルIVが相殺され、命令I1が得られる。
以上の処理は、図6(b)の1行目の演算に相当する。
命令I1は、初期化判定部270とCPU600に出力される。
(3)復号化処理の継続
以後、図示しないプログラムカウンタが1つずつインクリメントされ、ステップ(2)と同様の手順により、暗号命令C2以降の復号化が行われる。
遅延部250の機能により、直前に復号化対象であった暗号命令が、1ステップ遅れて排他的論理和演算器243に入力され、暗号化時と逆の手順で復号が行われる。
(4)条件分岐命令または無条件ジャンプ命令の復号化
次に、本実施の形態1の復号化処理の特徴である、条件分岐命令または無条件ジャンプ命令を復号化する際の処理について説明する。ここでは、暗号命令C3の復号化を例に取り説明する。
復号化部242〜排他的論理和演算器243の処理により、暗号命令C3が復号化されて命令I3が得られると、この命令I3は、初期化判定部270に出力される。
初期化判定部270は、命令I3が条件分岐命令であることを検知し、IV上書き信号を出力する。
遅延部250のマルチプレクサ252にIV上書き信号が入力されると、マルチプレクサ252の切替部は初期ベクトル記憶部260の側に倒れ、初期ベクトルIVが入力される。これにより、第2レジスタ253には初期ベクトルIVが格納されるので、次の暗号命令を復号化する際には、初期ベクトルIVが用いられることになる。
(5)条件分岐命令または無条件ジャンプ命令の次の命令の復号化
ステップ(4)に続いて、暗号命令C4を復号化する処理を説明する。
暗号命令C4は、遅延部250と復号化部242に入力される。復号化部242は、暗号命令C4の復号化を行う。
排他的論理和演算器243は、復号化部242より復号結果を取得し、また、遅延部250の第2レジスタ253より初期ベクトルIVを取得して、これらの排他的論理和を求める。その結果として、初期ベクトルIVが相殺され、命令I4が得られる。
以上の処理は、図6(b)の4行目の演算に相当する。
次の命令を復号化する際には、暗号命令C4が用いられる。
(6)挿入したジャンプ命令とその次の命令の復号化
図4(a)で新たに挿入した無条件ジャンプ命令X1の暗号命令CX1は、直前の暗号命令C7を用いて復号化されることになる。
次の暗号命令C8を復号化する際には、直前に復号化対象であった命令が、無条件ジャンプ命令X1の暗号命令CX1であるため、ステップ(5)と同様に、初期ベクトルIVを用いて復号化されることになる。これは、図6(b)の9行目の演算に相当する。
このように、本実施の形態1に係る復号化装置200は、復号の結果得られた命令を初期化判定部270に出力し、初期化判定部270は、その命令が条件分岐命令または無条件ジャンプ命令であるときは、IV上書き信号を出力する。
これにより、次の命令の復号化は、初期ベクトルIVを用いて行われることになる。
したがって、ジャンプ先となる命令を暗号化する際に、初期ベクトルIVを用いて暗号化を行ったことに対応して、条件分岐命令または無条件ジャンプ命令の次の命令は、必ず初期ベクトルIVを用いて復号化されることになる。
即ち、本実施の形態1に係る暗号化装置100と復号化装置200は、暗号ブロック連鎖を行いながらも、連鎖が途切れる可能性のある命令に関しては例外を設けることで、連鎖が途切れないように配慮しているのである。
これにより、プログラムコードのように、復号化の順序が一意に定まらない暗号化対象であっても、暗号ブロック連鎖を行って暗号強度を高めることができる。
本実施の形態1において、「暗号化」と呼ぶとき、暗号化部142が行う狭義の暗号化と、排他的論理和演算まで含めた広義の暗号化とがある。以上の説明では、特に両者を明示的に区別せずに用いているが、暗号化を行う主体をもって区別している。
例えば、暗号化部142が行う暗号化処理は狭義の暗号化を指し、排他的論理和演算まで含めた最終的な暗号結果を指すときは、広義の暗号化を指している。
復号化に関しても、同様に狭義の復号化と広義の復号化があるが、両者はその実行主体によって区別される。
以後の実施の形態においても同様である。
以上のように、本実施の形態1によれば、暗号化装置100は、暗号化に先立ち、ジャンプ先となる可能性のある命令の直前に、そのジャンプ先命令へジャンプする無条件ジャンプ命令を追加挿入しておき、条件分岐命令または無条件ジャンプ命令の次の命令を暗号化する際には、初期ベクトルIVを用いる。
これにより、条件分岐命令または無条件ジャンプ命令と、その次の命令との暗号化が、一定の暗号ルールに準じて行われることが確定するため、暗号ブロック連鎖を行っても、復号化に際して連鎖が途切れることはない。
したがって、従来は困難であった、on the fly暗号における暗号ブロック連鎖が、一定の暗号ルールの下で可能となるのである。
実施の形態2.
実施の形態1では、条件分岐命令や無条件ジャンプ命令を含むプログラムコードに対して、一定のルールの下で暗号ブロック連鎖を行う手法を説明した。
本発明の実施の形態2では、実施の形態1で説明した手法に加え、攻撃者が暗号化された状態のプログラムコードを特定し難くする手法について説明する。
まず、実施の形態1の手法を用いた場合、攻撃者が暗号化された状態のプログラムコードを特定するために、どの程度の工数を要するかを検討する。
実施の形態1の手法では、初期ベクトルIVを用いて暗号化を行った場合、元の命令Iと暗号命令Cは、1対1の対応関係を有することになる。初期ベクトルIVを用いた暗号化は固定的であるため、暗号ブロック連鎖は行われていないからである。
したがって、この暗号命令Cと、Cから続くジャンプ命令Ijmpの暗号命令Cjmpとのセットが攻撃者に分かってしまうと、攻撃者はCとCjmpのセットを繰り返すことで、暗号文の状態で任意のプログラムを作成することができてしまう。
次に、上記の攻撃手法に要する工数を検討する。
初期ベクトルIVが用いられていることが分かるという条件の下で、攻撃者が初期ベクトルIVを用いたM個の暗号命令{C1,C2,・・・CM}と、それに対応する平文命令Iを、例えばKuhnと同じ手法で調べることができるとする。
このM組の暗号命令と平文命令のペアを求める工数(=T1)と、各ペアの暗号命令Cjを用いて暗号化されたジャンプ命令Cjmp,jを探す工数(=T2)の和(T1+T2)が、求める工数となる。
ただしMはオペコードの数ではなく、オペコードとパラメータの組合せでなる命令数である。言い換えると、同じオペコードでもパラメータが異なると、異なる命令とみなすことにする。
(1)T1の算出
適当なビット列をCPUに入力し、CPUの挙動から、そのビット列が平文命令Ijの(初期ベクトルIVを用いた)暗号命令Cjであることを確認するために要する時間をτとする。
最初の命令は初期ベクトルIVを用いた暗号命令であるので、先に述べた操作を、CPUリセットを行いながら繰り返すことで、IjとCjの組を特定していく。ピンポイントで探し出すことは不可能なので、全てのビット列を入力してIjとCjの組を特定することにする。
この場合、T1は下記(式3)で求められる。
Figure 2009169489
非特許文献1によれば、ある暗号命令を入力して、CPUの挙動から実行された命令を特定するのに要する時間は、1/300秒とされる。これが上述のτに相当する。
命令長b=32ビットである場合、T1=232×1/300≒5.5ヶ月の時間をかければ、必ず全ての命令を特定できることが分かる。
(2)T2の算出
M個の命令それぞれに対して、そこから続く暗号ジャンプ命令を探す工数がT2である。
ただし、1つの命令に続くジャンプ命令は、全ての命令メモリのアドレスにジャンプできるようにしたいので(ピンポイントでジャンプ先を絞れないため)、ジャンプ先アドレスの数(=Sとする)だけ存在する。
この場合、T2は下記(式4)で求められる。
Figure 2009169489
Sは命令メモリのアドレス空間であり、S=2bとしてみると、T1+T2=2bτ(1+M)となる。
さらに、Mについて基本命令数20とし、パラメータのバリエーションを含めてM=127と仮定し、さらにτ=1/300とした場合、T1+T2=2b+7τと表すことができる。b=32である場合、T1+T2≒2年となる。
ただし、8ビットマイコンに関して上記計算方法を適用すると、b=8であるから、T1+T2≒2分となる。これは十分現実的な時間オーダーであり、攻撃者が暗号化された状態の命令を特定できる可能性が十分に考えられると言える。
そこで、本実施の形態2では、上記の課題を解決するために、ジャンプ命令を複数の命令で構成することにし、暗号命令の解読を困難にすることを図る。以下、本実施の形態2に係る暗号化・復号化の手法を説明する。
図7は、本実施の形態2に係る暗号化装置100の機能ブロック図である。
本実施の形態2に係る暗号化装置100は、実施の形態1の図1で説明した構成に加えて、新たにジャンプ命令分割部180を備える。その他の構成は図1と概ね同様であるため、同じ符号を付し、差異点のみを説明する。
ジャンプ命令挿入部130は、ジャンプ命令挿入後のプログラムコードを、ジャンプ命令分割部180に出力する。
ジャンプ命令分割部180は、ジャンプ命令挿入部130が新たに追加挿入したジャンプ命令を、複数の命令に分割する。詳細は、後述の図8で説明する。
ジャンプ命令分割部180は、その機能を実現する回路デバイスのようなハードウェアで構成することもできるし、CPUやマイコン等の演算装置と、その動作を規定するソフトウェアとで構成することもできる。また、必要に応じて、外部の記憶装置を用いることもできるし、記憶回路を内在することもできる。
次に、本実施の形態2における暗号化のルールについて説明する。
本実施の形態2では、暗号化に際し実施の形態1で説明したルールに加えて以下のルールを新たに設け、暗号化前にプログラムコードの変換を行う。
<暗号化ルール>
(3)条件分岐命令または無条件ジャンプ命令は、複数の命令に分割する。分割手法は任意のものでよいが、ジャンプ先や分岐条件などのパラメータを含め、分割前の命令に必ず復元できるような、可逆的な分割手法を用いるものとする。
本実施の形態2では、分割手法の1例として、2つのダミー命令を追加する手法を用いるものとし、以下の説明を行う。
条件分岐命令または無条件ジャンプ命令は、2つのダミー命令(OPコードはNOP)と、分割前の条件分岐命令または無条件ジャンプ命令と、の3命令に分割される。
ここでいう条件分岐命令または無条件ジャンプ命令には、ジャンプ命令挿入部130が新たに追加挿入したジャンプ命令も含まれる。
図8は、上記暗号化ルールに基づく変換前のプログラムコードとその実行イメージを示すものである。実施の形態1で説明した図3と同様に、アセンブラコードを例にした。
図8(a)は分割前のアセンブラコードで、命令I1〜I9に加え、ジャンプ命令挿入部130が新たに挿入した無条件ジャンプ命令X1を有する。
図8(b)は分割後のアセンブラコードで、ジャンプ命令分割部180により、条件分岐命令I3、無条件ジャンプ命令I5およびX1が、それぞれ元のジャンプ命令を含む3つの命令に分割されている。
図9は、ジャンプ命令分割後のプログラムコードとその暗号化結果を示すものである。
図9(a)はジャンプ命令分割後のプログラムコード、図9(b)はその暗号化後のプログラムコードを示す。
本実施の形態2に係る暗号化装置100の暗号化動作は、ジャンプ命令が複数の命令に分割されている点を除いて、実施の形態1で説明したものと同様であるため、説明を省略する。
以上、暗号化装置100の暗号化動作について説明した。
次に、暗号化装置100が暗号化したプログラムコードの復号化について説明する。
図10は、本実施の形態2に係る復号化装置200の機能ブロック図である。
図10の構成は、実施の形態1の図5で説明した構成と類似しているが、図5では排他的論理和演算器243の出力が初期化判定部270とCPU600に出力されているのに対し、図10の構成では、初期化判定部270にのみ出力されている点が異なる。
排他的論理和演算器243の出力をCPU600に出力すべきか否かは、初期化判定部270が判定する。判定手法については、後述の図11で説明する。
その他の構成は図5と同様であるため、説明を省略する。
図11は、初期化判定部270の機能ブロック図である。
初期化判定部270は、判定部271、ハッシュ値記憶部272、第1記憶スロット273、第2記憶スロット274、ハッシュ関数処理部275、初期化実行部276を備える。
判定部271は、排他的論理和演算器243から平文命令を受け取り、これがジャンプ命令であるか否かを判定する。ジャンプ命令でなければそのままCPU600と第1記憶スロット273に出力し、ジャンプ命令であれば後述の判定を行う。
ハッシュ値記憶部272は、暗号化装置100のジャンプ命令分割部180が追加する2つのダミー命令の連結ハッシュ値を保持している。このハッシュ値は、暗号化装置100と復号化装置200の間で共通にしておく。
第1記憶スロット273と第2記憶スロット274は、1命令分の記憶領域を備えており、判定部271より出力される命令を、この順番に1命令ずつ記憶する。第1記憶スロット273に新たな命令が出力されると、先に第1記憶スロット273に格納されていた命令は第2記憶スロット274にコピーされる。
ハッシュ関数処理部275は、第1記憶スロット273と第2記憶スロット274に格納されている命令の連結ハッシュ値を計算し、判定部271に出力する。
初期化実行部276は、判定部271の指示に基づき、遅延部250へIV上書き信号を出力する。
本実施の形態2における「順序判定部」は、初期化判定部270がこれに相当する。
次に、初期化判定部270の動作について説明する。
(1)判定部271は、排他的論理和演算器243から復号化済みの平文命令を受け取って、その命令が条件分岐命令または無条件ジャンプ命令であるか否かを判定する。条件分岐命令または無条件ジャンプ命令でなければ、その命令をそのままCPU600へ出力するとともに、第1記憶スロット273に格納する。
(2)排他的論理和演算器243から受け取った命令が条件分岐命令または無条件ジャンプ命令である場合は、以下のような判定を行う。
(2.1)暗号化装置100が暗号化処理を行う際に、図8で説明した手順に従って、条件分岐命令または無条件ジャンプ命令の前には2つのダミー命令が追加されているから、この時点で第1記憶スロット273と第2記憶スロット274には、ともにダミー命令が格納されているはずである。
(2.2)そこで、判定部271は、第1記憶スロット273と第2記憶スロット274に格納されている命令の連結ハッシュ値を、ハッシュ関数処理部275より取得し、ハッシュ値記憶部272に格納されている値と比較する。
(2.3)両者が一致すれば、その条件分岐命令または無条件ジャンプ命令は、正しい順序で復号されたものであり、攻撃者が介在していない正規の条件分岐命令または無条件ジャンプ命令であると判定できる。両者が一致しない場合は、攻撃者が介在している可能性がある。
(2.4)判定部271は、上記ステップ(2.3)で正規の条件分岐命令または無条件ジャンプ命令であると判定したときは、その命令をCPU600および第1記憶スロット273に出力するとともに、初期化実行部276にIV上書き信号を出力するよう指示する。
正規の命令でないと判定したときは、異常報知を行うなど、適宜対処する。例えば、鍵Kを消去する、CPU600をロックする、メモリの内容をフラッシュする、などが考えられる。
以上の動作により、本実施の形態2では、条件分岐命令または無条件ジャンプ命令の周辺の暗号化・復号化が、実施の形態1と比較して複雑化され、また攻撃者による不正な暗号文命令の入力を検知する仕組みを備えた。
これにより、実施の形態1では暗号文と元の平文の対応関係が1対1となっていたジャンプ命令周辺の暗号化・復号化に関し、暗号強度を強化し、攻撃者に対する耐性を高め、より安全な暗号化装置100と復号化装置200を提供することができる。
本実施の形態2による攻撃者耐性の向上について、以下に検討しておく。
本実施の形態2では、ジャンプ命令を3つの命令に分割した。この状態で、攻撃者が暗号化された状態のプログラムを書くことに関し検討する。
まず、初期ベクトルIVを用いた暗号命令Cjがどの平文命令に対応するかは既知であるとする。
攻撃者がすべきことは、任意の初期ベクトルIVを用いた暗号命令の後に暗号文でジャンプ命令を置くことである。これができれば、IVを用いた暗号命令−>暗号ジャンプ命令−>IVを用いた暗号命令−>・・・と繰り返すことにより、暗号文の状態でプログラムを書くことができる。
そこで、N個の命令文のそれぞれにつながる暗号ジャンプ命令を特定する工数を検討する。
(1)T1の算出
1は実施の形態1と変わらないので、上述の(式3)で求められる。
(2)T2の算出
2については、1つ目と2つ目のダミーコードが正解していることが必要で、さらに3つ目のコードが任意のアドレスにジャンプするジャンプ命令となる暗号文を探さなければならない。
ただし、1つ目のダミー命令の直前の暗号命令の値に依存して1つ目のダミーコードが変化し、その暗号ダミーコードに依存して2つ目のダミーコードが変化し、さらに2つ目の暗号ダミーコードに依存してジャンプ命令が変化し、さらにジャンプ先を2b通り探さなければならない。
一見、M個の暗号命令に続く1つ目のダミーコードを探してダミーコードを特定した上で、2つ目のダミーコードを探して特定して、・・・とすれば上手くいくようにも思えるが、そもそもCPUの挙動から暗号命令に対する平文命令を特定しようとしているので、ダミーコードも無意味なビット列も判別がつかない。
したがって、ある命令から続くジャンプ命令の探索空間は2b×2b×Sとなり、T2は下記(式5)で求められる。
Figure 2009169489
以上より、T1+T2を求めると、下記(式6)となる。
Figure 2009169489
さらに、ジャンプ命令の分割数をκとすると、下記(式7)となる。
Figure 2009169489
仮に、b=8、τ=1/300、M=127、S=28とし、κ=3のときは、T1+T2はおよそ2.7ヶ月となる。κ=4ではおよそ58年、κ=5ではおよそ15000年、κ=7ではおよそ10億年となる。
このように、本実施の形態2では、ジャンプ命令を複数に分割することにより、攻撃者が暗号命令を特定することを困難にすることが可能となり、暗号強度が増すのである。
実施の形態3.
実施の形態2では、条件分岐命令や無条件ジャンプ命令を複数の命令に分割することにより、暗号命令の特定を困難にし、暗号強度を高める手法を説明した。
本発明の実施の形態3では、条件分岐命令や無条件ジャンプ命令の分割手法に関し、実施の形態2と異なる例を説明する。
まず、暗号化装置100の動作について説明する。
本実施の形態3に係る暗号化装置100の構成は、実施の形態2の図7で説明したものと同様であるが、ジャンプ命令分割部180の分割動作が異なる。分割動作は次の図12で説明する。
図12は、ジャンプ命令分割部180が生成する分割命令の構成図である。
ジャンプ命令分割部180は、以下のルールに従って、条件分岐命令または無条件ジャンプ命令を、複数の命令に分割する。
(1)命令の分割数は3とする。
(2)第1の分割命令の1番目の領域はOPコード部、2番目の領域は任意のビット列、3番目の領域は2番目の領域の鍵付ハッシュ値で構成する。鍵はあらかじめジャンプ命令分割部180内に保持しておく。OPコード部は、あらかじめ定められたビット列であるとする。
(3)第2の分割命令も、第1の分割命令と同様に構成する。
(4)第3の分割命令は、分割前のジャンプ命令とする。
本実施の形態3に係る暗号化装置100の暗号化動作は、ジャンプ命令の分割に係る図12の動作を除いて、実施の形態2で説明したものと同様であるため、説明を省略する。
以上、暗号化装置100の暗号化動作について説明した。
次に、暗号化装置100が暗号化したプログラムコードの復号化について説明する。
図13は、本実施の形態3に係る復号化装置200が備える初期化判定部270の機能ブロック図である。
本実施の形態3に係る復号化装置200の構成は、初期化判定部270を除いて実施の形態2の図10で説明したものと同様であるため、以下では初期化判定部270の構成のみを説明する。
初期化判定部270は、初期化実行部276、状態デコード部277、オートマトン部278を備える。
初期化実行部276は、状態デコード部277の指示に基づき、遅延部250へIV上書き信号を出力する。
状態デコード部277は、排他的論理和演算器243から平文命令を受け取り、オートマトン部278に投入する。また、オートマトン部278の状態を取得し、その内容に基づき、CPU600への出力や初期化実行部276への指示を行う。詳細は後述する。
オートマトン部278は、以下に説明する状態S0〜SEMGを備える状態遷移器であり、状態デコード部277から受け取る平文命令に基づき、状態遷移を行う。
(状態S0
オートマトン部278の初期状態である。第1の分割命令を受け取ると、状態S1へ遷移する。条件分岐命令、無条件ジャンプ命令、第2の分割命令、第3の分割命令を受け取ると、状態SEMGへ遷移する。
(状態S1
第2の分割命令を受け取ると、状態S2へ遷移する。それ以外の命令を受け取ると、状態SEMGへ遷移する。
(状態S2
第3の分割命令を受け取ると、状態S3へ遷移する。それ以外の命令を受け取ると、状態SEMGへ遷移する。
(状態S3
無条件に状態S0へ遷移する。
(状態SEMG
分割されたジャンプ命令の順序が異常であることを示す状態である。
状態デコード部277は、排他的論理和演算器243から平文命令を受け取る毎に、その平文命令をオートマトン部278に渡し、状態遷移を命令する。また、状態遷移の結果をオートマトン部278より取得する。次に、オートマトン部278より取得した状態に応じて、以下の処理を行う。
(状態S0
排他的論理和演算器243から受け取った平文命令をCPU600に出力する。
(状態S1)〜(状態S2
NOP命令をCPU600に出力する。
(状態S3
排他的論理和演算器243から受け取った条件分岐命令または無条件ジャンプ命令をCPU600に出力するとともに、初期化実行部276に、IV上書き信号を出力するよう指示する。
(状態SEMG
異常報知を行うなど、適宜対処する。例えば、鍵Kを消去する、CPU600をロックする、メモリの内容をフラッシュする、などが考えられる。
なお、分割した命令に、分割前の命令のパラメータが分散して埋め込まれているようなときは、状態S1〜状態S2で状態デコード部277がこれらを抽出しておいてもよい。
次に、初期化判定部270の動作例を、図12で説明したハッシュ値の照合と併せて説明する。
(1)オートマトン部278は、初期状態では状態S0にある。
(2)状態デコード部277は、第1の分割命令を受け取ると、同命令の認証子と、ランダムビット列から正しい鍵を用いてハッシュ計算した値とを比較し、認証子が正しいか否かを検証する。ハッシュ計算のための鍵は、あらかじめ状態デコード部277にて、ジャンプ命令分割部180と共通のものを保持しておく。
(3)状態デコード部277が、ステップ(2)の検証に成功し、かつOPコードが第1の分割命令のものであることが確認できた場合に限り、オートマトン部278は状態S1に遷移する。これ以外の場合は、状態SEMGに遷移する。第2の分割命令についても、同様に処理される。
(4)状態S3では、状態デコード部277が受け取った条件分岐命令または無条件ジャンプ命令は、そのままCPU600に出力され、オートマトン部278は状態S0に戻る。
以上の実施の形態2〜3では、ジャンプ命令の分割数は3としたが、これは1例であり、任意の分割数としてよい。
以上のように、本実施の形態3によれば、ジャンプ命令挿入部130が追加挿入したジャンプ命令は、鍵付ハッシュ値を含む複数の命令に分割されて暗号化され、復号化時は、鍵付ハッシュ値の検証に加え、オートマトン部278による状態遷移に基づく検証が行われるので、実施の形態2と同様に暗号化強度を高めることができる。
また、本実施の形態3によれば、分割した命令をハッシュ計算により検証するので、新たに追加挿入されたダミーコードは、いわばメッセージ認証と同様の手順により検証されることになり、ダミーコードの構成を固定的にする必要がなくなる。
したがって、ダミーコードの構成は可変にすることができるので、攻撃者が暗号命令を特定することがより困難になり、暗号強度を高めることができる。
また、本実施の形態3によれば、オートマトン部278が備える状態遷移器により、分割されたジャンプ命令の検証を行うので、状態遷移器の状態構成を適宜変更することで、単にダミーコードを2つ挿入するのみの分割だけでなく、任意の分割手法に対応することができ、分割命令の構成を柔軟に可変することができる。
これにより、攻撃者が暗号命令を特定することをさらに困難にし、暗号強度を高めることができる。
なお、本実施の形態3では、説明の簡易の観点から、実施の形態2と同様にダミーコードを2つ挿入した例を採用したことを付言しておく。
実施の形態4.
本発明の実施の形態4では、復号モジュールを並列化することで、復号処理のスループットを高める構成について説明する。暗号化の手法は、実施の形態1〜3のいずれかで説明したものと同様であるため、説明を省略する。
図14は、本実施の形態4に係る復号化装置200の機能ブロック図である。
図14において、復号化部244は、16個の復号器Dを並列に接続し、16個の命令Ijを並行的に復号できるように構成されている。各段の復号器の復号結果は、前段の復号器の復号結果との排他的論理和がとられ、最終的な復号結果Qjとして出力される。
ただし、1段目の復号器に関しては、遅延部250より初期ベクトルIVが出力され、これとの排他的論理和がとられる。
図14のように、16個の命令を並行的に復号すると、復号処理のパフォーマンスが向上する。
一方で、条件分岐命令や無条件ジャンプ命令のジャンプ先に関しては、暗号化の際に、初期ベクトルIVとの排他的論理和をとった上で暗号化されているため、復号化後は初期ベクトルIVとの排他的論理和をとらなければならないところ、図14の構成では、常に前段の復号結果が排他的論理和に用いられるので、正しい復号結果が得られない。
そこで、図14の構成では、さらに初期化補正部280を設け、復号結果を補正して整合性を保っている。
以下、初期化補正部280による補正処理に関して説明する。
初期化補正部280は、その機能を実現する回路デバイスのようなハードウェアで構成することもできるし、CPUやマイコン等の演算装置と、その動作を規定するソフトウェアとで構成することもできる。また、必要に応じて、外部の記憶装置を用いることもできるし、記憶回路を内在することもできる。
図15は、初期化補正部280の機能ブロック図である。以下、図15を用いて初期化補正部280の動作を説明する。
まず、命令メモリ500より16個の暗号命令{Ci,Ci+1,・・・,Ci+15}が読み出され、復号化部244に入力されて、並行的に復号化される。この時点では、1段前の暗号命令が、排他的論理和の演算に用いられるため、正しく復号化されない。
例えば、暗号命令Ci+10に対応する平文命令Ii+10で初めて条件分岐命令「jne」が現れたものとする。この場合、Ci+10までは正しく復号化されるが、次のCi+11では正しい復号化が行われない。
i+11は、条件分岐命令の次の命令であるため、初期ベクトルIVを用いて暗号化されており、したがって復号化時は、復号器Dで復号を行った後、初期ベクトルIVとの排他的論理和をとらなければならない。
しかるに、図14の復号化部244では、前段の暗号命令Ci+10との排他的論理和がとられるように構成されているため、復号結果Qi+11は、下記(式8)のようになり、正しく復号されていないことが分かる。
Figure 2009169489
そこで、初期化補正部280は、条件分岐命令や無条件ジャンプ命令が入力されたことを検出すると、次の段の入力に対し、前段の暗号命令と初期ベクトルIVを重畳的に排他的論理和演算するように構成されている。
まず、前段の暗号命令の排他的論理和を重畳することで、復号化部244内で加えられた前段の暗号命令の排他的論理和をキャンセルし、さらに初期ベクトルIVの排他的論理和を重畳することで、正しい復号結果を得る。
以下、図15の構成と対比しながら、上述のCi+11の例を用いて、動作を説明する。
(1)初期化補正部280の11段目の入力にQi+10(=Ii+10=条件分岐命令)が入力されると、図15中のジャンプ命令判定部がこれを検出し、12段目のマルチプレクサを、上段側に切り替える。
(2)12段目の1つ目の排他的論理和演算器では、前段の暗号命令Ci+10を用いて、下記(式9)の演算が行われる。
Figure 2009169489
(3)12段目の2つ目の排他的論理和演算器では、初期ベクトルIVを用いて、下記(式10)の演算が行われ、その結果が12段目の最終出力となる。
Figure 2009169489
本実施の形態4における「連鎖補正部」は、初期化補正部280がこれに相当する。
また、「補正部」は、図15中のジャンプ命令判定部、マルチプレクサ、排他的論理和演算器がこれに相当する。
また、「復号部」は、復号化部244が備える復号器D、排他的論理和演算器がこれに相当する。
以上のように、本実施の形態4によれば、復号化部244は、16個の復号器を並列に設け、16個の命令を平行的に復号化できるので、復号化処理のパフォーマンスが大幅に向上し、併せてCPU600が暗号命令を実行するパフォーマンスも向上する。
また、本実施の形態4では、復号処理を16個平行して行うことに伴う復号時のずれを初期化補正部280で補正しているので、暗号化時に初期ベクトルIVを用いる例外的な処理を行っていたとしても、これを自動的に検出して補正することができ、復号化処理のパフォーマンスを自在に向上させることができる。
実施の形態5.
実施の形態4では、CPUは非パイプライン動作を前提としている。もしパイプライン動作を行うのであれば、初期化判定はCPU内でジャンプ命令が実行されたときに行われる必要がある。
この場合の復号化装置200の機能ブロック図は、図16のようになる。
実施の形態6.
図17は、本発明の実施の形態6に係る暗号化装置100の機能ブロック図である。
本実施の形態6に係る暗号化装置100は、実施の形態1の図1で説明したものと概ね同様の構成を備えるが、暗号化手順が実施の形態1と異なっているため、これに伴って各部の接続関係が変更されている。
以下、本実施の形態6における暗号化手順と併せて、暗号化装置100の構成と動作を説明する。
暗号化部142は、暗号化鍵として、1つ前の暗号化対象であった命令と、鍵保持部141が保持している鍵との排他的論理和を用いる。これを暗号化式で表すと、下記(式11)のようになる。
Figure 2009169489
上記(式11)の暗号化処理を実現するため、暗号化部142は、変換コードメモリ400と接続されて暗号化対象の命令Ijを受け取るとともに、排他的論理和演算器143と接続され、上述の暗号化鍵を受け取るように構成されている。
また、排他的論理和演算器143には、鍵保持部141と遅延部150が接続され、1つ前の暗号化対象であった命令と、鍵保持部141が保持している鍵とを受け取り、これらの排他的論理和を求めて、最終的に用いる暗号化鍵として暗号化部142に出力するように構成されている。
なお、その他の構成と動作は、実施の形態1で説明したものと同様であるため、説明を省略する。
図18は、本実施の形態6におけるジャンプ命令挿入後のプログラムコードとその暗号化結果を示すものである。
実施の形態1の図4で説明したものと暗号化式が異なるが、直前に暗号化対象であった命令を用いて暗号化を行う連鎖的な暗号化処理が行われる点では、実施の形態1と共通している。ジャンプ命令の後の暗号化に初期ベクトルIVを用いる点も共通である。
図19は、本実施の形態6に係る復号化装置200の機能ブロック図である。
本実施の形態6に係る復号化装置200は、実施の形態1の図5で説明したものと概ね同様の構成を備えるが、暗号化手順が実施の形態1と異なることに伴って復号化手順が異なるため、各部の接続関係が変更されている。
以下、本実施の形態6における復号化手順と併せて、復号化装置200の構成と動作を説明する。
復号化部242は、復号化鍵として、1つ前の復号化対象であった命令と、鍵保持部241が保持している鍵との排他的論理和を用いる。これを復号化式で表すと、下記(式12)のようになる。
Figure 2009169489
上記(式12)の復号化処理を実現するため、復号化部242は、命令メモリ500と接続されて復号化対象の命令Cjを受け取るとともに、排他的論理和演算器243と接続され、上述の復号化鍵を受け取るように構成されている。
また、排他的論理和演算器243には、鍵保持部241と遅延部250が接続され、1つ前の復号化対象であった命令と、鍵保持部241が保持している鍵とを受け取り、これらの排他的論理和を求めて、最終的に用いる復号化鍵として復号化部242に出力するように構成されている。
なお、その他の構成と動作は、実施の形態1で説明したものと同様であるため、説明を省略する。
図20は、本実施の形態6における暗号化後のプログラムコードとその復号化結果を示すものである。
実施の形態1の図6で説明したものと復号化式が異なるが、直前に復号化対象であった命令を用いて復号化を行う連鎖的な復号化処理が行われる点では、実施の形態1と共通している。ジャンプ命令の後の復号化に初期ベクトルIVを用いる点も共通である。
以上のように、本実施の形態6によれば、実施の形態1と同様に連鎖的な暗号化と復号化を行うことができるので、実施の形態1と同様の効果を発揮することができる。
実施の形態7.
実施の形態6で説明した暗号化と復号化の手順は、実施の形態2〜3のように、ジャンプ命令を分割する構成においても適用可能である。
この場合における暗号化装置100と復号化装置200の構成は、実施の形態2〜3と実施の形態6の組み合わせであるため、説明を省略し、ジャンプ命令を分割した後の暗号化手順のみ簡単に説明する。
図21は、本実施の形態7におけるジャンプ命令分割後のプログラムコードとその暗号化結果を示すものである。
実施の形態2の図9で説明したものと暗号化式が異なるが、直前に暗号化対象であった命令を用いて暗号化を行う連鎖的な暗号化処理が行われる点では、実施の形態2〜3と共通している。ジャンプ命令の後の暗号化に初期ベクトルIVを用いる点も共通である。
以上のように、本実施の形態7によれば、実施の形態2〜3と同様に分割後のジャンプ命令に対して連鎖的な暗号化と復号化を行うことができるので、実施の形態2と同様の効果を発揮することができる。
実施の形態8.
実施の形態6で説明したような暗号化手順を採用した場合において、実施の形態4で説明したような並列復号化を実現しようとすると、実施の形態4で説明したものとは異なる補正手順が必要となる。
そこで、本実施の形態8では、実施の形態6の暗号化手順に対応した並列復号化の手順について説明する。
図22は、本実施の形態8に係る復号化装置200の機能ブロック図である。
図22において、復号化部244は、16個の復号器Dを並列に接続し、16個の命令Ijを並行的に復号できるように構成されている。各段の復号器が使用する復号化鍵は、前段の復号器の復号結果と鍵保持部241が保持する鍵との排他的論理和が用いられ、最終的な復号結果Qjとして出力される。
ただし、1段目の復号器に関しては、遅延部250より初期ベクトルIVが出力され、これと鍵保持部241が保持する鍵との排他的論理和がとられる。
図23は、本実施の形態8における初期化補正部280の機能ブロック図である。以下、図23を用いて初期化補正部280の動作を説明する。
まず、命令メモリ500より16個の暗号命令{Ci,Ci+1,・・・,Ci+15}が読み出され、復号化部244に入力されて、並行的に復号化される。この時点では、1段前の暗号命令が、復号化鍵を定めるための排他的論理和の演算に用いられるため、正しく復号化されない。
例えば、暗号命令Ci+10に対応する平文命令Ii+10で初めて条件分岐命令「jne」が現れたものとする。この場合、Ci+10までは正しく復号化されるが、次のCi+11では正しい復号化が行われない。
i+11は、条件分岐命令の次の命令であるため、初期ベクトルIVを用いて暗号化されており、したがって復号化時は、初期ベクトルIVとの排他的論理和をとった復号化鍵を用いて復号器Dで復号を行わなければならない。
しかるに、図22の復号化部244では、前段の暗号命令Ci+10との排他的論理和がとられるように構成されているため、復号結果Qi+11は、下記(式13)のようになり、初期ベクトルが用いられていないため、正しく復号されていないことが分かる。
Figure 2009169489
そこで、本実施の形態8における初期化補正部280は、条件分岐命令や無条件ジャンプ命令が入力されたことを検出すると、次の段の入力に対し、以下の演算を行うように構成されている。
(1)前段の暗号命令と暗号化鍵Kの排他的論理和をとり、その鍵で再暗号化して、いったん復号化前の状態に戻す。
(2)復号化鍵Kと初期ベクトルIVの排他的論理和をとり、その鍵で復号化を行う。
以下、図23の構成と対比しながら、上述のCi+11の例を用いて、動作を説明する。
(1)初期化補正部280の11段目の入力にQi+10(=Ii+10=条件分岐命令)が入力されると、図23中のジャンプ命令判定部がこれを検出し、12段目のマルチプレクサを、上段側に切り替える。
(2)12段目の1つ目の暗号器Eでは、前段の暗号命令Ci+10を用いて、下記(式14)の演算が行われる。
Figure 2009169489
(3)12段目の2つ目の排他的論理和演算器では、初期ベクトルIVを用いて、下記(式15)の演算が行われ、その結果が12段目の最終出力となる。
Figure 2009169489
なお、以上の説明では、暗号化鍵Kと復号化鍵Kが同じであることを前提としたが、暗号化鍵と復号化鍵が異なる場合には、図23の鍵Kを入力する部分で、暗号化装置100が用いたものと同じ暗号化鍵を入力するように構成しておく必要がある。
以上のように、本実施の形態8によれば、実施の形態6で説明したような暗号化手順を採用した場合において、実施の形態4で説明したような並列復号化を行うことができ、復号化のパフォーマンスが向上する。
実施の形態9.
実施の形態8では、CPUは非パイプライン動作を前提としている。もしパイプライン動作を行うのであれば、初期化判定はCPU内でジャンプ命令が実行されたときに行われる必要がある。
この場合の復号化装置200の機能ブロック図は、図24のようになる。
実施の形態10.
以上の実施の形態1〜9では、非特許文献1で行われているようなアドレスバスのハッシュ化は行っていないが、これを行うように構成してもよい。
この場合、アドレスバスを流れるアドレスをハッシュ関数でハッシュ化し、命令メモリ500へ暗号命令を格納する位置を、ハッシュ化されたアドレスとしておく。
復号化時は、命令メモリ500のアドレスを、同じハッシュ関数を用いて特定し、暗号化時と同じ順番で暗号命令を取り出して、復号化を行う。
実施の形態11.
以上の実施の形態1〜10では、暗号化装置100と復号化装置200は、別個の装置であるものとして説明したが、両者の構成は共通する部分が多いため、暗号化装置100と復号化装置200を一体的に構成してもよい。
例えば、遅延部、初期化判定部、初期化ベクトル記憶部などの機能は、暗号化時と復号化時で同様であるため、これらは共通化することができる。
暗号化部と復号化部は、処理内容が暗号と復号で処理内容が異なるため、別個に設ける必要がある。初期化補正部280は、復号時のみに必要となる。
その他の構成に関しても、必要に応じて適宜共通化することもできる。
実施の形態12.
以上の実施の形態1〜11において、暗号化装置100や復号化装置200の中を流れるデータのうち、暗号化されていないデータが流れる部分に関しては、直接プローブを当てるなどのタンパリング攻撃を行うことができないよう、耐タンパ領域に物理的に格納するようにしてもよい。
例えば、図1の各機能部のうち、命令メモリ500以外の領域は、全て耐タンパ領域に格納するようにしてもよい。
このようにすることで、攻撃に対する耐性をさらに高めることができる。
実施の形態1に係る暗号化装置100の機能ブロック図である。 遅延部150の機能ブロック図である。 暗号化ルールに基づく変換を行う前のプログラムコードとその実行イメージを示すものである。 ジャンプ命令挿入後のプログラムコードとその暗号化結果である。 実施の形態1に係る復号化装置200の機能ブロック図である。 暗号化後のプログラムコードとその復号化結果を示すものである。 実施の形態2に係る暗号化装置100の機能ブロック図である。 暗号化ルールに基づく変換前のプログラムコードとその実行イメージを示すものである。 ジャンプ命令分割後のプログラムコードとその暗号化結果である。 実施の形態2に係る復号化装置200の機能ブロック図である。 初期化判定部270の機能ブロック図である。 ジャンプ命令分割部180が生成する分割命令の構成図である。 実施の形態3に係る復号化装置200が備える初期化判定部270の機能ブロック図である。 実施の形態4に係る復号化装置200の機能ブロック図である。 初期化補正部280の機能ブロック図である。 実施の形態5に係る復号化装置200の機能ブロック図である。 実施の形態6に係る暗号化装置100の機能ブロック図である。 実施の形態6におけるジャンプ命令挿入後のプログラムコードとその暗号化結果を示すものである。 実施の形態6に係る復号化装置200の機能ブロック図である。 実施の形態6における暗号化後のプログラムコードとその復号化結果を示すものである。 実施の形態7におけるジャンプ命令分割後のプログラムコードとその暗号化結果を示すものである。 実施の形態8に係る復号化装置200の機能ブロック図である。 実施の形態8における初期化補正部280の機能ブロック図である。 実施の形態9に係る復号化装置200の機能ブロック図である。
符号の説明
100 暗号化装置、110 ジャンプ先アドレス収集部、120 ジャンプ命令収集部、130 ジャンプ命令挿入部、141 鍵保持部、142 暗号化部、143 排他的論理和演算器、150 遅延部、151 第1レジスタ、152 マルチプレクサ、153 第2レジスタ、160 初期ベクトル記憶部、170 初期化判定部、180 ジャンプ命令分割部、200 復号化装置、241 鍵保持部、242 復号化部、243 排他的論理和演算器、244 復号化部、250 遅延部、260 初期ベクトル記憶部、270 初期化判定部、271 判定部、272 ハッシュ値記憶部、273 第1記憶スロット、274 第2記憶スロット、275 ハッシュ関数処理部、276 初期化実行部、277 状態デコード部、278 オートマトン部、280 初期化補正部、300 オリジナルコードメモリ、400 変換コードメモリ、500 命令メモリ、600 CPU、700 ジャンプ命令復元部。

Claims (15)

  1. 演算装置に条件分岐命令または無条件ジャンプ命令の少なくとも一方を実行させるプログラムを、コンピュータを用いて暗号化する方法であって、
    前記プログラムを記憶装置から取得するステップと、
    前記プログラムの条件分岐命令と無条件ジャンプ命令のジャンプ先直前に、当該ジャンプ先へジャンプする命令を新たに挿入するジャンプ命令挿入ステップと、
    前記ジャンプ命令挿入ステップで新たなジャンプ命令を挿入した前記プログラムを、直前に暗号化した命令を暗号化に利用しながら連鎖的に暗号化する連鎖暗号化ステップと、
    を前記コンピュータに実行させ、
    前記連鎖暗号化ステップでは、
    暗号化する命令と、直前に暗号化した命令との排他的論理和をとった上で当該命令を暗号化し、
    暗号化する命令の直前の命令が条件分岐命令または無条件ジャンプ命令であった場合、
    当該命令の暗号化に際し、
    直前の命令を暗号化に利用することに代えて所定の初期値を暗号化に利用する
    ことを特徴とする暗号化方法。
  2. 条件分岐命令または無条件ジャンプ命令を複数の命令に分割するジャンプ命令分割ステップを有する
    ことを特徴とする請求項1に記載の暗号化方法。
  3. 前記ジャンプ命令分割ステップでは、
    条件分岐命令または無条件ジャンプ命令を、
    ダミー命令と、分割前のジャンプ命令とに分割する
    ことを特徴とする請求項2に記載の暗号化方法。
  4. 前記ジャンプ命令分割ステップでは、
    条件分岐命令または無条件ジャンプ命令を、
    ハッシュ値を含む任意ビット列と、分割前のジャンプ命令とに分割する
    ことを特徴とする請求項2に記載の暗号化方法。
  5. 請求項1ないし請求項4のいずれかに記載の暗号化方法で暗号化されたプログラムを、コンピュータを用いて復号化する方法であって、
    暗号化された前記プログラムを取得するステップと、
    その暗号化されたプログラムを、直前に復号化した命令を復号化に利用しながら連鎖的に復号化する連鎖復号化ステップと、
    を前記コンピュータに実行させ、
    前記連鎖復号化ステップでは、
    暗号化に対応する復号化を行って得た命令と、直前に復号化対象であった命令との排他的論理和をとることで当該命令を復号化し、
    復号化する命令の直前に復号化対象であった命令が条件分岐命令または無条件ジャンプ命令であった場合、
    当該命令の復号化に際し、
    直前の命令を復号化に利用することに代えて前記初期値を復号化に利用する
    ことを特徴とする復号化方法。
  6. 請求項2ないし請求項4のいずれかに記載の暗号化方法で暗号化されたプログラムを、コンピュータを用いて復号化する方法であって、
    暗号化された前記プログラムを取得するステップと、
    その暗号化されたプログラムを、直前に復号化した命令を復号化に利用しながら連鎖的に復号化する連鎖復号化ステップと、
    前記連鎖復号化ステップで復号化して得た命令の順序が正しいか否かを判定する順序判定ステップと、
    を有し、
    前記連鎖復号化ステップでは、
    暗号化に対応する復号化を行って得た命令と、直前に復号化対象であった命令との排他的論理和をとることで当該命令を復号化し、
    復号化する命令の直前に復号化対象であった命令が条件分岐命令または無条件ジャンプ命令であった場合、
    当該命令の復号化に際し、
    直前の命令を復号化に利用することに代えて前記初期値を復号化に利用し、
    前記順序判定ステップでは、
    前記連鎖復号化ステップで復号化して得た命令が分割されたジャンプ命令である場合、
    分割されたジャンプ命令が分割時の順序で得られたときに限り、当該ジャンプ命令の復号結果を出力する
    ことを特徴とする復号化方法。
  7. 分割されたジャンプ命令以外の命令を投入した場合と、分割されたジャンプ命令を分割時の順序で投入した場合と、に限り正しく遷移する状態遷移器を設けておき、
    前記順序判定ステップでは、
    前記連鎖復号化ステップで復号化して得た命令を前記状態遷移器に逐次投入し、
    前記状態遷移器が正しく遷移した場合に限り、当該ジャンプ命令の復号結果を出力する
    ことを特徴とする請求項6に記載の復号化方法。
  8. 演算装置に条件分岐命令または無条件ジャンプ命令の少なくとも一方を実行させるプログラムを暗号化する装置であって、
    前記プログラムを記憶装置から取得する手段と、
    前記プログラムの条件分岐命令と無条件ジャンプ命令のジャンプ先直前に、当該ジャンプ先へジャンプする命令を新たに挿入するジャンプ命令挿入部と、
    前記ジャンプ命令挿入部が新たなジャンプ命令を挿入した前記プログラムを、直前に暗号化した命令を暗号化に利用しながら連鎖的に暗号化する連鎖暗号化部と、
    を備え、
    前記連鎖暗号化部は、
    暗号化する命令と、直前に暗号化した命令との排他的論理和をとった上で当該命令を暗号化し、
    暗号化する命令の直前の命令が条件分岐命令または無条件ジャンプ命令であった場合、
    当該命令の暗号化に際し、
    直前の命令を暗号化に利用することに代えて所定の初期値を暗号化に利用する
    ことを特徴とする暗号化装置。
  9. 条件分岐命令または無条件ジャンプ命令を複数の命令に分割するジャンプ命令分割部を備える
    ことを特徴とする請求項8に記載の暗号化装置。
  10. 前記ジャンプ命令分割部は、
    条件分岐命令または無条件ジャンプ命令を、
    ダミー命令と、分割前のジャンプ命令とに分割する
    ことを特徴とする請求項9に記載の暗号化装置。
  11. 前記ジャンプ命令分割部は、
    条件分岐命令または無条件ジャンプ命令を、
    ハッシュ値を含む任意ビット列と、分割前のジャンプ命令とに分割する
    ことを特徴とする請求項9に記載の暗号化装置。
  12. 請求項1ないし請求項4のいずれかに記載の暗号化方法で暗号化されたプログラムを復号化する装置であって、
    暗号化された前記プログラムを取得する手段と、
    その暗号化されたプログラムを、直前に復号化した命令を復号化に利用しながら連鎖的に復号化する連鎖復号化部と、
    を備え、
    前記連鎖復号化部は、
    暗号化に対応する復号化を行って得た命令と、直前に復号化対象であった命令との排他的論理和をとることで当該命令を復号化し、
    復号化する命令の直前に復号化対象であった命令が条件分岐命令または無条件ジャンプ命令であった場合、
    当該命令の復号化に際し、
    直前の命令を復号化に利用することに代えて前記初期値を復号化に利用する
    ことを特徴とする復号化装置。
  13. 請求項2ないし請求項4のいずれかに記載の暗号化方法で暗号化されたプログラムを復号化する装置であって、
    暗号化された前記プログラムを取得する手段と、
    その暗号化されたプログラムを、直前に復号化した命令を復号化に利用しながら連鎖的に復号化する連鎖復号化部と、
    前記連鎖復号化部が復号化して得た命令の順序が正しいか否かを判定する順序判定部と、
    を備え、
    前記連鎖復号化部は、
    暗号化に対応する復号化を行って得た命令と、直前に復号化対象であった命令との排他的論理和をとることで当該命令を復号化し、
    復号化する命令の直前に復号化対象であった命令が条件分岐命令または無条件ジャンプ命令であった場合、
    当該命令の復号化に際し、
    直前の命令を復号化に利用することに代えて前記初期値を復号化に利用し、
    前記順序判定部は、
    前記連鎖復号化部が復号化して得た命令が分割されたジャンプ命令である場合、
    分割されたジャンプ命令が分割時の順序で得られたときに限り、当該ジャンプ命令の復号結果を出力する
    ことを特徴とする復号化装置。
  14. 分割されたジャンプ命令以外の命令を投入した場合と、分割されたジャンプ命令を分割時の順序で投入した場合と、に限り正しく遷移する状態遷移器を備え、
    前記順序判定部は、
    前記連鎖復号化部が復号化して得た命令を前記状態遷移器に逐次投入し、
    前記状態遷移器が正しく遷移した場合に限り、当該ジャンプ命令の復号結果を出力する
    ことを特徴とする請求項13に記載の復号化装置。
  15. 請求項1ないし請求項4のいずれかに記載の暗号化方法で暗号化されたプログラムを復号化する装置であって、
    暗号化された前記プログラムを取得する手段と、
    その暗号化されたプログラムを、直前に復号化した命令を復号化に利用しながら連鎖的に復号化する連鎖復号化部と、
    前記連鎖復号部が復号化して得た命令を補正する連鎖補正部と、
    を備え、
    前記連鎖復号部は、
    暗号化に対応する復号化を行って得た命令と、直前に復号化対象であった命令との排他的論理和をとることで当該命令を復号化する復号部を備え、
    前記復号部は、
    複数の命令を並行的に復号化できるよう複数並列に設けられるとともに、前段の復号化結果を復号化に利用できるように多段接続されており、
    前記連鎖補正部は、
    前段で復号化対象であった命令が条件分岐命令または無条件ジャンプ命令であった場合に、前記連鎖復号部の復号化結果と、前段の復号化前の命令との排他的論理和をとり、さらにその結果と前記初期値との排他的論理和をとって出力する補正部を備え、
    前記補正部は、
    前記連鎖復号部の復号化結果を並行的に補正できるよう複数並列に設けられるとともに、前段の復号化結果を補正に利用できるように多段接続されている
    ことを特徴とする復号化装置。
JP2008003968A 2008-01-11 2008-01-11 暗号化方法、復号化方法、暗号化装置、復号化装置 Withdrawn JP2009169489A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008003968A JP2009169489A (ja) 2008-01-11 2008-01-11 暗号化方法、復号化方法、暗号化装置、復号化装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008003968A JP2009169489A (ja) 2008-01-11 2008-01-11 暗号化方法、復号化方法、暗号化装置、復号化装置

Publications (1)

Publication Number Publication Date
JP2009169489A true JP2009169489A (ja) 2009-07-30

Family

ID=40970620

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008003968A Withdrawn JP2009169489A (ja) 2008-01-11 2008-01-11 暗号化方法、復号化方法、暗号化装置、復号化装置

Country Status (1)

Country Link
JP (1) JP2009169489A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100153745A1 (en) * 2008-12-15 2010-06-17 Onno Stephane Methods and devices for instruction level software encryption
CN109102272A (zh) * 2018-08-01 2018-12-28 中国联合网络通信集团有限公司 数字版权保护方法、装置、设备及存储介质
CN110598376A (zh) * 2019-09-26 2019-12-20 腾讯科技(深圳)有限公司 基于区块链的版权认证方法、装置、设备及存储介质
WO2020082883A1 (zh) * 2018-10-26 2020-04-30 阿里巴巴集团控股有限公司 对象选取方法及装置、电子设备

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100153745A1 (en) * 2008-12-15 2010-06-17 Onno Stephane Methods and devices for instruction level software encryption
US8341426B2 (en) * 2008-12-15 2012-12-25 Thomson Licensing Methods and devices for instruction level software encryption
CN109102272A (zh) * 2018-08-01 2018-12-28 中国联合网络通信集团有限公司 数字版权保护方法、装置、设备及存储介质
WO2020082883A1 (zh) * 2018-10-26 2020-04-30 阿里巴巴集团控股有限公司 对象选取方法及装置、电子设备
CN110598376A (zh) * 2019-09-26 2019-12-20 腾讯科技(深圳)有限公司 基于区块链的版权认证方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
JP5616528B2 (ja) ソフトウェアの完全性を保証するためのプロセッサにより実施される方法
US11362802B2 (en) Cryptographic device arranged to compute a target block cipher
JP5734685B2 (ja) インテグリティを実行中に確かめるソフトウェアを生成するプログラム、方法及び記憶媒体
US8683224B2 (en) Processor-implemented method for ensuring software integrity
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
EP2711859B1 (en) Secured computing system with asynchronous authentication
US8402448B2 (en) Compiler system and a method of compiling a source code into an encrypted machine language code
JP2009543498A (ja) デジタルデータ処理装置の耐改竄性
KR20130093557A (ko) 적어도 하나의 암호화 명령어를 포함하는 소프트웨어 애플리케이션의 협력 실행을 위한 시스템, 장치, 및 방법
JP2006107274A (ja) ハッシュ関数演算システム、暗号化システムおよび不正解析・改竄防止システム
JP2007213718A (ja) 半導体集積回路及び半導体集積回路の検査方法
JP2009169489A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
JP2007328789A (ja) 入力データに関するアドレスを使用して入力データを符号化するための暗号システム、エラー検出回路、及びそれの動作方法
EP3742665A1 (en) Semiconductor device, update data-providing method, update data-receiving method, and program
JPWO2006118101A1 (ja) 機密情報処理用ホスト機器および機密情報処理方法
WO2006046484A1 (ja) 認証方法
KR20180059217A (ko) 메모리 데이터 보안 처리 장치 및 방법
JP2009252142A (ja) データ処理装置
JP2011123229A (ja) プログラムコード暗号化装置及びプログラム
JP6631989B2 (ja) 暗号化装置、制御方法、及びプログラム
CN113343215A (zh) 嵌入式软件的授权和认证方法及电子设备
US20210143978A1 (en) Method to secure a software code performing accesses to look-up tables
JP2009211292A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
JP2015015542A (ja) 情報処理システム
JP6069120B2 (ja) 情報処理システム

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20110405