説明

暗号化で用いる鍵をスケジュールする装置、方法およびプログラム

【課題】付加情報等の計算のための計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行する鍵スケジュール装置を提供すること。
【解決手段】複数のラウンドそれぞれに対応する複数のラウンド鍵を記憶する第1記憶部320と、予め定められた処理サイクルごとに、第1記憶部320に記憶された複数のラウンド鍵と、複数のラウンド鍵のうち少なくとも1つのラウンド鍵の一部と、のいずれかを表す更新対象鍵を取得し、取得した更新対象鍵に基づいて、取得した更新対象鍵のラウンドの次のラウンドのラウンド鍵を算出する演算部311と、処理サイクルごとに、算出されたラウンド鍵で、第1記憶部320の更新対象鍵を更新する更新部312と、を備えた。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、故障利用解析に対して安全な、共通鍵暗号方式の鍵スケジュールを実行する装置、方法およびプログラムに関する。
【背景技術】
【0002】
通信内容の秘匿などを目的として広範に用いられている秘密鍵ブロック暗号方式として、AES(Advanced Encryption Standard)が知られている。
【0003】
近年、128ビットの秘密鍵を用いるAESに対して、9ラウンド目で使用するラウンド鍵の計算時に計算誤りを生じさせることで、ラウンド鍵の算出の元となる秘密鍵を導出する故障利用解析が報告されている(例えば、非特許文献1参照)。
【0004】
故障利用解析に対する対策としては、(i)予め計算したラウンド鍵を記憶して使用することで計算誤りが混入する恐れをなくす、(ii)パリティ情報などの付加情報を利用して計算誤りを検出または訂正する、(iii)同一の計算を複数回実行して計算結果を比較することで計算誤りを検出する、などが知られている(例えば、非特許文献2参照)。
【0005】
【非特許文献1】J.Takahashi,T.Fukunaga,K.Yamakoshi,“DFA,Mechanism on the AES Key Schedule”,Fault Diagnosis and Tolerance in Cryptography,pp.62−75,IEEE Computer Society,2007.
【非特許文献2】C.−N.Chen,S.−M.Yen,“Differential Fault Analysis on AES Key Schedule and Some Countermeasures”,Information Security and Privacy,8th Australasian Conference,ACISP 2003,pp.118−129,Lecture Notes in Computer Science 2727,Springer−Verlag.
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、(i)の対策を用いる場合には、予め計算した鍵を記憶する安全な記憶領域が必要となる。さらに、秘密鍵が更新される場合には、ラウンド鍵を誤りなく計算して記憶しなおさなければならない。(ii)の対策を用いる場合には、付加情報を計算するための計算量および検証のための計算量が増加するという問題があった。(iii)の対策を用いる場合には、同一の回路を利用して計算を複数回実行するときには計算時間が増加するという問題や、複数の計算結果を比較するための演算等が必要になるため計算量が増加するという問題があった。なお、(iii)の対策を用いて、複数の回路を利用して複数回の計算を並行して実行すれば、計算時間や計算量の増加を抑止しうるが、回路規模が増加するという別の問題が生じる。
【0007】
本発明は、上記に鑑みてなされたものであって、付加情報等の計算のための計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行することができる装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決し、目的を達成するために、本発明は、ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール装置であって、複数のラウンドそれぞれに対応する複数のラウンド鍵を記憶する第1記憶部と、予め定められた処理サイクルごとに、前記第1記憶部に記憶された複数のラウンド鍵と、複数のラウンド鍵のうち少なくとも1つのラウンド鍵の一部と、のいずれかを表す更新対象鍵を取得し、取得した前記更新対象鍵に基づいて、取得した前記更新対象鍵のラウンドの次のラウンドのラウンド鍵を算出する演算部と、前記処理サイクルごとに、算出されたラウンド鍵で、前記第1記憶部の前記更新対象鍵を更新する更新部と、を備えたことを特徴とする。
【0009】
また、本発明は、ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール装置であって、ラウンド鍵を記憶する第1記憶部と、予め定められた処理サイクルごとに、前記第1記憶部に記憶されたラウンド鍵を取得し、取得したラウンド鍵に基づいて、取得したラウンド鍵のラウンドの1つ後のラウンドのラウンド鍵と、2つ後のラウンドのラウンド鍵とを算出する演算部と、前記処理サイクルごとに、算出された2つ後のラウンドのラウンド鍵で、前記第1記憶部のラウンド鍵を更新する更新部と、を備えたことを特徴とする。
【0010】
また、本発明は、上記装置を実行することができる方法およびプログラムである。
【発明の効果】
【0011】
本発明によれば、計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行することができるという効果を奏する。
【発明を実施するための最良の形態】
【0012】
以下に添付図面を参照して、この発明にかかる装置、方法およびプログラムの最良な実施の形態を詳細に説明する。
【0013】
(第1の実施の形態)
ブロック暗号方式で暗号化処理を行う際に用いる鍵スケジュール装置に、本発明を適用した例を説明する。ここで、ブロック暗号方式とは、方式ごとに定められたビット長ごとに、暗号処理の対象となる平文をブロック分割して、分割されたブロックごとに暗号化処理を行う方式である。ブロック暗号方式は、ラウンドとよばれる単位の処理を繰り返し行い、平文のブロックから暗号文のブロックを計算する。各ラウンドは、前のラウンドが出力するデータブロック(最初のラウンドでは平文ブロック)と、予め保持している鍵データから鍵スケジュール装置において計算されるラウンド鍵とを入力として、次のラウンドが利用するデータブロック(最後のラウンドでは暗号文ブロック)を出力する。
【0014】
以下では、128ビットの秘密鍵を用いるAESの鍵スケジュール装置として実現した場合の例を説明するが、適用可能な秘密鍵は128ビットに限られるものではない。128ビットの秘密鍵を用いるAESでは、平文のブロックは128ビットであり、ラウンド数は10である。
【0015】
第1の実施の形態にかかる鍵スケジュール装置は、AESによる暗号化処理の各ラウンドで利用するラウンド鍵を算出するときに、所定の処理サイクルの1サイクルで複数のラウンドのラウンド鍵を算出する。ここで、所定の処理サイクルとは、1ラウンド分の処理を行う単位をあらわす。例えば、1クロックごとに1ラウンド分の処理を行うハードウェアを構成する場合には処理サイクルは1クロックであり、2クロックごとに1ラウンド分の処理を行うハードウェア構成をする場合には処理サイクルは2クロックである。これにより、上記のような故障利用解析によって9ラウンド目のラウンド鍵の計算を誤らせたとしても、その前後の8ラウンド目または10ラウンド目のラウンド鍵にも計算誤りが生じうることにより、秘密鍵の導出が困難となる。
【0016】
図1は、第1の実施の形態にかかる鍵スケジュール装置100の構成を示すブロック図である。図1に示すように、鍵スケジュール装置100は、スケジュール部310と、第1記憶部320と、第2記憶部330とを備えている。また、鍵スケジュール装置100は、鍵スケジュール装置100で算出されたラウンド鍵を用いてデータを暗号化する暗号化装置200と接続されている。
【0017】
鍵スケジュール装置100および暗号化装置200は、例えば、AESにしたがってデータを暗号化する回路であるAES暗号化回路に含まれる鍵スケジュール回路、および、データ暗号化回路として実現することができる。
【0018】
第1記憶部320は、複数のラウンドに対応する複数のラウンド鍵を記憶するレジスタである。第1記憶部320は、128ビット(16バイト)のラウンド鍵を4バイトごとに記憶する4つのレジスタ320a〜320dから構成される。
【0019】
レジスタ320a〜320dには、後述する更新部312によって互いに異なるラウンドのラウンド鍵が記憶される。具体的には、レジスタ320aおよび320bは、レジスタ320cおよび320dより1つ進んだラウンドのラウンド鍵が記憶される。
【0020】
第2記憶部330は、レジスタ320aおよび320bに記憶されているラウンド鍵の1つ前のラウンドの対応するラウンド鍵を記憶するレジスタである。第2記憶部330は、レジスタ320aおよび320bにそれぞれ対応するラウンド鍵を記憶するレジスタ330aおよび330bから構成される。
【0021】
レジスタ330aおよび330bを備えることにより、鍵スケジュール装置100の出力がラウンドごとに揃うように調節することができる。すなわち、レジスタ330aおよび330bは、後述する出力部313が、暗号化装置200に同一のラウンドのラウンド鍵の全部を出力するときに参照される。
【0022】
スケジュール部310は、第1記憶部320に記憶された複数のラウンドのラウンド鍵を参照して、次のラウンドのラウンド鍵を順次算出する鍵スケジュール演算処理を実行する。スケジュール部310は、詳細な構成として、演算部311と、更新部312と、出力部313とを備えている。
【0023】
演算部311は、所定の処理サイクルで、第1記憶部320に記憶されたラウンド鍵の次のラウンドのラウンド鍵を算出する。例えば、鍵スケジュール装置100をハードウェア回路で実現する場合、演算部311は、同期を取るためのクロック信号の周期(クロック周期)を所定の処理サイクルとすることができる。また、例えば、第5の実施の形態(後述)のように、鍵スケジュール装置100の処理をプログラムにより実現する場合、演算部311は、当該プログラムで定められた所定の処理(ステップ)を実行する周期を所定の処理サイクルとすることができる。
【0024】
演算部311は、各処理サイクルで、第1記憶部320に記憶されたラウンド鍵のうち、更新する対象となるラウンド鍵を表す更新対象鍵を取得し、更新対象鍵に対する次のラウンドのラウンド鍵を算出する。本実施の形態では、演算部311は、第1記憶部320に記憶された複数のラウンドのラウンド鍵それぞれを更新対象鍵としてラウンド鍵を算出する。
【0025】
更新部312は、算出されたラウンド鍵で、第1記憶部320に記憶された更新対象鍵を更新する。
【0026】
出力部313は、第1記憶部320のレジスタ320cおよび320dに記憶されたラウンド鍵と、第2記憶部330のレジスタ330aおよび330bに記憶されたラウンド鍵とを、暗号化装置200に出力する。これにより、暗号化装置200は、同一のラウンドのラウンド鍵を同時に取得することができる。なお、暗号化装置200が、ラウンド鍵が計算されるタイミングの相違を調整するように構成してもよい。この場合は、レジスタ330aおよび330bは不要となる。
【0027】
次に、鍵スケジュール装置100を実現する回路例について図2を用いて説明する。図2は、第1の実施の形態の鍵スケジュール装置100の一例を示す回路図である。
【0028】
同図に示すように、鍵スケジュール装置100は、上述のレジスタ320a〜320dと、レジスタ330aおよび330bとの他に、排他的論理和回路302a〜302dと、選択器303a〜303eと、RotWord演算部304と、SubByte演算部305と、AddRcon演算部306とを含んでいる。
【0029】
なお、同図では、R(i=0〜15)は、レジスタ320a〜320dに記憶される4バイトのデータを4分割した1バイト(8ビット)のデータを表すものとする。
【0030】
排他的論理和回路302a〜302dは、ビットごとの排他的論理和を計算する。
【0031】
選択器303a〜303dは、鍵スケジュール装置100への入力と、排他的論理和回路302a〜302dの出力とを、クロック信号に応じて選択して出力する。鍵スケジュール装置100への入力とは、ラウンド鍵の演算に用いる鍵として入力される、ラウンド鍵の初期状態(初期値)である秘密鍵を意味する。また、同図に示すように、本実施の形態では、128ビット(16バイト)の秘密鍵を4バイトずつ分割したデータが、選択器303a〜303dにそれぞれ入力される。
【0032】
選択器303eは、クロック信号に応じて、レジスタ320dが保持する値、または排他的論理和回路302dが出力する値のいずれかを選択して出力する回路である。
【0033】
選択器303a〜303eは、事前に設定された情報または外部から指示された命令等にしたがって、いずれの値を選択するかを決定する。選択器303a〜303eによるクロックごとの選択方法の詳細については後述する。
【0034】
RotWord演算部304は、4バイトのデータ「ki,12i,13i,14i,15」を入力として、バイトの順番を入れ替えたデータ「ki,13i,14i,15i,12」を出力する。なお、記号「ki,j」は、iラウンド目のラウンド鍵の(j+1)バイト目のデータを表す。そして、例えばデータ「ki,12i,13i,14i,15」は、各1バイトのデータである「ki,12」、「ki,13」、「ki,14」、および「ki,15」をこの順序で連結した4バイトのデータを表す。
【0035】
SubByte演算部305は、4バイトのデータを入力として、入力された4バイトの各バイトにAESの仕様で定められた非線形演算を施して出力する。
【0036】
AddRCon演算部306は、4バイトのデータを入力として、AESの仕様でラウンドごとに定められたラウンド定数を入力された4バイトに加算(排他的論理和演算)して出力する。
【0037】
上述のように、本実施の形態では、レジスタ320aおよび320bに保持されるラウンド鍵は、レジスタ320cおよび320dに保持されるラウンド鍵よりも1ラウンド分進んだラウンド鍵となる。
【0038】
次に、このように構成された鍵スケジュール装置100による鍵スケジュール演算処理について説明する。図3は、第1の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【0039】
以下に、最初のクロックである時刻Cから、10ラウンド目のラウンド鍵を算出するクロックである時刻C11までの各クロックでの処理の詳細について説明する。
【0040】
(時刻C)選択器303aから303dは、それぞれ鍵スケジュール装置100の入力として受け付けた4バイトの鍵「k0,00,10,20,3」、「k0,40,50,60,7」、「k0,80,90,100,11」、および「k0,120,130,140,15」を選択する。レジスタ320aから320dは、クロック周期の終わりに、図3のCに対応する行に示すような値をそれぞれ保持する。
【0041】
(時刻C)レジスタ320aから320dは保持している値を出力する。選択器303aと303bは、排他的論理和回路302aと302bの出力を選択して出力する。このように、ラウンド鍵を算出する最初のクロックでは、入力された鍵の先頭8バイトに相当する要素のみが選択され、後述するようにこの先頭8バイトのみが次のラウンド鍵に更新される。すなわち、この場合は、先頭8バイトに相当する要素が更新対象鍵となる。
【0042】
選択器303cと303dは、鍵スケジュール装置100の入力として受け付けた4バイトの鍵「k0,80,90,100,11」および「k0,120,130,140,15」をそれぞれ選択する。
【0043】
選択器303eは、レジスタ320dが保持する値を選択して出力する。このとき、レジスタ320dに保持される「k0,120,130,140,15」は、RotWord演算部304、SubByte演算部305、およびAddRCon演算部306で変換されて排他的論理和回路302aに送られ、レジスタ320aに保持される「k0,00,10,20,3」を「k1,01,11,21,3」に更新する。更新された「k1,01,11,21,3」は、排他的論理和回路302bに送られ、レジスタ320bに保持される「k0,40,50,60,7」を「k1,41,51,61,7」に更新する。
【0044】
一方、レジスタ320cと320dに保持される「k0,80,90,100,11」と「k0,120,130,140,15」は同一の値に更新される。すなわち、これらのレジスタに保持されるデータの値は変化しない。更新された値は、クロック周期の終わりに、図3に示すようにレジスタ320aから320dに保持される。レジスタ330aと330bは、レジスタ320aと320bと同一の値が保持される。
【0045】
(時刻C)レジスタ320aから320dおよびレジスタ330aから330bは、保持している値を出力する。選択器303aから303dは、排他的論理和回路302aから302dの出力を選択して出力する。選択器303eは、排他的論理和回路302dが出力する値を選択して出力する。レジスタ320bに保持される「k1,41,51,61,7」は、排他的論理和回路302cに送られ、レジスタ320cに保持される「k0,80,90,100,11」を「k1,81,91,101,11」に更新する。更新された「k1,81,91,101,11」は、排他的論理和回路302dに送られ、レジスタ320dに保持される「k0,120,130,140,15」を「k1,121,131,141,15」に更新する。更新された「k1,121,131,141,15」は、RotWord演算部304、SubByte演算部305、およびAddRCon演算部306で変換されて排他的論理和回路302aに送られ、レジスタ320aに保持される「k1,01,11,21,3」を「k2,02,12,22,3」に更新する。
【0046】
更新された「k2,02,12,22,3」は、排他的論理和回路302bに送られ、レジスタ320bに保持される「k1,41,51,61,7」を「k2,42,52,62,7」に更新する。レジスタ330aと330bに保持される値「k1,01,11,21,3」と「k1,41,51,61,7」、および、排他的論理和回路302cと302dの出力「k1,81,91,101,11」と「k1,121,131,141,15」は、1ラウンド目のラウンド鍵として鍵スケジュール装置100から出力される。更新された値は、クロック周期の終わりに、図3に示すようにレジスタ320aから320dに保持される。レジスタ330aと330bは、レジスタ320aと320bと同一の値が保持される。
【0047】
時刻C10まで同様の処理が繰り返され、9ラウンド目のラウンド鍵「k9,09,19,29,3」、「k9,49,59,69,7」、「k9,89,99,109,11」、および「k9,129,139,149,15」が出力され、図3に示すようにレジスタ320a(および330a)、レジスタ320b(および330b)、レジスタ320c、およびレジスタ320dに、それぞれ「k10,010,110,210,3」、「k10,410,510,610,7」、「k9,89,99,109,11」、および「k9,129,139,149,15」が保持される。
【0048】
(時刻C11)レジスタ320aから320dおよびレジスタ330aから330bは、保持している値を出力する。選択器303aから303dは、排他的論理和回路302aから302dの出力を選択して出力する。選択器303eは、排他的論理和回路302dが出力する値を選択して出力する。レジスタ320bに保持される「k10,410,510,610,7」は、排他的論理和回路302cに送られ、レジスタ320cに保持される「k9,89,99,109,11」を「k10,810,910,1010,11」に更新する。
【0049】
更新された「k10,810,910,1010,11」は、排他的論理和回路302dに送られ、レジスタ320dに保持される「k9,129,139,149,15」を「k10,1210,1310,1410,15」に更新する。レジスタ330aと330bに保持される「k10,010,110,210,3」と「k10,410,510,610,7」、および、更新された「k10,810,910,1010,11」と「k10,1210,1310,1410,15」は、10ラウンド目のラウンド鍵として鍵スケジュール装置100から出力される。レジスタ320aおよび320bに保持される値は、更新された「k10,1210,1310,1410,15」に基づいて、実際には使用されない値に更新されて保持される。例えば、上記と同様の処理により、11ラウンド目に相当する値に更新されて保持される。図3では、使用されないことを示すために、この値を記号「---」で表している。
【0050】
このようにして鍵スケジュール演算処理を実行することにより、非特許文献1などで開示されている故障利用解析で秘密鍵を導出することが困難となる。すなわち、9ラウンド目のラウンド鍵に計算誤りを生じさせるためには、時刻CまたはC10で計算を誤らせる必要がある。しかし、このとき8ラウンド目のラウンド鍵の一部である「k8,88,98,108,118,128,138,148,15」、または、10ラウンド目のラウンド鍵の一部である「k10,010,110,210,310,410,510,610,7」にも計算誤りが生じる可能性があるため、故障利用解析により秘密鍵を求めることが困難となる。
【0051】
また、上記非特許文献2のように、付加情報の計算や、計算結果の比較などのような、ラウンド鍵以外の情報のための計算が不要であるため、計算量の増大を抑止することができる。また、11クロック(時刻C11)で10ラウンド目までのラウンド鍵が算出できるため、10クロックで10ラウンド目までのラウンド鍵を算出する従来の方法と比較したラウンド鍵を計算するための計算量の増加も最小限にすることができる。
【0052】
これまでは、レジスタ320aおよび320bが、レジスタ320cおよび320dよりも1ラウンド分進んだラウンド鍵を保持するような鍵スケジュール装置について説明した。同様の手法により、レジスタ320aが、レジスタ320b、320c、および320dよりも1ラウンド分進んだラウンド鍵を保持するような鍵スケジュール装置、または、レジスタ320a、320b、および320cが、レジスタ320dよりも1ラウンド分進んだラウンド鍵を保持する鍵スケジュール装置の構成が可能である。
【0053】
このように、第1の実施の形態にかかる鍵スケジュール装置では、AESによる暗号化処理の各ラウンドで利用するラウンド鍵を算出するときに、1クロックで複数のラウンドのラウンド鍵を算出するように鍵スケジュール演算処理を実行することができる。このため、付加情報等の計算のための計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行することができる。
【0054】
(第2の実施の形態)
第1の実施の形態にかかる鍵スケジュール装置では、16バイトのラウンド鍵を4バイト単位で分割し、先頭の8バイトが、末尾の8バイトより1ラウンド進むようにラウンド鍵を算出していた。第2の実施の形態にかかる鍵スケジュール装置は、分割した4バイトをさらに1バイトごとに分割し、先頭から奇数番目のバイトが、偶数番目のバイトより1ラウンド進むようにラウンド鍵を算出する。
【0055】
図4は、第2の実施の形態にかかる鍵スケジュール装置500の構成を示すブロック図である。図4に示すように、鍵スケジュール装置500は、スケジュール部510と、第1記憶部520と、第2記憶部530とを備えている。
【0056】
第2の実施の形態では、上述のように1バイト単位でラウンド鍵の更新を制御するようにスケジュール部510と、第1記憶部520と、第2記憶部530とを構成した点が、第1の実施の形態と異なっている。以下では、第2の実施の形態の鍵スケジュール装置500を実現する回路例である図5を用いて、鍵スケジュール装置500の機能について説明する。図5は、第2の実施の形態の鍵スケジュール装置500の一例を示す回路図である。
【0057】
同図に示すように、鍵スケジュール装置500は、第1記憶部520を構成するレジスタ520a〜520pと、第2記憶部530を構成するレジスタ530a〜530hと、レジスタ501yおよび501zと、排他的論理和回路502a〜502pと、選択器503a〜503pと、選択器503q〜503tと、RotWord演算部304と、SubByte演算部305と、AddRcon演算部506とを含んでいる。
【0058】
レジスタ520aから520dは、第1の実施の形態におけるレジスタ320aに対応し、ラウンド鍵の先頭4バイトをバイトごとに保持するレジスタである。同様に、レジスタ520eから520h、レジスタ520iから520l、およびレジスタ520mから520pは、それぞれ第1の実施の形態におけるレジスタ320b、レジスタ320c、およびレジスタ320dに対応する。
【0059】
レジスタ530aから530hは、第1の実施の形態におけるレジスタ330aと330bと同様に、鍵スケジュール装置500の出力が、ラウンドごとに揃うように調節するために用いられる。
【0060】
レジスタ501yと501zは、特定の時刻で計算されるラウンド鍵のラウンドに差分を生じさせるために用いられる。
【0061】
排他的論理和回路502aから502pは、第1の実施の形態における排他的論理和回路302aから302dをバイトごとに分割した回路であり、2つの1バイトの入力に対して、ビットごとに排他的論理和を計算した結果を出力する。
【0062】
選択器503aから503pは、第1の実施の形態における選択器303aから303dをバイトごとに分割した回路であり、排他的論理和回路502aから502pの出力、または鍵スケジュール装置500の入力のいずれかを、クロック信号に応じて選択して出力する。
【0063】
選択器503qと503sは、レジスタ520mと520oの出力、または鍵スケジュール装置500の入力のいずれかを、クロック信号に応じて選択して出力する回路である。
【0064】
選択器503rと503tは、排他的論理和回路502nと502pの出力、または鍵スケジュール装置500の入力のいずれかを、クロック信号に応じて選択して出力する回路である。
【0065】
RotWord演算部304、およびSubByte演算部305は、第1の実施の形態の鍵スケジュール装置100の回路図である図2と同様であるため同一の符号を付し、説明は省略する。
【0066】
AddRCon演算部506は、AESの仕様でラウンドごとに定められたラウンド定数を4バイトの入力に加算(排他的論理和演算)して出力する。ただし、以下に説明する第2の実施の形態では、AddRCon演算部506に入力される4バイトの入力は異なる複数のラウンドに対応するので、対応するラウンドの定数を適切に加算するように構成する。すなわち、AddRCon演算部506は、4バイトを構成する各バイトのラウンドを判定し、各バイトごとに、判定したラウンドに対するラウンド定数を加算する。
【0067】
次に、このように構成された鍵スケジュール装置500による鍵スケジュール演算処理について説明する。図6は、第2の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【0068】
以下に、最初のクロックである時刻Cから、10ラウンド目のラウンド鍵を算出するクロックである時刻C11までの各クロックでの処理の詳細について説明する。
【0069】
(時刻C)選択器503aから503p、および選択器503qと503sは、それぞれ鍵スケジュール装置500の入力として受け付けた各バイトの鍵「k0,0」、「k0,1」、「k0,2」、「k0,3」、「k0,4」、「k0,5」、「k0,6」、「k0,7」、「k0,8」、「k0,9」、「k0,10」、「k0,11」、「k0,12」、「k0,13」、「k0,14」、「k0,15」、「k0,12」、「k0,14」を選択する。レジスタ520aから520p、およびレジスタ501yと501zは、クロック周期の終わりに、図6に示すようにそれぞれの値を保持する。
【0070】
(時刻C)レジスタ520aから520p、およびレジスタ501yと501zは保持している値を出力する。選択器503a、503c、503e、503g、503i、503k、503m、および503oは、それぞれ排他的論理和回路502a、502c、502e、502g、502i、502k、502m、および502oの出力を選択して出力する。選択器503b、503d、503f、503h、503j、503l、503n、503pは、鍵スケジュール装置500の入力として受け付けた各バイトの鍵k0,1」、「k0,3」、「k0,5」、「k0,7」、「k0,9」、「k0,11」、「k0,13」、「k0,15」を選択する。選択器503qおよび503sは、それぞれレジスタ520mおよび520oが保持する値を選択して出力する。選択器503rおよび503tは、それぞれ鍵スケジュール装置500の入力として受け付けた各バイトの鍵「k0,12」および「k0,14」を選択して出力する。
【0071】
このとき、選択器503rと503tが出力した「k0,13」および「k0,15」は、RotWord演算部304、およびSubByte演算部305で変換されたのち、AddRCon演算部506で1ラウンド目に対応する定数が加算されて、排他的論理和回路502aと502cに送られ、レジスタ520aと520cに保持される「k0,0」および「k0,2」をそれぞれ「k1,0」および「k1,2」に更新する。
【0072】
更新された「k1,0」および「k1,2」は、排他的論理和回路502eと502gに送られ、レジスタ520eおよび520gにそれぞれ保持される「k0,4」および「k0,6」をそれぞれ「k1,4」および「k1,6」に更新する。同様に、レジスタ520i、520k、520m、および520oにそれぞれ保持される「k0,8」、「k0,10」、「k0,12」、および「k0,14」は、「k1,8」、「k1,10」、「k1,12」、および「k1,14」にそれぞれ更新される。
【0073】
一方、レジスタ520b、520d、520f、520h、520j、520l、520n、520o、501y、および501zにそれぞれ保持される「k0,1」、「k0,3」、「k0,5」、「k0,7」、「k0,9」、「k0,11」、「k0,13」、「k0,15」、「k0,12」、および「k0,14」は、同一の値に更新される。
【0074】
更新された値は、クロック周期の終わりに、図6に示すようにレジスタ520aから520p(R〜R15に対応)、およびレジスタ501yと501z(T12、T14に対応)に保持される。
【0075】
レジスタ530aから530hは、更新された「k1,0」、「k1,2」、「k1,4」、「k1,6」、「k1,8」、「k1,10」、「k1,12」、および「k1,14」を保持する。
【0076】
(時刻C)レジスタ520aから520p、レジスタ501y、およびレジスタ501zは保持している値を出力する。選択器503aから503pは、それぞれ排他的論理和回路502aから502pの出力を選択して出力する。選択器503qおよび503sは、それぞれレジスタ520mおよび520oが出力する値を選択して出力する。選択器503rおよび503tは、それぞれ排他的論理和回路502nおよび502pの出力を選択して出力する。
【0077】
レジスタ501yと501zに保持される「k0,12」および「k0,14」は、RotWord演算部304、およびSubByte演算部305で変換されたのち、AddRCon演算部506で1ラウンド目に対応する定数が加算されて、排他的論理和回路502dと502bに送られ、レジスタ520dおよび520bにそれぞれ保持される「k0,3」および「k0,1」を、それぞれ「k1,3」および「k1,1」に更新する。更新された「k1,1」および「k1,3」は、排他的論理和回路502fと502hに送られ、レジスタ520fおよび520hにそれぞれ保持される「k0,5」および「k0,7」をそれぞれ「k1,5」および「k1,7」に更新する。同様に、レジスタ520j、520l、520n、および520pにそれぞれ保持される「k0,9」、「k0,11」、「k0,13」、および「k0,15」は、それぞれ「k1,9」、「k1,11」、「k1,13」、および「k1,15」に更新される。
【0078】
さらに、更新された「k1,13」および「k1,15」は、それぞれ選択器503rおよび503sによって選択されて出力され、RotWord演算部304、およびSubByte演算部305で変換されたのち、AddRCon演算部506で2ラウンド目に対応する定数が加算されて、排他的論理和回路502aと502cに送られる。そして、レジスタ520aおよび520cにそれぞれ保持される「k1,0」および「k1,2」を、それぞれ「k2,0」および「k2,2」に更新する。更新された「k2,0」および「k2,2」は、排他的論理和回路502eと502gに送られ、レジスタ520eおよび520gにそれぞれ保持される「k1,4」および「k1,6」を、それぞれ「k2,4」および「k2,6」に更新する。同様に、レジスタ520i、520k、520m、および520oにそれぞれ保持される「k1,8」、「k1,10」、「k1,12」、および「k1,14」は、それぞれ「k2,8」、「k2,10」、「k2,12」、および「k2,14」に更新される。
【0079】
更新された「k1,1」、「k1,3」、「k1,5」、「k1,7」、「k1,9」、「k1,11」、「k1,13」、および「k1,15」は、レジスタ530aから530hに保持される「k1,0」、「k1,2」、「k1,4」、「k1,6」、「k1,8」、「k1,10」、「k1,12」、および「k1,14」とともに1ラウンド目のラウンド鍵として出力される。
【0080】
更新された値は、クロック周期の終わりに、図6に示すようにレジスタ520aから520pおよびレジスタ501yと501zに保持される。レジスタ530aから530hには、それぞれ「k2,0」、「k2,2」、「k2,4」、「k2,6」、「k2,8」、「k2,10」、「k2,12」、および「k2,14」が保持される。
【0081】
時刻C10まで同様の処理が繰り返され、9ラウンド目のラウンド鍵「k9,09,19,29,39,49,59,69,79,89,99,109,119,129,139,149,15」が出力され、図6に示すようにレジスタ520aから520p、レジスタ501y、およびレジスタ501zに、それぞれ「k10,0」、「k9,1」、「k10,2」、「k9,3」、「k10,4」、「k9,5」、「k10,6」、「k9,7」、「k10,8」、「k9,9」、「k10,10」、「k9,11」、「k10,12」、「k9,13」、「k10,14」、「k9,15」、「k9,12」、および「k9,14」が保持される。
【0082】
(時刻C11)レジスタ520aから520p、レジスタ501y、およびレジスタ501zは保持している値を出力する。選択器503aから503pは、排他的論理和回路502aから502pの出力を選択して出力する。選択器503qと503sは、レジスタ520mと520oが出力する値を選択して出力する。選択器503rと503tは、排他的論理和回路502nと502pの出力を選択して出力する。
【0083】
レジスタ501yと501zにそれぞれ保持される「k9,12」および「k9,14」は、RotWord演算部304、およびSubByte演算部305で変換されたのち、AddRCon演算部506で10ラウンド目に対応する定数が加算されて、排他的論理和回路502dと502bに送られ、レジスタ520dおよび520bにそれぞれ保持される「k9,3」および「k9,1」を、それぞれ「k10,3」および「k10,1」に更新する。更新された「k10,1」および「k10,3」は、それぞれ排他的論理和回路502fと502hに送られ、レジスタ520fおよび520hにそれぞれ保持される「k9,5」および「k9,7」を、それぞれ「k10,5」および「k10,7」に更新する。同様に、レジスタ520j、520l、520n、および520pにそれぞれ保持される「k9,9」、「k9,11」、「k9,13」、および「k9,15」は、それぞれ「k10,9」、「k10,11」、「k10,13」、および「k10,15」に更新される。
【0084】
さらに、更新された「k10,13」および「k10,15」は、選択器503rと503sによって選択されて出力され、RotWord演算部304、およびSubByte演算部305で変換される。しかし、AddRCon演算部506では11ラウンド目に対応する定数が定められていないため、以降のデータは無効となり、レジスタ520a、520c、520e、520g、520i、520k、520m、および520oに実際には使用されない値に更新される。
【0085】
更新された「k10,1」、「k10,3」、「k10,5」、「k10,7」、「k10,9」、「k10,11」、「k10,13」、および「k10,15」は、レジスタ530aから530hに保持される「k10,0」、「k10,2」、「k10,4」、「k10,6」、「k10,8」、「k10,10」、「k10,12」、および「k10,14」とともに、10ラウンド目のラウンド鍵として出力される。
【0086】
第2の実施の形態で、9ラウンド目のラウンド鍵に計算誤りを生じさせるためには、時刻CまたはC10で計算を誤らせる必要がある。しかし、このとき8ラウンド目のラウンド鍵の一部「k8,18,38,58,78,98,118,138,15」、または10ラウンド目のラウンド鍵の一部「k10,010,210,410,610,810,1010,1210,14」にも計算誤りが生じる可能性があり、非特許文献1などで開示されている故障利用解析により秘密鍵を求めることは困難となる。
【0087】
これまでは、例えば最初の4バイトに着目すると、レジスタ520aおよび520cが、レジスタ520bおよび520dよりも1ラウンド分進んだラウンド鍵を保持するような鍵スケジュール装置について説明した。ラウンドを進めるレジスタの組み合わせはこれに限られるものではなく、図6の回路例と同様の手法を適用できるものであればどのような組合せでもよい。
【0088】
例えば、以下の組み合わせが可能である。
(1)レジスタ520bと520dが、レジスタ520aと520cよりも1ラウンド分進む
(2)レジスタ520aが、レジスタ520b、520c、および520dよりも1ラウンド分進む
(3)レジスタ520bが、レジスタ520a、520c、および520dよりも1ラウンド分進む
(4)レジスタ520cが、レジスタ520a、520b、および520dよりも1ラウンド分進む
(5)レジスタ520dが、レジスタ520a、520b、および520cよりも1ラウンド分進む
(6)レジスタ520b、520c、および520dが、レジスタ520aよりも1ラウンド分進む
(7)レジスタ520a、520c、および520dが、レジスタ520bよりも1ラウンド分進む
(8)レジスタ520a、520b、および520dが、レジスタ520cよりも1ラウンド分進む
(9)レジスタ520a、520b、および520cが、レジスタ520dよりも1ラウンド分進む
【0089】
(変形例)
上記第2の実施の形態では、あるクロック周期で、レジスタ501yと501zに保持される情報に基づいてレジスタ520bと520d、520fと520h、520jと520l、および520nと520pに保持される8バイトの情報が順番に更新される。また、レジスタ520nと520pから更新された情報に基づいてレジスタ520aと520c、520eと520g、520iと520k、および520mと520oに保持される8バイトの情報が順番に更新される。そのため、データパスが長くなりクロック周波数を十分に高めることができなかった。
【0090】
そこで、第2の実施の形態の変形例では、クロック周期内でのデータの更新を分割することでクロック周波数を高めることができる鍵スケジュール装置について説明する。図7は、第2の実施の形態の変形例にかかる鍵スケジュール装置550の一例を示す回路図である。
【0091】
図7に示すように、本変形例では、第2の実施の形態の鍵スケジュール装置500の選択器503aから503pの代わりに(図5参照)、三入力一出力の選択器553aから553pを利用して鍵スケジュール演算処理を実行する。そして、このような選択器553aから553pを用いることにより、あるクロック周期では、8バイトの情報の一部のみを選択して更新するように構成する。
【0092】
図8は、本変形例における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。同図は、例えば、レジスタ520aと520c、520eと520g、520iと520k、および520mと520oに保持される8バイトの情報を、2つのクロック周期(例えば、時刻Cと時刻C)に分けて更新する例を示している。
【0093】
このように構成することにより、1クロック周期で8バイト分の情報を選択して更新する第2の実施の形態と比較して、データパスを短くしてクロック周波数を高めることができる。
【0094】
以上のように、第2の実施の形態にかかる鍵スケジュール装置では、ラウンド鍵を1バイトごとに分割し、先頭から奇数番目のバイトが、偶数番目のバイトより1ラウンド進むようにラウンド鍵を算出する。これにより、付加情報等の計算のための計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行することができる。
【0095】
(第3の実施の形態)
第3の実施の形態にかかる鍵スケジュール装置は、連続する2つのラウンドのラウンド鍵を同一クロックで算出する。
【0096】
図9は、第3の実施の形態にかかる鍵スケジュール装置700の構成を示すブロック図である。図9に示すように、鍵スケジュール装置700は、スケジュール部710と、第1記憶部720と、第2記憶部730とを備えている。
【0097】
第3の実施の形態では、上述のように、連続する2つのラウンドのラウンド鍵を同一クロックで算出するようにスケジュール部710と、第1記憶部720と、第2記憶部730とを構成した点が、第1の実施の形態と異なっている。以下では、第3の実施の形態の鍵スケジュール装置700を実現する回路例である図10を用いて、鍵スケジュール装置700の機能について説明する。図10は、第3の実施の形態の鍵スケジュール装置700の一例を示す回路図である。
【0098】
同図に示すように、鍵スケジュール装置700は、第1記憶部720を構成するレジスタ720a〜720dと、第2記憶部730を構成するレジスタ730a〜730hと、排他的論理和回路702a〜702hと、選択器703a〜703dと、RotWord演算部304aおよび304bと、SubByte演算部305aおよび305bと、AddRcon演算部306aおよび306bとを含んでいる。
【0099】
レジスタ720aから720dは、第1の実施の形態におけるレジスタ320aから320dに対応し、16バイトのラウンド鍵を4バイトごとに分割して保持する。
【0100】
レジスタ730aから730hは、鍵スケジュール装置700から出力するラウンド鍵を保持するレジスタである。第3の実施の形態では、1時刻(クロック周期)あたりに2ラウンド分のラウンド鍵が計算される。上述したとおり、データ暗号化回路(暗号化装置200)は通常1時刻あたりに1ラウンドの暗号化処理を行う。このため、データ暗号化回路が各ラウンドのラウンド鍵を参照できるように、時刻C(i=1,2,3,4,5)終了時に、レジスタ730aから730dが第2*i−1ラウンド目のラウンド鍵を保持し、レジスタ730eから730hが第2*iラウンド目のラウンド鍵を保持するように構成する。
【0101】
データ暗号化回路を1時刻あたりに2ラウンド分の処理を行うような構成にする場合などには、レジスタ730aから730hを用いずに、ラウンド鍵を鍵スケジュール装置700からそのまま出力する構成としてもよい。
【0102】
排他的論理和回路702aから702d、および排他的論理和回路702eから702hは、ビットごとの排他的論理和を計算する。
【0103】
選択器703aから703dは、選択器303a〜303dは、鍵スケジュール装置700への入力と、排他的論理和回路702e〜702hの出力とを、クロック信号に応じて選択して出力する。
【0104】
RotWord演算部304aと304bは、それぞれ第1の実施の形態のRotWord演算部304と同様の機能を備えている。
【0105】
SubByte演算部305aと305bは、それぞれ第1の実施の形態のAddRCon演算部305と同様の機能を備えている。
【0106】
AddRCon演算部306aと306bは、それぞれ第1の実施の形態のAddRCon演算部306と同様の機能を備えている。
【0107】
次に、このように構成された鍵スケジュール装置700による鍵スケジュール演算処理について説明する。図11は、第3の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【0108】
(時刻C)選択器703aから703dは、それぞれ鍵スケジュール装置700の入力として受け付けた4バイトの鍵「k0,00,10,20,3」、「k0,40,50,60,7」、「k0,80,90,100,11」、および「k0,120,130,140,15」を選択する。レジスタ720aから720dは、クロック周期の終わりに、図11に示すようにそれぞれの値を保持する。
【0109】
(時刻C)レジスタ720aから720dは、保持している値を出力する。選択器703aから703dは、それぞれ排他的論理和回路702eから702hの出力を選択して出力する。このとき、レジスタ720dに保持される「k0,120,130,140,15」は、RotWord演算部304a、SubByte演算部305a、およびAddRCon演算部306aで変換されて排他的論理和回路702aに送られる。排他的論理和回路702aは、レジスタ720aに保持される「k0,00,10,20,3」から「k1,01,11,21,3」を出力して、レジスタ720e、排他的論理和回路702bおよび702eに送る。
【0110】
排他的論理和回路702bに送られた「k1,01,11,21,3」は、レジスタ720bに保持される「k0,40,50,60,7」と排他的論理和演算が施され、「k1,41,51,61,7」が出力される。同様に、排他的論理和回路702cおよび702dでは、それぞれレジスタ720cおよび720dに保持される「k0,80,90,100,11」および「k0,120,130,140,15」に基づいて、「k1,81,91,101,11」と「k1,121,131,141,15」が出力される。
【0111】
排他的論理和回路702dが出力する「k1,121,131,141,15」は、RotWord演算部304b、SubByte演算部305b、およびAddRCon演算部306bで変換されて排他的論理和回路702eに送られる。排他的論理和回路702eは、排他的論理和回路702aが出力する「k1,01,11,21,3」に基づいて「k2,02,12,22,3」を出力して、選択器703a、レジスタ730e、および排他的論理和回路702fに送る。
【0112】
排他的論理和回路702fに送られた「k2,02,12,22,3」は、排他的論理和回路702bが出力する「k1,41,51,61,7」と排他的論理和演算が施され、「k2,42,52,62,7」が出力される。同様に、排他的論理和回路702gおよび702hでは、それぞれ排他的論理和回路702cおよび702dが出力する「k1,81,91,101,11」および「k1,121,131,141,15」に基づいて、それぞれ「k2,82,92,102,11」および「k2,122,132,142,15」が出力される。
【0113】
更新された「k2,02,12,22,3」、「k2,42,52,62,7」、「k2,82,92,102,11」、および「k2,122,132,142,15」は、図11に示すようにレジスタ720aから720dに保持されるほか、2ラウンド目で利用するラウンド鍵として、レジスタ730eから730hに保持される。排他的論理和回路702aから702dが出力する「k1,01,11,21,3」、「k1,41,51,61,7」、「k1,81,91,101,11」、および「k1,121,131,141,15」は、1ラウンド目で利用するラウンド鍵として、レジスタ730aから730dに保持される。
【0114】
同様の処理により、時刻Cまでに10ラウンド目までのラウンド鍵が更新されて出力される。
【0115】
第3の実施の形態で、9ラウンド目のラウンド鍵に計算誤りを生じさせるためには、時刻Cで計算を誤らせる必要がある。しかし、このとき10ラウンド目のラウンド鍵「k10,010,110,210,3」、「k10,410,510,610,7」、「k10,810,910,1010,11」、および「k10,1210,1310,1410,15」にも計算誤りが生じる可能性があり、非特許文献1などで開示されている故障利用解析により秘密鍵を求めることは困難となる。
【0116】
なお、これまでは1時刻あたりに2ラウンド分のラウンド鍵を計算する例について説明したが、同様の手法により、1時刻あたりに3ラウンド分以上のラウンド鍵を計算する鍵スケジュール装置を構成することができる。
【0117】
このように、第3の実施の形態にかかる鍵スケジュール装置では、連続する2つのラウンドのラウンド鍵を同一の処理サイクルで算出する。これにより、付加情報等の計算のための計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行することができる。
【0118】
(第4の実施の形態)
第4の実施の形態にかかる鍵スケジュール装置は、16バイトのラウンド鍵を4バイト単位に分割し、先頭の4バイトから順に、4バイトに含まれるバイトのうち所定の2バイトについて次のラウンド鍵を算出する。
【0119】
図12は、第4の実施の形態にかかる鍵スケジュール装置900の構成を示すブロック図である。図12に示すように、鍵スケジュール装置900は、スケジュール部910と、第1記憶部920と、第2記憶部930とを備えている。
【0120】
第4の実施の形態では、上述のように、4バイトに含まれるバイトのうち所定の2バイトについて、先頭の4バイトから順に次のラウンド鍵を算出するようにスケジュール部910と、第1記憶部920と、第2記憶部930とを構成した点が、第1の実施の形態と異なっている。以下では、第4の実施の形態の鍵スケジュール装置900を実現する回路例である図13を用いて、鍵スケジュール装置900の機能について説明する。図13は、第4の実施の形態の鍵スケジュール装置900の一例を示す回路図である。
【0121】
同図に示すように、鍵スケジュール装置900は、第1記憶部920を構成するレジスタ920a〜920hと、第2記憶部930を構成するレジスタ930a〜930fと、排他的論理和回路902a〜902jと、選択器903a〜903tと、SubByte演算部905aおよび905bと、AND回路907aおよび907bと、を含んでいる。
【0122】
レジスタ920aと920bは、第1の実施の形態におけるレジスタ320aに対応し、ラウンド鍵の先頭2バイトを保持するレジスタである。同様に、レジスタ920cと920d、レジスタ920eと920f、およびレジスタ920gから920hは、それぞれ第1の実施の形態におけるレジスタ320b、レジスタ320c、およびレジスタ320dに対応する。
【0123】
レジスタ930aから930fは、第1の実施の形態におけるレジスタ330aと330bと同様に、鍵スケジュール装置900の出力がラウンドごとに揃うように調節するために用いられる。
【0124】
排他的論理和回路902aから902hは、第1の実施の形態における排他的論理和回路302aから302dを2バイトごとに分割した回路であり、2つの2バイトの入力に対して、ビットごとに排他的論理和を計算した結果を出力する。
【0125】
排他的論理和回路902iと902jは、2つの2バイトの入力について、ビットごとの排他的論理和を計算した結果を出力する。
【0126】
選択器903aから903hは、第1の実施の形態における選択器303aから303dを2バイトごとに分割した回路であり、それぞれレジスタ920aから920hの出力、排他的論理和回路902aから902hの出力、または鍵スケジュール装置900の入力のいずれかを、クロック信号に応じて選択して出力する回路である。
【0127】
選択器903iから903nは、それぞれレジスタ920aから920fの出力である2バイトのデータをバイトごとに分割して、それぞれ0(1バイト)を付加して2バイトに拡張した2つの2バイトのデータのいずれかを、クロック信号に応じて選択して出力する回路である。
【0128】
選択器903oおよび903pは、それぞれレジスタ920gおよび920hの出力である2バイトのデータを分割した2つの1バイトのデータのいずれかを、クロック信号に応じて選択して出力する回路である。
【0129】
選択器903qおよび903rは、AESの仕様でラウンドごとに定められたラウンド定数を、それぞれ排他的論理和回路902iおよび902jで加算するために、対応するラウンド定数を切り出す(不要なラウンド定数を切り落とす)ためのマスクを選択する回路である。
【0130】
SubByte演算部905aおよび905bは、それぞれ選択器903oおよび903pの出力(1バイト)を入力として、AESの仕様で定められるSubByte処理を施して、1バイトの値を出力する。
【0131】
選択器903sおよび903tは、SubByte演算部905aおよび905bの出力に0(1バイト)を付加して2バイトに拡張した2つの2バイトのデータのいずれかを、クロック信号に応じて選択して出力する回路である。選択器903sおよび903tは、第1の実施の形態におけるRotWord演算部304に相当する。
【0132】
AND回路907aと907bは、2つの2バイトの入力について、ビットごとの積を計算して出力する。
【0133】
次に、このように構成された鍵スケジュール装置900による鍵スケジュール演算処理について説明する。図14は、第4の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【0134】
(時刻C)選択器903aから903hは、それぞれ鍵スケジュール装置900の入力として受け付けた2バイトの鍵「k0,00,1」、「k0,20,3」、「k0,40,5」、「k0,60,7」、「k0,80,9」、「k0,100,11」、「k0,120,13」、および「k0,140,15」を選択する。レジスタ920aから920hは、クロック周期の終わりに、図14に示すようにそれぞれの値を保持する。
【0135】
(時刻C)レジスタ920aから920hは保持している値を出力する。選択器903oおよび903pは、それぞれレジスタ920gおよびレジスタ920hの出力(2バイト)をバイトごとに分割して得られる下位1バイト「k0,13」および「k0,15」をそれぞれ選択して出力する。選択器903sおよび903tは、SubByte演算部905aおよび905bの出力の後ろに0(1バイト)を付加した2バイトの値を選択して出力する。選択器903qと903rは、ともにff00(2バイト)を選択する。選択器903aおよび903bは、それぞれ排他的論理和回路902aおよび902bの出力を選択して出力する。選択器903cから903hは、それぞれレジスタ920cから920hの出力を選択して出力する。選択器903iから903nは、それぞれレジスタ920aから920fの出力(2バイト)をバイトごとに分割して得られる上位1バイトの後ろに0(1バイト)を付加した2バイトの値を選択して出力する。なお、選択器903iから903nは、いずれの値を選んでも動作は変わらない。
【0136】
レジスタ920gおよび920hにそれぞれ保持される「k0,120,13」と「k0,140,15」は、バイトごとに分割されたのち、「k0,13」と「k0,15」がそれぞれ選択器903oおよび903pで選択して出力され、それぞれSubByte演算部905aおよび905bで変換される。そして、それぞれ選択器903sおよび903tによって、SubByte演算部905aおよび905bの出力の後ろに0(1バイト)を付加した2バイトの値として選択され、それぞれ排他的論理和回路902iおよび902jで1ラウンド目に対応するラウンド定数が加算されたのち、それぞれ排他的論理和回路902aおよび902bに送られる(それぞれの下位バイトは0)。
【0137】
排他的論理和回路902aおよび902bでは、それぞれレジスタ920aおよび920bが保持する「k0,00,1」および「k0,20,3」が、「k1,00,1」および「k1,20,3」にそれぞれ更新される。レジスタ920cから920hにそれぞれ保持される「k0,40,5」、「k0,60,7」、「k0,80,9」、「k0,100,11」、「k0,120,13」、および「k0,140,15」は、同じ値に更新される。レジスタ920aから920hは、クロック周期の終わりに、図14に示すようにそれぞれの値を保持する。
【0138】
(時刻C)レジスタ920aから920hは保持している値を出力する。選択器903oおよび903pは、それぞれレジスタ920gおよびレジスタ920hの出力(2バイト)をバイトごとに分割して得られる上位1バイト「k0,12」および「k0,14」を選択して出力する。選択器903sおよび903tは、SubByte演算部905bおよび905aの出力の前に0(1バイト)を付加した2バイトの値を選択して出力する。選択器903qおよび903rは、ともに00ff(2バイト)を選択する。選択器903aから903dは、それぞれ排他的論理和回路902aから902dの出力を選択して出力する。選択器903eから903hは、それぞれレジスタ920eから920hの出力を選択して出力する。選択器903iから903nは、それぞれレジスタ920aから920fの出力(2バイト)をバイトごとに分割して得られる上位1バイトの後ろに0(1バイト)を付加した2バイトの値を選択して出力する。なお、選択器903kから903nは、いずれの値を選んでも動作は変わらない。
【0139】
レジスタ920gおよび920hにそれぞれ保持される「k0,120,13」と「k0,140,15」は、バイトごとに分割されたのち、「k0,12」と「k0,14」が、それぞれ選択器903oおよび903pで選択して出力され、それぞれSubByte演算部905aおよび905bで変換される。そして、それぞれ選択器903sおよび903tによって、SubByte演算部905bおよび905aの出力の前に0(1バイト)を付加した2バイトの値として選択され、それぞれ排他的論理和回路902iおよび902jで1ラウンド目に対応するラウンド定数が加算されたのち、排他的論理和回路902aと902bに送られる(それぞれの下位バイトは0)。
【0140】
排他的論理和回路902aおよび902bでは、それぞれレジスタ920aおよび920bが保持する「k1,00,1」と「k1,20,3」が、「k1,01,1」と「k1,21,3」にそれぞれ更新される。選択器903iおよび903jでそれぞれ選択された「k1,00」(「k1,0」に「0」を付加した2バイトのデータ)と「k1,20」(「k1,2」に「0」を付加した2バイトのデータ)は、それぞれ排他的論理和回路902cおよび902dで、レジスタ920cおよび920dが保持する「k0,20,3」および「k0,40,5」から、それぞれ「k1,20,3」および「k1,40,5」に更新される。レジスタ920eから920hに保持される「k0,80,9」、「k0,100,11」、「k0,120,13」、および「k0,140,15」は、同じ値に更新される。レジスタ920aから920hは、クロック周期の終わりに、図14に示すようにそれぞれの値を保持する。
【0141】
同様の処理により、時刻Cまでラウンド鍵が更新される。時刻Cでは、図14に示すようにラウンド鍵を更新するとともに、レジスタ930aから930fに保持される「k1,01,1」、「k1,21,3」、「k1,41,5」、「k1,61,7」、「k1,81,9」、および「k1,101,11」と、選択器903gおよび903hそれぞれの出力「k1,121,13」および「k1,141,15」とを1ラウンド目で用いるラウンド鍵として出力する。
【0142】
同様の処理により、さらに時刻C41までラウンド鍵が更新され出力される。
【0143】
第4の実施の形態で、9ラウンド目のラウンド鍵に計算誤りを生じさせるためには、時刻C36から時刻C40で計算を誤らせる必要がある。しかし、このとき8ラウンド目のラウンド鍵「k8,08,18,28,3」、「k8,48,58,68,7」、「k8,88,98,108,11」、および「k8,128,138,148,15」の一部、または、10ラウンド目のラウンド鍵「k10,010,110,210,3」、「k10,410,510,610,7」、「k10,810,910,1010,11」、および「k10,1210,1310,1410,15」の一部にも計算誤りが生じる可能性があり、非特許文献1などで開示されている故障利用解析により秘密鍵を求めることは困難となる。
【0144】
なお、これまで説明した回路例と同様の手法により、レジスタ920a内の2つのバイトの更新順序を入れ替える鍵スケジュール装置や、レジスタ920aの更新内容をレジスタ920cの更新に用いるタイミングを遅らせる鍵スケジュール装置を構成可能である。
【0145】
このように、第4の実施の形態にかかる鍵スケジュール装置では、16バイトのラウンド鍵を4バイト単位に分割し、先頭の4バイトから順に、4バイトに含まれるバイトのうち所定の2バイトについて次のラウンド鍵を算出することができる。これにより、付加情報等の計算のための計算量の増加を回避しつつ、故障利用解析に対して安全な鍵スケジュール演算を実行することができる。
【0146】
(第5の実施の形態)
第1の実施の形態から第4の実施の形態では、鍵スケジュール装置を実現する回路の構成と動作を説明した。第5の実施の形態では、鍵スケジュール装置を実現するための鍵スケジュール演算処理を実行するプログラムについて説明する。
【0147】
なお、以下では、第2の実施の形態の鍵スケジュール装置を実現する鍵スケジュールプログラムについて説明する。その他の実施の形態についても、同様の手法によって対応する鍵スケジュールプログラムを構成することができる。
【0148】
図15は、第5の実施の形態にかかる鍵スケジュール装置1100のハードウェア構成の一例を示すブロック図である。図15に示すように、鍵スケジュール装置1100は、入出力部1101と、制御部1102と、演算装置1103と、主記憶装置1104と、補助記憶装置1105と、を主なハードウェア構成として備えている。
【0149】
入出力部1101は、データの入出力が可能な入出力装置やネットワーク回線に接続され、データを入出力するとともに、暗号化実行の命令を受け付ける。また、入出力部1101は、暗号化結果を表示するための情報を出力する。
【0150】
制御部1102は、入出力部1101から入力データとともに暗号化実行の命令を受け付けたときに、補助記憶装置1105に記憶されるプログラムとデータに基づいてデータの暗号化を実行するように、演算装置1103と主記憶装置1104に命令を発行する。
【0151】
演算装置1103は、制御部1102の命令に基づいて受け付けたデータを入力として、コピー、反転、シフト演算、和、積、および排他的論理和演算などのビット演算や、加算、乗算、剰余算などの算術演算を行う。制御部1102、および演算装置1103は、CPU(Central Processing Unit)などによって構成することができる。
【0152】
主記憶装置1104は、補助記憶装置1105が記憶するデータや演算装置1103が処理したデータを一時的に記憶する。主記憶装置1104は、補助記憶装置1105よりも高速にデータの入出力が可能であり、処理を高速化する目的で使用される。主記憶装置1104は、例えば、RAM(Random Access Memory)などにより構成することができる。
【0153】
補助記憶装置1105は、暗号処理のプログラムや変数を記憶する。暗号処理に用いる秘密鍵は、補助記憶装置1105に記憶してもよいし、暗号化処理を実行するごとに入出力部1101から受け付けてもよい。補助記憶装置1105は、例えば、HDD(Hard Disk Drive)などにより構成することができる。
【0154】
なお、鍵スケジュール装置1100で実行される鍵スケジュールプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【0155】
また、鍵スケジュール装置1100で実行される鍵スケジュールプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、鍵スケジュール装置1100で実行される鍵スケジュールプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【0156】
また、鍵スケジュールプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
【0157】
鍵スケジュール装置1100で実行される鍵スケジュールプログラムは、上述したスケジュール部を含むモジュール構成となっており、実際のハードウェアとしてはCPU(制御部)が上記記憶媒体から鍵スケジュールプログラムを読み出して実行することにより上記スケジュール部が主記憶装置1104上にロードされ、主記憶装置1104上に生成されるようになっている。
【0158】
次に、鍵スケジュール演算処理で利用される各種データを記憶するための主記憶装置1104の構成について説明する。図16は、主記憶装置1104に確保される領域の構成例を示す図である。図16に示すように、主記憶装置1104は、鍵スケジュール演算処理のために、それぞれ4バイト(32ビット)であるMemA[i]、MemB[i]、MemC[i]、MemD[i]、およびMemT[j](i=0,1,2,3、j=0,1)の各領域を確保する。
【0159】
MemA[i]とMemB[i]は、ラウンド鍵の一部を記憶する領域である。MemB[i]は、MemA[i]に記憶されるラウンド鍵よりも1つ先のラウンドに対応するラウンド鍵を記憶する。MemC[i]は、MemA[i]とMemB[i]の排他的論理和を計算した結果を記憶する。MemD[i]は、各ステップの初めにMemB[i]が記憶するデータをコピーし、同一ステップで計算されたMemA[i]との排他的論理和を計算した結果を記憶する。MemT[j]は、次のステップでラウンド鍵を更新するための情報を一時的に記憶する。
【0160】
次に、このように構成された第5の実施の形態にかかる鍵スケジュール装置1100による鍵スケジュール演算処理について図17を用いて説明する。図17は、第5の実施の形態における鍵スケジュール演算処理の全体の流れを示すフローチャートである。
【0161】
まず、主記憶装置1104上に生成されたスケジュール部は、主記憶装置1104上に、図16で示したような各領域を確保し、所定の値で初期化する。そして、スケジュール部は、入力された秘密鍵を所定の領域に保存する(ステップS1701)。
【0162】
次に、スケジュール部は、1ラウンド目のラウンド鍵の一部を算出する(ステップS1702)。さらに、スケジュール部は、前のステップで算出したラウンドのラウンド鍵の残りの部分および次のラウンドのラウンド鍵の一部を算出する(ステップS1703)。
【0163】
次に、スケジュール部は、10ラウンド目のラウンド鍵の一部まで算出したか否かを判断する(ステップS1704)。算出していない場合は(ステップS1704:NO)、さらに処理を繰り返す(ステップS1703)。算出した場合は(ステップS1704:YES)、スケジュール部は、10ラウンド目のラウンド鍵の残りの部分を算出し(ステップS1705)、鍵スケジュール演算処理を終了する。
【0164】
次に、図17で説明したフローチャートの詳細について図18から図24を用いてさらに説明する。図18から図24は、各処理サイクル実行後に、主記憶装置1104の領域に格納されるデータの一例を示す図である。以下では、第2の実施の形態の時刻CからC11にそれぞれ対応するステップSからステップS11までの各処理サイクルでの処理の詳細を説明する。
【0165】
なお、以下のステップSが、図17のステップS1701に対応する。また、ステップSが、図17のステップS1702に対応する。また、ステップSからステップS10が、図17のステップS1703からステップS1704に対応する。さらに、ステップS11が、図17のステップS1705に対応する。
【0166】
(ステップS(初期化))16バイト(128ビット)の鍵「k0,00,10,20,3」、「k0,40,50,60,7」、「k0,80,90,100,11」、および「k0,120,130,140,15」を受け付けたら、MemC[i]に4バイトずつ記憶する。MemA[i]、MemB[i]、MemD[i](i=0,1,2,3)、およびMemT[1]は、0x00000000(4バイト)で初期化する。MemT[0]は、MemC[3]と0xff00ff00(4バイト)とのビット積を記憶する。ステップS終了時には、各領域は図18に示す値を記憶する。
【0167】
(ステップS)MemD[i]に、MemC[i]と0xff00ff00(4バイト)とのビット積を上書きする。このとき、i=1,2,3について、MemD[i]には、4バイトの「k0,4*i0k0,4*i+20」が記憶される。
【0168】
MemA[i]に、MemC[i]と0x00ff00ff(4バイト)とのビット積を記憶する。このとき、i=1,2,3について、MemA[i]には4バイトの「0k0,4*i+10k0,4*i+3」が記憶される。
【0169】
MemB[i]に、MemC[i]と0xff00ff00(4バイト)とのビット積を記憶する。このとき、i=1,2,3について、MemB[i]には4バイトの「k0,4*i0k0,4*i+20」が記憶される。
【0170】
MemB[i]を以下のように更新する。MemA[3]を左に8ビット巡回シフトした値に、各バイトにAESの仕様で定めるSubByte演算を施す。なお、実際には第一バイトと第三バイトにのみSubByte演算を施せば十分である。さらに、AESの仕様で定める1ラウンド目のラウンド定数を加算(排他的論理和演算)したのち、0xff00ff00(4バイト)とのビット積を行って得られる値とMemB[0]との排他的論理和演算を計算し、MemB[0]に上書きする。このとき、MemA[3]は、4バイトの「0k0,130k0,15」が記憶され、MemB[0]には4バイトの「k1,00k1,20」が記憶される。i=1,2,3について、MemB[i]を、MemB[i]とMemB[i−1]との排他的論理和で上書きする。このとき、i=1,2,3について、MemB[i]には4バイトの「k1,4*i0k1,4*i+20」が記憶される。
【0171】
MemC[i]に、MemA[i]とMemB[i]との排他的論理和を上書きする。このとき、i=0,1,2,3について、MemC[i]には4バイトの「k1,4*i0,4*i+11,4*i+20,4*i+3」が記憶される。
【0172】
MemD[i]に、MemD[i]とMemA[i]との排他的論理和を上書きする。このとき、i=0,1,2,3について、MemD[i]には4バイトの「k0,4*i0,4*i+10,4*i+20,4*i+3」が記憶される。MemD[i]の記憶する「k0,00,10,20,3」、「k0,40,50,60,7」、「k0,80,90,100,11」、および「k0,120,130,140,15」を初期鍵として出力する。
【0173】
MemT[1]は、MemC[3]と0xff00ff00(4バイト)とのビット積を記憶する。ステップS終了時には、各領域は図19に示す値を記憶する。
【0174】
(ステップS)MemD[i]に、MemC[i]と0xff00ff00(4バイト)とのビット積を上書きする。このとき、i=1,2,3について、MemD[i]には4バイトの「k1,4*i0k1,4*i+20」が記憶される。
【0175】
MemA[i]を以下のように更新する。MemT[0]を左に8ビット巡回シフトした値に、各バイトにAESの仕様で定めるSubByte演算を施す。なお、実際には第二バイトと第四バイトにのみSubByte演算を施せば十分である。さらに、AESの仕様で定める1ラウンド目のラウンド定数を加算(排他的論理和演算)したのち、0xff00ff00(4バイト)とのビット積を行って得られる値とMemA[0]との排他的論理和演算を計算し、MemA[0]に上書きする。このとき、MemA[0]には4バイトの「0k1,10k1,3」が記憶される。i=1,2,3について、MemA[i]を、MemA[i]とMemA[i−1]との排他的論理和で上書きする。このとき、i=1,2,3について、MemA[i]には4バイトの「0k1,4*i+10k1,4*i+3」が記憶される。
【0176】
MemB[i]を以下のように更新する。MemA[3]を左に8ビット巡回シフトした値に、各バイトにAESの仕様で定めるSubByte演算を施す。なお、実際には第一バイトと第三バイトにのみSubByte演算を施せば十分である。さらに、AESの仕様で定める2ラウンド目のラウンド定数を加算(排他的論理和演算)したのち、0xff00ff00(4バイト)とのビット積を行って得られる値とMemB[0]との排他的論理和演算を計算し、MemB[0]に上書きする。このとき、MemA[3]は4バイトの「0k1,130k1,15」が記憶され、MemB[0]には4バイトの「k2,00k2,20」が記憶される。i=1,2,3について、MemB[i]が記憶する値を、MemB[i]とMemB[i−1]との排他的論理和で上書きする。このとき、i=1,2,3について、MemB[i]には4バイトの「k2,4*i0k2,4*i+20」が記憶される。
【0177】
MemC[i]に、MemA[i]とMemB[i]との排他的論理和を上書きする。このとき、i=0,1,2,3について、MemC[i]には4バイトの「k2,4*i1,4*i+12,4*i+21,4*i+3」が記憶される。
【0178】
MemD[i]に、MemD[i]とMemA[i]との排他的論理和を上書きする。このとき、i=0,1,2,3について、MemD[i]には4バイトの「k1,4*i1,4*i+11,4*i+21,4*i+3」が記憶される。MemD[i]の記憶する「k1,01,11,21,3」、「k1,41,51,61,7」、「k1,81,91,101,11」、および「k1,121,131,141,15」を1ラウンド目で利用するラウンド鍵として出力する。
【0179】
MemT[0]は、MemC[3]と0xff00ff00(4バイト)とのビット積を記憶する。ステップS終了時には、各領域は図20に示す値を記憶する。
【0180】
(ステップS)MemT[0]とMemT[1]との役割を入れ替えて、ステップSと同様の処理を行い、図21に示す値に更新し、MemD[i]の記憶する「k2,02,12,22,3」、「k2,42,52,62,7」、「k2,82,92,102,11」、および「k2,122,132,142,15」を2ラウンド目で利用するラウンド鍵として出力する。
【0181】
ステップSからステップS10まで同様の処理を繰り返し、各領域の値を更新するとともに、ラウンド鍵を出力する。なお、図22および図23は、それぞれステップSおよびステップS10を実行した後の主記憶装置1104の領域に記憶される値を示す。
【0182】
(ステップS11)MemD[i]に、MemC[i]と0xff00ff00(4バイト)とのビット積を上書きする。このとき、i=1,2,3について、MemD[i]には4バイトの「k10,4*i0k10,4*i+20」が記憶される。
【0183】
MemA[i]を以下のように更新する。MemT[1]を左に8ビット巡回シフトした値に、各バイトにAESの仕様で定めるSubByte演算を施す。なお、実際には第二バイトと第四バイトにのみSubByte演算を施せば十分である。さらに、AESの仕様で定める10ラウンド目のラウンド定数を加算(排他的論理和演算)したのち、0xff00ff00(4バイト)とのビット積を行って得られる値とMemA[0]との排他的論理和演算を計算し、MemA[0]に上書きする。このとき、MemA[0]には4バイトの「0k10,10k10,3」が記憶される。i=1,2,3について、MemA[i]を、MemA[i]とMemA[i−1]との排他的論理和で上書きする。このとき、i=1,2,3について、MemA[i]には4バイトの「0k10,4*i+10k10,4*i+3」が記憶される。
【0184】
MemB[i]およびMemC[i]は値を更新しない。なお、ステップS10までと同様の処理を行ってもよいが、更新される値は実際には使用されない。図24では、使用されないことを示すために、この値を記号「---」で表している。
【0185】
MemD[i]に、MemD[i]とMemA[i]との排他的論理和を上書きする。このとき、i=0,1,2,3について、MemD[i]には4バイトの「k10,4*i10,4*i+110,4*i+210,4*i+3」が記憶される。MemD[i]の記憶する「k10,010,110,210,3」、「k10,410,510,610,7」、「k10,810,910,1010,11」、および「k10,1210,1310,1410,15」を10ラウンド目で利用するラウンド鍵として出力する。
【0186】
MemT[0]は、MemC[3]と0xff00ff00(4バイト)とのビット積を記憶する。ステップS11終了時には、各領域は図24に示す値を記憶する。
【0187】
第5の実施の形態で、9ラウンド目のラウンド鍵に計算誤りを生じさせるためには、ステップSまたはステップS10で計算を誤らせる必要がある。しかし、このとき8ラウンド目のラウンド鍵「k8,08,18,28,3」、「k8,48,58,68,7」、「k8,88,98,108,11」、および「k8,128,138,148,15」の一部、または、10ラウンド目のラウンド鍵「k10,010,110,210,3」、「k10,410,510,610,7」、「k10,810,910,1010,11」、および「k10,1210,1310,1410,15」の一部にも計算誤りが生じる可能性があり、非特許文献1などで開示されている故障利用解析により秘密鍵を求めることは困難となる。
【0188】
このように、第5の実施の形態にかかる鍵スケジュール装置では、第2の実施の形態の鍵スケジュール装置と同様の処理をプログラムによって実現することができる。
【産業上の利用可能性】
【0189】
以上のように、本発明にかかる装置、方法およびプログラムは、AESなどの共通鍵暗号方式の鍵スケジュールを実行する装置、方法およびプログラムに適している。
【図面の簡単な説明】
【0190】
【図1】第1の実施の形態にかかる鍵スケジュール装置の構成を示すブロック図である。
【図2】第1の実施の形態の鍵スケジュール装置の一例を示す回路図である。
【図3】第1の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【図4】第2の実施の形態にかかる鍵スケジュール装置の構成を示すブロック図である。
【図5】第2の実施の形態の鍵スケジュール装置の一例を示す回路図である。
【図6】第2の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【図7】第2の実施の形態の変形例にかかる鍵スケジュール装置の一例を示す回路図である。
【図8】第2の実施の形態の変形例における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【図9】第3の実施の形態にかかる鍵スケジュール装置の構成を示すブロック図である。
【図10】第3の実施の形態の鍵スケジュール装置の一例を示す回路図である。
【図11】第3の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【図12】第4の実施の形態にかかる鍵スケジュール装置の構成を示すブロック図である。
【図13】第4の実施の形態の鍵スケジュール装置の一例を示す回路図である。
【図14】第4の実施の形態における鍵スケジュール演算処理の各クロックで出力されるデータの一例を示す図である。
【図15】第5の実施の形態にかかる鍵スケジュール装置のハードウェア構成の一例を示すブロック図である。
【図16】主記憶装置に確保される領域の構成例を示す図である。
【図17】第5の実施の形態における鍵スケジュール演算処理の全体の流れを示すフローチャートである。
【図18】主記憶装置の領域に格納されるデータの一例を示す図である。
【図19】主記憶装置の領域に格納されるデータの一例を示す図である。
【図20】主記憶装置の領域に格納されるデータの一例を示す図である。
【図21】主記憶装置の領域に格納されるデータの一例を示す図である。
【図22】主記憶装置の領域に格納されるデータの一例を示す図である。
【図23】主記憶装置の領域に格納されるデータの一例を示す図である。
【図24】主記憶装置の領域に格納されるデータの一例を示す図である。
【符号の説明】
【0191】
100 鍵スケジュール装置
200 暗号化装置
310 スケジュール部
311 演算部
312 更新部
313 出力部
320 第1記憶部
320a〜320d レジスタ
330 第2記憶部
330a、330b レジスタ
302a〜302d 排他的論理和回路
303a〜303e 選択器
304 RotWord演算部
305 SubByte演算部
306 AddRCon演算部
500 鍵スケジュール装置
510 スケジュール部
520 第1記憶部
520a〜520p レジスタ
530 第2記憶部
530a〜530h レジスタ
501y、501z レジスタ
502a〜502p 排他的論理和回路
503a〜503t 選択器
506 AddRCon演算部
550 鍵スケジュール装置
553a〜553t 選択器
700 鍵スケジュール装置
710 スケジュール部
720 第1記憶部
720a〜720d レジスタ
730 第2記憶部
730a〜730h レジスタ
702a〜702h 排他的論理和回路
703a〜703d 選択器
900 鍵スケジュール装置
910 スケジュール部
920 第1記憶部
920a〜920h レジスタ
930 第2記憶部
930a〜930f レジスタ
902a〜902h 排他的論理和回路
903a〜903t 選択器
905a、905b SubByte演算部
907a、907b AND回路
1100 鍵スケジュール装置
1101 入出力部
1102 制御部
1103 演算装置
1104 主記憶装置
1105 補助記憶装置

