(57)【要約】      （修正有）【課題】演算装置を小型化する電子機器を提供する。【解決手段】記憶装置と、暗号方式で用いられる第一の演算処理及び第二の演算処理を第一の演算処理及び第二の演算処理の対象となるデータに対して実行する演算部と、第一の演算処理及び第二の演算処理が暗号方式で定められた順序で実行されるように演算部を制御するとともに、第一の演算処理及び第二の演算処理に用いられる記憶装置の作業領域又はデータの種類を示す特定情報を出力する制御部１１１と、第一の演算処理の第一カウンタ値及び第一カウンタ値と更新回数が一致する第二の演算処理の第二カウンタ値と特定情報とに基づいて、第一の演算処理及び第二の演算処理に用いられる記憶装置内のアドレスを生成する生成部１１４と、を備えた演算装置と、外部機器と電気的に接続されるインタフェース部で構成する。【選択図】図９
2015173497.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置と、
暗号方式で用いられる第一の演算処理及び第二の演算処理を該第一の演算処理及び該第
二の演算処理の対象となるデータに対して実行する演算部と、前記第一の演算処理及び前
記第二の演算処理が前記暗号方式で定められた順序で実行されるように前記演算部を制御
するとともに、前記第一の演算処理及び前記第二の演算処理に用いられる前記記憶装置の
作業領域又は前記データの種類を示す特定情報を出力する制御部と、前記第一の演算処理
の第一カウンタ値及び該第一カウンタ値と更新回数が一致する前記第二の演算処理の第二
カウンタ値と前記特定情報とに基づいて、前記第一の演算処理及び前記第二の演算処理に
用いられる前記記憶装置内のアドレスを生成する生成部と、を備えた演算装置と、
外部機器と電気的に接続されるインタフェース部と、
を有した電子機器。
【請求項２】
前記記憶装置は、通信用バッファに用いられる第一領域と、該第一領域とは異なり前記
作業領域及び前記データと、該データの暗号化に用いられる鍵情報と、が記憶される第二
領域と、を含み、
前記生成部は、前記第二領域内の前記アドレスを生成することを特徴とする請求項１に
記載の電子機器。
【請求項３】
前記生成部は、生成された前記アドレスを前記制御部に出力し、
前記制御部は、前記アドレスを参照し、該アドレスの前記データに対して前記演算部が
前記第一の演算処理または前記第二の演算処理を行うように制御することを特徴とする請
求項２に記載の電子機器。
【請求項４】
前記第一領域は、前記データが記憶される記憶領域と、前記第一の演算処理及び前記第
二の演算処理に用いられる前記作業領域と、前記鍵情報を保持する鍵領域とに区分される
ことを特徴とする請求項３に記載の演算装置。
【請求項５】
前記生成部は、前記データアドレスおよび前記鍵アドレスの上位ビットと、前記第一カ
ウンタ値と、に基づいて、前記第一の演算処理に用いられる前記記憶装置内の前記アドレ
スを生成することを特徴とする請求項４に記載の電子機器。
【請求項６】
暗号方式で用いられる演算を処理する演算回路と、
前記演算の演算回数を参照し、前記第一の演算の対象のデータが記憶される記憶装置の
保存位置を決定するアドレスを生成する電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、電子機器に関する。
【背景技術】
【０００２】
ＡＥＳ（Advanced  Encryption  Standard）は米国標準の暗号方式であり、様々な分野
に採用されている。ＡＥＳを実行する回路（ＡＥＳ演算回路）の小型化（ハードウェアの
回路規模縮小）は色々な研究が行われている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】M.  Feldhofer,J.  Wolkerstorfer,and  V.  Rijmen,"AES  Implem    entation  on  a  Grain  of  Sand",IEE  Proceedings  Information  Security,vo    l.  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 Sta
ndards 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はx
timeにより作成できる。ixtimeはxtimeにより作成できる。従って、ＡＬＵ１２０−２は
、以下の５つ演算を実行できる回路を備えていればよい。
【００７７】
（１）LD
（２）XTIME
（３）SBOX
（４）ISBOX
（５）XOR
図１９は、このように構成される第２の実施形態にかかるＡＬＵ１２０−２の構成の一
例を示すブロック図である。図１９に示すように、ＡＬＵ１２０−２は、ＸＴＩＭＥ１２
１と、ＳＢＯＸ１２２と、ＸＯＲ１２３と、セレクタ１２４−２と、ＩＳＢＯＸ１２５と
、を備えている。ＩＳＢＯＸ１２５は、ＳＢＯＸ１２２の逆関数に相当する演算を実行す
る回路である。
【００７８】
復号処理部１１０−２は、上記擬似コードの復号処理を実現するようにＡＬＵ１２０−
２の演算を制御する。復号処理部１１０−２は、暗号化処理部１１０と同様の制御部１１
１、ラウンドカウンタ１１２、インデックスレジスタ１１３、および、アドレス生成部１
１４を備える。復号処理部１１０−２は、暗号化処理部１１０が暗号化処理を実行するの
と同様の手法で、ＡＥＳ暗号の復号処理を実行すればよい。なお、図１９に示すＡＬＵ１
２−２の構成で暗号化処理を行うことも可能である。この場合、図４で説明したような動
作を行い、ＩＳＢＯＸの機能選択の指定はなされない。
【００７９】
次に、このように構成された第２の実施形態にかかる復号装置１００−２による復号処
理について図２０を用いて説明する。図２０は、第２の実施形態における復号処理の全体
の流れを示すフローチャートである。
【００８０】
まず、ラウンド数のカウンタ（ｒｏｕｎｄ）およびラウンド定数（ｒｃ）がそれぞれ０
および０ｘ３６(１６進数の３６)に初期化される（ステップＳ２０１）。次に、逆AddRou
ndKey（iAK）が実行され、メッセージｍが更新される（ステップＳ２０２）。次に、逆Ke
yExpansion（iKS）（ステップＳ２０３）、逆SubBytes（iSB)（ステップＳ２０４）、逆S
hiftRows（iSR)（ステップＳ２０５）が順次実行され、ラウンド数に１加算される（ステ
ップＳ２０６）。
【００８１】
ラウンド数が１０に達しない場合（ステップＳ２０７：Ｎｏ）、さらにAddRoundKey（
ステップＳ２０８）、逆MixColumns（iMC）（ステップＳ２０９）、および逆xtime（ixti
me）（ステップＳ２１０）が実行される。その後、ステップＳ２０３に戻り処理が繰り返
される。ラウンド数が１０に達した場合（ステップＳ２０７：Ｙｅｓ）、AddRoundKeyが
実行され（ステップＳ２１１）、復号処理が終了する。
【００８２】
以上説明したとおり、第１および第２の実施形態によれば、演算処理に用いるデータを
記憶する記憶装置を演算装置内に備える必要がなくなり装置の小型化が実現できる。例え
ば、メモリカード内にＡＥＳ演算回路を備える場合に、さらなるＡＥＳ演算回路の小型化
が実現できる。
【００８３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したも
のであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その
他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の
省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や
要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる
。
【符号の説明】
【００８４】
１０  電子機器
１００  暗号化装置
１００−２  復号装置
１１０  暗号化処理部
１１０−２  復号処理部
１１１  制御部
１１２  ラウンドカウンタ
１１３  インデックスレジスタ
１１４  アドレス生成部
１２０、１２０−２  ＡＬＵ
１３０  アキュムレータ
３００  記憶装置
４００  鍵記憶装置
【図１】
2015173497.tif 000003
【図２】
2015173497.tif 000004
【図３】
2015173497.tif 000005
【図４】
2015173497.tif 000006
【図５】
2015173497.tif 000007
【図６】
2015173497.tif 000008
【図７】
2015173497.tif 000009
【図８】
2015173497.tif 000010
【図９】
2015173497.tif 000011
【図１０】
2015173497.tif 000012
【図１１】
2015173497.tif 000013
【図１２】
2015173497.tif 000014
【図１３】
2015173497.tif 000015
【図１４】
2015173497.tif 000016
【図１５】
2015173497.tif 000017
【図１６】
2015173497.tif 000018
【図１７】
2015173497.tif 000019
【図１８】
2015173497.tif 000020
【図１９】
2015173497.tif 000021
【図２０】
2015173497.tif 000022