演算装置
【課題】演算装置を小型化する。
【解決手段】演算措置は、データの種類ごとにN個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する。演算装置は、演算部と、アドレス生成部と、制御部とを備える。演算部は、暗号方式で用いられる複数の演算処理を実行する。アドレス生成部は、演算処理で用いられる種類のN個のデータのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって先頭のデータのアドレスを基準とするオフセットと、に基づいて、演算処理で用いられるデータを記憶する記憶装置のアドレスを生成する。制御部は、暗号方式で定められる順序で演算処理を実行するように演算部を制御するとともに、演算処理で用いられるデータの種類を変更するタイミング、および、演算処理で用いられるデータを変更するタイミングでカウンタ値の更新を指定する。
【解決手段】演算措置は、データの種類ごとにN個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する。演算装置は、演算部と、アドレス生成部と、制御部とを備える。演算部は、暗号方式で用いられる複数の演算処理を実行する。アドレス生成部は、演算処理で用いられる種類のN個のデータのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって先頭のデータのアドレスを基準とするオフセットと、に基づいて、演算処理で用いられるデータを記憶する記憶装置のアドレスを生成する。制御部は、暗号方式で定められる順序で演算処理を実行するように演算部を制御するとともに、演算処理で用いられるデータの種類を変更するタイミング、および、演算処理で用いられるデータを変更するタイミングでカウンタ値の更新を指定する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、演算装置に関する。
【背景技術】
【0002】
AES(Advanced Encryption Standard)は米国標準の暗号方式であり、様々な分野に採用されている。AESを実行する回路(AES演算回路)の小型化(ハードウェアの回路規模縮小)は色々な研究が行われている。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】M. Feldhofer,J. Wolkerstorfer,and V. Rijmen,"AES Implementation on a Grain of Sand",IEE Proceedings Information Security,vol. 152,pp. 13-20,2005.
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来技術の方法では小型化が不十分な場合がある。
【課題を解決するための手段】
【0005】
実施形態の演算装置は、データの種類ごとにN個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する。演算装置は、演算部と、アドレス生成部と、制御部とを備える。演算部は、暗号方式で用いられる複数の演算処理を実行する。アドレス生成部は、演算処理で用いられる種類のN個のデータのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって先頭のデータのアドレスを基準とするオフセットと、に基づいて、演算処理で用いられるデータを記憶する記憶装置のアドレスを生成する。制御部は、暗号方式で定められる順序で演算処理を実行するように演算部を制御するとともに、演算処理で用いられるデータの種類を変更するタイミング、および、演算処理で用いられるデータを変更するタイミングでカウンタ値の更新を指定する。
【図面の簡単な説明】
【0006】
【図1】第1の実施形態にかかる暗号化装置を含む電子機器のブロック図。
【図2】第1の実施形態にかかる暗号化装置のブロック図。
【図3】擬似コード内の各命令の意味を説明するための図。
【図4】第1の実施形態にかかるALUのブロック図。
【図5】ld命令の処理例を示す図。
【図6】st命令の処理例を示す図。
【図7】xor命令の処理例を示す図。
【図8】sboxおよびxtime命令の処理例を示す図。
【図9】第1の実施形態にかかる暗号化処理部のブロック図。
【図10】第1の実施形態で用いるアドレス空間を示す図。
【図11】第1の実施形態にかかるアドレス生成部のブロック図。
【図12】図11の各回路に相当する関数の入出力を示す図。
【図13】第1の実施形態における暗号化処理のフローチャート。
【図14】詳細版擬似コードを状態遷移表として書き直した図。
【図15】状態遷移表の各項目の読み方を表す図。
【図16】第1の実施形態の変形例にかかるアドレス生成部のブロック図。
【図17】図16の各回路に相当する関数の入出力を示す図。
【図18】第2の実施形態にかかる復号装置のブロック図。
【図19】第2の実施形態にかかるALUのブロック図。
【図20】第2の実施形態における復号処理のフローチャート。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、この発明にかかる演算装置の好適な実施形態を詳細に説明する。以下では、演算装置をAES暗号方式の暗号化装置(第1の実施形態)および復号装置(第2の実施形態)に適用した例を説明する。なお、適用可能な装置はこれに限られるものではない。
【0008】
(第1の実施形態)
これまでのAES演算回路の小型化の研究では、記憶素子も含めたAES演算回路全体のサイズを小さくすることに主眼が置かれていた。AES演算回路単体で利用されるのであれば、AES演算回路全体のサイズを小型化する意味はある。現実にはAES演算回路は何らかの装置(電子機器)に組み込まれて使用される。このため、このような使用状況を考慮してAES演算回路のサイズを小さくする必要がある。しかし、これまでは、AES演算回路が他の機器(システム)に組み込まれて使用されるということを考慮した小型化の研究は行われていない。
【0009】
一般に、システムには、他の用途で使うことを目的とした記憶装置、例えば通信用のバッファ(RAM(Random Access Memory)など)が存在する。そこで、第1の実施形態の暗号化装置は、このような記憶装置を、AES演算回路を使用するときに転用する。これにより、AES演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が実現できる。
【0010】
このように、AES演算回路を組み込むシステム内の記憶装置を転用すれば、システム全体で考えると、記憶素子を除いたAES演算回路のサイズを小さくすることが意味を持つ。このような観点に基づいてAES演算回路の小型化を考えた例は今までに存在しない。
【0011】
次に、本実施形態の暗号化装置の構成の概要について説明する。AES暗号は、基本的にバイト単位で演算処理が実行される。ShiftRowsは16バイトのバイト単位の並び替えである。ShiftRowsにより実際に並び替えるためには、16バイトの他にバッファとなる記憶装置が必要になる。また、MixColumnsは4バイト単位の変換であるが、入力の4バイトが揃わないと変換が実行できない。
【0012】
本実施形態では、最低限必要な5種類の命令(擬似命令)のみでAESを実現する。5種類の命令には、3種類の演算処理の命令(sbox、xtime、および、xor)と、2種類のメモリアクセスの命令(ld(ロード)およびst(ストア))とが含まれる。また、演算結果を記憶するためのレジスタとして8ビットのアキュムレータを設ける。また、これらの命令によりAES暗号をハードウェアで実行する順序機械である制御部を備える。命令や各構成部の詳細は後述する。
【0013】
図1は、第1の実施形態にかかる暗号化装置100を含む電子機器10の構成の一例を示すブロック図である。図1に示すように、電子機器10は、暗号化装置100と、入出力インタフェース(入出力IF)200と、記憶装置300と、鍵記憶装置400と、を備えている。
【0014】
記憶装置300は、電子機器10で扱う各種データを記憶する。記憶装置300は、データを記憶するアドレスを指定することにより当該データにアクセス可能とする記憶媒体である。記憶装置300は、例えばRAMにより構成できる。
【0015】
入出力IFは、図示しない制御回路からの指示に従い、外部との間でデータを送受信するためのインタフェースである。鍵記憶装置400は、暗号化処理で用いる鍵情報を記憶する。暗号化装置100は、記憶装置300と接続され、AES暗号方式の演算を実行する。記憶装置300は、ページバッファ用のRAMを用いてもよい。鍵記憶装置400は、NANDフラッシュを用いても良い。記憶装置300は、揮発性メモリまたは不揮発性メモリである。鍵記憶装置400は、不揮発性メモリである。また、記憶装置300と鍵記憶装置400は物理的に同一のメモリを用いても良い。
【0016】
制御回路は、例えば、以下のようにしてAES暗号を実行する。
(1)入出力IFを介して暗号化するデータ(メッセージ)を読み出し、記憶装置300に書き込む。
(2)鍵記憶装置400から鍵情報を読み出し、記憶装置300に書き込む。
(3)暗号化装置100に演算を指示する。これにより、演算の処理結果である暗号文が記憶装置300に書き込まれる。
【0017】
図2は、第1の実施形態にかかる暗号化装置100の構成の一例を示すブロック図である。図2に示すように、暗号化装置100は、暗号化処理部110と、演算部としてのALU(Arithmetic Logic Unit)120と、アキュムレータ130と、を備えている。
【0018】
暗号化処理部110は、図1で説明した電子機器10の制御回路からの制御信号に従ってAES暗号の暗号化処理の演算を制御し、演算の状態を表すステータス信号を出力する。暗号化処理部110の詳細は後述する。
【0019】
ALU120は、暗号化処理部110により選択された機能を表す情報(図2の「機能選択」)に従って演算を実行する。ALU120は、必要に応じて、暗号化処理部110により指定されたアドレスのデータに対して演算を実行する。
【0020】
アキュムレータ130は、ALU120による演算結果を記憶するためのレジスタである。アキュムレータ130に記憶されたデータは、暗号化処理部110からの指示に応じて記憶装置300に書き込まれる。
【0021】
なお、暗号化装置100は、記憶装置300のうち、一部の記憶領域を使用してAES暗号の演算を実行する。記憶装置300内に必要な記憶領域の内訳は以下のとおりである。
・使用する記憶領域全体のサイズ=49バイト
・入力となるメッセージm=16バイト
・入力となる鍵k=16バイト
・作業領域w=16バイト
・ラウンド定数rc=1バイト
なお、演算結果である暗号文はメッセージmに上書きされる。
【0022】
図2の暗号化装置100の使用方法は以下のようになる。
・記憶装置300に入力データ(メッセージm(16バイト)および鍵k(16バイト)を書き込む
・暗号化装置100を実行開始する
・暗号化装置100の実行終了を待つ
・演算結果は記憶装置300に書き込まれているので、演算結果を記憶装置300から読み出す
【0023】
ここで、本実施形態によるAES暗号方式の暗号化処理の擬似コードについて説明する。最初に、簡略化した擬似コード(簡易版擬似コード)を記載する。
【0024】
//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
【0025】
擬似コード内の各関数は、それぞれAES暗号で定められる関数と以下のように対応する。各AES暗号で定められる関数は各々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
【0026】
次に、詳細なAES擬似コード(詳細版擬似コード)を記載する。詳細版擬似コードは、上記簡易版擬似コードの各関数(AK、KS、SB、SR、MCなど)を具体化したコードを含む。
【0027】
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
【0028】
図3は、擬似コード内の各命令の意味を説明するための図である。図3は、各命令を別の表現で表した式(別表現)と、命令の内容を表す説明とを記載する。図3のAccはアキュムレータ130に対応する。図3のmemは記憶装置300の指定されたアドレスのデータに対応する。
【0029】
XTIME関数は、例えば、8ビット入出力の関数であり、以下の(1)式のように表される。msb(x)はxの最上位ビットを表す。
(msb(x)==0)?(x<<1):(x<<1)^0x1b (1)
【0030】
このようにして、本実施形態では、5種類の命令であるsbox、xtime、xor、ldおよびstでAESを実現している。
【0031】
図4は、第1の実施形態にかかるALU120の構成の一例を示すブロック図である。図4に示すように、ALU120は、XTIME121と、SBOX122と、XOR123と、セレクタ124と、を備えている。XTIME121、SBOX122、および、XOR123は、それぞれ上述の3種類の演算処理(sbox、xtime、および、xor)を実行する回路である。セレクタ124は、記憶装置300から読み出したデータ(LD)、XTIME121の演算結果、SBOX122の演算結果、および、XOR123の演算結果のいずれかを選択して出力する。このようにして、ALU120は、暗号化処理部110による機能選択の指定に従い、ld、xtime、sbox、および、xorの4つの演算処理のいずれかを実行する。
【0032】
次に、5種類の命令が実行されたときの暗号化装置100内の処理の流れについて図5から図8を用いて説明する。図5は、ld命令が実行されたときの暗号化装置100内の処理例を示す図である。
【0033】
ld命令では、暗号化処理部110からアドレスが指定(出力)され、記憶装置300の指定されたアドレスのデータが読み出され、ALU120を経由してアキュムレータ130に書き込まれる。図5の「acc−we」はアキュムレータ130への書き込みを指示する信号を表す。図5の「read」は記憶装置300からのデータの読み出しを指示する信号を表す。
【0034】
図6は、st命令が実行されたときの暗号化装置100内の処理例を示す図である。st命令では、暗号化処理部110からアドレスが指定(出力)され、アキュムレータ130に記憶されているデータが、記憶装置300の指定されたアドレスに書き込まれる。アキュムレータ130に記憶されているデータは変更しないことを示すため、図5ではacc−we信号に否定を示す上線が付されている。「write」は記憶装置300へのデータの書き込みを指示する信号を表す。
【0035】
図7は、xor命令が実行されたときの暗号化装置100内の処理例を示す図である。xor命令では、暗号化処理部110からアドレスが指定(出力)され、アキュムレータ130に記憶されているデータと、記憶装置300の指定されたアドレスのデータとの排他的論理和の演算結果が、アキュムレータ130に書き込まれる。
【0036】
図8は、sboxおよびxtime命令が実行されたときの暗号化装置100内の処理例を示す図である。sboxおよびxtimeでは用いる関数が異なるが、動作は同様であるため同じ図にまとめて記載している。sbox命令(xtime命令)では、アキュムレータ130に記憶されているデータに、SBOX関数(XTIME関数)を適用した結果がアキュムレータ130に書き戻される。
【0037】
図9は、第1の実施形態にかかる暗号化処理部110の構成の一例を示すブロック図である。図9に示すように、暗号化処理部110は、制御部111と、ラウンドカウンタ112と、インデックスレジスタ113と、アドレス生成部114と、を備えている。
【0038】
制御部111は、電子機器10の制御回路(図示せず)などの外部装置からの制御信号に従い、各種制御信号を出力して、AES暗号化方式に応じて定められた手順に従って暗号化処理の演算を制御する。図9の点線は、制御部111から各部に制御信号を出力することを表している。この制御信号の詳細については後述する。
【0039】
制御部111には、例えば、AES暗号の演算をリセットする信号、および、演算の開始を指示する信号などの制御信号が入力される。制御部111は、処理状態を表すステータス信号(ビジー、完了など)を、例えば制御信号の入力元に出力する。
【0040】
ALU機能選択は、ALU120に対していずれの機能(演算)を実行するかを示す信号を表す。Acc書き込みは、アキュムレータ130にデータを書き込むか否かを指定するための信号を表す。メモリR/Wは、記憶装置300からデータを読み出すか(R)、記憶装置300にデータを書き込むか(W)を指定するための信号を表す。
【0041】
ラウンドカウンタ112は、AES暗号のラウンド数(round)を数えるためのカウンタである。ラウンドカウンタ112は、例えばフリップフロップにより構成できる。
【0042】
インデックスレジスタ113は、アドレス生成部114がアドレスを生成するために用いるカウンタ値(ix)を記憶するレジスタである。本実施形態では、インデックスレジスタ113は、4ビットのカウンタ値を記憶する。
【0043】
アドレス生成部114は、制御部111が出力する2ビットの値(ページ)と、インデックスレジスタ113の4ビットのカウンタ値ixとから、6ビットのアドレスを生成して出力する。
【0044】
ここで、本実施形態の暗号化装置100で使用する記憶装置300内の記憶領域のアドレス空間について説明する。図10は、第1の実施形態で用いるアドレス空間の一例を示す図である。
【0045】
図10では、メッセージm、鍵k、作業領域wおよびラウンド定数rcの順に連続するアドレスを用いる例が示されている。アドレスの並び順はこれに限られるものではない。例えば、16バイトのデータ(メッセージm、鍵k)または16バイトの作業領域wの各バイトのアドレスが連続していれば、各データまたは作業領域のアドレスは連続していなくてもよい。
【0046】
図11は、第1の実施形態にかかるアドレス生成部114の構成の一例を示すブロック図である。図11に示すように、アドレス生成部114は、kp1001と、sr1002と、ofs1(1011)(以下、単にofs1という)と、ofs2(1012)(以下、単にofs2という)と、ofs3(1013)(以下、単にofs3という)と、セレクタ1021と、を備えている。
【0047】
kp1001、sr1002、ofs1、ofs2、および、ofs3は、それぞれインデックスレジスタから入力される4ビットのカウンタ値ixを変換する回路である。図12は、図11の各回路に相当する関数の入出力の一例を示す図である。
【0048】
例えばkp(x)は、カウンタ値ix(図12の表のxに相当)が「0」の場合、「13」を出力する関数である。関数kp(x)は、鍵拡大処理(KeyExpansion)でのデータのアクセス順が13,14,15,12,0,1,2,3,4,5,6,7,8,9,10,11であることを反映している。sr(x)は、16バイトの並び替えを行うShiftRowsの処理内容を反映している。
【0049】
ofs1(x)〜ofs3(x)は、xの下位2ビットに、2ビットの1〜3を加算するが、xの上位2ビットは不変となる関数である。
【0050】
セレクタ1021は、制御部111からの指示(図9の点線)に従い、0、カウント値ix、kp1001の出力、sr1002の出力、ofs1の出力、ofs2の出力、および、ofs3の出力、のいずれかを選択して出力する。
【0051】
図11の右上に示すように、アドレス生成部114は、制御部111から入力される2ビットのページと、セレクタ1021から出力される4ビットの値(オフセットに相当)とを結合したアドレスを出力する。このように、ページがアドレスの上位2ビットになり、例えば、インデックスレジスタを各関数で変形した結果がアドレスの下位4ビットになる。ページは、演算処理に用いられるデータの種類および演算処理に用いられる記憶装置300内の作業領域を特定するための特定情報として用いられる。例えば、ページは、メッセージm、鍵k、作業領域w、および、ラウンド定数rcの4つを特定するために4値をとる。このため、本実施形態ではページを2ビットで表している。
【0052】
次に、このように構成された第1の実施形態にかかる暗号化装置100による暗号化処理について図13を用いて説明する。図13は、第1の実施形態における暗号化処理の全体の流れを示すフローチャートである。図13は、上述のAESの簡易版擬似コードをフローチャートとして記載した図に相当する。
【0053】
まず、ラウンド数のカウンタ(round)およびラウンド定数(rc)がそれぞれ0および1に初期化される(ステップS101)。次に、AddRoundKeyが実行され、メッセージmが更新される(ステップS102)。次に、KeyExpansion(ステップS103)、SubBytes(ステップS104)、ShiftRows(ステップS105)が順次実行され、ラウンド数に1加算される(ステップS106)。
【0054】
ラウンド数が10に達しない場合(ステップS107:No)、さらにMixColumns(ステップS108)、AddRoundKey(ステップS109)、およびxtime(ステップS110)が実行される。その後、ステップS103に戻り処理が繰り返される。ラウンド数が10に達した場合(ステップS107:Yes)、AddRoundKeyが実行され(ステップS111)、暗号化処理が終了する。
【0055】
SR(ShiftRows)は16バイトの並び替えだが、上書きすると元の値が消えるので、別な領域である作業領域wにコピーしながら並び替えている(ステップS105)。この処理(ステップS105)をC言語で記載すると次のようなコードになる。
for(i=0; i<16; i++){
w[i]=m[sr[i]];
}
【0056】
上記コード内の変数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]
という代入をしているのと同じことになる。
【0057】
1変数だけで逐次的に実行しようとすると、これから先に必要な値が上書きされて消されてしまうので、別な変数にコピーしながら順番を入れ替えている。
【0058】
MC(MixColumns)も、値が上書される問題が生じるので、別の変数にコピーしながら変換している(ステップS108)。
【0059】
AES暗号の規格(FIPS−197)では、
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]
【0060】
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]
【0061】
添え字の並びを考慮し、本実施形態では以下のようにxtimeを計算する。
m[i]=xtime(w[i]^w[ofs1(i)])^w[ofs1(i)]^w[ofs2(i)]^w[ofs3(i)]
【0062】
図14は、詳細版擬似コードを状態遷移表として書き直した図である。図15は、状態遷移表の各項目の読み方を表す図である。codeは、5種類の命令のうち各状態で実行される機能(命令)のコードである。readは、記憶装置300からデータを読み出すときに1が設定され、読み出さない場合は0が設定される。writeは、記憶装置300にデータを書き込むときに1が設定され、書き込まない場合は0が設定される。funcは、LD、XTIME、SBOX、XOR、および、任意(ALU120による演算は実行しない)のいずれかが設定される。acc−weは、アキュムレータ130にデータを書き込むときに1が設定され、書き込まない場合は0が設定される。
【0063】
例えば、state=S01では、ld m[i]というコードを実行する。その際に、read信号を1に設定し、write信号を0に設定し、funcをLDに設定し、acc_weを1に設定する。またアドレス生成部114の出力はページがPMでoffsetがixである。ix欄とround欄は空白なので何も実行されない。制御欄は「↓」なので次の状態であるS02に遷移する。
【0064】
S03ではix欄がix+1、制御はif(ix!=15) S01となっている。これはixの値を1増やしてix+1に更新することと、ixの更新前の値が15でない場合はS01へ遷移することを意味している。またixが15である場合は次の状態S04へ遷移する。図14に示されるように、ixは、各演算処理の対象となるデータを変更するタイミングで更新される。
【0065】
(変形例)
図16は、第1の実施形態の変形例にかかるアドレス生成部114−2の構成の一例を示すブロック図である。図16に示すように、アドレス生成部114−2は、kp1001と、sr1002と、ofs1010と、セレクタ1021−2と、を備えている。
【0066】
本変形例では、オフセットを出力する3つの回路であるofs1、ofs2、および、ofs3の代わりに、1つのofs1010を備えている。ofs1010は、カウンタ値ixを3つの関数ofs(x,1)、ofs(x,2)、ofs(x,3)のいずれかを用いて変換する回路である。3つの関数ofs(x,1)、ofs(x,2)、ofs(x,3)のいずれを用いるかを指定する信号(図16の「1〜3」)は、例えば制御部111から指定する。図17は、図16の各回路に相当する関数の入出力の一例を示す図である。
【0067】
セレクタ1021−2は、制御部111からの指示に従い、0、カウント値ix、kp1001の出力、sr1002の出力、ofs1010の出力、のいずれかを選択して出力する。このような構成でも、図11と同様の機能を実現できる。
【0068】
このように、第1の実施形態にかかる演算装置(暗号化装置)では、装置外部の記憶装置を利用し、演算で用いるデータを当該記憶装置に記憶するように制御する。これにより、AES演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が可能となる。また、本実施形態では、ALU内には暗号化で用いる演算処理を実行する最小限の回路(XTIME、SBOX、XOR)のみを備えるため、この点でも装置の小型化が可能となっている。また、本実施形態では、暗号化で用いる各演算処理を所定の回数単位で実行している。例えばインデックスレジスタのカウント値が15に達するごとに、すなわち、16回単位で各演算を実行している。このため、回数が不一致となる場合に必要となる制御回路が不要になり、さらに小型化が実現できる。
【0069】
(第2の実施形態)
第2の実施形態では、AES暗号方式の復号装置に演算装置を適用した例を説明する。図18は、第2の実施形態にかかる復号装置100−2の構成の一例を示すブロック図である。図18に示すように、復号装置100−2は、復号処理部110−2と、演算部としてのALU(Arithmetic Logic Unit)120−2と、アキュムレータ130と、を備えている。
【0070】
復号処理部110−2は、AES暗号の復号処理の演算を制御し、演算の状態を表すステータス信号を出力する。アキュムレータ130は、ALU120による演算結果を記憶するためのレジスタである。
【0071】
ALU120−2は、復号処理部110−2により選択された機能を表す情報に従って演算を実行する。ALU120−2は、必要に応じて、復号処理部110−2により指定されたアドレスのデータに対して演算を実行する。
【0072】
本実施形態によるAES暗号方式の復号処理の擬似コードについて説明する。以下に、復号処理を簡略化した擬似コード(簡易版擬似コード)を記載する。
//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
【0073】
暗号化処理で用いる関数の先頭に「i」が付加された関数は、暗号化処理で用いる関数の逆関数であることを意味する。例えば、iSBはSBの逆関数である。
【0074】
iKSはsboxとxorにより作成できる。iSBはsboxの逆関数(isbox)が必要である。iMCはxtimeにより作成できる。ixtimeはxtimeにより作成できる。従って、ALU120−2は、以下の5つ演算を実行できる回路を備えていればよい。
(1)LD
(2)XTIME
(3)SBOX
(4)ISBOX
(5)XOR
【0075】
図19は、このように構成される第2の実施形態にかかるALU120−2の構成の一例を示すブロック図である。図19に示すように、ALU120−2は、XTIME121と、SBOX122と、XOR123と、セレクタ124−2と、ISBOX125と、を備えている。ISBOX125は、SBOX122の逆関数に相当する演算を実行する回路である。
【0076】
復号処理部110−2は、上記擬似コードの復号処理を実現するようにALU120−2の演算を制御する。復号処理部110−2は、暗号化処理部110と同様の制御部111、ラウンドカウンタ112、インデックスレジスタ113、および、アドレス生成部114を備える。復号処理部110−2は、暗号化処理部110が暗号化処理を実行するのと同様の手法で、AES暗号の復号処理を実行すればよい。なお、図19に示すALU12−2の構成で暗号化処理を行うことも可能である。この場合、図4で説明したような動作を行い、ISBOXの機能選択の指定はなされない。
【0077】
次に、このように構成された第2の実施形態にかかる復号装置100−2による復号処理について図20を用いて説明する。図20は、第2の実施形態における復号処理の全体の流れを示すフローチャートである。
【0078】
まず、ラウンド数のカウンタ(round)およびラウンド定数(rc)がそれぞれ0および0x36(16進数の36)に初期化される(ステップS201)。次に、逆AddRoundKey(iAK)が実行され、メッセージmが更新される(ステップS202)。次に、逆KeyExpansion(iKS)(ステップS203)、逆SubBytes(iSB)(ステップS204)、逆ShiftRows(iSR)(ステップS205)が順次実行され、ラウンド数に1加算される(ステップS206)。
【0079】
ラウンド数が10に達しない場合(ステップS207:No)、さらにAddRoundKey(ステップS208)、逆MixColumns(iMC)(ステップS209)、および逆xtime(ixtime)(ステップS210)が実行される。その後、ステップS203に戻り処理が繰り返される。ラウンド数が10に達した場合(ステップS207:Yes)、AddRoundKeyが実行され(ステップS211)、復号処理が終了する。
【0080】
以上説明したとおり、第1および第2の実施形態によれば、演算処理に用いるデータを記憶する記憶装置を演算装置内に備える必要がなくなり装置の小型化が実現できる。例えば、メモリカード内にAES演算回路を備える場合に、さらなるAES演算回路の小型化が実現できる。
【0081】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0082】
10 電子機器
100 暗号化装置
100−2 復号装置
110 暗号化処理部
110−2 復号処理部
111 制御部
112 ラウンドカウンタ
113 インデックスレジスタ
114 アドレス生成部
120、120−2 ALU
130 アキュムレータ
300 記憶装置
400 鍵記憶装置
【技術分野】
【0001】
本発明の実施形態は、演算装置に関する。
【背景技術】
【0002】
AES(Advanced Encryption Standard)は米国標準の暗号方式であり、様々な分野に採用されている。AESを実行する回路(AES演算回路)の小型化(ハードウェアの回路規模縮小)は色々な研究が行われている。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】M. Feldhofer,J. Wolkerstorfer,and V. Rijmen,"AES Implementation on a Grain of Sand",IEE Proceedings Information Security,vol. 152,pp. 13-20,2005.
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来技術の方法では小型化が不十分な場合がある。
【課題を解決するための手段】
【0005】
実施形態の演算装置は、データの種類ごとにN個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する。演算装置は、演算部と、アドレス生成部と、制御部とを備える。演算部は、暗号方式で用いられる複数の演算処理を実行する。アドレス生成部は、演算処理で用いられる種類のN個のデータのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって先頭のデータのアドレスを基準とするオフセットと、に基づいて、演算処理で用いられるデータを記憶する記憶装置のアドレスを生成する。制御部は、暗号方式で定められる順序で演算処理を実行するように演算部を制御するとともに、演算処理で用いられるデータの種類を変更するタイミング、および、演算処理で用いられるデータを変更するタイミングでカウンタ値の更新を指定する。
【図面の簡単な説明】
【0006】
【図1】第1の実施形態にかかる暗号化装置を含む電子機器のブロック図。
【図2】第1の実施形態にかかる暗号化装置のブロック図。
【図3】擬似コード内の各命令の意味を説明するための図。
【図4】第1の実施形態にかかるALUのブロック図。
【図5】ld命令の処理例を示す図。
【図6】st命令の処理例を示す図。
【図7】xor命令の処理例を示す図。
【図8】sboxおよびxtime命令の処理例を示す図。
【図9】第1の実施形態にかかる暗号化処理部のブロック図。
【図10】第1の実施形態で用いるアドレス空間を示す図。
【図11】第1の実施形態にかかるアドレス生成部のブロック図。
【図12】図11の各回路に相当する関数の入出力を示す図。
【図13】第1の実施形態における暗号化処理のフローチャート。
【図14】詳細版擬似コードを状態遷移表として書き直した図。
【図15】状態遷移表の各項目の読み方を表す図。
【図16】第1の実施形態の変形例にかかるアドレス生成部のブロック図。
【図17】図16の各回路に相当する関数の入出力を示す図。
【図18】第2の実施形態にかかる復号装置のブロック図。
【図19】第2の実施形態にかかるALUのブロック図。
【図20】第2の実施形態における復号処理のフローチャート。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、この発明にかかる演算装置の好適な実施形態を詳細に説明する。以下では、演算装置をAES暗号方式の暗号化装置(第1の実施形態)および復号装置(第2の実施形態)に適用した例を説明する。なお、適用可能な装置はこれに限られるものではない。
【0008】
(第1の実施形態)
これまでのAES演算回路の小型化の研究では、記憶素子も含めたAES演算回路全体のサイズを小さくすることに主眼が置かれていた。AES演算回路単体で利用されるのであれば、AES演算回路全体のサイズを小型化する意味はある。現実にはAES演算回路は何らかの装置(電子機器)に組み込まれて使用される。このため、このような使用状況を考慮してAES演算回路のサイズを小さくする必要がある。しかし、これまでは、AES演算回路が他の機器(システム)に組み込まれて使用されるということを考慮した小型化の研究は行われていない。
【0009】
一般に、システムには、他の用途で使うことを目的とした記憶装置、例えば通信用のバッファ(RAM(Random Access Memory)など)が存在する。そこで、第1の実施形態の暗号化装置は、このような記憶装置を、AES演算回路を使用するときに転用する。これにより、AES演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が実現できる。
【0010】
このように、AES演算回路を組み込むシステム内の記憶装置を転用すれば、システム全体で考えると、記憶素子を除いたAES演算回路のサイズを小さくすることが意味を持つ。このような観点に基づいてAES演算回路の小型化を考えた例は今までに存在しない。
【0011】
次に、本実施形態の暗号化装置の構成の概要について説明する。AES暗号は、基本的にバイト単位で演算処理が実行される。ShiftRowsは16バイトのバイト単位の並び替えである。ShiftRowsにより実際に並び替えるためには、16バイトの他にバッファとなる記憶装置が必要になる。また、MixColumnsは4バイト単位の変換であるが、入力の4バイトが揃わないと変換が実行できない。
【0012】
本実施形態では、最低限必要な5種類の命令(擬似命令)のみでAESを実現する。5種類の命令には、3種類の演算処理の命令(sbox、xtime、および、xor)と、2種類のメモリアクセスの命令(ld(ロード)およびst(ストア))とが含まれる。また、演算結果を記憶するためのレジスタとして8ビットのアキュムレータを設ける。また、これらの命令によりAES暗号をハードウェアで実行する順序機械である制御部を備える。命令や各構成部の詳細は後述する。
【0013】
図1は、第1の実施形態にかかる暗号化装置100を含む電子機器10の構成の一例を示すブロック図である。図1に示すように、電子機器10は、暗号化装置100と、入出力インタフェース(入出力IF)200と、記憶装置300と、鍵記憶装置400と、を備えている。
【0014】
記憶装置300は、電子機器10で扱う各種データを記憶する。記憶装置300は、データを記憶するアドレスを指定することにより当該データにアクセス可能とする記憶媒体である。記憶装置300は、例えばRAMにより構成できる。
【0015】
入出力IFは、図示しない制御回路からの指示に従い、外部との間でデータを送受信するためのインタフェースである。鍵記憶装置400は、暗号化処理で用いる鍵情報を記憶する。暗号化装置100は、記憶装置300と接続され、AES暗号方式の演算を実行する。記憶装置300は、ページバッファ用のRAMを用いてもよい。鍵記憶装置400は、NANDフラッシュを用いても良い。記憶装置300は、揮発性メモリまたは不揮発性メモリである。鍵記憶装置400は、不揮発性メモリである。また、記憶装置300と鍵記憶装置400は物理的に同一のメモリを用いても良い。
【0016】
制御回路は、例えば、以下のようにしてAES暗号を実行する。
(1)入出力IFを介して暗号化するデータ(メッセージ)を読み出し、記憶装置300に書き込む。
(2)鍵記憶装置400から鍵情報を読み出し、記憶装置300に書き込む。
(3)暗号化装置100に演算を指示する。これにより、演算の処理結果である暗号文が記憶装置300に書き込まれる。
【0017】
図2は、第1の実施形態にかかる暗号化装置100の構成の一例を示すブロック図である。図2に示すように、暗号化装置100は、暗号化処理部110と、演算部としてのALU(Arithmetic Logic Unit)120と、アキュムレータ130と、を備えている。
【0018】
暗号化処理部110は、図1で説明した電子機器10の制御回路からの制御信号に従ってAES暗号の暗号化処理の演算を制御し、演算の状態を表すステータス信号を出力する。暗号化処理部110の詳細は後述する。
【0019】
ALU120は、暗号化処理部110により選択された機能を表す情報(図2の「機能選択」)に従って演算を実行する。ALU120は、必要に応じて、暗号化処理部110により指定されたアドレスのデータに対して演算を実行する。
【0020】
アキュムレータ130は、ALU120による演算結果を記憶するためのレジスタである。アキュムレータ130に記憶されたデータは、暗号化処理部110からの指示に応じて記憶装置300に書き込まれる。
【0021】
なお、暗号化装置100は、記憶装置300のうち、一部の記憶領域を使用してAES暗号の演算を実行する。記憶装置300内に必要な記憶領域の内訳は以下のとおりである。
・使用する記憶領域全体のサイズ=49バイト
・入力となるメッセージm=16バイト
・入力となる鍵k=16バイト
・作業領域w=16バイト
・ラウンド定数rc=1バイト
なお、演算結果である暗号文はメッセージmに上書きされる。
【0022】
図2の暗号化装置100の使用方法は以下のようになる。
・記憶装置300に入力データ(メッセージm(16バイト)および鍵k(16バイト)を書き込む
・暗号化装置100を実行開始する
・暗号化装置100の実行終了を待つ
・演算結果は記憶装置300に書き込まれているので、演算結果を記憶装置300から読み出す
【0023】
ここで、本実施形態によるAES暗号方式の暗号化処理の擬似コードについて説明する。最初に、簡略化した擬似コード(簡易版擬似コード)を記載する。
【0024】
//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
【0025】
擬似コード内の各関数は、それぞれAES暗号で定められる関数と以下のように対応する。各AES暗号で定められる関数は各々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
【0026】
次に、詳細なAES擬似コード(詳細版擬似コード)を記載する。詳細版擬似コードは、上記簡易版擬似コードの各関数(AK、KS、SB、SR、MCなど)を具体化したコードを含む。
【0027】
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
【0028】
図3は、擬似コード内の各命令の意味を説明するための図である。図3は、各命令を別の表現で表した式(別表現)と、命令の内容を表す説明とを記載する。図3のAccはアキュムレータ130に対応する。図3のmemは記憶装置300の指定されたアドレスのデータに対応する。
【0029】
XTIME関数は、例えば、8ビット入出力の関数であり、以下の(1)式のように表される。msb(x)はxの最上位ビットを表す。
(msb(x)==0)?(x<<1):(x<<1)^0x1b (1)
【0030】
このようにして、本実施形態では、5種類の命令であるsbox、xtime、xor、ldおよびstでAESを実現している。
【0031】
図4は、第1の実施形態にかかるALU120の構成の一例を示すブロック図である。図4に示すように、ALU120は、XTIME121と、SBOX122と、XOR123と、セレクタ124と、を備えている。XTIME121、SBOX122、および、XOR123は、それぞれ上述の3種類の演算処理(sbox、xtime、および、xor)を実行する回路である。セレクタ124は、記憶装置300から読み出したデータ(LD)、XTIME121の演算結果、SBOX122の演算結果、および、XOR123の演算結果のいずれかを選択して出力する。このようにして、ALU120は、暗号化処理部110による機能選択の指定に従い、ld、xtime、sbox、および、xorの4つの演算処理のいずれかを実行する。
【0032】
次に、5種類の命令が実行されたときの暗号化装置100内の処理の流れについて図5から図8を用いて説明する。図5は、ld命令が実行されたときの暗号化装置100内の処理例を示す図である。
【0033】
ld命令では、暗号化処理部110からアドレスが指定(出力)され、記憶装置300の指定されたアドレスのデータが読み出され、ALU120を経由してアキュムレータ130に書き込まれる。図5の「acc−we」はアキュムレータ130への書き込みを指示する信号を表す。図5の「read」は記憶装置300からのデータの読み出しを指示する信号を表す。
【0034】
図6は、st命令が実行されたときの暗号化装置100内の処理例を示す図である。st命令では、暗号化処理部110からアドレスが指定(出力)され、アキュムレータ130に記憶されているデータが、記憶装置300の指定されたアドレスに書き込まれる。アキュムレータ130に記憶されているデータは変更しないことを示すため、図5ではacc−we信号に否定を示す上線が付されている。「write」は記憶装置300へのデータの書き込みを指示する信号を表す。
【0035】
図7は、xor命令が実行されたときの暗号化装置100内の処理例を示す図である。xor命令では、暗号化処理部110からアドレスが指定(出力)され、アキュムレータ130に記憶されているデータと、記憶装置300の指定されたアドレスのデータとの排他的論理和の演算結果が、アキュムレータ130に書き込まれる。
【0036】
図8は、sboxおよびxtime命令が実行されたときの暗号化装置100内の処理例を示す図である。sboxおよびxtimeでは用いる関数が異なるが、動作は同様であるため同じ図にまとめて記載している。sbox命令(xtime命令)では、アキュムレータ130に記憶されているデータに、SBOX関数(XTIME関数)を適用した結果がアキュムレータ130に書き戻される。
【0037】
図9は、第1の実施形態にかかる暗号化処理部110の構成の一例を示すブロック図である。図9に示すように、暗号化処理部110は、制御部111と、ラウンドカウンタ112と、インデックスレジスタ113と、アドレス生成部114と、を備えている。
【0038】
制御部111は、電子機器10の制御回路(図示せず)などの外部装置からの制御信号に従い、各種制御信号を出力して、AES暗号化方式に応じて定められた手順に従って暗号化処理の演算を制御する。図9の点線は、制御部111から各部に制御信号を出力することを表している。この制御信号の詳細については後述する。
【0039】
制御部111には、例えば、AES暗号の演算をリセットする信号、および、演算の開始を指示する信号などの制御信号が入力される。制御部111は、処理状態を表すステータス信号(ビジー、完了など)を、例えば制御信号の入力元に出力する。
【0040】
ALU機能選択は、ALU120に対していずれの機能(演算)を実行するかを示す信号を表す。Acc書き込みは、アキュムレータ130にデータを書き込むか否かを指定するための信号を表す。メモリR/Wは、記憶装置300からデータを読み出すか(R)、記憶装置300にデータを書き込むか(W)を指定するための信号を表す。
【0041】
ラウンドカウンタ112は、AES暗号のラウンド数(round)を数えるためのカウンタである。ラウンドカウンタ112は、例えばフリップフロップにより構成できる。
【0042】
インデックスレジスタ113は、アドレス生成部114がアドレスを生成するために用いるカウンタ値(ix)を記憶するレジスタである。本実施形態では、インデックスレジスタ113は、4ビットのカウンタ値を記憶する。
【0043】
アドレス生成部114は、制御部111が出力する2ビットの値(ページ)と、インデックスレジスタ113の4ビットのカウンタ値ixとから、6ビットのアドレスを生成して出力する。
【0044】
ここで、本実施形態の暗号化装置100で使用する記憶装置300内の記憶領域のアドレス空間について説明する。図10は、第1の実施形態で用いるアドレス空間の一例を示す図である。
【0045】
図10では、メッセージm、鍵k、作業領域wおよびラウンド定数rcの順に連続するアドレスを用いる例が示されている。アドレスの並び順はこれに限られるものではない。例えば、16バイトのデータ(メッセージm、鍵k)または16バイトの作業領域wの各バイトのアドレスが連続していれば、各データまたは作業領域のアドレスは連続していなくてもよい。
【0046】
図11は、第1の実施形態にかかるアドレス生成部114の構成の一例を示すブロック図である。図11に示すように、アドレス生成部114は、kp1001と、sr1002と、ofs1(1011)(以下、単にofs1という)と、ofs2(1012)(以下、単にofs2という)と、ofs3(1013)(以下、単にofs3という)と、セレクタ1021と、を備えている。
【0047】
kp1001、sr1002、ofs1、ofs2、および、ofs3は、それぞれインデックスレジスタから入力される4ビットのカウンタ値ixを変換する回路である。図12は、図11の各回路に相当する関数の入出力の一例を示す図である。
【0048】
例えばkp(x)は、カウンタ値ix(図12の表のxに相当)が「0」の場合、「13」を出力する関数である。関数kp(x)は、鍵拡大処理(KeyExpansion)でのデータのアクセス順が13,14,15,12,0,1,2,3,4,5,6,7,8,9,10,11であることを反映している。sr(x)は、16バイトの並び替えを行うShiftRowsの処理内容を反映している。
【0049】
ofs1(x)〜ofs3(x)は、xの下位2ビットに、2ビットの1〜3を加算するが、xの上位2ビットは不変となる関数である。
【0050】
セレクタ1021は、制御部111からの指示(図9の点線)に従い、0、カウント値ix、kp1001の出力、sr1002の出力、ofs1の出力、ofs2の出力、および、ofs3の出力、のいずれかを選択して出力する。
【0051】
図11の右上に示すように、アドレス生成部114は、制御部111から入力される2ビットのページと、セレクタ1021から出力される4ビットの値(オフセットに相当)とを結合したアドレスを出力する。このように、ページがアドレスの上位2ビットになり、例えば、インデックスレジスタを各関数で変形した結果がアドレスの下位4ビットになる。ページは、演算処理に用いられるデータの種類および演算処理に用いられる記憶装置300内の作業領域を特定するための特定情報として用いられる。例えば、ページは、メッセージm、鍵k、作業領域w、および、ラウンド定数rcの4つを特定するために4値をとる。このため、本実施形態ではページを2ビットで表している。
【0052】
次に、このように構成された第1の実施形態にかかる暗号化装置100による暗号化処理について図13を用いて説明する。図13は、第1の実施形態における暗号化処理の全体の流れを示すフローチャートである。図13は、上述のAESの簡易版擬似コードをフローチャートとして記載した図に相当する。
【0053】
まず、ラウンド数のカウンタ(round)およびラウンド定数(rc)がそれぞれ0および1に初期化される(ステップS101)。次に、AddRoundKeyが実行され、メッセージmが更新される(ステップS102)。次に、KeyExpansion(ステップS103)、SubBytes(ステップS104)、ShiftRows(ステップS105)が順次実行され、ラウンド数に1加算される(ステップS106)。
【0054】
ラウンド数が10に達しない場合(ステップS107:No)、さらにMixColumns(ステップS108)、AddRoundKey(ステップS109)、およびxtime(ステップS110)が実行される。その後、ステップS103に戻り処理が繰り返される。ラウンド数が10に達した場合(ステップS107:Yes)、AddRoundKeyが実行され(ステップS111)、暗号化処理が終了する。
【0055】
SR(ShiftRows)は16バイトの並び替えだが、上書きすると元の値が消えるので、別な領域である作業領域wにコピーしながら並び替えている(ステップS105)。この処理(ステップS105)をC言語で記載すると次のようなコードになる。
for(i=0; i<16; i++){
w[i]=m[sr[i]];
}
【0056】
上記コード内の変数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]
という代入をしているのと同じことになる。
【0057】
1変数だけで逐次的に実行しようとすると、これから先に必要な値が上書きされて消されてしまうので、別な変数にコピーしながら順番を入れ替えている。
【0058】
MC(MixColumns)も、値が上書される問題が生じるので、別の変数にコピーしながら変換している(ステップS108)。
【0059】
AES暗号の規格(FIPS−197)では、
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]
【0060】
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]
【0061】
添え字の並びを考慮し、本実施形態では以下のようにxtimeを計算する。
m[i]=xtime(w[i]^w[ofs1(i)])^w[ofs1(i)]^w[ofs2(i)]^w[ofs3(i)]
【0062】
図14は、詳細版擬似コードを状態遷移表として書き直した図である。図15は、状態遷移表の各項目の読み方を表す図である。codeは、5種類の命令のうち各状態で実行される機能(命令)のコードである。readは、記憶装置300からデータを読み出すときに1が設定され、読み出さない場合は0が設定される。writeは、記憶装置300にデータを書き込むときに1が設定され、書き込まない場合は0が設定される。funcは、LD、XTIME、SBOX、XOR、および、任意(ALU120による演算は実行しない)のいずれかが設定される。acc−weは、アキュムレータ130にデータを書き込むときに1が設定され、書き込まない場合は0が設定される。
【0063】
例えば、state=S01では、ld m[i]というコードを実行する。その際に、read信号を1に設定し、write信号を0に設定し、funcをLDに設定し、acc_weを1に設定する。またアドレス生成部114の出力はページがPMでoffsetがixである。ix欄とround欄は空白なので何も実行されない。制御欄は「↓」なので次の状態であるS02に遷移する。
【0064】
S03ではix欄がix+1、制御はif(ix!=15) S01となっている。これはixの値を1増やしてix+1に更新することと、ixの更新前の値が15でない場合はS01へ遷移することを意味している。またixが15である場合は次の状態S04へ遷移する。図14に示されるように、ixは、各演算処理の対象となるデータを変更するタイミングで更新される。
【0065】
(変形例)
図16は、第1の実施形態の変形例にかかるアドレス生成部114−2の構成の一例を示すブロック図である。図16に示すように、アドレス生成部114−2は、kp1001と、sr1002と、ofs1010と、セレクタ1021−2と、を備えている。
【0066】
本変形例では、オフセットを出力する3つの回路であるofs1、ofs2、および、ofs3の代わりに、1つのofs1010を備えている。ofs1010は、カウンタ値ixを3つの関数ofs(x,1)、ofs(x,2)、ofs(x,3)のいずれかを用いて変換する回路である。3つの関数ofs(x,1)、ofs(x,2)、ofs(x,3)のいずれを用いるかを指定する信号(図16の「1〜3」)は、例えば制御部111から指定する。図17は、図16の各回路に相当する関数の入出力の一例を示す図である。
【0067】
セレクタ1021−2は、制御部111からの指示に従い、0、カウント値ix、kp1001の出力、sr1002の出力、ofs1010の出力、のいずれかを選択して出力する。このような構成でも、図11と同様の機能を実現できる。
【0068】
このように、第1の実施形態にかかる演算装置(暗号化装置)では、装置外部の記憶装置を利用し、演算で用いるデータを当該記憶装置に記憶するように制御する。これにより、AES演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が可能となる。また、本実施形態では、ALU内には暗号化で用いる演算処理を実行する最小限の回路(XTIME、SBOX、XOR)のみを備えるため、この点でも装置の小型化が可能となっている。また、本実施形態では、暗号化で用いる各演算処理を所定の回数単位で実行している。例えばインデックスレジスタのカウント値が15に達するごとに、すなわち、16回単位で各演算を実行している。このため、回数が不一致となる場合に必要となる制御回路が不要になり、さらに小型化が実現できる。
【0069】
(第2の実施形態)
第2の実施形態では、AES暗号方式の復号装置に演算装置を適用した例を説明する。図18は、第2の実施形態にかかる復号装置100−2の構成の一例を示すブロック図である。図18に示すように、復号装置100−2は、復号処理部110−2と、演算部としてのALU(Arithmetic Logic Unit)120−2と、アキュムレータ130と、を備えている。
【0070】
復号処理部110−2は、AES暗号の復号処理の演算を制御し、演算の状態を表すステータス信号を出力する。アキュムレータ130は、ALU120による演算結果を記憶するためのレジスタである。
【0071】
ALU120−2は、復号処理部110−2により選択された機能を表す情報に従って演算を実行する。ALU120−2は、必要に応じて、復号処理部110−2により指定されたアドレスのデータに対して演算を実行する。
【0072】
本実施形態によるAES暗号方式の復号処理の擬似コードについて説明する。以下に、復号処理を簡略化した擬似コード(簡易版擬似コード)を記載する。
//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
【0073】
暗号化処理で用いる関数の先頭に「i」が付加された関数は、暗号化処理で用いる関数の逆関数であることを意味する。例えば、iSBはSBの逆関数である。
【0074】
iKSはsboxとxorにより作成できる。iSBはsboxの逆関数(isbox)が必要である。iMCはxtimeにより作成できる。ixtimeはxtimeにより作成できる。従って、ALU120−2は、以下の5つ演算を実行できる回路を備えていればよい。
(1)LD
(2)XTIME
(3)SBOX
(4)ISBOX
(5)XOR
【0075】
図19は、このように構成される第2の実施形態にかかるALU120−2の構成の一例を示すブロック図である。図19に示すように、ALU120−2は、XTIME121と、SBOX122と、XOR123と、セレクタ124−2と、ISBOX125と、を備えている。ISBOX125は、SBOX122の逆関数に相当する演算を実行する回路である。
【0076】
復号処理部110−2は、上記擬似コードの復号処理を実現するようにALU120−2の演算を制御する。復号処理部110−2は、暗号化処理部110と同様の制御部111、ラウンドカウンタ112、インデックスレジスタ113、および、アドレス生成部114を備える。復号処理部110−2は、暗号化処理部110が暗号化処理を実行するのと同様の手法で、AES暗号の復号処理を実行すればよい。なお、図19に示すALU12−2の構成で暗号化処理を行うことも可能である。この場合、図4で説明したような動作を行い、ISBOXの機能選択の指定はなされない。
【0077】
次に、このように構成された第2の実施形態にかかる復号装置100−2による復号処理について図20を用いて説明する。図20は、第2の実施形態における復号処理の全体の流れを示すフローチャートである。
【0078】
まず、ラウンド数のカウンタ(round)およびラウンド定数(rc)がそれぞれ0および0x36(16進数の36)に初期化される(ステップS201)。次に、逆AddRoundKey(iAK)が実行され、メッセージmが更新される(ステップS202)。次に、逆KeyExpansion(iKS)(ステップS203)、逆SubBytes(iSB)(ステップS204)、逆ShiftRows(iSR)(ステップS205)が順次実行され、ラウンド数に1加算される(ステップS206)。
【0079】
ラウンド数が10に達しない場合(ステップS207:No)、さらにAddRoundKey(ステップS208)、逆MixColumns(iMC)(ステップS209)、および逆xtime(ixtime)(ステップS210)が実行される。その後、ステップS203に戻り処理が繰り返される。ラウンド数が10に達した場合(ステップS207:Yes)、AddRoundKeyが実行され(ステップS211)、復号処理が終了する。
【0080】
以上説明したとおり、第1および第2の実施形態によれば、演算処理に用いるデータを記憶する記憶装置を演算装置内に備える必要がなくなり装置の小型化が実現できる。例えば、メモリカード内にAES演算回路を備える場合に、さらなるAES演算回路の小型化が実現できる。
【0081】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0082】
10 電子機器
100 暗号化装置
100−2 復号装置
110 暗号化処理部
110−2 復号処理部
111 制御部
112 ラウンドカウンタ
113 インデックスレジスタ
114 アドレス生成部
120、120−2 ALU
130 アキュムレータ
300 記憶装置
400 鍵記憶装置
【特許請求の範囲】
【請求項1】
データの種類ごとにN個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する演算装置であって、
前記暗号方式で用いられる複数の演算処理を実行する演算部と、
前記演算処理で用いられる種類のN個の前記データのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって前記先頭のデータのアドレスを基準とするオフセットと、に基づいて、前記演算処理で用いられるデータを記憶する前記記憶装置のアドレスを生成するアドレス生成部と、
前記暗号方式で定められる順序で前記演算処理を実行するように前記演算部を制御するとともに、前記演算処理で用いられるデータの種類を変更するタイミング、および、前記演算処理で用いられるデータを変更するタイミングで前記カウンタ値の更新を指定する制御部と、
を備えることを特徴とする演算装置。
【請求項2】
前記暗号方式は、AES(Advanced Encryption Standard)暗号方式であること、
を特徴とする請求項1に記載の演算装置。
【請求項3】
複数の前記演算処理は、前記AES暗号方式で定められるsbox、xtime、および、xorと、前記記憶装置から前記データを読み出すロード処理と、であること、
を特徴とする請求項2に記載の演算装置。
【請求項4】
複数の前記演算処理は、前記AES暗号方式で定められるsbox、isbox、xtime、および、xorと、前記記憶装置から前記データを読み出すロード処理と、であること、
を特徴とする請求項2に記載の演算装置。
【請求項1】
データの種類ごとにN個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する演算装置であって、
前記暗号方式で用いられる複数の演算処理を実行する演算部と、
前記演算処理で用いられる種類のN個の前記データのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって前記先頭のデータのアドレスを基準とするオフセットと、に基づいて、前記演算処理で用いられるデータを記憶する前記記憶装置のアドレスを生成するアドレス生成部と、
前記暗号方式で定められる順序で前記演算処理を実行するように前記演算部を制御するとともに、前記演算処理で用いられるデータの種類を変更するタイミング、および、前記演算処理で用いられるデータを変更するタイミングで前記カウンタ値の更新を指定する制御部と、
を備えることを特徴とする演算装置。
【請求項2】
前記暗号方式は、AES(Advanced Encryption Standard)暗号方式であること、
を特徴とする請求項1に記載の演算装置。
【請求項3】
複数の前記演算処理は、前記AES暗号方式で定められるsbox、xtime、および、xorと、前記記憶装置から前記データを読み出すロード処理と、であること、
を特徴とする請求項2に記載の演算装置。
【請求項4】
複数の前記演算処理は、前記AES暗号方式で定められるsbox、isbox、xtime、および、xorと、前記記憶装置から前記データを読み出すロード処理と、であること、
を特徴とする請求項2に記載の演算装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2013−45072(P2013−45072A)
【公開日】平成25年3月4日(2013.3.4)
【国際特許分類】
【出願番号】特願2011−184938(P2011−184938)
【出願日】平成23年8月26日(2011.8.26)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成25年3月4日(2013.3.4)
【国際特許分類】
【出願日】平成23年8月26日(2011.8.26)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]