【特許請求の範囲】
【請求項1】
ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール装置であって、
複数のラウンドそれぞれに対応する複数のラウンド鍵を記憶する第1記憶部と、
予め定められた処理サイクルごとに、前記第1記憶部に記憶された複数のラウンド鍵と、複数のラウンド鍵のうち少なくとも1つのラウンド鍵の一部と、のいずれかを表す更新対象鍵を取得し、取得した前記更新対象鍵に基づいて、取得した前記更新対象鍵のラウンドの次のラウンドのラウンド鍵を算出する演算部と、
前記処理サイクルごとに、算出されたラウンド鍵で、前記第1記憶部の前記更新対象鍵を更新する更新部と、
を備えたことを特徴とする鍵スケジュール装置。
【請求項2】
前記第1記憶部は、ラウンド鍵を構成する要素のうち第1要素と、前記第1要素のラウンドより後のラウンドのラウンド鍵の要素であって、前記第1要素以外の要素に対応する第2要素とを記憶し、
前記演算部は、前記処理サイクルごとに、前記第1要素と前記第2要素とを前記更新対象鍵として取得し、取得した前記第1要素から前記第1要素のラウンドの次のラウンドのラウンド鍵の前記第1要素に対応する要素を算出し、取得した前記第2要素から前記第2要素のラウンドの次のラウンドのラウンド鍵の前記第2要素に対応する要素を算出し、
前記更新部は、算出された前記第1要素に対応する要素で、前記第1記憶部の前記第1要素を更新し、算出された前記第2要素に対応する要素で、前記第1記憶部の前記第2要素を更新すること、
を特徴とする請求項1に記載の鍵スケジュール装置。
【請求項3】
前記第1記憶部は、さらに、入力された秘密鍵をラウンド鍵の初期値として記憶し、
前記演算部は、さらに、最初の前記処理サイクルで、ラウンド鍵の初期値の前記第1要素を前記更新対象鍵として取得し、取得した前記第1要素から最初のラウンドのラウンド鍵の前記第1要素に対応する要素を算出し、
前記更新部は、さらに、ラウンド鍵の初期値の前記第1要素に対して算出された要素で、前記第1記憶部のラウンド鍵の初期値の前記第1要素を更新すること、
を特徴とする請求項2に記載の鍵スケジュール装置。
【請求項4】
前記演算部は、任意のラウンドのラウンド鍵を構成する複数の要素のそれぞれを、複数の前記処理サイクルのいずれかで前記更新対象鍵として取得し、取得した要素に基づいて、取得した要素のラウンドの次のラウンドのラウンド鍵の要素のうち、取得した要素に対応する要素を算出すること、
を特徴とする請求項1に記載の鍵スケジュール装置。
【請求項5】
前記第1記憶部は、ラウンド鍵を構成する要素のうち第1要素と、前記第1要素のラウンドより後のラウンドのラウンド鍵の要素であって、前記第1要素以外の要素に対応する第2要素とを記憶し、
前記第1要素を含むラウンド鍵を構成する要素のうち、前記第2要素に対応する要素を記憶する第2記憶部と、
前記第1記憶部に記憶された前記第1要素と、前記第2記憶部に記憶された前記第2要素に対応する要素と、を出力する出力部と、をさらに備えたこと、
を特徴とする請求項1に記載の鍵スケジュール装置。
【請求項6】
前記演算部は、前記更新対象鍵のラウンドに応じて予め定められたラウンド定数を用いてラウンド鍵を算出すること、
を特徴とする請求項1に記載の鍵スケジュール装置。
【請求項7】
ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール装置であって、
ラウンド鍵を記憶する第1記憶部と、
予め定められた処理サイクルごとに、前記第1記憶部に記憶されたラウンド鍵を取得し、取得したラウンド鍵に基づいて、取得したラウンド鍵のラウンドの1つ後のラウンドのラウンド鍵と、2つ後のラウンドのラウンド鍵とを算出する演算部と、
前記処理サイクルごとに、算出された2つ後のラウンドのラウンド鍵で、前記第1記憶部のラウンド鍵を更新する更新部と、
を備えたことを特徴とする鍵スケジュール装置。
【請求項8】
ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール方法あって、
演算部が、予め定められた処理サイクルごとに、第1記憶部に記憶された複数のラウンドそれぞれに対応する複数のラウンド鍵と、複数のラウンド鍵のうち少なくとも1つのラウンド鍵の一部と、のいずれかを表す更新対象鍵を取得し、取得した前記更新対象鍵に基づいて、取得した前記更新対象鍵のラウンドの次のラウンドのラウンド鍵を算出する演算ステップと、
更新部が、前記処理サイクルごとに、算出されたラウンド鍵で、前記第1記憶部の前記更新対象鍵を更新する更新ステップと、
を備えたことを特徴とする鍵スケジュール方法。
【請求項9】
ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール装置で実行される鍵スケジュールプログラムであって、
前記鍵スケジュール装置を、
予め定められた処理サイクルごとに、第1記憶部に記憶された複数のラウンドそれぞれに対応する複数のラウンド鍵と、複数のラウンド鍵のうち少なくとも1つのラウンド鍵の一部と、のいずれかを表す更新対象鍵を取得し、取得した前記更新対象鍵に基づいて、取得した前記更新対象鍵のラウンドの次のラウンドのラウンド鍵を算出する演算部と、
前記処理サイクルごとに、算出されたラウンド鍵で、前記第1記憶部の前記更新対象鍵を更新する更新部と、
として機能させるための鍵スケジュールプログラム。
【請求項10】
ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール方法であって、
演算部が、予め定められた処理サイクルごとに、第1記憶部に記憶されたラウンド鍵を取得し、取得したラウンド鍵に基づいて、取得したラウンド鍵のラウンドの1つ後のラウンドのラウンド鍵と、2つ後のラウンドのラウンド鍵とを算出する演算ステップと、
更新部が、前記処理サイクルごとに、算出された2つ後のラウンドのラウンド鍵で、前記第1記憶部のラウンド鍵を更新する更新ステップと、
を備えたことを特徴とする鍵スケジュール方法。
【請求項11】
ブロック暗号方式の各ラウンドで利用するラウンド鍵をスケジュールする鍵スケジュール装置で実行される鍵スケジュールプログラムであって、
前記鍵スケジュール装置を、
予め定められた処理サイクルごとに、第1記憶部に記憶されたラウンド鍵を取得し、取得したラウンド鍵に基づいて、取得したラウンド鍵のラウンドの1つ後のラウンドのラウンド鍵と、2つ後のラウンドのラウンド鍵とを算出する演算部と、
前記処理サイクルごとに、算出された2つ後のラウンドのラウンド鍵で、前記第1記憶部のラウンド鍵を更新する更新部と、
として機能させるための鍵スケジュールプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2010−57066(P2010−57066A)
【公開日】平成22年3月11日(2010.3.11)
【国際特許分類】
【出願番号】特願2008−221805(P2008−221805)
【出願日】平成20年8月29日(2008.8.29)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】