(57)【特許請求の範囲】
【請求項１】
データの種類ごとにＮ個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する演算装置であって、
前記暗号方式で用いられる複数の演算処理を実行する演算部と、
前記演算処理で用いられる種類のＮ個の前記データのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって前記先頭のデータのアドレスを基準とするオフセットと、に基づいて、前記演算処理で用いられるデータを記憶する前記記憶装置のアドレスを生成するアドレス生成部と、
前記暗号方式で定められる順序で前記演算処理を実行するように前記演算部を制御するとともに、前記演算処理で用いられるデータの種類を変更するタイミング、および、前記演算処理で用いられるデータを変更するタイミングで前記カウンタ値の更新を指定する制御部と、を備え、
複数の前記演算処理それぞれの前記カウンタ値の更新回数は一致する、
ことを特徴とする演算装置。
【請求項２】
前記暗号方式は、ＡＥＳ（Advanced  Encryption  Standard）暗号方式であること、
を特徴とする請求項１に記載の演算装置。
【請求項３】
複数の前記演算処理は、前記ＡＥＳ暗号方式で定められるｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒと、前記記憶装置から前記データを読み出すロード処理と、を含むこと、
を特徴とする請求項２に記載の演算装置。
【請求項４】
前記演算部は、ｓｂｏｘを実行する回路、ｘｔｉｍｅを実行する回路、および、ｘｏｒを実行する回路をそれぞれ１つ含むこと、
を特徴とする請求項３に記載の演算装置。
【請求項５】
複数の前記演算処理は、前記ＡＥＳ暗号方式で定められるｓｂｏｘ、ｉｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒと、前記記憶装置から前記データを読み出すロード処理と、を含むこと、
を特徴とする請求項２に記載の演算装置。
【請求項６】
前記アドレス生成部は、前記オフセットをそれぞれ出力する複数のオフセット回路を含み、前記上位ビットと、複数の前記オフセット回路のいずれかが出力する前記オフセットと、に基づいて前記アドレスを生成すること、
を特徴とする請求項１に記載の演算装置。
【請求項７】
前記アドレス生成部は、複数の前記オフセットを出力する１つのオフセット回路を含み、前記上位ビットと、前記オフセット回路が出力する複数の前記オフセットのいずれかと、に基づいて前記アドレスを生成すること、
を特徴とする請求項１に記載の演算装置。
【請求項８】
前記更新回数は１６であること、
を特徴とする請求項１に記載の演算装置。
【請求項９】
記憶装置と接続される演算装置であって、
予め定められた暗号方式で用いられる複数の演算処理を実行する演算部と、
前記記憶装置に記憶され前記演算処理で用いられるＮ個のデータのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって前記先頭のデータのアドレスを基準とするオフセットと、に基づいて、前記演算処理で用いられるデータを記憶する前記記憶装置のアドレスを生成するアドレス生成部と、
前記暗号方式で定められる順序で前記演算処理を実行するように前記演算部を制御するとともに、前記演算処理で用いられるデータの種類を変更するタイミング、および、前記演算処理で用いられるデータを変更するタイミングで前記カウンタ値の更新を指定する制御部と、を備え、
複数の前記演算処理それぞれの前記カウンタ値の更新回数は一致する、
ことを特徴とする演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、演算装置に関する。
【背景技術】
【０００２】
ＡＥＳ（Advanced  Encryption  Standard）は米国標準の暗号方式であり、様々な分野に採用されている。ＡＥＳを実行する回路（ＡＥＳ演算回路）の小型化（ハードウェアの回路規模縮小）は色々な研究が行われている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】M.  Feldhofer,J.  Wolkerstorfer,and  V.  Rijmen,"AES  Implementation  on  a  Grain  of  Sand",IEE  Proceedings  Information  Security,vol.  152,pp.  13-20,2005.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術の方法では小型化が不十分な場合がある。
【課題を解決するための手段】
【０００５】
実施形態の演算装置は、データの種類ごとにＮ個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する。演算装置は、演算部と、アドレス生成部と、制御部とを備える。演算部は、暗号方式で用いられる複数の演算処理を実行する。アドレス生成部は、演算処理で用いられる種類のＮ個のデータのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって先頭のデータのアドレスを基準とするオフセットと、に基づいて、演算処理で用いられるデータを記憶する記憶装置のアドレスを生成する。制御部は、暗号方式で定められる順序で演算処理を実行するように演算部を制御するとともに、演算処理で用いられるデータの種類を変更するタイミング、および、演算処理で用いられるデータを変更するタイミングでカウンタ値の更新を指定する。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態にかかる暗号化装置を含む電子機器のブロック図。
【図２】第１の実施形態にかかる暗号化装置のブロック図。
【図３】擬似コード内の各命令の意味を説明するための図。
【図４】第１の実施形態にかかるＡＬＵのブロック図。
【図５】ｌｄ命令の処理例を示す図。
【図６】ｓｔ命令の処理例を示す図。
【図７】ｘｏｒ命令の処理例を示す図。
【図８】ｓｂｏｘおよびｘｔｉｍｅ命令の処理例を示す図。
【図９】第１の実施形態にかかる暗号化処理部のブロック図。
【図１０】第１の実施形態で用いるアドレス空間を示す図。
【図１１】第１の実施形態にかかるアドレス生成部のブロック図。
【図１２】図１１の各回路に相当する関数の入出力を示す図。
【図１３】第１の実施形態における暗号化処理のフローチャート。
【図１４】詳細版擬似コードを状態遷移表として書き直した図。
【図１５】状態遷移表の各項目の読み方を表す図。
【図１６】第１の実施形態の変形例にかかるアドレス生成部のブロック図。
【図１７】図１６の各回路に相当する関数の入出力を示す図。
【図１８】第２の実施形態にかかる復号装置のブロック図。
【図１９】第２の実施形態にかかるＡＬＵのブロック図。
【図２０】第２の実施形態における復号処理のフローチャート。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、この発明にかかる演算装置の好適な実施形態を詳細に説明する。以下では、演算装置をＡＥＳ暗号方式の暗号化装置（第１の実施形態）および復号装置（第２の実施形態）に適用した例を説明する。なお、適用可能な装置はこれに限られるものではない。
【０００８】
（第１の実施形態）
これまでのＡＥＳ演算回路の小型化の研究では、記憶素子も含めたＡＥＳ演算回路全体のサイズを小さくすることに主眼が置かれていた。ＡＥＳ演算回路単体で利用されるのであれば、ＡＥＳ演算回路全体のサイズを小型化する意味はある。現実にはＡＥＳ演算回路は何らかの装置（電子機器）に組み込まれて使用される。このため、このような使用状況を考慮してＡＥＳ演算回路のサイズを小さくする必要がある。しかし、これまでは、ＡＥＳ演算回路が他の機器（システム）に組み込まれて使用されるということを考慮した小型化の研究は行われていない。
【０００９】
一般に、システムには、他の用途で使うことを目的とした記憶装置、例えば通信用のバッファ（ＲＡＭ（Random  Access  Memory）など）が存在する。そこで、第１の実施形態の暗号化装置は、このような記憶装置を、ＡＥＳ演算回路を使用するときに転用する。これにより、ＡＥＳ演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が実現できる。
【００１０】
このように、ＡＥＳ演算回路を組み込むシステム内の記憶装置を転用すれば、システム全体で考えると、記憶素子を除いたＡＥＳ演算回路のサイズを小さくすることが意味を持つ。このような観点に基づいてＡＥＳ演算回路の小型化を考えた例は今までに存在しない。
【００１１】
次に、本実施形態の暗号化装置の構成の概要について説明する。ＡＥＳ暗号は、基本的にバイト単位で演算処理が実行される。ＳｈｉｆｔＲｏｗｓは１６バイトのバイト単位の並び替えである。ＳｈｉｆｔＲｏｗｓにより実際に並び替えるためには、１６バイトの他にバッファとなる記憶装置が必要になる。また、ＭｉｘＣｏｌｕｍｎｓは４バイト単位の変換であるが、入力の４バイトが揃わないと変換が実行できない。
【００１２】
本実施形態では、最低限必要な５種類の命令（擬似命令）のみでＡＥＳを実現する。５種類の命令には、３種類の演算処理の命令（ｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒ）と、２種類のメモリアクセスの命令（ｌｄ（ロード）およびｓｔ（ストア））とが含まれる。また、演算結果を記憶するためのレジスタとして８ビットのアキュムレータを設ける。また、これらの命令によりＡＥＳ暗号をハードウェアで実行する順序機械である制御部を備える。命令や各構成部の詳細は後述する。
【００１３】
図１は、第１の実施形態にかかる暗号化装置１００を含む電子機器１０の構成の一例を示すブロック図である。図１に示すように、電子機器１０は、暗号化装置１００と、入出力インタフェース（入出力ＩＦ）２００と、記憶装置３００と、鍵記憶装置４００と、を備えている。
【００１４】
記憶装置３００は、電子機器１０で扱う各種データを記憶する。記憶装置３００は、データを記憶するアドレスを指定することにより当該データにアクセス可能とする記憶媒体である。記憶装置３００は、例えばＲＡＭにより構成できる。
【００１５】
入出力ＩＦは、図示しない制御回路からの指示に従い、外部との間でデータを送受信するためのインタフェースである。鍵記憶装置４００は、暗号化処理で用いる鍵情報を記憶する。暗号化装置１００は、記憶装置３００と接続され、ＡＥＳ暗号方式の演算を実行する。記憶装置３００は、ページバッファ用のＲＡＭを用いてもよい。鍵記憶装置４００は、ＮＡＮＤフラッシュを用いても良い。記憶装置３００は、揮発性メモリまたは不揮発性メモリである。鍵記憶装置４００は、不揮発性メモリである。また、記憶装置３００と鍵記憶装置４００は物理的に同一のメモリを用いても良い。
【００１６】
制御回路は、例えば、以下のようにしてＡＥＳ暗号を実行する。
（１）入出力ＩＦを介して暗号化するデータ（メッセージ）を読み出し、記憶装置３００に書き込む。
（２）鍵記憶装置４００から鍵情報を読み出し、記憶装置３００に書き込む。
（３）暗号化装置１００に演算を指示する。これにより、演算の処理結果である暗号文が記憶装置３００に書き込まれる。
【００１７】
図２は、第１の実施形態にかかる暗号化装置１００の構成の一例を示すブロック図である。図２に示すように、暗号化装置１００は、暗号化処理部１１０と、演算部としてのＡＬＵ（Arithmetic  Logic  Unit）１２０と、アキュムレータ１３０と、を備えている。
【００１８】
暗号化処理部１１０は、図１で説明した電子機器１０の制御回路からの制御信号に従ってＡＥＳ暗号の暗号化処理の演算を制御し、演算の状態を表すステータス信号を出力する。暗号化処理部１１０の詳細は後述する。
【００１９】
ＡＬＵ１２０は、暗号化処理部１１０により選択された機能を表す情報（図２の「機能選択」）に従って演算を実行する。ＡＬＵ１２０は、必要に応じて、暗号化処理部１１０により指定されたアドレスのデータに対して演算を実行する。
【００２０】
アキュムレータ１３０は、ＡＬＵ１２０による演算結果を記憶するためのレジスタである。アキュムレータ１３０に記憶されたデータは、暗号化処理部１１０からの指示に応じて記憶装置３００に書き込まれる。
【００２１】
なお、暗号化装置１００は、記憶装置３００のうち、一部の記憶領域を使用してＡＥＳ暗号の演算を実行する。記憶装置３００内に必要な記憶領域の内訳は以下のとおりである。
・使用する記憶領域全体のサイズ＝４９バイト
・入力となるメッセージｍ＝１６バイト
・入力となる鍵ｋ＝１６バイト
・作業領域ｗ＝１６バイト
・ラウンド定数ｒｃ＝１バイト
なお、演算結果である暗号文はメッセージｍに上書きされる。
【００２２】
図２の暗号化装置１００の使用方法は以下のようになる。
・記憶装置３００に入力データ（メッセージｍ（１６バイト）および鍵ｋ（１６バイト）を書き込む
・暗号化装置１００を実行開始する
・暗号化装置１００の実行終了を待つ
・演算結果は記憶装置３００に書き込まれているので、演算結果を記憶装置３００から読み出す
【００２３】
ここで、本実施形態によるＡＥＳ暗号方式の暗号化処理の擬似コードについて説明する。最初に、簡略化した擬似コード（簡易版擬似コード）を記載する。
【００２４】
//m=AES（m,k）
//入力  m:メッセージ、k:鍵
round=0
rc=0x01
m=AK（m,k）//AddRoundKey
while（1）｛
k=KS（k）//KeyExpansion
m=SB（m）//SubBytes
w=SR（m）//ShiftRows
round=round+1
if（round==10）  break;//exit  while  loop
m=MC（w）//MixColumns
m=AK（m,k）//AddRoundKey
rc=xtime（rc）//rc  update
｝
m=AK（w,k）//AddRoundKey
【００２５】
擬似コード内の各関数は、それぞれＡＥＳ暗号で定められる関数と以下のように対応する。各ＡＥＳ暗号で定められる関数は各々FIPS197(Federal Information Processing Standards Publication 197, the National Institute of Standards and Technology (NIST))で定義される関数である。
AK：AddRoundKey
KS：KeyExpansion
MC：MixColumns
SB：SubBytes
SR：ShiftRows
【００２６】
次に、詳細なＡＥＳ擬似コード（詳細版擬似コード）を記載する。詳細版擬似コードは、上記簡易版擬似コードの各関数（ＡＫ、ＫＳ、ＳＢ、ＳＲ、ＭＣなど）を具体化したコードを含む。
【００２７】
round=0
rc=0x01
//AddRoundKey:m=AK（m,k）
for（i=0;  i<16;  i++）｛
ld  m[i]
xor  k[i]
st  m[i]
｝
while（1）｛
//KeyExpansion:k=KS（k）
for（i=0;  i<16;  i++）｛
ld  k[kp（i）]
if（i<4）｛
sbox
if（i==0）  xor  rc
｝
xor  k[i]
st  k[i]
｝
//SubBytes:m=SB（m）
for（i=0;  i<16;  i++）｛
ld  m[i]
sbox
st  m[i]
｝
//ShiftRows:w=SR（m）
for（i=0;  i<16;  i++）｛
ld  m[sr（i）]
st  w[i]
｝
//loop  control
round=round+1
if（round==10）  break;//exit  while  loop
//MixColumns:m=MC（w）
for（i=0;  i<16;  i++）｛
ld  w[i]
xor  w[ofs1（i）]
xtime
xor  w[ofs1（i）]
xor  w[ofs2（i）]
xor  w[ofs3（i）]
st  m[i]
｝
//AddRoundKey:m=AK（m,k）
for（i=0;  i<16;  i++）｛
ld  m[i]
xor  k[i]
st  m[i]
｝
//rc  update:rc=xtime（rc）
ld  rc
xtime
st  rc
｝
//AddRoundKey:m=AK（w,k）
for（i=0;  i<16;  i++）｛
ld  w[i]
xor  k[i]
st  m[i]
｝
//end
【００２８】
図３は、擬似コード内の各命令の意味を説明するための図である。図３は、各命令を別の表現で表した式（別表現）と、命令の内容を表す説明とを記載する。図３のＡｃｃはアキュムレータ１３０に対応する。図３のｍｅｍは記憶装置３００の指定されたアドレスのデータに対応する。
【００２９】
ＸＴＩＭＥ関数は、例えば、８ビット入出力の関数であり、以下の（１）式のように表される。ｍｓｂ（ｘ）はｘの最上位ビットを表す。
（ｍｓｂ（ｘ）＝＝０）？（ｘ＜＜１）：（ｘ＜＜１）＾０ｘ１ｂ  （１）
【００３０】
このようにして、本実施形態では、５種類の命令であるｓｂｏｘ、ｘｔｉｍｅ、ｘｏｒ、ｌｄおよびｓｔでＡＥＳを実現している。
【００３１】
図４は、第１の実施形態にかかるＡＬＵ１２０の構成の一例を示すブロック図である。図４に示すように、ＡＬＵ１２０は、ＸＴＩＭＥ１２１と、ＳＢＯＸ１２２と、ＸＯＲ１２３と、セレクタ１２４と、を備えている。ＸＴＩＭＥ１２１、ＳＢＯＸ１２２、および、ＸＯＲ１２３は、それぞれ上述の３種類の演算処理（ｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒ）を実行する回路である。セレクタ１２４は、記憶装置３００から読み出したデータ（ＬＤ）、ＸＴＩＭＥ１２１の演算結果、ＳＢＯＸ１２２の演算結果、および、ＸＯＲ１２３の演算結果のいずれかを選択して出力する。このようにして、ＡＬＵ１２０は、暗号化処理部１１０による機能選択の指定に従い、ｌｄ、ｘｔｉｍｅ、ｓｂｏｘ、および、ｘｏｒの４つの演算処理のいずれかを実行する。
【００３２】
次に、５種類の命令が実行されたときの暗号化装置１００内の処理の流れについて図５から図８を用いて説明する。図５は、ｌｄ命令が実行されたときの暗号化装置１００内の処理例を示す図である。
【００３３】
ｌｄ命令では、暗号化処理部１１０からアドレスが指定（出力）され、記憶装置３００の指定されたアドレスのデータが読み出され、ＡＬＵ１２０を経由してアキュムレータ１３０に書き込まれる。図５の「ａｃｃ−ｗｅ」はアキュムレータ１３０への書き込みを指示する信号を表す。図５の「ｒｅａｄ」は記憶装置３００からのデータの読み出しを指示する信号を表す。
【００３４】
図６は、ｓｔ命令が実行されたときの暗号化装置１００内の処理例を示す図である。ｓｔ命令では、暗号化処理部１１０からアドレスが指定（出力）され、アキュムレータ１３０に記憶されているデータが、記憶装置３００の指定されたアドレスに書き込まれる。アキュムレータ１３０に記憶されているデータは変更しないことを示すため、図５ではａｃｃ−ｗｅ信号に否定を示す上線が付されている。「ｗｒｉｔｅ」は記憶装置３００へのデータの書き込みを指示する信号を表す。
【００３５】
図７は、ｘｏｒ命令が実行されたときの暗号化装置１００内の処理例を示す図である。ｘｏｒ命令では、暗号化処理部１１０からアドレスが指定（出力）され、アキュムレータ１３０に記憶されているデータと、記憶装置３００の指定されたアドレスのデータとの排他的論理和の演算結果が、アキュムレータ１３０に書き込まれる。
【００３６】
図８は、ｓｂｏｘおよびｘｔｉｍｅ命令が実行されたときの暗号化装置１００内の処理例を示す図である。ｓｂｏｘおよびｘｔｉｍｅでは用いる関数が異なるが、動作は同様であるため同じ図にまとめて記載している。ｓｂｏｘ命令（ｘｔｉｍｅ命令）では、アキュムレータ１３０に記憶されているデータに、ＳＢＯＸ関数（ＸＴＩＭＥ関数）を適用した結果がアキュムレータ１３０に書き戻される。
【００３７】
図９は、第１の実施形態にかかる暗号化処理部１１０の構成の一例を示すブロック図である。図９に示すように、暗号化処理部１１０は、制御部１１１と、ラウンドカウンタ１１２と、インデックスレジスタ１１３と、アドレス生成部１１４と、を備えている。
【００３８】
制御部１１１は、電子機器１０の制御回路（図示せず）などの外部装置からの制御信号に従い、各種制御信号を出力して、ＡＥＳ暗号化方式に応じて定められた手順に従って暗号化処理の演算を制御する。図９の点線は、制御部１１１から各部に制御信号を出力することを表している。この制御信号の詳細については後述する。
【００３９】
制御部１１１には、例えば、ＡＥＳ暗号の演算をリセットする信号、および、演算の開始を指示する信号などの制御信号が入力される。制御部１１１は、処理状態を表すステータス信号（ビジー、完了など）を、例えば制御信号の入力元に出力する。
【００４０】
ＡＬＵ機能選択は、ＡＬＵ１２０に対していずれの機能（演算）を実行するかを示す信号を表す。Ａｃｃ書き込みは、アキュムレータ１３０にデータを書き込むか否かを指定するための信号を表す。メモリＲ／Ｗは、記憶装置３００からデータを読み出すか（Ｒ）、記憶装置３００にデータを書き込むか（Ｗ）を指定するための信号を表す。
【００４１】
ラウンドカウンタ１１２は、ＡＥＳ暗号のラウンド数（ｒｏｕｎｄ）を数えるためのカウンタである。ラウンドカウンタ１１２は、例えばフリップフロップにより構成できる。
【００４２】
インデックスレジスタ１１３は、アドレス生成部１１４がアドレスを生成するために用いるカウンタ値（ｉｘ）を記憶するレジスタである。本実施形態では、インデックスレジスタ１１３は、４ビットのカウンタ値を記憶する。
【００４３】
アドレス生成部１１４は、制御部１１１が出力する２ビットの値（ページ）と、インデックスレジスタ１１３の４ビットのカウンタ値ｉｘとから、６ビットのアドレスを生成して出力する。
【００４４】
ここで、本実施形態の暗号化装置１００で使用する記憶装置３００内の記憶領域のアドレス空間について説明する。図１０は、第１の実施形態で用いるアドレス空間の一例を示す図である。
【００４５】
図１０では、メッセージｍ、鍵ｋ、作業領域ｗおよびラウンド定数ｒｃの順に連続するアドレスを用いる例が示されている。アドレスの並び順はこれに限られるものではない。例えば、１６バイトのデータ（メッセージｍ、鍵ｋ）または１６バイトの作業領域ｗの各バイトのアドレスが連続していれば、各データまたは作業領域のアドレスは連続していなくてもよい。
【００４６】
図１１は、第１の実施形態にかかるアドレス生成部１１４の構成の一例を示すブロック図である。図１１に示すように、アドレス生成部１１４は、ｋｐ１００１と、ｓｒ１００２と、ｏｆｓ１（１０１１）（以下、単にｏｆｓ１という）と、ｏｆｓ２（１０１２）（以下、単にｏｆｓ２という）と、ｏｆｓ３（１０１３）（以下、単にｏｆｓ３という）と、セレクタ１０２１と、を備えている。
【００４７】
ｋｐ１００１、ｓｒ１００２、ｏｆｓ１、ｏｆｓ２、および、ｏｆｓ３は、それぞれインデックスレジスタから入力される４ビットのカウンタ値ｉｘを変換する回路である。図１２は、図１１の各回路に相当する関数の入出力の一例を示す図である。
【００４８】
例えばｋｐ（ｘ）は、カウンタ値ｉｘ（図１２の表のｘに相当）が「０」の場合、「１３」を出力する関数である。関数ｋｐ（ｘ）は、鍵拡大処理（KeyExpansion）でのデータのアクセス順が１３,１４,１５,１２,０,１,２，３，４，５，６，７，８，９，１０，１１であることを反映している。ｓｒ（ｘ）は、１６バイトの並び替えを行うShiftRowsの処理内容を反映している。
【００４９】
ｏｆｓ１（ｘ）〜ｏｆｓ３（ｘ）は、ｘの下位２ビットに、２ビットの１〜３を加算するが、ｘの上位２ビットは不変となる関数である。
【００５０】
セレクタ１０２１は、制御部１１１からの指示（図９の点線）に従い、０、カウント値ｉｘ、ｋｐ１００１の出力、ｓｒ１００２の出力、ｏｆｓ１の出力、ｏｆｓ２の出力、および、ｏｆｓ３の出力、のいずれかを選択して出力する。
【００５１】
図１１の右上に示すように、アドレス生成部１１４は、制御部１１１から入力される２ビットのページと、セレクタ１０２１から出力される４ビットの値（オフセットに相当）とを結合したアドレスを出力する。このように、ページがアドレスの上位２ビットになり、例えば、インデックスレジスタを各関数で変形した結果がアドレスの下位４ビットになる。ページは、演算処理に用いられるデータの種類および演算処理に用いられる記憶装置３００内の作業領域を特定するための特定情報として用いられる。例えば、ページは、メッセージｍ、鍵ｋ、作業領域ｗ、および、ラウンド定数ｒｃの４つを特定するために４値をとる。このため、本実施形態ではページを２ビットで表している。
【００５２】
次に、このように構成された第１の実施形態にかかる暗号化装置１００による暗号化処理について図１３を用いて説明する。図１３は、第１の実施形態における暗号化処理の全体の流れを示すフローチャートである。図１３は、上述のＡＥＳの簡易版擬似コードをフローチャートとして記載した図に相当する。
【００５３】
まず、ラウンド数のカウンタ（ｒｏｕｎｄ）およびラウンド定数（ｒｃ）がそれぞれ０および１に初期化される（ステップＳ１０１）。次に、AddRoundKeyが実行され、メッセージｍが更新される（ステップＳ１０２）。次に、KeyExpansion（ステップＳ１０３）、SubBytes（ステップＳ１０４）、ShiftRows（ステップＳ１０５）が順次実行され、ラウンド数に１加算される（ステップＳ１０６）。
【００５４】
ラウンド数が１０に達しない場合（ステップＳ１０７：Ｎｏ）、さらにMixColumns（ステップＳ１０８）、AddRoundKey（ステップＳ１０９）、およびxtime（ステップＳ１１０）が実行される。その後、ステップＳ１０３に戻り処理が繰り返される。ラウンド数が１０に達した場合（ステップＳ１０７：Ｙｅｓ）、AddRoundKeyが実行され（ステップＳ１１１）、暗号化処理が終了する。
【００５５】
SR（ShiftRows）は１６バイトの並び替えだが、上書きすると元の値が消えるので、別な領域である作業領域ｗにコピーしながら並び替えている（ステップＳ１０５）。この処理（ステップＳ１０５）をＣ言語で記載すると次のようなコードになる。
for（i=0;  i<16;  i++）｛
w[i]=m[sr[i]];
｝
【００５６】
上記コード内の変数srは、
int  sr[16]=｛0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11｝;
であるため、上記コードは、
w[0]=m[0]
w[1]=m[5]
w[2]=m[10]
w[3]=m[15]
w[4]=m[4]
w[5]=m[9]
w[6]=m[14]
w[7]=m[3]
w[8]=m[8]
w[9]=m[13]
w[10]=m[2]
w[11]=m[7]
w[12]=m[12]
w[13]=m[1]
w[14]=m[6]
w[15]=m[11]
という代入をしているのと同じことになる。
【００５７】
１変数だけで逐次的に実行しようとすると、これから先に必要な値が上書きされて消されてしまうので、別な変数にコピーしながら順番を入れ替えている。
【００５８】
MC（MixColumns）も、値が上書される問題が生じるので、別の変数にコピーしながら変換している（ステップＳ１０８）。
【００５９】
ＡＥＳ暗号の規格（ＦＩＰＳ−１９７）では、
m[0]=xtime（w[0]）^xtime（w[1]）^w[1]^w[2]^w[3]
のように計算することが定められている。一方、xtime（a）^xtime（b）=xtime（a^b）であるため、次のようにxtimeをまとめて計算することもできる。
m[0]=xtime（w[0]^w[1]）^w[1]^w[2]^w[3]
【００６０】
MC全体では以下のような計算をすることになる。
m[0]=xtime（w[0]^w[1]）^w[1]^w[2]^w[3]
m[1]=xtime（w[1]^w[2]）^w[2]^w[3]^w[0]
m[2]=xtime（w[2]^w[3]）^w[3]^w[0]^w[1]
m[3]=xtime（w[3]^w[0]）^w[0]^w[1]^w[2]
m[4]=xtime（w[4]^w[5]）^w[5]^w[6]^w[7]
m[5]=xtime（w[5]^w[6]）^w[6]^w[7]^w[4]
m[6]=xtime（w[6]^w[7]）^w[7]^w[4]^w[5]
m[7]=xtime（w[7]^w[4]）^w[4]^w[5]^w[6]
m[8]=xtime（w[8]^w[9]）^w[9]^w[10]^w[11]
m[9]=xtime（w[9]^w[10]）^w[10]^w[11]^w[8]
m[10]=xtime（w[10]^w[11]）^w[11]^w[8]^w[9]
m[11]=xtime（w[11]^w[8]）^w[8]^w[9]^w[10]
m[12]=xtime（w[12]^w[13]）^w[13]^w[14]^w[15]
m[13]=xtime（w[13]^w[14]）^w[14]^w[15]^w[12]
m[14]=xtime（w[14]^w[15]）^w[15]^w[12]^w[13]
m[15]=xtime（w[15]^w[12]）^w[12]^w[13]^w[14]
【００６１】
添え字の並びを考慮し、本実施形態では以下のようにxtimeを計算する。
m[i]=xtime（w[i]^w[ofs1（i）]）^w[ofs1（i）]^w[ofs2（i）]^w[ofs3（i）]
【００６２】
図１４は、詳細版擬似コードを状態遷移表として書き直した図である。図１５は、状態遷移表の各項目の読み方を表す図である。ｃｏｄｅは、５種類の命令のうち各状態で実行される機能（命令）のコードである。ｒｅａｄは、記憶装置３００からデータを読み出すときに１が設定され、読み出さない場合は０が設定される。ｗｒｉｔｅは、記憶装置３００にデータを書き込むときに１が設定され、書き込まない場合は０が設定される。ｆｕｎｃは、ＬＤ、ＸＴＩＭＥ、ＳＢＯＸ、ＸＯＲ、および、任意（ＡＬＵ１２０による演算は実行しない）のいずれかが設定される。ａｃｃ−ｗｅは、アキュムレータ１３０にデータを書き込むときに１が設定され、書き込まない場合は０が設定される。
【００６３】
例えば、state＝S01では、ld  m[i]というコードを実行する。その際に、read信号を１に設定し、write信号を０に設定し、funcをLDに設定し、acc＿weを１に設定する。またアドレス生成部１１４の出力はページがPMでoffsetがixである。ix欄とround欄は空白なので何も実行されない。制御欄は「↓」なので次の状態であるS02に遷移する。
【００６４】
S03ではix欄がix+1、制御はif（ix!=15）  S01となっている。これはixの値を１増やしてix+1に更新することと、ixの更新前の値が１５でない場合はS01へ遷移することを意味している。またixが１５である場合は次の状態S04へ遷移する。図１４に示されるように、ixは、各演算処理の対象となるデータを変更するタイミングで更新される。
【００６５】
（変形例）
図１６は、第１の実施形態の変形例にかかるアドレス生成部１１４−２の構成の一例を示すブロック図である。図１６に示すように、アドレス生成部１１４−２は、ｋｐ１００１と、ｓｒ１００２と、ｏｆｓ１０１０と、セレクタ１０２１−２と、を備えている。
【００６６】
本変形例では、オフセットを出力する３つの回路であるｏｆｓ１、ｏｆｓ２、および、ｏｆｓ３の代わりに、１つのｏｆｓ１０１０を備えている。ｏｆｓ１０１０は、カウンタ値ｉｘを３つの関数ｏｆｓ（ｘ，１）、ｏｆｓ（ｘ，２）、ｏｆｓ（ｘ，３）のいずれかを用いて変換する回路である。３つの関数ｏｆｓ（ｘ，１）、ｏｆｓ（ｘ，２）、ｏｆｓ（ｘ，３）のいずれを用いるかを指定する信号（図１６の「１〜３」）は、例えば制御部１１１から指定する。図１７は、図１６の各回路に相当する関数の入出力の一例を示す図である。
【００６７】
セレクタ１０２１−２は、制御部１１１からの指示に従い、０、カウント値ｉｘ、ｋｐ１００１の出力、ｓｒ１００２の出力、ｏｆｓ１０１０の出力、のいずれかを選択して出力する。このような構成でも、図１１と同様の機能を実現できる。
【００６８】
このように、第１の実施形態にかかる演算装置（暗号化装置）では、装置外部の記憶装置を利用し、演算で用いるデータを当該記憶装置に記憶するように制御する。これにより、ＡＥＳ演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が可能となる。また、本実施形態では、ＡＬＵ内には暗号化で用いる演算処理を実行する最小限の回路（ＸＴＩＭＥ、ＳＢＯＸ、ＸＯＲ）のみを備えるため、この点でも装置の小型化が可能となっている。また、本実施形態では、暗号化で用いる各演算処理を所定の回数単位で実行している。例えばインデックスレジスタのカウント値が１５に達するごとに、すなわち、１６回単位で各演算を実行している。このため、回数が不一致となる場合に必要となる制御回路が不要になり、さらに小型化が実現できる。
【００６９】
（第２の実施形態）
第２の実施形態では、ＡＥＳ暗号方式の復号装置に演算装置を適用した例を説明する。図１８は、第２の実施形態にかかる復号装置１００−２の構成の一例を示すブロック図である。図１８に示すように、復号装置１００−２は、復号処理部１１０−２と、演算部としてのＡＬＵ（Arithmetic  Logic  Unit）１２０−２と、アキュムレータ１３０と、を備えている。
【００７０】
復号処理部１１０−２は、ＡＥＳ暗号の復号処理の演算を制御し、演算の状態を表すステータス信号を出力する。アキュムレータ１３０は、ＡＬＵ１２０による演算結果を記憶するためのレジスタである。
【００７１】
ＡＬＵ１２０−２は、復号処理部１１０−２により選択された機能を表す情報に従って演算を実行する。ＡＬＵ１２０−２は、必要に応じて、復号処理部１１０−２により指定されたアドレスのデータに対して演算を実行する。
【００７２】
本実施形態によるＡＥＳ暗号方式の復号処理の擬似コードについて説明する。以下に、復号処理を簡略化した擬似コード（簡易版擬似コード）を記載する。
//m=invAES（m,k）
//入力  m:暗号文  k:復号鍵
round=0;
rc=0x36;
m=AK（m,k）//AddRoundKey
while（1）｛
k=iKS（k）//invKeyExpansion
m=iSB（m）//invSubBytes
w=iSR（m）//invShiftRows
round=round+1
if（round==10）  break;//exit  while  loop
w=AK（w,k）//AddRoundKey
m=iMC（w）//invMixColumns
rc=ixtime（rc）//rc  update
｝
m=AK（w,k）//AddRoundKey
【００７３】
暗号化処理で用いる関数の先頭に「i」が付加された関数は、暗号化処理で用いる関数の逆関数であることを意味する。例えば、iSBはSBの逆関数である。
【００７４】
iKSはsboxとxorにより作成できる。iSBはsboxの逆関数（isbox）が必要である。iMCはxtimeにより作成できる。ixtimeはxtimeにより作成できる。従って、ＡＬＵ１２０−２は、以下の５つ演算を実行できる回路を備えていればよい。
（１）LD
（２）XTIME
（３）SBOX
（４）ISBOX
（５）XOR
【００７５】
図１９は、このように構成される第２の実施形態にかかるＡＬＵ１２０−２の構成の一例を示すブロック図である。図１９に示すように、ＡＬＵ１２０−２は、ＸＴＩＭＥ１２１と、ＳＢＯＸ１２２と、ＸＯＲ１２３と、セレクタ１２４−２と、ＩＳＢＯＸ１２５と、を備えている。ＩＳＢＯＸ１２５は、ＳＢＯＸ１２２の逆関数に相当する演算を実行する回路である。
【００７６】
復号処理部１１０−２は、上記擬似コードの復号処理を実現するようにＡＬＵ１２０−２の演算を制御する。復号処理部１１０−２は、暗号化処理部１１０と同様の制御部１１１、ラウンドカウンタ１１２、インデックスレジスタ１１３、および、アドレス生成部１１４を備える。復号処理部１１０−２は、暗号化処理部１１０が暗号化処理を実行するのと同様の手法で、ＡＥＳ暗号の復号処理を実行すればよい。なお、図１９に示すＡＬＵ１２−２の構成で暗号化処理を行うことも可能である。この場合、図４で説明したような動作を行い、ＩＳＢＯＸの機能選択の指定はなされない。
【００７７】
次に、このように構成された第２の実施形態にかかる復号装置１００−２による復号処理について図２０を用いて説明する。図２０は、第２の実施形態における復号処理の全体の流れを示すフローチャートである。
【００７８】
まず、ラウンド数のカウンタ（ｒｏｕｎｄ）およびラウンド定数（ｒｃ）がそれぞれ０および０ｘ３６(１６進数の３６)に初期化される（ステップＳ２０１）。次に、逆AddRoundKey（iAK）が実行され、メッセージｍが更新される（ステップＳ２０２）。次に、逆KeyExpansion（iKS）（ステップＳ２０３）、逆SubBytes（iSB)（ステップＳ２０４）、逆ShiftRows（iSR)（ステップＳ２０５）が順次実行され、ラウンド数に１加算される（ステップＳ２０６）。
【００７９】
ラウンド数が１０に達しない場合（ステップＳ２０７：Ｎｏ）、さらにAddRoundKey（ステップＳ２０８）、逆MixColumns（iMC）（ステップＳ２０９）、および逆xtime（ixtime）（ステップＳ２１０）が実行される。その後、ステップＳ２０３に戻り処理が繰り返される。ラウンド数が１０に達した場合（ステップＳ２０７：Ｙｅｓ）、AddRoundKeyが実行され（ステップＳ２１１）、復号処理が終了する。
【００８０】
以上説明したとおり、第１および第２の実施形態によれば、演算処理に用いるデータを記憶する記憶装置を演算装置内に備える必要がなくなり装置の小型化が実現できる。例えば、メモリカード内にＡＥＳ演算回路を備える場合に、さらなるＡＥＳ演算回路の小型化が実現できる。
【００８１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８２】
１０  電子機器
１００  暗号化装置
１００−２  復号装置
１１０  暗号化処理部
１１０−２  復号処理部
１１１  制御部
１１２  ラウンドカウンタ
１１３  インデックスレジスタ
１１４  アドレス生成部
１２０、１２０−２  ＡＬＵ
１３０  アキュムレータ
３００  記憶装置
４００  鍵記憶装置
【図１】
0005755970.tif 000002
【図２】
0005755970.tif 000003
【図３】
0005755970.tif 000004
【図４】
0005755970.tif 000005
【図５】
0005755970.tif 000006
【図６】
0005755970.tif 000007
【図７】
0005755970.tif 000008
【図８】
0005755970.tif 000009
【図９】
0005755970.tif 000010
【図１０】
0005755970.tif 000011
【図１１】
0005755970.tif 000012
【図１２】
0005755970.tif 000013
【図１３】
0005755970.tif 000014
【図１４】
0005755970.tif 000015
【図１５】
0005755970.tif 000016
【図１６】
0005755970.tif 000017
【図１７】
0005755970.tif 000018
【図１８】
0005755970.tif 000019
【図１９】
0005755970.tif 000020
【図２０】
0005755970.tif 000021