(57)【要約】  本発明の一実施例における暗号化装置は、３２＊Ｙ（Ｙ＝１又は２）ビットを基本演算単位とするＳＨＡ−２アルゴリズムを用いた、複数のレジスタが直列に配置されるシフトレジスタと、シフトレジスタに格納されるデータに基づき加算演算を行う所定個の加算器Ａ１１〜Ａ１８とを有するダイジェスト部１０を有する。シフトレジスタは、（３２＊Ｙ）／Ｘ（Ｘ＝２ｋ。Ｙ＝１のとき１≦ｋ≦４、Ｙ＝２のとき１≦ｋ≦５。ｋは整数。）ビットのレジスタａ１，ａ２．ｂ１，・・・，ｈ２を有する。各加算器Ａ１１〜Ａ１８は（３２＊Ｙ）／Ｘビットのデータ幅を有し、シフトレジスタに格納されるデータが（３２＊Ｙ）／Ｘビットのデータ幅でレジスタ間をシフトする１サイクルごとに加算演算を行う。
2010041307.tif 000002
【特許請求の範囲】
【請求項１】
３２＊Ｙ（Ｙ＝１又は２）ビットを基本演算単位とするＳＨＡ−２アルゴリズムを用いた、複数のレジスタが直列に配置されるシフトレジスタと、該シフトレジスタに格納されるデータに基づき加算演算を行う所定個の加算器とを有するダイジェスト部を有する暗号化装置であって、
前記シフトレジスタは、（３２＊Ｙ）／Ｘ（Ｘ＝２ｋ。Ｙ＝１のとき１≦ｋ≦４、Ｙ＝２のとき１≦ｋ≦５。ｋは整数。）ビットのレジスタを有し、
前記所定個の加算器は、夫々、（３２＊Ｙ）／Ｘビットのデータ幅を有し、前記シフトレジスタに格納されるデータが（３２＊Ｙ）／Ｘビットのデータ幅で前記レジスタ間をシフトする１サイクルごとに、前記加算演算を行う、暗号化装置。
【請求項２】
３２＊Ｙビットのデータ幅で入力されたデータに対しΣ関数演算を行う論理演算回路を更に有し、
前記論理演算回路の入力側に、（３２＊Ｙ）／Ｘビットのデータ幅を３２＊Ｙビットと整合させる第１のインターフェース部を設ける、請求項１記載の暗号化装置。
【請求項３】
前記第１のインターフェース部は、所定の連続するＸ個のレジスタ及び該Ｘ個のレジスタに続く（Ｘ−１）個のレジスタの間を１サイクルごとに（３２＊Ｙ）／Ｘビットのデータ幅でシフトする３２＊Ｙビットデータを前記シフトレジスタから取り出して出力する、請求項２記載の暗号化装置。
【請求項４】
前記論理演算回路の出力側に、前記論理演算回路から出力される３２＊Ｙビットデータのビット幅を（３２＊Ｙ）／Ｘビットと整合させる第２のインターフェース部を設け、
前記第２のインターフェース部は、前記論理演算回路から出力される３２＊Ｙビットデータから１サイクルごとに該サイクルに応じた所定の（３２＊Ｙ）／Ｘビットデータを取り出し、前記加算器の１つへ出力する、請求項３記載の暗号化装置。
【請求項５】
前記第１のインターフェース部は、所定の連続するＸ個のレジスタ及び該Ｘ個のレジスタに続く（Ｘ−１）個のレジスタの間を１サイクルごとに（３２＊Ｙ）／Ｘビットのデータ幅でシフトする３２＊Ｙビットデータを前記シフトレジスタから取り出し、１サイクルごとに（３２＊Ｙ）／Ｘビットのデータ幅で巡回シフトさせながら前記加算器の１つへ出力する、請求項２記載の暗号化装置。
【請求項６】
前記論理演算回路の出力側に、前記論理演算回路から出力される３２＊Ｙビットデータのビット幅を（３２＊Ｙ）／Ｘビットと整合させる第２のインターフェース部を設け、
前記第２のインターフェース部は、前記論理演算回路の所定の出力端子から出力される（３２＊Ｙ）／Ｘビットデータを前記加算器の１つへ出力する、請求項５記載の暗号化装置。
【請求項７】
前記論理演算回路は、前記Σ関数演算を行うために３個の巡回シフト演算器及びＸＯＲ演算器を有し、前記巡回シフト演算器の夫々の所定の出力端子から出力される（３２＊Ｙ）／Ｘビットデータを前記ＸＯＲ演算器に入力し、該ＸＯＲ演算器から出力される（３２＊Ｙ）／Ｘビットデータを前記加算器の１つへ出力する、請求項５記載の暗号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＨＡ−２アルゴリズムを用いた、複数のレジスタが直列に配置されるシフトレジスタと、該シフトレジスタに格納されるデータに基づき加算演算を行う所定個の加算器とを有するダイジェスト部を有する暗号化装置に関する。
【背景技術】
【０００２】
セキュリティシステムの基盤技術として、暗号技術が利用されている。暗号技術の一つとして、ハッシュ関数という技術が知られている。ハッシュ関数は、任意長のデータを一定長のデータに圧縮するものである。これは、今日の情報セキュリティに不可欠であるデジタル署名などに用いられている。【０００３】
主に、ハッシュ関数として、ＭＤ４、ＭＤ５、Ｗｈｉｒｌｐｏｏｌ、ＳＨＡ−２などの様々なアルゴリズムが知られている。【０００４】
これらのハッシュ関数アルゴリズムは、ソフトウェア又はハードウェアのいずれによっても実装され得る。しかし、一般にハッシュ関数処理は、ソフトウェアによる実装よりもハードウェアによる実装の方が、回路規模当たりの処理効率が高いことが知られている。ここで、ハードウェアはソフトウェアと異なり、その回路規模が製造コストに直結するという面を持っている。そのため、ハードウェアによってハッシュ関数を実装する場合、コストを極小化するために、回路規模をできるだけ小さくすることが産業上重要な課題となる。【０００５】
以下、一般的なハッシュ関数アルゴリズムに関して、ＳＨＡ−２を例として説明する。【０００６】
ＳＨＡ−２は、４つのハッシュ関数アルゴリズム（ＳＨＡ−２２４、ＳＨＡ−２５６、ＳＨＡ−３８４、ＳＨＡ−５１２）の総称である。これら４つのハッシュ関数アルゴリズムは、米国標準技術研修所（National  Institute  of  Standards  and  Technology；NIST）が公開している標準ＦＩＰＳ１８０−２、SECURE  HASH  STANDARD  CHANGE  NOTICE  １に記載されている。これら４つのハッシュ関数は、アルゴリズム全体の流れは同じであるが、そのデータ幅などが若干異なる。【０００７】
図１は、ＳＨＡ−２アルゴリズムの基本構成を示す。図示されるように、ＳＨＡ−２は、ダイジェスト部（以下、"ＤＰ"と呼ぶ。）１００と、メッセージ部（以下、"ＭＰ"と呼ぶ。）１１０とを有する。ＭＰ１１０及びＤＰ１００の一般的な回路構成を、夫々、図２及び図３に示す。これらの図から、ＭＰ１１０及びＤＰ１００はいずれも、その大部分がレジスタ及び各種演算器によって構成されていることが分かる。【０００８】
ＳＨＡ−２５６又はＳＨＡ−２２４の場合には、ＭＰ１１０は、５１２ビットの入力データを格納するために１６個の３２ビットレジスタを有する。６４サイクルの間、ＭＰ１１０は、データＷｉをＤＰ１００に出力し続ける。一方、ＤＰ１００は、８個の３２ビットレジスタの２つの組を有する。ＤＰ１１０は、ＭＰ１１０からデータＷｉを受け取る６４サイクルの間、シフトレジスタ構造により、第１の組の８個の３２ビットレジスタａ〜ｈを更新し続ける。つまり、ＤＰ１００及びＭＰ１１０は、データＷｉによる同期を取りながら、並列動作を行っている。ＤＰ１００は、最初にデータＷｉを受け取ってから６４サイクル後に、８サイクルにわたって終了処理を行う。具体的には、ＤＰ１００は、第２の組の８個の３２ビットレジスタＨ０〜Ｈ７の値を、第１の組のレジスタａ〜ｈを用いて更新する。ＳＨＡ−２５６では、第２の組のレジスタＨ０〜Ｈ７に格納される２５６ビットのデータが最終的な出力（ハッシュ値）となり、ＳＨＡ−２２４では、第２の組のレジスタＨ０〜Ｈ６に格納される２２４ビットのデータがハッシュ値となる。【０００９】
一方、ＳＨＡ−５１２又はＳＨＡ−３８４の場合には、メインループは６４サイクルではなく８０サイクルであり、演算単位は３２ビットではなく６４ビットである。他の点に関しては、上記のＳＨＡ−２５６又はＳＨＡ−２２４の場合と同じである。ＳＨＡ−５１２では、第２の組のレジスタＨ０〜Ｈ７に格納される５１２ビットのデータがハッシュ値となり、ＳＨＡ−３８４では、第２の組のレジスタＨ０〜Ｈ５に格納される３８４ビットのデータがハッシュ値となる。【００１０】
上述されたように、ハッシュ関数を含めた暗号のハードウェア実装では、コスト面から回路規模の削減が重要な課題となっている。そして、ハッシュ関数の一つであるＳＨＡ−２では、その仕様からＭＰ１１０よりもＤＰ１００の方がハードウェア全体の回路規模に占める割合が大きい。従って、ハードウェア実装の回路規模削減のために、ＤＰ１００の回路規模の削減を図ることは必須である。図３に図示されるように、ＤＰ１００は、主に、データを格納する複数のレジスタを含むレジスタ部と、加算器などの各種演算器を含む演算部とを有する。ここで、レジスタ部に関しては、先に説明されたようなＳＨＡ−２のアルゴリズム仕様上、削除することは困難である。よって、ＤＰ１００の回路規模削減を図る場合には、演算部の回路規模を削減するアプローチが考えられる。一般的には、時分割又はビット分割のいずれかによって加算器を削減する方法が知られている。時分割による加算器削減は、加算器の個数を減らすことによって実現される（例えば、特開２００１−２８２１０６号公報（特許文献１）参照。）。例えば、従来は２個の３２ビット加算器を用いて１サイクルで演算していたものを、１個の３２ビット加算器を用いて２サイクルで演算することが考えられている。一方、ビット分割による加算器削減は、加算器のデータ幅を減らすことによって実現される。例えば、従来は２個の３２ビット加算器を用いて１サイクルで演算していたものを、２個の１６ビット加算器を用いて２サイクルかけて演算することが考えられている。【００１１】
図４は、上記の加算器削減による回路規模削減の各アプローチに従うＤＰ１００の加算器周辺の回路構成を示す。図４において、（ａ）は、ＳＨＡ−２のアルゴリズム仕様に従った回路構成を示し、（ｂ）は、時分割による加算器削減アプローチに従う回路構成を示し、（ｃ）は、ビット分割による加算器削減アプローチに従う回路構成を示す。（ａ）に図示されるように、ＳＨＡ−２のアルゴリズム仕様に従った回路構成では、８個の３２＊Ｙビット加算器（ここで、ＳＨＡ−２２４／２５６の場合にＹ＝１、ＳＨＡ−３８４／５１２の場合にＹ＝２。）を用いて１サイクルで加算演算が行われる。一方、時分割による加算器削減アプローチでは、（ｂ）に図示されるように、同じ加算演算を２サイクルかけて行うことで、加算器の数を半減させることができる。また、ビット分割による加算器削減アプローチでは、（ｃ）に図示されるように、３２＊Ｙビット加算データを上位１６＊Ｙビット及び下位１６＊Ｙビットに分割する。そして、１サイクル目では下位ビット加算演算を行い、２サイクル目では上位ビット加算演算を行うことで、データ幅を半減させることができる。
【特許文献１】特開２００１−２８２１０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、上記の回路規模削減アプローチにおいて、時分割による加算器削減アプローチでは、異なるサイクル間で加算器を共有することとなるため、加算器の入力及び出力にセレクタを設ける必要がある。また、ビット分割による加算器削減アプローチでも同様に、異なるサイクル間で加算器を共有することとなるため、加算器の入力及び出力にセレクタを設ける必要がある。つまり、ＳＨＡ−２ハードウェアの回路規模削減のための従来のアプローチはセレクタによる回路規模の増加という問題を伴う。よって、実際には、ＳＨＡ−２ハードウェア全体として回路規模の削減を実現することはできない。【００１３】
本発明は、上記問題を鑑み、ハッシュ関数の一つであるＳＨＡ−２のハードウェア全体として回路規模を削減することが可能な暗号化装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の一実施例における暗号化装置は、３２＊Ｙ（Ｙ＝１又は２）ビットを基本演算単位とするＳＨＡ−２アルゴリズムを用いた、複数のレジスタが直列に配置されるシフトレジスタと、該シフトレジスタに格納されるデータに基づき加算演算を行う所定個の加算器とを有するダイジェスト部を有する暗号化装置であって、前記シフトレジスタは、（３２＊Ｙ）／Ｘ（Ｘ＝２ｋ。Ｙ＝１のとき１≦ｋ≦４、Ｙ＝２のとき１≦ｋ≦５。ｋは整数。）ビットのレジスタを有し、前記所定個の加算器は、夫々、（３２＊Ｙ）／Ｘビットのデータ幅を有し、前記シフトレジスタに格納されるデータが（３２＊Ｙ）／Ｘビットのデータ幅で前記レジスタ間をシフトする１サイクルごとに、前記加算演算を行うことができる。【００１５】
図１乃至４を参照して記載されたように、ＳＨＡ−２アルゴリズムを用いた暗号化装置では、メッセージ部よりもダイジェスト部の方が装置全体の回路規模に占める割合が大きい。よって、本発明はダイジェスト部の回路規模の削減を対象とする。また、ＳＨＡ−２アルゴリズムのダイジェスト部の基本演算単位は（３２＊Ｙ）ビットである。本発明の一実施例における暗号化装置では、ダイジェスト部のシフトレジスタに着目し、シフトレジスタとして（３２＊Ｙ）／Ｘビットのレジスタを用いることとした。これにより、ダイジェスト部で用いられる加算器のデータ幅を、余分のセレクタを設けることなく、従来の１／Ｘにできる。
【発明の効果】
【００１６】
本開示の暗号化装置により、ハッシュ関数の一つであるＳＨＡ−２のハードウェア全体として回路規模を削減することが可能となる。
【図面の簡単な説明】
【００１７】
【図１】ＳＨＡ−２アルゴリズムの基本構成を示す。
【図２】ＳＨＡ−２のＭＰの一般的な回路構成を示す。
【図３】ＳＨＡ−２のＤＰの一般的な回路構成を示す。
【図４】様々な回路規模削減アプローチに従うＤＰの加算器周辺の回路構成を示す。
【図５】本発明の一実施例におけるＳＨＡ−２のＤＰの回路構成を示す。
【図６】従来及び本発明の一実施例の夫々に関して加算器周辺回路を示す。
【図７】図５のΣ０周辺回路の第１の構成を示す。
【図８】図５のΣ０周辺回路の第２の構成を示す。
【図９】Ｘサイクル処理時のシフトレジスタの構成を示す。
【図１０】Ｘサイクル処理時のΣ０周辺回路の構成を示す。
【図１１】図１０に図示されるΣ０回路の周辺回路のデータ入出力に関する説明図である。
【図１２】Ｘサイクル処理時のＭａｊ回路の構成を示す。
【図１３】Ｘサイクル処理時のＣｈ回路の構成を示す。
【符号の説明】
【００１８】
１０，１００  ダイジェスト部
１１０  メッセージ部
２０  レジスタ部
３０  演算部
４０  シフトレジスタ
ａ〜ｈ  レジスタ
Ａ１１〜Ａ１８  加算器
Ｃ１１  Σ０回路
Ｃ１２  Ｍａｊ回路
Ｃ１３  Σ１回路
Ｃ１４  Ｃｈ回路
Ｓ１１〜Ｓ１４，Ｓ２１，Ｓ２２  インターフェース部
【発明を実施するための最良の形態】
【００１９】
以下、本発明を実施するための最良の形態について、添付の図面に関連して記載される具体的な実施例を参照して説明する。【００２０】
図５は、本発明の一実施例に従うＳＨＡ−２のＤＰの回路構成を示す。図５のＤＰ１０は、レジスタ部２０及び演算部３０を有する。レジスタ部２０は、１６個の１６＊Ｙビットレジスタａ１，ａ２．ｂ１，・・・，ｈ２を有するレジスタの組を有する。ＤＰ１０は、このレジスタの組を用いて、最終的な出力（ハッシュ値）を格納するＨ０〜Ｈ７の値を更新する。具体的には、H0←H0+{a1‖a2}, H1←H1+{b1‖b2}, …, H7←H7+{h1‖h2} に従って更新を行う。ここで、Ｙは、ＳＨＡ−２２４／２５６の場合には"１"をとり、ＳＨＡ−３８４／５１２の場合には"２"をとる。すなわち、これは、ＳＨＡ−２アルゴリズムのＤＰの基本演算単位が、ＳＨＡ−２２４／２５６では３２ビットであり、ＳＨＡ−３８４／５１２では６４ビットであることを意味する。また、演算部３０は、８個の１６＊Ｙビット加算器Ａ１１〜Ａ１８を有する。【００２１】
先に図３を参照して記載されたように、従来のＤＰの回路構成では、レジスタの組は８個の３２＊Ｙビットのレジスタａ〜ｈを有する。これに対し、本実施例に従うＤＰの回路構成では、レジスタの組は１６個の１６＊Ｙビットのレジスタａ１，ａ２．ｂ１，・・・，ｈ２を有する１６＊Ｙビットシフトレジスタ構造をとる。この構造により、従来の回路規模削減アプローチで問題であったＤＰの加算器Ａ１１〜Ａ１８周辺のセレクタ増加が抑制される。１６＊Ｙビットシフトレジスタ構造をとることによる効果を、図６を参照して、より詳細に記載する。【００２２】
図６は、従来及び本発明の一実施例の夫々に関して加算器周辺回路を示す。本発明の一実施例における加算器Ａ１１〜Ａ１８の動作の理解を容易にするため、図６には、シフトレジスタの一部のレジスタ及び演算部に含まれる１個の加算器が示され、他の構成要素は示されない。【００２３】
図６において、（ａ）は、従来のビット分割による加算器削減アプローチに従う回路構成を示す。図示されるように、この従来のアプローチでは、本発明の一実施例で用いられる２個の１６＊Ｙビットレジスタの組に対応する３２＊ＹビットレジスタＡ、Ｂを用いる。この回路構成は、ＳＨＡ−２アルゴリズムの本来の仕様に従い、３２＊Ｙビット単位のシフト処理を行う。よって、演算単位が３２＊Ｙビットとなるので、ビット分割による１６＊２ビットの加算を実現するために、３２＊Ｙビットデータの上位１６＊Ｙビットと下位１６＊Ｙビットを順次加算しなければならない。ゆえに、上位ビット又は下位ビットを選択するセレクタを必要とする。【００２４】
一方、図６において、（ｂ）は本発明の一実施例に従う回路構成を示す。図示されるように、本実施例では、シフトレジスタは１６＊Ｙビットのレジスタａ１，ａ２，ｂ１及びｂ２を有する。シフト演算のビット単位もＳＨＡ−２アルゴリズム本来の仕様である３２＊Ｙビットから１６＊Ｙビット単位となるように変更されている。これにより、シフト演算がセレクタの機能を代替的に果たすこととなる。すなわち、３２＊Ｙビットデータの上位１６＊Ｙビットと下位１６＊Ｙビットを順次加算しようとする場合に、従来のアプローチで必要とされたようなセレクタは不要となる。このように、シフトレジスタとして１６＊Ｙビットのレジスタを用いることにより、ダイジェスト部で用いられる加算器のデータ幅を、余分のセレクタを設けることなく、従来の半分である１６＊Ｙビットにすることができる。【００２５】
具体的に、ｒ＝ａ＋ｂの演算を行う状況を例として、各回路構成の動作を説明する。ここで、ｒ、ａ及びｂの各変数は３２＊Ｙビットとする。また、各変数の上位１６＊ＹビットをＸＨとし、下位１６＊ＹビットをＸＬとする（Ｘ＝ｒ、ａ又はｂ）。更に、１６＊Ｙビットデータの１回の加算演算を１サイクルと定義する。【００２６】
図６（ａ）の従来のビット分割アプローチに従う回路構成では、レジスタＡ、Ｂの夫々に３２＊Ｙビットデータ｛ａＨ‖ａＬ｝、｛ｂＨ‖ｂＬ｝が格納されている。１サイクル目として、３２＊Ｙビットデータの下位１６＊Ｙビットについて演算を行う場合には、各レジスタから下位ビットａＬ及びｂＬを取り出し、加算器に入力するセレクタが必要となる。一方、同様の場合について、図６（ｂ）の本発明の一実施例に従う回路構成では、各３２＊Ｙビットデータの上位１６＊Ｙビット及び下位１６＊Ｙビットが別個のレジスタに格納されるので、セレクタは不要である。いずれの回路構成においても、このとき、加算器は、下位１６＊Ｙビットの加算演算、すなわち、ｃａｒｒｙ‖ｒＬ＝ａＬ＋ｂＬの演算を行う。ここで、ｃａｒｒｙは桁上がり信号であり、そのデータ幅は１ビットである。【００２７】
次に、２サイクル目として、３２＊Ｙビットデータの上位ビットについて演算が行われる。図６（ａ）の従来のビット分割アプローチに従う回路構成では、セレクタによって各レジスタから上位ビットａＨ及びｂＨが取り出される。一方、同様の場合について、図６（ｂ）の本発明の一実施例に従う回路構成では、各レジスタに格納される１６＊Ｙビットデータは隣のレジスタに移動する。すなわち、１サイクル目で下位ビットが格納されていたレジスタに上位ビットが格納される。いずれの回路構成においても、このとき、加算器は、上位１６＊Ｙビットの加算演算、すなわち、ｒＨ＝ａＨ＋ｂＨ＋ｃａｒｒｙの演算を行う。【００２８】
加算器の演算結果は、従来のビット分割アプローチに従う回路構成では、３２＊Ｙビットシフトレジスタを用いるために、３２＊Ｙビットデータとして出力されることを要する。従って、図６（ａ）に図示されるように、加算器の出力段にはデマルチプレクサが設けられる。このデマルチプレクサは、加算結果を格納する３２＊Ｙビットレジスタにおいて、１サイクル目では下位ビットｒＬを選択し、２サイクル目では上位ビットｒＨを選択する。一方、本発明の一実施例に従う回路構成では、１６＊Ｙビットシフトレジスタを用いることから、加算器の演算結果を結合するためのデマルチプレクサは不要である。【００２９】
このように、本発明の実施例では、１６＊Ｙビット幅のシフトレジスタ構造をとることで、加算器の入力線を固定したとしても、１サイクル毎にデータがシフトするので、下位ビットから上位ビット（又はその逆）の順番で加算器にデータを入力することが可能となる。つまり、セレクタを用いない固定結線による回路構造が実現され得る。このとき、加算器は１６＊Ｙビットのデータ幅を有し、１サイクルごとに加算演算を行う。【００３０】
再び図５を参照すると、演算部３０は、インターフェース部Ｓ１１〜Ｓ１４と、Σ０回路Ｃ１１と、Ｍａｊ回路Ｃ１２と、Σ１回路Ｃ１３と、Ｃｈ回路Ｃ１４とを更に有する。Σ０回路Ｃ１１及びΣ１回路Ｃ１３はいずれも、シフトレジスタの一部のレジスタに格納されたデータについて巡回シフト演算を行う３個の巡回シフト演算器と、それらの出力についてＸＯＲ演算を行うＸＯＲ演算器とを有してΣ関数を演算する論理演算回路である。Ｍａｊ回路Ｃ１２は、シフトレジスタの一部のレジスタに格納されたデータについてＡＮＤ演算を行う３個のＡＮＤ演算器と、それらの出力についてＸＯＲ演算を行うＸＯＲ演算器とを有してＭａｊ関数を演算する論理演算回路である。Ｃｈ回路Ｃ１４は、シフトレジスタの一部のレジスタに格納されたデータについてＡＮＤ演算を行う２個のＡＮＤ演算器と、それらの出力についてＸＯＲ演算を行うＸＯＲ演算器とを有してＣｈ関数を演算する論理演算回路である。各関数については、ＳＨＡ−２の一般的なアルゴリズムにおいて知られており、ここでは詳述しない。【００３１】
図３に図示される従来のＤＰの回路構成と比較すると、インターフェース部Ｓ１１〜Ｓ１４が挿入されている点を除いて、原則的には、その回路構成は同じである。しかし、Σ０回路Ｃ１１及びΣ１回路Ｃ１３を除く、加算器Ａ１１〜Ａ１８、Ｍａｊ回路Ｃ１２及びＣｈ回路Ｃ１４は、３２＊Ｙビットの半分である１６＊Ｙビットのデータ幅を扱う。Σ０回路Ｃ１１及びΣ１回路Ｃ１３は、Σ関数演算のために巡回シフト演算器を有する。この巡回シフト演算器には３２＊Ｙビットのデータ幅でデータが入力される必要があるため、Σ０回路Ｃ１１及びΣ１回路Ｃ１３の夫々の入力段には、１６＊Ｙビットのデータ幅を３２＊Ｙビットと整合させるインターフェース部Ｓ１１、Ｓ１３が設けられている。また、Σ０回路Ｃ１１及びΣ１回路Ｃ１３から出力されるデータのデータ幅は３２＊Ｙビットであるため、Σ０回路Ｃ１１及びΣ１回路Ｃ１３の夫々の出力段には、３２＊Ｙビットのデータ幅を１６＊Ｙビットと整合させるインターフェース部Ｓ１２、Ｓ１４が設けられている。【００３２】
第１のインターフェース部Ｓ１１は、レジスタ部２０とΣ０回路Ｃ１１との間に設けられる。第１のインターフェース部Ｓ１１は、図５に図示される実施例では、レジスタ部２０のレジスタａ１、ａ２及びｂ１に格納されている１６＊Ｙビットデータから適切な２つのデータを選択して、３２＊ＹビットデータとしてΣ０回路Ｃ１１へ入力する。第２のインターフェース部Ｓ１２は、Σ０回路Ｃ１１と、レジスタ部２０の先頭レジスタａ１へ結線された第１の加算器Ａ１１との間に設けられる。第２のインターフェース部Ｓ１２は、Σ０回路Ｃ１１から出力される３２＊Ｙビットデータの上位１６＊Ｙビットデータ又は下位１６＊Ｙビットデータのいずれかを選択して、第１の加算器Ａ１１へ入力する。第３のインターフェース部Ｓ１３は、レジスタ部２０とΣ１回路Ｃ１３との間に設けられる。第３のインターフェース部Ｓ１３は、レジスタ部２０のレジスタｅ１、ｅ２及びｆ１に格納されている１６＊Ｙビットデータから適切な２つのデータを選択して、３２＊ＹビットデータとしてΣ１回路Ｃ１３へ入力する。第４のインターフェース部Ｓ１４は、Σ１回路Ｃ１３と、第４の加算器Ａ１４との間に設けられる。第４のインターフェース部Ｓ１４は、Σ１回路Ｃ１３から出力される３２＊Ｙビットデータの上位１６＊Ｙビットデータ又は下位１６＊Ｙビットデータのいずれかを選択して、第４の加算器Ａ１４へ入力する。【００３３】
第１のインターフェース部Ｓ１１は２個のセレクタＭ１１及びＭ１２を有する。第１のセレクタＭ１１は２入力１出力マルチプレクサであって、レジスタａ１に接続された第１の入力と、レジスタａ２に接続された第２の入力と、Σ０回路Ｃ１１の入力に接続された出力とを有する。第２のセレクタＭ１２は、レジスタａ２に接続された第１の入力と、レジスタｂ１に入力された第２の入力と、Σ０回路Ｃ１１の入力に接続された出力とを有する。このような構成をとることで、第１のインターフェース部Ｓ１１は、処理の１サイクル目及び２サイクル目ともに、｛上位ビット‖下位ビット｝という結合順序で３２＊ＹビットデータをΣ０回路Ｃ１１へ入力する。第３のインターフェース部Ｓ１３もこれと同様の構成及び動作を有する。ここで、１サイクルは、１６＊Ｙビットデータの１回の加算演算によって、すなわち、シフトレジスタにおいて１６＊Ｙビットデータが現在のレジスタから隣のレジスタへ移動する周期によって定義される。【００３４】
Σ０回路Ｃ１１は、第１のインターフェース部Ｓ１１から入力されたデータに対して巡回シフト演算を行った後、ＸＯＲ演算を行う。これにより、Σ０回路Ｃ１１は、処理の１サイクル目及び２サイクル目ともに、｛上位ビット‖下位ビット｝の結合順序で３２＊Ｙビットデータを出力する。やはり、Σ１回路Ｃ１３もこれと同様の構成及び動作を有する。【００３５】
第２のインターフェース部Ｓ１２は１個のセレクタＭ２１を有する。セレクタＭ２１は２入力１出力マルチプレクサであって、Σ０回路Ｃ１１の出力に接続された２つの入力と、第１の加算器Ａ１１に接続された出力とを有する。Σ０回路Ｃ１１が上記のような結合順序で３２＊Ｙビットデータを出力する場合に、セレクタＭ２１は、１サイクル目では下位１６＊Ｙビットデータを選択し、２サイクル目では上位１６＊Ｙビットデータを選択するよう構成される。やはり、第４のインターフェース部Ｓ１４もこれと同様の構成及び動作を有する。【００３６】
このように、図５に図示される本発明の一実施例に従うＳＨＡ−２のＤＰの回路構成は、加算器Ａ１１〜Ａ１８周辺のセレクタ増加を伴わずに回路全体の演算ビットを従来の半分とすることができる。一方、演算ビットが半分となったことで演算時間も従来の半分に短縮されるので、回路の動作周波数を２倍にすることが可能であり、よって、演算ビットが従来の半分にされたとしても、スループットは従来と同等である。【００３７】
ここで、図５のインターフェース部Ｓ１１〜Ｓ１４は、図７に図示されるような構成をとることも可能である。図７には、Σ０回路Ｃ１１の周辺回路しか示されていないが、Σ１回路Ｃ１３の周辺回路も同様の構成を有する。【００３８】
図７において、第１のインターフェース部Ｓ２１は１個のセレクタＭ１１しか有さない。セレクタＭ１１は２入力１出力マルチプレクサであって、レジスタａ１に接続された第１の入力と、レジスタｂ１に接続された第２の入力と、Σ０回路Ｃ１１の入力に接続された出力とを有する。セレクタＭ１１は、１サイクル目では、レジスタａ１に格納されている１６＊Ｙビットデータを選択し、２サイクル目では、レジスタｂ１に格納されている１６＊Ｙビットデータを選択する。第１のインターフェース部Ｓ２１は、セレクタＭ１１によって選択された１６＊Ｙビットデータを、レジスタａ２に格納されている１６＊Ｙビットデータと結合する。そして、第１のインターフェース部Ｓ２１は、１サイクル目では｛上位ビット‖下位ビット｝の結合順序で、２サイクル目では｛下位ビット‖上位ビット｝の結合順序で、３２＊ＹビットデータをΣ０回路Ｃ１へ入力する。【００３９】
Σ０回路Ｃ１１は、第１のインターフェース部Ｓ２１から入力された３２＊Ｙビットデータに対して巡回シフト演算を行った後、ＸＯＲ演算を行う。これにより、Σ０回路Ｃ１１は、１サイクル目では｛上位ビット‖下位ビット｝の結合順序で、２サイクル目では｛下位ビット‖上位ビット｝の結合順序で３２＊Ｙビットデータを出力する。【００４０】
Σ０回路Ｃ１１からこのような結合順序で３２＊Ｙビットデータが出力されることにより、第２のインターフェース部Ｓ２２はセレクタを有する必要がない。第２のインターフェース部Ｓ２２は、Σ０回路Ｃ１１から出力される３２＊Ｙビットデータの下側１６＊Ｙビットを無条件に出力することで、１サイクル目では下位１６＊Ｙビットデータを、２サイクル目では上位１６＊Ｙビットデータを取り出すことができる。具体的には、例えば、Σ０回路Ｃ１１から延びる３２本のデータ線のうち、下側１６＊Ｙビットに相当するデータを伝送するデータ線を取り出して後段の加算器に接続する構成が考えられる。よって、セレクタは不要となる。【００４１】
代替的に、第１のインターフェース部Ｓ２１は、１サイクル目では｛下位ビット‖上位ビット｝の結合順序で、２サイクル目では｛上位ビット‖下位ビット｝の結合順序で、３２＊ＹビットデータをΣ０回路Ｃ１１へ入力することも可能である。この場合には、Σ０回路Ｃ１１からは、１サイクル目では｛下位ビット‖上位ビット｝の結合順序で、２サイクル目では｛上位ビット‖下位ビット｝の結合順序で、データが出力される。そして、第２のインターフェース部Ｓ２２は、Σ０回路Ｃ１１から出力される３２＊Ｙビットデータの上側１６＊Ｙビットを無条件に出力すれば良い。【００４２】
各インターフェース部が図７に図示されるように構成されることで、図５に図示される回路構成に比べ、使用するセレクタの個数が減り、結果としてＤＰの回路規模はより小さくなる。【００４３】
また、図７に図示されるΣ０回路Ｃ１１の周辺回路は、図８に図示されるように変形され得る。図８のΣ０回路Ｃ２１は、巡回シフト演算をされた３２＊Ｙビットデータの下側（又は上側）１６＊ＹビットのみについてＸＯＲ演算を行うよう構成される。具体的には、例えば、各巡回シフト演算器から延びる３２本のデータ線のうち、下側（又は上側）１６＊Ｙビットに相当するデータを伝送するデータ線を取り出してＸＯＲ演算器に接続する構成が考えられる。これにより、第１のインターフェース部Ｓ２１が図７に図示されるような構成をとる場合に、第２のインターフェース部は不要となる。よって、図７に図示される構成をとる場合よりも、ＤＰの回路規模はより一層小さくなる。【００４４】
以上、ＳＨＡ−２アルゴリズム仕様において１サイクルで実行していた演算処理を２サイクルにわたって行うことで加算器のデータ幅を半分（１／２）にすること可能な本発明の一実施例に従う構成を記載してきた。次に、ＳＨＡ−２アルゴリズム仕様において１サイクルで実行する処理をＸ（＝２ｋ（Ｙ＝１の場合、２≦ｋ≦４。Ｙ＝２の場合、２≦ｋ≦５。ｋは整数。））サイクルにわたって行うことで加算器のデータ幅を１／Ｘにする構成について記載する。【００４５】
図９は、Ｘサイクル処理時のシフトレジスタの構成を示す。図９のシフトレジスタ４０は、ＭＰから出力されるデータＷｉによって更新される第１のレジスタの組であって、８＊Ｘ個の（３２＊Ｙ）／Ｘビットレジスタａ１，ａ２，・・・，ａＸ，ｂ１，・・・ｈＸを有する。すなわち、シフトレジスタ４０はａ１〜ａＸ，ｂ１〜ｂＸ，・・・，ｈ１〜ｈＸの８つのレジスタの組を有し、各組はＸ個の（３２＊Ｙ）／Ｘビットレジスタを有して、組ごとに３２＊Ｙビットデータを扱う。【００４６】
このような構成によって、図６を参照して説明したように、ダイジェスト部に含まれる所定個（通常は８個）の加算器の夫々は（３２＊Ｙ）／Ｘビットのデータ幅を有することができる。すなわち、加算器は、シフトレジスタに格納されるデータが（３２＊Ｙ）／Ｘビットのデータ幅でレジスタ間をシフトする１サイクルごとに、入力される（３２＊Ｙ）／Ｘビットデータについて加算演算を行うことができる。【００４７】
図１０は、Ｘサイクル処理時のΣ０回路の周辺回路の構成を示す。図１０において、（ａ）は、２サイクル処理に関して図５を参照して記載された構成をＸサイクル処理に対応するよう拡張した構成を示し、（ｂ）は、同様に２サイクル処理に関して図８を参照して記載された構成をＸサイクル処理に対応するよう拡張した構成を示す。（ａ）の構成では、Σ０回路の入力段にＸ個のＸ入力１出力マルチプレクサ（ＭＵＸ）が設けられ、Σ０回路の出力段に１個のＸ入力１出力ＭＵＸが設けられている。一方、（ｂ）の構成では、Σ０回路の入力段にのみ（Ｘ−１）個の２入力１出力ＭＵＸが設けられている。【００４８】
なお、Σ１回路の周辺回路は、Σ１回路の入力段に設けられたマルチプレクサへ、レジスタ"ａ"及び"ｂ"の値ではなく、レジスタ"ｅ"及び"ｆ"の値が入力される点を除いて、図１０に図示されるΣ０回路の周辺回路と同じ構成を有する。【００４９】
図１１は、図１０に図示されるΣ０回路の周辺回路のデータ入出力に関する説明図である。説明を簡単にするため、図１１では、Ｘ＝４サイクル処理時を例とする。図１１において、（ａ）は、図１０（ａ）に図示されるような構成を有するΣ０回路の周辺回路のデータ入出力を表し、（ｂ）は、図１０（ｂ）に図示されるような構成を有するΣ０回路の周辺回路のデータ入出力を表す。ここで、１サイクル目に入力される３２＊Ｙビットデータを８＊Ｙビットずつ４つに分割したとき、上位から８＊Ｙビットずつを夫々Ｉ４、Ｉ３、Ｉ２及びＩ１とする。また、それらのデータが実際に格納されているレジスタをａ１、ａ２、ａ３、ａ４、ｂ１、ｂ２、ｂ３及びｂ４で表すこととする。また、Σ０回路から出力されるデータのうち下位からｉ（ｉ＝１，２，３，４）番目の８＊ＹビットデータをΣ０(Ｉ)ｉで表すこととする。【００５０】
図１１（ａ）に表されるデータ入出力では、Σ０回路へ入力されるデータＩは、全てのサイクルを通して｛Ｉ４‖Ｉ３‖Ｉ２‖Ｉ１｝の固定された結合順序を有する。この回路構成では、データＩを格納する４つのレジスタは、１サイクル目のａ１〜ａ４を基準として、その後１サイクル毎に右へシフトする。Σ０回路は、入力データＩ＝｛Ｉ４‖Ｉ３‖Ｉ２‖Ｉ１｝に対して巡回シフト演算を行った後、ＸＯＲ演算を行う。その結果、図示されるように、Σ０回路から出力される３２＊Ｙビットデータの中から選択されるべき８＊Ｙビットデータは、出力データにおいてサイクル毎に異なるビット範囲に存在することとなる。よって、所望の８＊Ｙビットデータを選択するために、Σ０回路の出力段にセレクタ（すなわち、１個のＸ入力１出力ＭＵＸ）を設ける必要がある。【００５１】
このときのサイクル毎の巡回シフトの様子を数式で表すと、以下のようになる：
１サイクル：Σ０(Ｉ)４‖Σ０(Ｉ)３‖Σ０(Ｉ)２‖Σ０(Ｉ)１＝Σ０(Ｉ)
２サイクル：Σ０(Ｉ)１‖Σ０(Ｉ)４‖Σ０(Ｉ)３‖Σ０(Ｉ)２＝Σ０(Ｉ)＞＞＞８＊Ｙ
３サイクル：Σ０(Ｉ)２‖Σ０(Ｉ)１‖Σ０(Ｉ)４‖Σ０(Ｉ)３＝Σ０(Ｉ)＞＞＞１６＊Ｙ
４サイクル：Σ０(Ｉ)３‖Σ０(Ｉ)２‖Σ０(Ｉ)１‖Σ０(Ｉ)４＝Σ０(Ｉ)＞＞＞３２＊Ｙ
上記の数式から、Σ０回路の出力データを右巡回シフトさせる必要があることが分かる。ここで、Σ０回路により実現されるΣ関数の性質として、ΣＸ（ａ）＞＞＞ｂ＝ΣＸ（ａ＞＞＞ｂ）というものが知られている。この性質により、Σ０回路の出力データを右巡回シフトさせるためには、入力データを同じビット数だけ右巡回シフトすれば良い。よって、入力データＩを１サイクル毎に８＊Ｙビットだけ右巡回シフトさせながらΣ０回路へ入力すれば良い。ここで、入力データが格納されているレジスタａ１、ａ２、ａ３、ａ４、ｂ１、ｂ２及びｂ３では、１サイクル毎に８＊Ｙビットだけデータが右へシフトする。このシフトレジスタ構造を利用することで、入力データＩの１サイクル毎の８＊Ｙビット右巡回シフトが可能となる。【００５２】
シフトレジスタ構造を利用して、全てのサイクルを通して、そのサイクルに関して所望の８＊ＹビットデータがΣ０回路から出力されるよう、入力データＩを１サイクルごとに８＊Ｙビット右巡回シフトを行う様子が、図１１（ｂ）に表される。図１１（ｂ）に表されるデータ入出力では、入力データＩは、所望の８＊Ｙビットデータが、全てのサイクルを通して常に、Σ０回路での巡回シフト演算により得られる３２＊Ｙビットデータの下側８＊Ｙビットに存在するように制御される。このようなデータ入出力の方法により、Σ０回路の入力段に設けられるセレクタも、図１０（ｂ）に図示されるように、削減することが可能となる。また、Σ０回路の出力側での８＊Ｙビットデータの選択は、図１０（ｂ）に図示されるように、巡回シフト演算をされた３２＊Ｙビットデータの下側８＊ＹビットのみについてＸＯＲ演算を行うようΣ０回路を構成することで実現される。あるいは、それは、２サイクル処理時に関して図７に図示されたように、Σ０回路の後段に、Σ０回路から出力される３２＊Ｙビットデータの下側８＊Ｙビットを（セレクタを用いずに）無条件に出力する構成を設けることでも実現され得る。【００５３】
このように、図１０（ｂ）に図示される回路構成は、図１１（ｂ）に表されるように出力データの最下位データが所望のデータとなるようにするためのものであった。なお、下位からｉ番目のビット範囲又は上側８＊Ｙビットに所望のデータが存在するように、図１０（ｂ）と同等の回路を構成することも可能である。【００５４】
図１０及び図１１を参照して明らかであるように、図１０（ｂ）に図示される回路構成の方が、図１０（ａ）に図示される回路構成に比べて、使用するセレクタの個数が少ない分、回路規模が小さい。よって、処理サイクル数（Ｘ）が大きくなるほど、効果的に回路規模の削減を図るために、シフトレジスタ構造を利用した図１０（ｂ）のような回路構成を用いることが望ましい。【００５５】
図１２は、Ｘサイクル処理時のＭａｊ回路の構成を示す。図１２のＭａｊ回路Ｃ２２は、３つのＡＮＤ演算器Ｌ２１、Ｌ２２、Ｌ２３及び１つのＸＯＲ演算器Ｌ２４を有する。第１のＡＮＤ演算器Ｌ２１は、先頭から第１及び第２のレジスタの組の最後尾のレジスタａＸ及びｂＸの夫々に接続された２つの入力と、ＸＯＲ演算器Ｌ２４の入力の１つに接続された１つの出力とを有する。第２のＡＮＤ演算器Ｌ２２は、先頭から第２及び第３のレジスタの組の最後尾のレジスタｂＸ及びｃＸの夫々に接続された２つの入力と、ＸＯＲ演算器Ｌ２４の入力の１つに接続された１つの出力とを有する。第３のＡＮＤ演算器Ｌ２３は、先頭から第１及び第３のレジスタの組の最後尾のレジスタａＸ及びｃＸの夫々に接続された２つの入力と、ＸＯＲ演算器Ｌ２４の入力の１つに接続された１つの出力とを有する。ＸＯＲ演算器Ｌ２４の出力は加算器の１つ（図示せず。）に接続される。このようにＭａｊ回路Ｃ２２は原則的には従来と同じ構成を有するが、ＤＰが図９に図示されるようなシフトレジスタを用いることで、扱うビット幅が（３２＊Ｙ）／Ｘとなり、結果的に回路規模が従来よりも削減され得る。【００５６】
図１３は、Ｘサイクル処理時のＣｈ回路の構成を示す。図１３のＣｈ回路Ｃ２４は、２つのＡＮＤ演算器Ｌ４１、Ｌ４２及び１つのＸＯＲ演算器Ｌ４３を有する。第１のＡＮＤ演算器Ｌ４１は、先頭から第５及び第６のレジスタの組の最後尾のレジスタｅＸ及びｆＸの夫々に接続された２つの入力と、ＸＯＲ演算器Ｌ４３の入力の１つに接続された１つの出力とを有する。第２のＡＮＤ演算器Ｌ４２は、第５のレジスタの組の最後尾のレジスタｅＸに格納されているデータが反転されて入力される第１の入力と、第７のレジスタの組の最後尾のレジスタｇＸに接続された第２の入力とを有する。また、第２のＡＮＤ演算器Ｌ４２は、ＸＯＲ演算器Ｌ４３の入力の１つに接続された１つの出力を有する。ＸＯＲ演算器Ｌ４３の出力は加算器の１つ（図示せず。）に接続される。このようにＣｈ回路Ｃ２４は原則的には従来と同じ構成を有するが、ＤＰが図９に図示されるようなシフトレジスタを用いることで、扱うビット幅が（３２＊Ｙ）／Ｘとなり、結果的に回路規模が従来よりも削減され得る。【００５７】
以上、発明を実施するための最良の形態について説明を行ったが、本発明は、この最良の形態で述べた実施の形態に限定されるものではない。本発明の主旨を損なわない範囲で変更することが可能である。
【図１】
2010041307.tif 000003
【図２】
2010041307.tif 000004
【図３】
2010041307.tif 000005
【図４】
2010041307.tif 000006
【図５】
2010041307.tif 000007
【図６】
2010041307.tif 000008
【図７】
2010041307.tif 000009
【図８】
2010041307.tif 000010
【図９】
2010041307.tif 000011
【図１０】
2010041307.tif 000012
【図１１】
2010041307.tif 000013
【図１２】
2010041307.tif 000014
【図１３】
2010041307.tif 000015
【手続補正書】
【提出日】平成23年3月22日(2011.3.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
３２＊Ｙ（Ｙ＝１又は２）ビットを基本演算単位とするＳＨＡ−２アルゴリズムを用いた、複数のレジスタが直列に配置されるシフトレジスタと、該シフトレジスタに格納されるデータに基づき加算演算を行う所定個の加算器とを有するダイジェスト部を有する暗号化装置であって、
前記シフトレジスタは、（３２＊Ｙ）／Ｘ（Ｘ＝２ｋ。Ｙ＝１のとき１≦ｋ≦４、Ｙ＝２のとき１≦ｋ≦５。ｋは整数。）ビットのレジスタを有し、
前記所定個の加算器は、夫々、（３２＊Ｙ）／Ｘビットのデータ幅を有し、前記シフトレジスタに格納されるデータが（３２＊Ｙ）／Ｘビットのデータ幅で前記レジスタ間をシフトする１サイクルごとに、前記加算演算を行う、暗号化装置。
【請求項２】
３２＊Ｙビットのデータ幅で入力されたデータに対しΣ関数演算を行う論理演算回路を更に有し、
前記論理演算回路の入力側に、（３２＊Ｙ）／Ｘビットのデータ幅を３２＊Ｙビットと整合させる第１のインターフェース部を設ける、請求項１記載の暗号化装置。
【請求項３】
前記第１のインターフェース部は、所定の連続するＸ個のレジスタ及び該Ｘ個のレジスタに続く（Ｘ−１）個のレジスタの間を１サイクルごとに（３２＊Ｙ）／Ｘビットのデータ幅でシフトする３２＊Ｙビットデータを前記シフトレジスタから取り出して出力する、請求項２記載の暗号化装置。
【請求項４】
前記論理演算回路の出力側に、前記論理演算回路から出力される３２＊Ｙビットデータのビット幅を（３２＊Ｙ）／Ｘビットと整合させる第２のインターフェース部を設け、
前記第２のインターフェース部は、前記論理演算回路から出力される３２＊Ｙビットデータから１サイクルごとに該サイクルに応じた所定の（３２＊Ｙ）／Ｘビットデータを取り出し、前記加算器の１つへ出力する、請求項３記載の暗号化装置。
【請求項５】
前記第１のインターフェース部は、所定の連続するＸ個のレジスタ及び該Ｘ個のレジスタに続く（Ｘ−１）個のレジスタの間を１サイクルごとに（３２＊Ｙ）／Ｘビットのデータ幅でシフトする３２＊Ｙビットデータを前記シフトレジスタから取り出し、１サイクルごとに（３２＊Ｙ）／Ｘビットのデータ幅で巡回シフトさせながら前記加算器の１つへ出力する、請求項２記載の暗号化装置。
【国際調査報告】
2010041307.tif 000016
2010041307.tif 000017
2010041307.tif 000018
2010041307.tif 000019