JP3795315B2 - 暗号化・復号化回路 - Google Patents
暗号化・復号化回路 Download PDFInfo
- Publication number
- JP3795315B2 JP3795315B2 JP2000315049A JP2000315049A JP3795315B2 JP 3795315 B2 JP3795315 B2 JP 3795315B2 JP 2000315049 A JP2000315049 A JP 2000315049A JP 2000315049 A JP2000315049 A JP 2000315049A JP 3795315 B2 JP3795315 B2 JP 3795315B2
- Authority
- JP
- Japan
- Prior art keywords
- selector
- output
- selects
- latch
- circuit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
本発明は、平文を暗号化・復号化する暗号化・復号化回路に係り、特に、暗号化・復号化における演算速度を高速化する暗号化・復号化回路に関する。
【0002】
【従来の技術】
通信や記録等において情報を特定の相手以外に知られないようにするために、従来から情報を暗号化することが知られている。
暗号化では、情報を意味のわからない情報になるように暗号化し、その暗号化した情報を通信で用いたり、記録媒体等に記録する。
そして、暗号化された情報に対して、復号化を行うことにより暗号化される以前の情報にする。
このような暗号化・復号化には、一般に秘密鍵方式と公開鍵方式の二つがある。秘密鍵方式は、暗号化・復号化に用いる鍵が同一の方式である。
公開鍵方式は暗号化・復号化で異なる鍵を用い、暗号化側または復号化側のどちらかの鍵が公開される方式である。
【0003】
秘密鍵方式の暗号化・復号化方式には様々なものがあり、その一つとして公開特許公報の特開平1-276189において示される暗号アルゴリズムMulti2がある。
Multi2方式の暗号化・復号化方法において、入力データおよび出力データは64ビットである。暗号化・復号化に用いるワークキーは256ビットであり、これを32ビットに分割して暗号化・復号化に用いる。
暗号化・復号化に用いるワークキーは64ビットのデータキーと256ビットのシステムキーを用いて生成する。
ワークキーを生成することをキースケジュールと呼ぶ。
図9はキースケジュールの処理を表す。
図10は暗号化処理を表す。
図11は復号化処理を表す。
図9、図10、図11のπ1、π2、π3、π4は、図2の基本関数の処理を表している。
またMulti2暗号方式は、ISO 8372やISO/IEC 10116で定義されているElectronic Codebook (ECB) Mode、Cipher Block Chaining (CBC) Mode、Cipher Feedback (CFB) Mode、Output Feedback (OFB) Modeを適用することができる。
Multi2暗号方式を実現する回路に関する従来の技術について述べる。
キースケジュール・暗号化・復号化において行われる演算は図2に示す基本関数による演算であるため、公開特許公報の特開平9-233066、特開平9-230788において、それぞれ回路規模の削減のためキースケジュール処理と復号化処理、キースケジュールと暗号化処理を一つの演算器で実現している。
【0004】
【発明が解決しようとする課題】
上記従来の技術で述べた発明はいずれも回路規模の削減を目的としており、キースケージュール・暗号化・復号化に関して高速化する発明はほとんどない。
本発明の目的は、所定の暗号アルゴリズムで暗号化された暗号文を復号化する、または平文を暗号化する回路において、高速化を行うことにある。
また、本発明の他の目的は、高速化と回路規模の削減を両立させることである。
【0005】
【課題を解決するための手段】
上記目的を達成するため、本発明のデータを暗号化・復号化する暗号化・復号化回路において、
キースケジュール・暗号化・復号化を行うデータの項(以下、第1項という)とキースケジュール・暗号化・復号化に使用するキーの項(以下、第2項という)との2項の和を循環シフトし結果を出力する回路を、
前記第1項を循環シフトする第1の循環シフト回路と、
前記第2項を循環シフトする第2の循環シフト回路と、
前記各項からそれぞれ循環シフトを行うビット数分だけ上位ビットを取り除いたそれぞれのデータを加算する第1の加算回路と、前記第1の循環シフト回路の出力と前記第2の循環シフト回路の出力と前記第1の加算回路のキャリー出力を加算する第2の加算回路と、
前記2項を加減算する加減算回路と、
該加減算回路のキャリー出力のそれぞれに対応して予め定められた値の内の該加減算回路のキャリー出力に対応する値を前記第2の加算回路の出力から減算する減算回路により構成するようにしている。
また、前記加減算回路のキャリー出力が得られる前に、前記減算回路の出力として、前記加減算回路のキャリー出力が0の場合と1の場合の二通りを平行して求めておき、前記加減算回路の演算終了時に、前記二通りの減算回路の出力から、該加減算回路のキャリー出力に対応する出力を選択するようにしている。
また、データを暗号化・復号化する暗号化・復号化回路において、
暗号化・復号化の演算前に既知の値となっているキースケジュール・暗号化・復号化に使用するキーと、キースケジュール・暗号化・復号化の処理で定められた定数と、キースケジュール・暗号化・復号化に使用するキーに対して循環シフトを行った結果の3項を予め加算する加算回路と、
該加算回路による加算結果を記憶する記憶装置を有し、
演算開始後に、該記憶装置に保持されているあらかじめ求めておいた値と、演算中に得られた循環シフト対象の値と、該値を循環シフトした結果との3項の和を、前記加算回路で求めるようにしている。
【0006】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図2は本発明の暗号化・復号化・キースケジュールで用いるアルゴリズムの基本関数の詳細を示した図である。
図2の基本関数において加減算、循環シフト、加減算の順に演算が行われている箇所がある。ところで、2項の和に対して循環シフトを行う演算は図3に示すように4項の加減算だけで行うことができる。即ち、2項の和に対して循環シフトを行う演算結果は、上記の2項の各項の循環シフトの結果を加算し、これに上記各項に対してそれぞれ循環シフトを行うビット数分だけ上位ビットを取り除いたもので加算したときのキャリーを加え、その結果から、上記2項を加減算した結果のキャリーに循環シフトを行うビット数分だけ2を乗じた積を、引いた結果に等しくなる。
したがって、加減算、循環シフト、加減算の順の演算は多項の加減算だけに置き換えることができる。
演算が多項の加減算のみの場合、桁上げ保留加算器を用いることで演算の高速化を行うことができる。これが本発明の効果の一つである。
【0007】
図2の基本関数に対して図4に示すようにラッチL, R, Aを挿入し、ラッチ間の処理をStepと定義する。
図4のK1、K2、K3、K4は暗号化・復号化・キースケジュールに用いるキーである。
図4の各Stepの処理は図5に示す式で表すことができる。
図5の各変数の値は図6(暗号化)、図7(復号化)で示される。図6のStep.1におけるラッチA, LにはStep.1の処理結果が格納され、図にはその内容が示されている。Step.2,Step.3,Step.4 についても同様である。
また、図5のWは図3の式を用いることで各Stepの演算を6項の加算で表すことができる。なお、循環シフトのビット数nは図6、7に示すように1あるいは2の値をとる。
この各Stepで加算される値(上記6項の値)を図8に示す。
図8の第3項はキーを循環シフトした値、第4項はキーの値、第5項は定数であり、暗号化・復号化・キースケジュールの演算開始時には既知の値となっているため、暗号化・復号化・キースケジュールの演算処理を行う前にあらかじめ計算し、初期値として記憶しておくことができる。
各Stepの処理は繰り返し行われるので、このようにしておけば繰り返すたびに第3項、第4項、第5項の和を求める必要がなくなり演算の高速化と回路規模の削減を実現できる。これが本発明の効果の一つである。
【0008】
暗号化・復号化方法を実行する本発明の暗号化・復号化・キースケジュール回路の実施の形態の概略構成例を示すブロック図を図1に示す。
図1で示されるラッチはすべて同一のクロックで動作しており、32ビット幅である。80、81で示されるCSAは桁上げ保留加算器であり、図中のすべての構成要素は32ビット幅である。
図1のINPUTを通してレジスタファイル52、53に256ビットのシステムキーや256ビットのワークキーが記憶される。
また、INPUTには暗号化時には平文が、復号化時には暗号文が、キースケジュール時にはデータキーが入力され、適切なラッチに記憶される。
OUTPUTには暗号化時には暗号文が、復号化時には平文が出力される。
【0009】
次に、図1の動作をキースケジュールの場合で説明する。
暗号化・復号化の場合も図1に示すブロック図で制御を変えるだけでECBモード、CBCモード、OFBモードを実現できる。
キースケジュールを行うためにはシステムキーが必要であるため、セレクタ36、37はINPUTを選択し、INPUTから入力された合計256ビットのシステムキーがレジスタファイル52,53で記憶される。
この時記憶されたシステムキーを32ビットごとに分割したものを順にSK0,SK1,SK2,SK3, SK4,SK5,SK6,SK7とする。
以降では、クロック単位で図1におけるキースケジュールでの前記初期値を求める動作を述べる。
データキーが入力される前に、初期値の演算を行う。求める初期値を PW00、 PW01、 PW02、 PW03、 PW04、 PW05、 PW06、 PW07、 PW10、 PW11、 PW12、 PW13、 PW14、 PW15、 PW16、 PW17とする。
【0010】
セレクタ28は固定値-1を選択し、セレクタ29は固定値-3を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK0を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値1を選択し、セレクタ29は固定値-3を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK1を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW00、PW10とする。
【0011】
セレクタ38は循環シフト演算器91の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。
セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値2を選択し、セレクタ29は固定値0を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK2を選択する。ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW01、PW11とする。
【0012】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を反転したものを選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値1を選択し、セレクタ29は固定値-3を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK3を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW02、PW12とする。
【0013】
セレクタ38は循環シフト演算器91の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。
セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値-1を選択し、セレクタ29は固定値-3を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK4を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW03、PW13とする。
【0014】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。
セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値1を選択し、セレクタ29は固定値-3を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK5を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW04、PW14とする。
【0015】
セレクタ38は循環シフト演算器91の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。
セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値2を選択し、セレクタ29は固定値0を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK6を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW05、PW15とする。
【0016】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を反転したものを選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
セレクタ28は固定値1を選択し、セレクタ29は固定値-3を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK7を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW06、PW16とする。
【0017】
セレクタ38は循環シフト演算器91の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ42はセレクタ38の出力を選択し、セレクタ43はセレクタ39の出力を選択する。
セレクタ44、45は0を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
ラッチ16,17はそれぞれ加算器82,83の出力を記憶する。
ラッチ16,17の出力はそれぞれレジスタファイル50,51に記憶される。
ここではその値をそれぞれPW07、PW17とする。
レジスタファイル50,51に記憶されたPW00、 PW01、 PW02、 PW03、 PW04、 PW05、 PW06、 PW07、 PW10、 PW11、 PW12、 PW13、 PW14、 PW15、 PW16、 PW17が、図8の第3項、第4項、第5項の和であり、以降のキースケジュールの演算に使用される。
初期値の求め方は暗号化・復号化のどちらの場合でも同じである。
【0018】
次に、キースケジュールの演算について述べる。
以降では、クロック単位で図1におけるキースケジュールの動作を述べる。
キースケジュールでは256ビットのワークキーを生成するために、入力として64ビットのデータキーが必要である。
INPUTから64ビットのデータキーを入力する。
この時、セレクタ20、21はそれぞれ入力されたデータキーの前半32ビットと後半32ビットを選択し、ラッチ00と01はその値を保持する。
論理積54、55の右側の入力を1とし、論理積56,58の右側の入力を0とする。
セレクタ32は排他的論理和66の出力を選択し、セレクタ31、33は排他的論理和68の出力を選択し、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
【0019】
セレクタ28はレジスタファイル50に記憶されているPW00を選択し、セレクタ29はレジスタファイル51に記憶されているPW10を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK0を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30の出力を記憶する。
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器92の出力を選択し、セレクタ41はラッチ11の出力を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位31ビットについてはセレクタ38の出力を選択し、下位1ビットについては‘0’を選択する。
セレクタ45は上位31ビットについてはセレクタ40の出力を選択し、下位1ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47は循環シフト演算器94の出力を選択する。
論理積60、62、64の右側の入力を1とし、論理積61、63、65の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW01を選択し、セレクタ29はレジスタファイル51に記憶されているPW11を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK1を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32は排他的論理和74の出力を選択し、セレクタ33はラッチ13の出力を選択する。
セレクタ24は排他的論理和74の出力を選択する。ラッチ04はセレクタ24、ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
論理積56の右側の入力を1とする。セレクタ36は論理積56の出力を選択し、レジスタファイル52はセレクタ36の出力をK0として記憶する。
【0020】
セレクタ38は循環シフト演算器91の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器93の出力を選択し、セレクタ41はラッチ11の出力を選択する。
セレクタ44は上位30ビットについてはセレクタ38の出力を選択し、下位2ビットについては‘0’を選択する。
セレクタ45は上位30ビットについてはセレクタ40の出力を選択し、下位2ビットについては‘0’を選択する。
セレクタ44はセレクタ38の出力を選択し、セレクタ45はセレクタ40の出力を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47は循環シフト演算器95の出力を選択する。
論理積60の右側の入力を1とし、論理積61、62、63、64、65の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW02を選択し、セレクタ29はレジスタファイル51に記憶されているPW12を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK2を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32はラッチ12の出力を選択し、セレクタ33はラッチ13の出力を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
【0021】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器92の出力を選択し、セレクタ41はラッチ11の出力の反転を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位31ビットについてはセレクタ38の出力を選択し、下位1ビットについては‘0’を選択する。
セレクタ45は上位31ビットについてはセレクタ40の出力を選択し、下位1ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47は循環シフト演算器96の出力を選択する。
論理積60、61、63、65の右側の入力を1とし、論理積62、64の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW03を選択し、セレクタ29はレジスタファイル51に記憶されているPW13を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK3を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32はラッチ12の出力を選択し、セレクタ33は排他的論理和75の出力を選択する。
セレクタ25は排他的論理和75の出力を選択する。
ラッチ05はセレクタ25、ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
論理積58の右側の入力を1とする。セレクタ37は論理積58の出力を選択し、レジスタファイル53はセレクタ37の出力をK1として記憶する。
【0022】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器92の出力を選択し、セレクタ41はラッチ11の出力を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位30ビットについてはセレクタ38の出力を選択し、下位2ビットについては‘0’を選択する。
セレクタ45は上位30ビットについてはセレクタ40の出力を選択し、下位2ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47はセレクタ46の出力を選択する。論理積62、64、65の右側の入力を1とし、論理積60、61、63の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW04を選択し、セレクタ29はレジスタファイル51に記憶されているPW14を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK4を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32は排他的論理和74の出力を選択し、セレクタ33は排他的論理和75の出力を選択する。
セレクタ24は排他的論理和74の出力を選択し、セレクタ25は排他的論理和75の出力を選択する。
ラッチ04はセレクタ24、ラッチ05はセレクタ25、ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
論理積56、58の右側の入力を1とする。
セレクタ36は論理積56の出力を選択し、セレクタ37は論理積58の出力を選択し、レジスタファイル52はセレクタ36の出力をK2として記憶し、レジスタファイル53はセレクタ37の出力をK3として記憶する。
【0023】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器92の出力を選択し、セレクタ41はラッチ11の出力を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位31ビットについてはセレクタ38の出力を選択し、下位1ビットについては‘0’を選択する。
セレクタ45は上位31ビットについてはセレクタ40の出力を選択し、下位1ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47は循環シフト演算器94の出力を選択する。
論理積60、62、64の右側の入力を1とし、論理積61、63、65の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW05を選択し、セレクタ29はレジスタファイル51に記憶されているPW15を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK5を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32は排他的論理和74の出力を選択し、セレクタ33はラッチ13の出力を選択する。
セレクタ24は排他的論理和74の出力を選択する。
ラッチ04はセレクタ24、ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
論理積56の右側の入力を1とする。セレクタ36は論理積56の出力を選択し、レジスタファイル52はセレクタ36の出力をK4として記憶する。
【0024】
セレクタ38は循環シフト演算器91の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器93の出力を選択し、セレクタ41はラッチ11の出力を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位30ビットについてはセレクタ38の出力を選択し、下位2ビットについては‘0’を選択する。
セレクタ45は上位30ビットについてはセレクタ40の出力を選択し、下位2ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47は循環シフト演算器95の出力を選択する。
論理積60の右側の入力を1とし、論理積61、62、63、64、65の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW06を選択し、セレクタ29はレジスタファイル51に記憶されているPW16を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK6を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32はラッチ12の出力を選択し、セレクタ33はラッチ13の出力を選択する。
ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
【0025】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器92の出力を選択し、セレクタ41はラッチ11の出力の反転を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位31ビットについてはセレクタ38の出力を選択し、下位1ビットについては‘0’を選択する。
セレクタ45は上位31ビットについてはセレクタ40の出力を選択し、下位1ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47は循環シフト演算器96の出力を選択する。
論理積60、61、63、65の右側の入力を1とし、論理積62、64の右側の入力を0とする。
セレクタ28はレジスタファイル50に記憶されているPW07を選択し、セレクタ29はレジスタファイル51に記憶されているPW17を選択し、セレクタ30はレジスタファイル52,53に記憶されているSK7を選択し、セレクタ31は排他的論理和75の出力を選択し、セレクタ32はラッチ12の出力を選択し、セレクタ33は排他的論理和75の出力を選択する。セレクタ25は排他的論理和75の出力を選択する。
ラッチ05はセレクタ25、ラッチ08はセレクタ28、ラッチ09はセレクタ29、ラッチ10はセレクタ30、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
論理積58の右側の入力を1とする。セレクタ37は論理積58の出力を選択し、レジスタファイル53はセレクタ37の出力をK5として記憶する。
【0026】
セレクタ38は循環シフト演算器90の出力を選択し、セレクタ39はラッチ10の出力を選択する。
セレクタ40は循環シフト演算器92の出力を選択し、セレクタ41はラッチ11の出力を選択する。
セレクタ42はセレクタ40の出力を選択し、セレクタ43はセレクタ41の出力を選択する。
セレクタ44は上位30ビットについてはセレクタ38の出力を選択し、下位2ビットについては‘0’を選択する。
セレクタ45は上位30ビットについてはセレクタ40の出力を選択し、下位2ビットについては‘0’を選択する。
キャリージェネレータ84の出力が、加算器82、83のイニシャルキャリーとして与えられる。
セレクタ46はキャリージェネレータ85の結果が0ならば加算器82の出力を選択し、キャリージェネレータ85の結果が1ならば加算器83の出力を選択する。
セレクタ47はセレクタ46の出力を選択する。
論理積62、64、65の右側の入力を1とし、論理積60、61、63の右側の入力を0とする。
セレクタ31は排他的論理和75の出力を選択し、セレクタ32は排他的論理和74の出力を選択し、セレクタ33は排他的論理和75の出力を選択する。
セレクタ24は排他的論理和74の出力を選択し、セレクタ25は排他的論理和75の出力を選択する。
ラッチ04はセレクタ24、ラッチ05はセレクタ25、ラッチ11はセレクタ31、ラッチ12はセレクタ32、ラッチ13はセレクタ33の出力を記憶する。
論理積56、58の右側の入力を1とする。セレクタ36は論理積56の出力を選択し、セレクタ37は論理積58の出力を選択し、レジスタファイル52はセレクタ36の出力をK6として記憶し、レジスタファイル53はセレクタ37の出力をK7として記憶する。
以上の処理で求められたK0、 K1、 K2、 K3、 K4、 K5、 K6、 K7がキースケジュールによって得られるワークキーである。
【0027】
【発明の効果】
本発明は以上のように構成されているため、加減算、循環シフト、加減算の順の演算は多項の加減算だけに置き換えることができ、演算が多項の加減算のみのため演算の高速化を行うことができる。また、桁上げ保留加算器を用いることで、さらに演算の高速化を行うことができる。
また、多項の加減算だけに置き換えたことで、暗号化・復号化・キースケジュールの演算開始時には既知の値となっているものを、暗号化・復号化・キースケジュールの演算処理を行う前にあらかじめ計算し、初期値として保持することで、繰り返し行われる演算において和を求める必要がなくなり演算の高速化と回路規模の削減を行うことができる。
【図面の簡単な説明】
【図1】本発明の暗号化・復号化・キースケージュールを実行する本発明の回路の実施の形態の構成例を示すブロック図である。
【図2】本発明の暗号化・復号化・キースケジュールで用いるアルゴリズムの基本関数の詳細を示した図である。
【図3】本発明の暗号化・復号化・キースケジュールで用いる、加減算、循環シフトの順の演算を加減算だけに式変形することを示す図である。
【図4】本発明の暗号化・復号化・キースケジュール用いるアルゴリズムの基本関数に対して、本発明においてラッチを挿入した図である。
【図5】図4で定義された各Stepの処理を示す図である。
【図6】図5で示された式の暗号化における各Stepでの変数の値を示す図である。
【図7】図5で示された式の復号化における各Stepでの変数の値を示す図である。
【図8】図5で示されたWを図3を用いて多項の加減算に変形したときの各Stepでの項の値を示す図である。
【図9】図2で定義された基本関数を用いて、本発明のキースケジュールの動作を示したブロック図である。
【図10】図2で定義された基本関数を用いて、本発明の暗号化の動作を示したブロック図である。
【図11】図2で定義された基本関数を用いて、本発明の復号化の動作を示したブロック図である。
【符号の説明】
00〜17 32ビット幅のラッチ
20〜47 32ビット幅のセレクタ
50〜53 レジスタファイル
54〜65 32ビット幅の論理積
66〜75 32ビット幅の排他的論理和
76 32ビット幅の論理和
80,81 32ビット幅の桁上げ保留加算器
82,83 32ビット加算器
84,85 32ビットのキャリージェネレータ
86 シフタ
90〜96 循環シフト演算器
Claims (2)
- データを暗号化・復号化する暗号化・復号化回路において、
キースケジュール・暗号化・復号化を行うデータの項(以下、第1項という)とキースケジュール・暗号化・復号化に使用するキーの項(以下、第2項という)との2項の和を循環シフトし結果を出力する回路を、
前記第1項を循環シフトする第1の循環シフト回路と、前記第2項を循環シフトする第2の循環シフト回路と、
前記各項からそれぞれ循環シフトを行うビット数分だけ上位ビットを取り除いたそれぞれのデータを加算する第1の加算回路と、
前記第1の循環シフト回路の出力と前記第2の循環シフト回路の出力と前記第1の加算回路のキャリー出力を加算する第2の加算回路と、
前記第1項と第2項を加減算する加減算回路と、
該加減算回路のキャリー出力のそれぞれに対応して予め定められた値の内の該加減算回路のキャリー出力に対応する値を前記第2の加算回路の出力から減算する減算回路により構成することを特徴とする暗号化・復号化回路。 - 請求項1記載の暗号化・復号化回路において、
前記加減算回路のキャリー出力が得られる前に、前記減算回路の出力として、前記加減算回路のキャリー出力が0の場合と1の場合の二通りを平行して求めておき、前記加減算回路の演算終了時に、前記二通りの減算回路の出力から、該加減算回路のキャリー出力に対応する出力を選択することを特徴とする暗号化・復号化回路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000315049A JP3795315B2 (ja) | 2000-10-16 | 2000-10-16 | 暗号化・復号化回路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000315049A JP3795315B2 (ja) | 2000-10-16 | 2000-10-16 | 暗号化・復号化回路 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002123171A JP2002123171A (ja) | 2002-04-26 |
JP3795315B2 true JP3795315B2 (ja) | 2006-07-12 |
Family
ID=18794209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000315049A Expired - Fee Related JP3795315B2 (ja) | 2000-10-16 | 2000-10-16 | 暗号化・復号化回路 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3795315B2 (ja) |
-
2000
- 2000-10-16 JP JP2000315049A patent/JP3795315B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2002123171A (ja) | 2002-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4127472B2 (ja) | データ変換装置及びデータ変換装置のデータ変換方法及びプログラム及びコンピュータ読み取り可能な記録媒体 | |
US7079651B2 (en) | Cryptographic method and apparatus for non-linearly merging a data block and a key | |
US7039184B2 (en) | Encryption/decryption unit and storage medium | |
US11546135B2 (en) | Key sequence generation for cryptographic operations | |
JP4879951B2 (ja) | セキュリティ強化のための転置データ変換 | |
EP1081889A2 (en) | Extended key generator, encryption / decryption unit, extended key generation method, and storage medium | |
JP2005215688A (ja) | S−box演算を用いるハードウェア暗号化/復号化装置及び、その方法 | |
JP4025722B2 (ja) | データ暗号化のための方法および装置 | |
JP3824121B2 (ja) | 暗号データの復号化処理方法および装置 | |
JP3542278B2 (ja) | モンゴメリ・リダクション装置及び記録媒体 | |
JPH10240500A (ja) | 乱数生成装置及び方法、暗号化装置及び方法、復号装置及び方法、並びにストリーム暗号システム | |
JP3769804B2 (ja) | 解読化方法および電子機器 | |
JP2950485B2 (ja) | ストリーム暗号処理装置 | |
JP3795315B2 (ja) | 暗号化・復号化回路 | |
JP2002510058A (ja) | 2進データ・ブロックの暗号変換のための方法 | |
JP2725610B2 (ja) | 秘密鍵暗号方法及び装置 | |
RU2188513C2 (ru) | Способ криптографического преобразования l-битовых входных блоков цифровых данных в l-битовые выходные блоки | |
Labbi et al. | Symmetric encryption algorithm for RFID systems using a dynamic generation of key | |
JPH1152850A (ja) | 暗号変換方法および装置 | |
JPH09251267A (ja) | 暗号化装置及び暗号化方法 | |
KR100546777B1 (ko) | Seed 암/복호화 장치, 암/복호화 방법, 라운드 처리 방법, 이에 적합한 f함수 처리기 | |
JP4708914B2 (ja) | 解読化方法 | |
JP2000089667A (ja) | アルゴリズム生成型秘密鍵暗号方式 | |
JP2003333036A (ja) | メッセージ認証装置、メッセージ認証方法とメッセージ認証プログラムおよび該プログラムを記録したコンピュータ読取り可能な記録媒体 | |
JP2007295342A (ja) | 暗号通信システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040209 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040318 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050816 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050913 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051114 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060404 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060412 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |