(57)【要約】【課題】暗号処理装置の回路規模を小型化し、コストを低下させること。【解決手段】暗号処理装置１は、ＫＰＳ方式による暗号処理において、暗号化を行うプロセッサ３０によって、共通鍵を算出するための行列演算（実行ＩＤと秘密アルゴリズムとの乗算）を行い、行列演算回路および行列演算のための入出力機能を省略することとしている。したがって、実行ＩＤと秘密アルゴリズムとの乗算を行う回路を備える必要がないことから、回路規模を小型化することができ、低コスト化を実現することができる。【選択図】        図１
2004172855.tif 000002
【特許請求の範囲】
【請求項１】
暗号化された情報の送受信において、送信側および受信側が通信相手の識別情報を互いに取得しておき、送信側において、受信側の識別情報を第１の一方向性関数によって処理した第１の実行ＩＤと送信側の秘密アルゴリズムとに対し、行列演算および第２の一方向性関数による処理を含む演算を施して共通鍵を生成し、所定の暗号化アルゴリズムに基づいて、該共通鍵によって暗号化された情報を受信側に送信し、受信側において、送信側の識別情報を前記第１の一方向性関数によって処理した第２の実行ＩＤと受信側の秘密アルゴリズムとに対し、行列演算および前記第２の一方向性関数による処理を含む演算を施して共通鍵を生成し、前記暗号化アルゴリズムに基づいて、前記暗号化された情報を該共通鍵によって復号化する暗号化処理方法に係る暗号処理装置であって、
前記共通鍵によって暗号化する処理あるいは前記暗号化された情報を前記共通鍵によって復号化する処理を実行する暗号プロセッサを含み、
該暗号プロセッサは、送信側において前記第１の実行ＩＤと送信側の秘密アルゴリズムとを行列演算する処理あるいは受信側において前記第２の実行ＩＤと受信側の秘密アルゴリズムとを行列演算する処理を実行することを特徴とする暗号処理装置。
【請求項２】
前記第１の一方向性関数あるいは前記第２の一方向性関数の少なくともいずれかとして暗号化アルゴリズムを用い、前記暗号プロセッサは、前記第１の一方向性関数あるいは前記第２の一方向性関数による処理を実行することを特徴とする請求項１記載の暗号処理装置。
【請求項３】
前記秘密アルゴリズムを暗号化して記憶し、前記第１の実行ＩＤあるいは前記第２の実行ＩＤと行列演算する際に、前記暗号プロセッサが前記秘密アルゴリズムを復号化して使用可能であることを特徴とする請求項１または２記載の暗号処理装置。
【請求項４】
前記暗号プロセッサがデータを読み出す領域およびデータを書き込む領域には所定のアドレスが割り当てられ、前記暗号プロセッサに対する命令がコード化され、
前記暗号プロセッサに、所定命令を示すコードと、データの読み出し先および書き込み先に関する情報とを入力することにより、前記暗号プロセッサがデータの読み込み先および書き込み先にアクセスし、前記所定命令を実行可能であることを特徴とする請求項１〜３のいずれかに記載の暗号処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、平文とその暗号文とを相互に変換する暗号処理装置に関する。
【０００２】
【従来の技術】
従来、ＫＰＳ（Ｋｅｙ  Ｐｒｅｄｉｓｔｒｉｂｕｔｉｏｎ  Ｓｙｓｔｅｍ）方式による暗号鍵配送が利用されている。
図４は、ＫＰＳ方式による暗号通信の概念を示す図である。
ＫＰＳ方式においては、情報の送信に当たり、送信側および受信側にＫＰＳセンターから秘密アルゴリズムがそれぞれ発行される。
【０００３】
そして、送信側において、受信者の公開ＩＤを一方向性関数によって処理した実行ＩＤと、秘密アルゴリズムとを行列演算し、一方向性関数によって処理した結果を共通鍵として暗号化を行う。
より詳細には、送信側において、所定の乱数を発生させ、これをワーク鍵として平文を暗号化し、ワーク鍵である乱数を共通鍵によって暗号化する。
【０００４】
そして、平文からの暗号文と、暗号化されたワーク鍵とを受信側に送信する。
受信側においては、送信者の公開ＩＤを一方向性関数によって処理した実行ＩＤと、秘密アルゴリズムとを行列演算し、一方向性関数によって処理した結果を共通鍵として復号化を行う。
より詳細には、受信側において、共通鍵によって、暗号化されたワーク鍵を復号化し、そのワーク鍵によって暗号文を平文に復号化する。
【０００５】
ここで、ＫＰＳ方式においては、一方向性関数として、所定の暗号化アルゴリズムを用い、また、平文の暗号化には、それとは異なる暗号化アルゴリズムを用いている。
したがって、ＫＰＳ方式を実現するハードウェアにおいては、異なる暗号化アルゴリズムのための回路が必要となり、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）化する際には、回路規模が大きくなり、コストが増大すると言う問題があった。
【０００６】
そこで、特開２０００−２８６８３０号公報に記載された技術は、一方向性関数として用いるアルゴリズムと、平文の暗号化に用いるアルゴリズムとを共通のものとし、回路の小規模化や低コスト化を実現するものとしている。
【０００７】
【特許文献１】
特開２０００−２８６８３０号公報
【０００８】
【発明が解決しようとする課題】
しかしながら、特開２０００−２８６８３０号公報に記載された技術においては、一方向性関数と、平文の暗号化に用いるアルゴリズムとを共通化しているものの、共通鍵を算出する処理は、従来と同様に行っていることから、実行ＩＤと秘密アルゴリズムとを行列演算する回路を別途設ける必要があった。
【０００９】
このとき、実行ＩＤと秘密アルゴリズムとを行列演算する回路を設けることにより、ＩＣ化を実現する上で、回路規模の小型化、低コスト化を妨げる要因となる場合があった。
本発明の課題は、暗号処理装置の回路規模を小型化し、コストを低下させることである。
【００１０】
【課題を解決するための手段】
以上の課題を解決するため、請求項１記載の発明は、
暗号化された情報の送受信において、送信側および受信側が通信相手の識別情報（例えば、公開ＩＤ）を互いに取得しておき、送信側において、受信側の識別情報を第１の一方向性関数によって処理した第１の実行ＩＤと送信側の秘密アルゴリズムとに対し、行列演算および第２の一方向性関数による処理を含む演算を施して共通鍵を生成し、所定の暗号化アルゴリズム（例えば、ＤＥＳ方式等）に基づいて、該共通鍵によって暗号化された情報を受信側に送信し、受信側において、送信側の識別情報を前記第１の一方向性関数によって処理した第２の実行ＩＤと受信側の秘密アルゴリズムとに対し、行列演算および前記第２の一方向性関数による処理を含む演算を施して共通鍵を生成し、前記暗号化アルゴリズムに基づいて、前記暗号化された情報を該共通鍵によって復号化する暗号化処理方法に係る暗号処理装置であって、前記共通鍵によって暗号化する処理あるいは前記暗号化された情報を前記共通鍵によって復号化する処理を実行する暗号プロセッサ（例えば、図１のプロセッサ３０）を含み、該暗号プロセッサは、送信側において前記第１の実行ＩＤと送信側の秘密アルゴリズムとを行列演算する処理あるいは受信側において前記第２の実行ＩＤと受信側の秘密アルゴリズムとを行列演算する処理を実行することを特徴としている。
【００１１】
請求項２記載の発明は、
請求項１記載の暗号処理装置であって、
前記第１の一方向性関数あるいは前記第２の一方向性関数の少なくともいずれかとして暗号化アルゴリズムを用い、前記暗号プロセッサは、前記第１の一方向性関数あるいは前記第２の一方向性関数による処理を実行することを特徴としている。
【００１２】
請求項３記載の発明は、
請求項１または２記載の暗号処理装置であって、
前記秘密アルゴリズムを暗号化して記憶し、前記第１の実行ＩＤあるいは前記第２の実行ＩＤと行列演算する際に、前記暗号プロセッサが前記秘密アルゴリズムを復号化して使用可能であることを特徴としている。
【００１３】
請求項４記載の発明は、
請求項１〜３のいずれかに記載の暗号処理装置であって、
前記暗号プロセッサがデータを読み出す領域（例えば、図１のＲＯＭ２０）およびデータを書き込む領域（例えば、図１のＲＡＭ４０）には所定のアドレスが割り当てられ、前記暗号プロセッサに対する命令がコード化され、前記暗号プロセッサに、所定命令を示すコードと、データの読み出し先および書き込み先に関する情報とを入力することにより、前記暗号プロセッサがデータの読み込み先および書き込み先にアクセスし、前記所定命令を実行可能であることを特徴としている。
【００１４】
即ち、暗号プロセッサが、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）回路とプログラムによりデータの入出力を管理したり、プログラムによってレジスタへのアクセスを行うことによりデータの入出力を管理したりすることなく、データの入出力を直接管理することにより、所定命令を実行可能である。
本発明によれば、ＫＰＳ方式による暗号処理において、暗号化を行う暗号プロセッサによって、共通鍵を算出するための行列演算（実行ＩＤと秘密アルゴリズムとの乗算）を行い、従来、暗号化あるいは復号化を行う部分とは別に備えられていた共通鍵を算出するための行列演算回路を暗号化プロセッサによって実現すると共に、暗号化プロセッサによって共通鍵を算出するために、データの入出力を簡略な方法（暗号化プロセッサに、実行される機能名、ソースアドレス、ディスティネーションアドレス等を与えることにより入出力を行う方法）により実現することとしている。
【００１５】
したがって、実行ＩＤと秘密アルゴリズムとの行列演算を行う回路を別途備える必要がないことから、回路規模を小型化することができ、低コスト化を実現することができる。
また、本発明によれば、秘密アルゴリズムを記憶しておくに当たり、秘密アルゴリズムのビット列を所定順序で入れ替えた状態で記憶している。
【００１６】
したがって、暗号プロセッサが秘密アルゴリズムを読み出す際の信号をトレースされることにより、秘密アルゴリズムが盗用されることを防ぐことができる。
【００１７】
【発明の実施の形態】
以下、図を参照して本発明に係る暗号処理装置の実施の形態を詳細に説明する。
図１は、本発明を適用した暗号処理装置１の機能構成を示すブロック図である。なお、暗号処理装置１は、ＫＰＳ方式による暗号処理を行う装置である。
【００１８】
図１において、暗号処理装置１は、乱数発生器１０と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０と、プロセッサ３０と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０とを含んで構成される。
乱数発生器１０は、平文を暗号化する際のワーク鍵となる所定の乱数を発生させ、発生した乱数をプロセッサ３０に出力する。
【００１９】
ＲＯＭ２０は、外付けされたＲＯＭであり、ＫＰＳ方式における秘密アルゴリズム（Ｐｒｉｖａｔｅ  ＩＤ）を記憶している。
ここで、安全性を高めるため、ＲＯＭ２０には、スクランブルＩＤに基づいて秘密アルゴリズムのビット列が入れ替えられた状態で記憶されている。具体的には、秘密アルゴリズムは、スクランブルＩＤによってビット列の入れ替えが施されている。さらに、スクランブルＩＤは、スクランブルキーによってシングルＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）またはトリプルＤＥＳで暗号化されている。
【００２０】
そして、ＲＯＭ２０には、ビット列が入れ替えられた秘密アルゴリズム（Ｅｎｃｒｙｐｔ  Ｐｒｉｖａｔｅ  ＩＤ）と、シングルＤＥＳまたはトリプルＤＥＳの共通鍵として使用されるスクランブルキー（ＦＳｃｒａｍｂｌｅ  Ｋｅｙ）と、シングルＤＥＳまたはトリプルＤＥＳによって暗号化されたスクランブルＩＤ（Ｅｎｃｒｙｐｔ  Ｓｃｒａｍｂｌｅ  ＩＤ）とが併せて記憶されている。
【００２１】
さらに、ＲＯＭ２０には、所定のアドレスが設定されており、プロセッサ３０が、所定のアドレスにアクセスすることにより、データを読み出すことが可能である。
プロセッサ３０は、ＤＥＳのアルゴリズム（シングルＤＥＳまたはトリプルＤＥＳ）に基づく暗号化あるいは復号化を行う。また、プロセッサ３０は、一方向性関数として、この暗号化アルゴリズムを用いた処理を行うことにより、一方向性関数の演算回路としても共用される。
【００２２】
さらに、プロセッサ３０は、ＫＰＳ方式に基づいて共通鍵を算出する際の行列演算回路としても機能する。即ち、ＫＰＳにおいては、送信者の公開ＩＤを一方向性関数によって処理した実行ＩＤと、秘密アルゴリズムとを行列演算する処理が行われるが、プロセッサ３０は、この行列演算を行う回路としても機能する。そのために、プロセッサ３０がＲＯＭ２０やＲＡＭ４０の所定のアドレスにアクセスして、データの読み出しや書き込みを行うことが可能なように、ＲＯＭ２０およびＲＡＭ４０に所定のソースアドレスが割り当てられ、ＲＡＭ４０に所定のデスティネーションアドレスが割り当てられている。また、プロセッサ３０は、暗号化または復号化、一方向性関数の処理あるいは行列演算のいずれかを切り替えて実行するため、いずれの処理を行うか（機能名）が実行される処理に伴って入力される。
【００２３】
図２は、プロセッサ３０の機能の一部を示す図である。
図２において、プロセッサ３０は、第１の一方向性関数ｆ１の演算と、平文およびワーク鍵の暗号化と、平文の暗号文の復号化および暗号化されたワーク鍵の復号化と、共通鍵を算出するための行列演算と、ＲＯＭ２０からスクランブルキーを読み出し、ＲＡＭ４０に格納する処理と、スクランブルＩＤの復号化と、乱数を取得する処理と、第２の一方向性関数ｆ２の演算とを行う機能を備えている。
【００２４】
図２に示す機能のうち、平文の暗号化および暗号文の復号化は、従来の一般的な暗号処理に用いられるプロセッサにおいて行われている処理であり、さらに、特開２０００−２８６８３０号公報に記載された技術においては、一方向性関数ｆ１，ｆ２の演算を行うこととしている。
一方、本実施の形態におけるプロセッサ３０は、これらの処理に加えて、共通鍵を算出するための行列演算と、ＲＯＭ２０からビット列が入れ替えられた秘密アルゴリズムを読み出し、スクランブルＩＤに基づいて、入れ替えられたビット列を元に戻しつつ実行ＩＤとの行列演算を行って、その結果をＲＡＭ４０に格納する処理とを行う。
【００２５】
このように、プロセッサ３０が、共通鍵を算出するための行列演算を行うことにより、行列演算を行うための回路を別途設ける必要がなくなり、回路規模を縮小することができる。
なお、プロセッサ３０は、論理積および排他的論理和の演算回路によって行列演算回路を構成している。
【００２６】
また、ＲＯＭ２０には、上述のように、ビット列が入れ替えられた秘密アルゴリズムが記憶されているため、プロセッサ３０は、ＲＯＭ２０から秘密アルゴリズムを読み出し、実行ＩＤとの行列演算を行うに当たり、所定の復号処理を行う必要がある。以下、この処理の手順について説明する。
図３は、ＲＯＭ２０から、ビット列が入れ替えられた秘密アルゴリズム（Ｅｎｃｒｙｐｔ  Ｐｒｉｖａｔｅ  ＩＤ）が読み出される際にビット列が元に戻される（復号される）手順を示す図である。
【００２７】
図３において、プロセッサ３０は、初めに、ＲＯＭ２０からスクランブルキー（ＦＳｃｒａｍｂｌｅ  Ｋｅｙ）を読み出し、ＲＡＭ４０に格納する（処理▲１▼）。
そして、プロセッサ３０は、読み出したスクランブルキーを初期値として、シングルＤＥＳまたはトリプルＤＥＳによってスクランブルＩＤを復号化し（処理▲２▼）、そのスクランブルＩＤによって、ビット列が入れ替えられた秘密アルゴリズムを元のビット列に戻す（処理▲３▼）。
なお、このとき、プロセッサ３０は、トリプルＤＥＳによる復号化を行う場合、ＤＥＳ回路を制御し、ＤＥＳ回路を３回機能させることにより、トリプルＤＥＳの演算を行う。これにより、トリプルＤＥＳ回路を別途設ける必要がなくなり、回路規模を増やすことなく秘密アルゴリズムを安全に外付けのＲＯＭ２０に格納することができる。
【００２８】
このような手順を経ることにより、ＲＯＭ２０から秘密アルゴリズム（Ｄｅｃｒｙｐｔ  Ｐｒｉｖａｔｅ  ＩＤ）が読み出される。
したがって、外付けのＲＯＭに秘密アルゴリズムを格納する場合であっても、プロセッサ３０とＲＯＭ２０間において送受信される信号をトレースされることにより、第三者に秘密アルゴリズムが盗用されることを防ぐことができる。
【００２９】
ＲＡＭ４０は、プロセッサ３０が算出した各種データを所定のアドレス（デスティネーションアドレス）に記憶する。また、ＲＡＭ４０は、暗号化対象である平文やワーク鍵、復号化対象である暗号文や暗号化されたワーク鍵、通信相手の公開ＩＤを記憶する。
上述の構成の下、プロセッサ３０は、例えば、以下のような暗号化処理（送信側の処理）を行う。
【００３０】
まず、プロセッサ３０は、ＲＡＭ４０から読み出した通信相手の公開ＩＤを一方向性関数によって処理し、得られた実行ＩＤをＲＡＭ４０に記憶する（ステップＳ１）。
次に、プロセッサ３０は、ＲＯＭ２０から秘密アルゴリズムを読み出し、図３に示すビット列の入れ替えを行う（ステップＳ２）。
【００３１】
そして、プロセッサ３０は、ＲＡＭ４０から実行ＩＤを読み出し、実行ＩＤと秘密アルゴリズムとの行列演算を行う。さらに、プロセッサ３０は、演算結果をＲＡＭ４０に書き込む（ステップＳ３）。
ここで、プロセッサ３０によって行列演算を行う際、プロセッサ３０には、実行される機能名（コマンド名）、ソースアドレス、ソースデータ長、ディスティネーションアドレス、ディスティネーションデータ長、初期化ベクトル（Ｉｎｉｔｉａｌｉｚａｔｉｏｎ  Ｖｅｃｔｏｒ）格納アドレスおよび共通鍵格納アドレスが与えられ、これらの情報によって、プロセッサ３０の各機能を起動することができる。
【００３２】
したがって、従来のように、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）回路とプログラムによりデータの入出力を管理したり、プログラムによってレジスタへのアクセスを行うことによりデータの入出力を管理したりする必要がなくなり、プロセッサ３０へのデータの入出力を簡単に行うことができる。
続いて、プロセッサ３０は、乱数発生器１０によって発生されたワーク鍵としての乱数を読み出し、ＲＡＭ４０に記憶する（ステップＳ４）。
【００３３】
そして、プロセッサ３０は、ＲＡＭ４０から暗号化対象である平文と、ワーク鍵とを読み出し、平文に対し、シングルＤＥＳ方式またはトリプルＤＥＳ方式に基づく暗号化を行い、暗号文をＲＡＭ４０に記憶する（ステップＳ５）。
さらに、プロセッサ３０は、ＲＡＭ４０から実行ＩＤと秘密アルゴリズムとの演算結果を読み出し、その演算結果を一方向性関数によって処理した結果（共通鍵）をＲＡＭ４０に記憶する（ステップＳ６）。
【００３４】
そして、プロセッサ３０は、ＲＡＭ４０からワーク鍵を読み出し、ワーク鍵を共通鍵によって暗号化してＲＡＭ４０に記憶する（ステップＳ７）。
以上の処理によって、送信側から受信側に送信される平文の暗号文と、暗号化されたワーク鍵とがＲＡＭ４０に記憶されている状態となる。
なお、ここでは、送信側の処理について説明したが、受信側においては、ステップＳ４以降において、実行ＩＤと秘密アルゴリズムとの演算結果を一方向性関数で処理することにより共通鍵を算出する、受信した暗号化されたワーク鍵を共通鍵によって復号化する、復号化したワーク鍵によって暗号文を復号化する、といった処理を行い、所定の平文を得ることができる。
【００３５】
以上のように、本実施の形態に係る暗号処理装置１は、ＫＰＳ方式による暗号処理において、暗号化を行うプロセッサ３０によって、共通鍵を算出するための行列演算（実行ＩＤと秘密アルゴリズムとの乗算）を行い、従来、暗号化あるいは復号化を行う部分とは別に備えられていた共通鍵を算出するための行列演算回路をプロセッサ３０によって実現すると共に、プロセッサ３０によって共通鍵を算出するために、データの入出力を簡略な方法（プロセッサ３０に、実行される機能名、ソースアドレス、ソースデータ長、ディスティネーションアドレス、ディスティネーションデータ長、初期化ベクトル格納アドレスおよび共通鍵格納アドレスのうち必要なものを与えることにより入出力を行う方法）により実現することとしている。
【００３６】
したがって、実行ＩＤと秘密アルゴリズムとの行列演算を行う回路を別途備える必要がないことから、回路規模を小型化することができ、低コスト化を実現することができる。
なお、暗号処理装置１は、一方向性関数として、暗号化アルゴリズムを用いていることから、一方向性関数の処理もプロセッサ３０によって行うことができ、回路規模の小型化および低コスト化をより効果的に実現することができる。
【００３７】
また、本実施の形態に係る暗号化処理装置１は、秘密アルゴリズムをＲＯＭ２０に記憶する際、スクランブルＩＤに基づいて秘密アルゴリズムのビット列を入れ替えた状態で記憶している。
したがって、プロセッサ３０とＲＯＭ２０との間で送受信される信号をトレースされることにより、秘密アルゴリズムが盗用されることを防ぐことができる。
【００３８】
なお、本実施の形態において、暗号処理装置１は、暗号処理において必要となるデータの保持をＲＡＭ４０によって行うものとして説明したが、ＲＡＭによってデータを保持する場合の他、フリップフロップ等、データ保持機能を備える他の装置によって行うことも可能である。
【００３９】
【発明の効果】
本発明によれば、ＫＰＳ方式による暗号処理において、暗号化を行う暗号プロセッサによって、共通鍵を算出するための行列演算（実行ＩＤと秘密アルゴリズムとの乗算）を行い、従来、暗号化あるいは復号化を行う部分とは別に備えられていた共通鍵を算出するための行列演算回路を暗号化プロセッサによって実現すると共に、暗号化プロセッサによって共通鍵を算出するために、データの入出力を簡略な方法（暗号化プロセッサに、実行される機能名、ソースアドレス、ディスティネーションアドレス等を与えることにより入出力を行う方法）により実現することとしている。
【００４０】
したがって、実行ＩＤと秘密アルゴリズムとの行列演算を行う回路を別途備える必要がないことから、回路規模を小型化することができ、低コスト化を実現することができる。
また、本発明によれば、秘密アルゴリズムを記憶しておくに当たり、秘密アルゴリズムのビット列を所定順序で入れ替えた状態で記憶している。
【００４１】
したがって、暗号プロセッサが秘密アルゴリズムを読み出す際の信号をトレースされることにより、秘密アルゴリズムが盗用されることを防ぐことができる。
【図面の簡単な説明】
【図１】本発明を適用した暗号処理装置１の機能構成を示すブロック図である。
【図２】プロセッサ３０の機能の一部を示す図である。
【図３】ＲＯＭ２０から、ビット列が入れ替えられた秘密アルゴリズムが読み出される際にビット列が元に戻される手順を示す図である。
【図４】ＫＰＳ方式による暗号通信の概念を示す図である。
【符号の説明】
１  暗号処理装置，１０  乱数発生器，２０  ＲＯＭ，３０  プロセッサ，４０  ＲＡＭ
【図１】
2004172855.tif 000003
【図２】
2004172855.tif 000004
【図３】
2004172855.tif 000005
【図４】
2004172855.tif 000006