前の文書 次の文書 閉じる 登録PDF 公開PDF ブックマークに登録 集合登録 ログイン
出願番号特願2000-3150492000/10/16
国際出願番号
公開番号特開2002-1231712002/04/26
公表/再公表番号
国際公開番号
公告番号
請求公告番号
登録番号特許第3795315号2006/04/21
評価スコア係数
AECIL
引用JPN4006005076, 特開平9-233066, 特開平10-124298
引用文献
被引用
被引用文献
関係図の参照
発明の名称暗号化・復号化回路
出願人・権利者株式会社日立製作所
発明者・考案者戸高貴司, 小國哲, 平山直紀
代理人伊藤修(外1名), 伊藤修
要約
【要約】
【課題】 所定の暗号アルゴリズムで暗号化された暗号文を復号化する、または平文を暗号化する回路において、高速化を行うことにある。
【解決手段】 Multi2方式によるデータの暗号化・復号化回路においては、2項の和に対して循環シフトを行う演算をする箇所があり、この2項の和に対して循環シフトを行う演算は図に示すように4項の加減算だけで行うことができる。即ち、2項の和に対して循環シフトを行う演算結果は、上記の2項の各項の循環シフトの結果を加算し、これに上記各項に対してそれぞれ循環シフトを行うビット数分だけ上位ビットを取り除いたもので加算したときのキャリーを加え、その結果から、上記2項を加減算した結果のキャリーに循環シフトを行うビット数分だけ2を乗じた積を、引いた結果に等しくなる。そこで、暗号化・復号化回路における2項の和の循環シフト回路を上記のように複数の加減算回路で構成している。
国際特許分類(IPC)G09C1/00,
FIG09C1/00,610B
Fターム5J104AA21, 5J104JA09, 5J104JA18, 5J104NA09
請求の範囲
【特許請求の範囲】
【請求項1】 データを暗号化・復号化する暗号化・復号化回路において、
キースケジュール・暗号化・復号化を行うデータの項(以下、第1項という)とキースケジュール・暗号化・復号化に使用するキーの項(以下、第2項という)との2項の和を循環シフトし結果を出力する回路を、
前記第1項を循環シフトする第1の循環シフト回路と、前記第2項を循環シフトする第2の循環シフト回路と、
前記各項からそれぞれ循環シフトを行うビット数分だけ上位ビットを取り除いたそれぞれのデータを加算する第1の加算回路と、
前記第1の循環シフト回路の出力と前記第2の循環シフト回路の出力と前記第1の加算回路のキャリー出力を加算する第2の加算回路と、
前記第1項と第2項を加減算する加減算回路と、
該加減算回路のキャリー出力のそれぞれに対応して予め定められた値の内の該加減算回路のキャリー出力に対応する値を前記第2の加算回路の出力から減算する減算回路により構成することを特徴とする暗号化・復号化回路。
【請求項2】 請求項1記載の暗号化・復号化回路において、
前記加減算回路のキャリー出力が得られる前に、前記減算回路の出力として、前記加減算回路のキャリー出力が0の場合と1の場合の二通りを平行して求めておき、前記加減算回路の演算終了時に、前記二通りの減算回路の出力から、該加減算回路のキャリー出力に対応する出力を選択することを特徴とする暗号化・復号化回路。
【請求項3】 データを暗号化・復号化する暗号化・復号化回路において、
暗号化・復号化の演算前に既知の値となっているキースケジュール・暗号化・復号化に使用するキーと、キースケジュール・暗号化・復号化の処理で定められた定数と、キースケジュール・暗号化・復号化に使用するキーに対して循環シフトを行った結果の3項を予め加算する加算回路と、
該加算回路による加算結果を記憶する記憶装置を有し、
演算開始後に、該記憶装置に保持されているあらかじめ求めておいた値と、演算中に得られた循環シフト対象の値と、該値を循環シフトした結果との3項の和を、前記加算回路で求めることを特徴とする暗号化・復号化回路。
利用分野
【0001】
【発明の属する技術分野】本発明は、平文を暗号化・復号化する暗号化・復号化回路に係り、特に、暗号化・復号化における演算速度を高速化する暗号化・復号化回路に関する。
従来の技術
【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項の和を、前記加算回路で求めるようにしている。
効果
【0027】
【発明の効果】本発明は以上のように構成されているため、加減算、循環シフト、加減算の順の演算は多項の加減算だけに置き換えることができ、演算が多項の加減算のみのため演算の高速化を行うことができる。また、桁上げ保留加算器を用いることで、さらに演算の高速化を行うことができる。また、多項の加減算だけに置き換えたことで、暗号化・復号化・キースケジュールの演算開始時には既知の値となっているものを、暗号化・復号化・キースケジュールの演算処理を行う前にあらかじめ計算し、初期値として保持することで、繰り返し行われる演算において和を求める必要がなくなり演算の高速化と回路規模の削減を行うことができる。
実施例
【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がキースケジュールによって得られるワークキーである。
図の説明
【図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 循環シフト演算器
その他
状態の移り変わり
2006/04/21  登録
2006/04/21  審査登録
2004/02/10  審査中
2002/04/26  公開