(57)【要約】【課題】  暗号化されたデータ（暗号文データ）と鍵とが与えられた場合に、この鍵はこの暗号文データを正しく復号することができるか否かの検証を、より簡便且つ高速に行うための技術を提供すること。【解決手段】  暗号化鍵を用いて平文データを暗号化することで生成される暗号文データｃ１、暗号文データｃ１よりもサイズの小さい検証用データ、暗号化鍵を用いて検証用データを暗号化することで生成される暗号文データｃ２を取得する（Ｓ６０１）。復号鍵を用いて暗号文データｃ２を復号した結果と、検証用データとが一致しているか否かを判定する（Ｓ６０７）。一致していると判定した場合には、復号鍵を用いて、暗号文データｃ１を復号する（Ｓ６０８）。【選択図】  図６
2008306395.tif 000002
【特許請求の範囲】
【請求項１】
第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１のデータよりもサイズの小さい第２のデータと、前記第１の鍵を用いて前記第２のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得手段と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する復号手段と、
前記第２のデータと前記第２の復号データとが一致しているか否かを判定する判定手段を備え
前記復号手段は、さらに、前記判定手段の結果に応じて、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号することを特徴とする情報処理装置。
【請求項２】
前記第２のデータは、前記第１の暗号化済みデータのハッシュデータであることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
更に、
前記取得手段が取得した前記第１の暗号化済みデータのハッシュデータを求める第１手段と、
前記第１手段が求めたハッシュデータと、前記第２のデータとが一致しているか否かを判定する第２手段と、
前記第２手段が一致していると判定した場合には前記判定手段、前記復号手段による処理を許可する許可手段と
を備えることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１の鍵を用いて前記第１の鍵のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得手段と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する復号手段と、
前記第２の鍵のデータと、前記第２の復号データとが、予め定められた関係を有しているか否かを判定する判定手段とを備え、
前記復号手段は、さらに、前記判定手段の結果に応じて、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号することを特徴とする情報処理装置。
【請求項５】
前記第１の鍵と前記第２の鍵とが同じデータである場合、前記判定手段は前記第２の鍵のデータと、前記第２の復号データとが一致しているか否かを判定することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１のデータよりもサイズの小さい第２のデータと、前記第１の鍵を用いて前記第２のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得工程と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する第１の復号工程と、
前記第２のデータと前記第２の復号データとが一致しているか否かを判定する判定工程と、
前記判定工程で一致していると判定した場合には、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号する第２の復号工程と
を備えることを特徴とする情報処理方法。
【請求項７】
第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１の鍵を用いて前記第１の鍵のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得工程と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する第１の復号工程と、
前記第２の鍵のデータと、前記第２の復号データとが、予め定められた関係を有しているか否かを判定する判定工程と、
前記判定工程が有していると判定した場合には、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号する第２の復号工程と
を備えることを特徴とする情報処理方法。
【請求項８】
コンピュータに請求項６又は７に記載の情報処理方法を実行させるためのコンピュータプログラム。
【請求項９】
請求項８に記載のコンピュータプログラムを格納したことを特徴とする、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、鍵を用いて暗号化されたデータを取り扱う技術に関するものである。
【背景技術】
【０００２】
従来、暗号化されたデータ（暗号文データ）と鍵とが与えられた場合に、この鍵はこの暗号文データを正しく復号するためのものであるのか否かを検証する方法としては、次のような方法が一般的であった。即ち、暗号文データを鍵を用いて復号し、その復号結果が正しいか否かを判定して検証する方法である。暗号文データが正しく復号できない場合に、暗号化の過程のどこで誤りが生じたかを突き止める方法は特許文献１に示されている。
【特許文献１】特開平１０−２３１７７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来の検証方法では、暗号文データを復号して復号結果、つまり暗号化元データ（平文データ）の全体を得た後でなければ、上記検証ができないという問題があった。例えば、平文データが画像データであり、画像データの全体を入力してから表示処理を行う画像データ表示プログラムを使って判定する場合が、このケースに該当する。この場合に、鍵と暗号文データとの関係が何らかの理由によって正しいものではない場合に、この鍵を用いてこの暗号文データの復号処理を行うと、その復号結果は本来の平文データに戻らないので、復号に費やした時間と計算量は無駄になる。更に、暗号文データのサイズが大きい場合にこの無駄が発生すると、著しく使い勝手を損なう。
【０００４】
本発明は以上の問題に鑑みてなされたものであり、暗号化されたデータ（暗号文データ）と鍵とが与えられた場合に、この鍵はこの暗号文データを正しく復号することができるか否かの検証を、より簡便且つ高速に行うための技術を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の目的を達成するために、例えば、本発明の情報処理装置は、第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１のデータよりもサイズの小さい第２のデータと、前記第１の鍵を用いて前記第２のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得手段と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する復号手段と、
前記第２のデータと前記第２の復号データとが一致しているか否かを判定する判定手段を備え
前記復号手段は、さらに、前記判定手段の結果に応じて、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号することを特徴とする。
【０００６】
本発明の目的を達成するために、例えば、本発明の情報処理装置は、第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１の鍵を用いて前記第１の鍵のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得手段と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する復号手段と、
前記第２の鍵のデータと、前記第２の復号データとが、予め定められた関係を有しているか否かを判定する判定手段とを備え、
前記復号手段は、さらに、前記判定手段の結果に応じて、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号することを特徴とする。
【０００７】
本発明の目的を達成するために、例えば、本発明の情報処理方法は、第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１のデータよりもサイズの小さい第２のデータと、前記第１の鍵を用いて前記第２のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得工程と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する第１の復号工程と、
前記第２のデータと前記第２の復号データとが一致しているか否かを判定する判定工程と、
前記判定工程で一致していると判定した場合には、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号する第２の復号工程と
を備えることを特徴とする。
【０００８】
本発明の目的を達成するために、例えば、本発明の情報処理方法は、第１の鍵を用いて第１のデータを暗号化することで生成された第１の暗号化済みデータと、前記第１の鍵を用いて前記第１の鍵のデータを暗号化することで生成された第２の暗号化済みデータとを取得する取得工程と、
第２の鍵を用いて前記第２の暗号化済みデータを復号することで、第２の復号データを生成する第１の復号工程と、
前記第２の鍵のデータと、前記第２の復号データとが、予め定められた関係を有しているか否かを判定する判定工程と、
前記判定工程が有していると判定した場合には、前記第２の鍵を用いて、前記第１の暗号化済みデータを復号する第２の復号工程と
を備えることを特徴とする。
【発明の効果】
【０００９】
本発明の構成によれば、暗号化されたデータ（暗号文データ）と鍵とが与えられた場合に、この鍵はこの暗号文データを正しく復号することができるか否かの検証を、より簡便且つ高速に行うことができる。
【発明を実施するための最良の形態】
【００１０】
以下、添付図面を参照し、本発明の好適な実施形態について詳細に説明する。
【００１１】
［第１の実施形態］
図３は、本実施形態に係る情報処理装置として機能するコンピュータのハードウェア構成を示すブロック図である。係るコンピュータには、ＰＣ（パーソナルコンピュータ）やＷＳ（ワークステーション）等があげられる。
【００１２】
図３において３００はコンピュータで、ＣＰＵ３０３、ＲＯＭ３０４、ＲＡＭ３０５、ＨＤ（ハードディスク）３０６、ネットワークインターフェース３０１，３０２を有する。更にコンピュータ３００は、キーボードやマウスなどのポインティングデバイスを接続するためのインターフェース３０８、ＣＲＴや液晶画面などの表示装置を接続するためのインターフェース３０９を有する。そして、上記各部は、バス３１０に接続されている。
【００１３】
ＣＰＵ３０３は、ＲＯＭ３０４やＲＡＭ３０５に格納されているプログラム（コンピュータプログラム）やデータを用いて、コンピュータ３００全体の制御を行うと共に、コンピュータ３００が行うものとして説明する後述の各処理を実行する。
【００１４】
ＲＯＭ３０４には、コンピュータ３００の設定データやブートプログラムなどが格納されている。
【００１５】
ＲＡＭ３０５は、ＨＤ３０６からロードされたプログラムやデータ、ネットワークインターフェース３０１、３０２を介して外部から受信したプログラムやデータなどを一時的に記憶するためのエリアを有する。更に、ＲＡＭ３０５は、ＣＰＵ３０３が各処理を実行する際に用いるワークエリアも有する。即ち、ＲＡＭ３０５は、各種のエリアを適宜提供することができる。
【００１６】
ＨＤ３０６には、ＯＳ（オペレーティングシステム）や、コンピュータ３００が行うものとして後述する各処理をＣＰＵ３０３に実行させるためのプログラムやデータが保存されている。ＨＤ３０６に保存されているプログラムやデータは、ＣＰＵ３０３による制御に従って、適宜ＲＡＭ３０５にロードされる。ＣＰＵ３０３は、ＲＡＭ３０５にロードされたプログラムやデータを用いて、各種の処理を実行する。
【００１７】
ここで、コンピュータ３００をネットワークに接続する際、このコンピュータ３００は、ホスト若しくはルータの何れかとして機能することになる。コンピュータ３００がルータとして機能する場合には、ネットワークインターフェース３０１、３０２の両方が必要であるし、コンピュータ３００がホストとして機能する場合には、ネットワークインターフェース３０２は不要となる。
【００１８】
なお、コンピュータ３００の構成については図３に示した構成に限定するものではなく、様々な構成が考えられる。
【００１９】
次に、以下の説明において用いる用語の定義を行う。以下では、意図する相手だけが理解できるように、鍵を用いてデータを変換および逆変換する技術を「暗号化技術」と呼称する。また、鍵を用いて変換する対象のデータであって、画像などのコンテンツのデータを「平文データ」、変換後のデータを「暗号化済みデータ（暗号文データ）」と呼称する。また、平文データを暗号文データに変換することを「暗号化」、暗号化の際に使う鍵を「暗号化鍵」、鍵を用いて暗号文データを平文データに逆変換することを「復号」、復号の際に使う鍵を「復号鍵」と呼称する。また、「解読」は、復号鍵を使わずに暗号文データから平文データを得ることであり、復号とは異なることに注意されたい。また、暗号化鍵と復号鍵とが同一であるような暗号化を対称暗号系、暗号化鍵と復号鍵が異なり、暗号化鍵は公開可能である暗号化を非対称暗号系と呼称する。
【００２０】
次に、コンピュータ３００が行う情報処理方法の１つである暗号化処理について、同処理のフローチャートを示す図５を用いて、以下説明する。なお、図５のフローチャートに従った処理をＣＰＵ３０３に実行させるためのプログラムやデータはＨＤ３０６に保存されている。係るプログラムやデータは、ＣＰＵ３０３による制御に従って適宜ＲＡＭ３０５にロードされる。ＣＰＵ３０３はこのロードされたプログラムやデータを用いて処理を実行するので、コンピュータ３００は、以下説明する各処理を実行することになる。
【００２１】
先ずステップＳ５０１では、ＲＡＭ３０５に平文データ（第１のデータ）を取得する。平文データをＲＡＭ３０５内に取得するための方法については様々な方法が考えられ、その方法は特に限定するものではない。例えば、ＨＤ３０６に予め保存されている複数の画像のうち、コンピュータ３００のユーザがキーボードやマウスを用いて指示した画像のデータを平文データとしてＣＰＵ３０３がＨＤ３０６からＲＡＭ３０５にロードしても良い。
【００２２】
次にステップＳ５０２では、ステップＳ５０１で取得した平文データを暗号化するために使用する暗号化鍵（第１の鍵）のデータをＲＡＭ３０５に取得する。暗号化鍵のデータをＲＡＭ３０５に取得するための方法についても同様に、様々な方法が考えられ、何れかの方法に限定するものではない。例えば、ＨＤ３０６に予め保存されている複数の暗号化鍵のデータのうち、コンピュータ３００のユーザがキーボードやマウスを用いて指示した暗号化鍵のデータをＣＰＵ３０３がＨＤ３０６からＲＡＭ３０５にロードしても良い。
【００２３】
次にステップＳ５０３では、ステップＳ５０１，Ｓ５０２の両方における取得処理が正常に行われたか否かを判定する。即ち、ＲＡＭ３０５に、平文データと、この平文データを暗号化するために使用する暗号化鍵のデータとが格納されているのかを判定する。係る判定の結果、平文データと暗号化鍵のデータとがＲＡＭ３０５に取得されている場合には、処理をステップＳ５０４に進め、取得されていない場合には、処理をステップＳ５０１に戻す。
【００２４】
ステップＳ５０４では、ステップＳ５０２で取得した暗号化鍵のデータを用いて、ステップＳ５０１で取得した平文データを暗号化することで、平文データの暗号文データｃ１を得る。なお、平文データが大きいサイズのデータである場合には、平文データを複数のデータに分割し、それぞれの分割データについて並列的、若しくは逐次的に暗号化を行うようにしても良い。このような場合には、ステップＳ５０４における処理を行いつつ、後段のステップＳ５０５における処理を並行して行うようにしても良い。
【００２５】
ステップＳ５０５では、平文データの暗号文データｃ１を周知のハッシュ関数に入力することで、この平文データの暗号文データｃ１のハッシュデータを、検証用データｈとして生成する。係るハッシュ関数には様々なものがあり、何れを用いても本実施形態は適用可能であるが、暗号化に対するセキュリティは高ければ高いほど好ましい。そこで、ハッシュ関数として、例えば、SHA-256、SHA-384、SHA-512というような、暗号学的に安全な一方向性ハッシュ関数を用いることが好ましい。
【００２６】
ここで、検証用データｈのデータサイズは、平文データのデータサイズよりも十分に小さい、ということが重要である。
【００２７】
次にステップＳ５０６では、ステップＳ５０５で生成した検証用データｈを、ステップＳ５０２で取得した暗号化鍵のデータを用いて暗号化することで、検証用データｈの暗号文データｃ２を得る。
【００２８】
次にステップＳ５０７では、検証用データｈと、検証用データｈの暗号文データｃ２とをまとめて付加データとし、係る付加データと平文データの暗号文データｃ１とをＨＤ３０６や、ネットワークインターフェース３０１、３０２を介して外部に出力する。なお、ステップＳ５０７における出力先については特に限定するものではない。
【００２９】
図１は、ステップＳ５０７で、検証用データｈ、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１を１つのデータパケットにまとめて出力する場合の、このデータパケットの構成例を示す図である。同図において１０４は検証用データｈを格納している領域、１０３は、検証用データｈの暗号文データｃ２を格納している領域、１０２は、平文データの暗号文データｃ１を格納している領域である。なお、データパケット中の各領域１０２〜１０４を特定するための情報、例えば、各領域１０２〜１０４の先頭位置を特定するための情報については、このデータパケットに添付される不図示のヘッダに含められる。なお、検証用データｈ、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１についてはこのように１つのデータパケットにまとめて出力することに限定するものではなく、それぞれを別個に出力しても良い。
【００３０】
次に、コンピュータ３００が行う情報処理方法の１つである、復号処理、即ち、平文データの暗号文データｃ１を復号するための処理について、同処理のフローチャートを示す図６を用いて以下、説明する。なお、図６のフローチャートに従った処理をＣＰＵ３０３に実行させるためのプログラムやデータはＨＤ３０６に保存されている。係るプログラムやデータは、ＣＰＵ３０３による制御に従って適宜ＲＡＭ３０５にロードされる。ＣＰＵ３０３はこのロードされたプログラムやデータを用いて処理を実行するので、コンピュータ３００は、以下説明する各処理を実行することになる。
【００３１】
先ずステップＳ６０１では、上記ステップＳ５０７で出力した検証用データｈ（第２のデータ）、検証用データｈの暗号文データｃ２（第２の暗号化済みデータ）、平文データの暗号文データｃ１（第１の暗号化済みデータ）をＲＡＭ３０５に取得する。係る取得処理については様々な処理が考えられ、特に限定するものではない。例えば、検証用データｈ、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１がＨＤ３０６に保存されている場合には、ＣＰＵ３０３がこれをＲＡＭ３０５にロードする。
【００３２】
次にステップＳ６０２では、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１を復号するための復号鍵（第２の鍵）のデータをＲＡＭ３０５に取得する。復号鍵のデータをＲＡＭ３０５に取得するための方法についても同様に、様々な方法が考えられ、何れかの方法に限定するものではない。例えば、ＨＤ３０６に予め保存されている複数の復号鍵のデータのうち、コンピュータ３００のユーザがキーボードやマウスを用いて指示した復号鍵のデータをＣＰＵ３０３がＨＤ３０６からＲＡＭ３０５にロードしても良い。
【００３３】
次にステップＳ６０３では、ステップＳ６０１，Ｓ６０２の両方における取得処理が正常に行われたか否かを判定する。即ち、ＲＡＭ３０５に、検証用データｈ、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１、復号鍵のデータが格納されているのかを判定する。係る判定の結果、検証用データｈ、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１、復号鍵のデータがＲＡＭ３０５に取得されている場合には、処理をステップＳ６０４に進め、取得されていない場合には、処理をステップＳ６０１に戻す。
【００３４】
ステップＳ６０４では、平文データの暗号文データｃ１を、上記ステップＳ５０５で用いたハッシュ関数に入力することで、この暗号文データｃ１のハッシュデータを生成する。
【００３５】
ステップＳ６０５では、ステップＳ６０４で生成したハッシュデータと、ステップＳ６０１で取得した検証用データｈとが一致するものであるのか否かを判定する。係る判定の結果、一致しないと判定した場合には、以降の処理を中断し、異常終了させる。一致しない場合における処理については特に限定するものではないが、例えば、一致していない旨を示すメッセージを、インターフェース３０９に接続されている表示装置に表示させても良い。
【００３６】
一方、ステップＳ６０５における判定の結果、一致すると判定した場合には、処理をステップＳ６０６に進め、以降の処理の実行を許可する。なお、ステップＳ６０４，Ｓ６０５における処理は、平文データの暗号文データｃ１等に対する攻撃の有無を検証するために行う検証処理であり、本実施形態では必須なものではないので、適宜省略しても良い。
【００３７】
ステップＳ６０６では、検証用データｈの暗号文データｃ２を、上記ステップＳ６０２で取得した復号鍵のデータを用いて復号する（第１の復号工程）。係る復号の結果得られるデータを、復号データｄ（第２の復号データ）と呼称する。
【００３８】
次にステップＳ６０７では、ステップＳ６０６で得られた復号データｄと、上記ステップＳ６０１で取得した検証用データｈとが一致するか否かを判定する。係る判定の結果、一致しないと判定された場合には、以降の処理を中断し、異常終了させる。一致しない場合における処理については特に限定するものではないが、例えば、一致していない旨を示すメッセージを、インターフェース３０９に接続されている表示装置に表示させても良い。
【００３９】
一方、ステップＳ６０７における判定の結果、一致すると判定された場合には、処理をステップＳ６０８に進める。
【００４０】
ステップＳ６０８では、平文データの暗号文データｃ１を、復号鍵データを用いて復号する（第２の復号工程）。即ち、この復号鍵のデータを用いて検証用データｈの暗号文データｃ２を復号することで得られる復号データｄは、検証用データｈと一致するので、係る復号鍵のデータは、暗号文データｃ１から平文データを復号することができると判断することができる。
【００４１】
なお、異なる平文データを暗号化するときは異なる鍵を用いる。対称暗号系と非対称暗号系のいずれを使うこともできる。
【００４２】
本実施形態では、暗号文データｃ１と検証用データｈ（ハッシュデータｈ）と検証用データｈの暗号文データｃ２とが関連付けられている。従って、復号処理を正常終了させることが可能な暗号文データｃ１とハッシュデータｈと検証用データｈの暗号文データｃ２とを、暗号化鍵を知らない者が偽造することは困難である。例えば、暗号文データｃ１を偽造し、そのハッシュデータｈを得ても、暗号化鍵を知らなければ、ハッシュデータｈの暗号文データｃ２を求めることはできない。
【００４３】
また、ある暗号化鍵に対応するハッシュデータｈと暗号文データｃ２を入手した攻撃者がいたとする。そしてこの攻撃者が、このハッシュデータｈを得るための暗号文データｃ１を偽造しようとしても、使用するハッシュ関数が暗号学的に安全な一方向性ハッシュ関数であれば、そのような暗号文データｃ１を見つけることは困難である。従って、計算時間と計算量を無駄に費やさせる攻撃は行えないし、係る攻撃は検出することができる。
【００４４】
以上の説明により、本実施形態によれば、与えられた復号鍵が、平文データの暗号文データを正しく復号するための復号鍵であるのかの検証を、この平文データの暗号文データを復号することなく、行うことができる。
【００４５】
検証用データは平文データよりもデータサイズが小さいので、検証用データの暗号文データの復号に要する時間は、平文データの暗号文データを復号するよりも短くてすむ。従って、平文データの暗号文データの代わりに、検証用データの暗号文データを復号する処理を、復号鍵を用いて行い、その復号結果が検証用データと一致するか否かを判断する。そして一致していれば、係る復号に用いた復号鍵を用いて平文データの暗号文データも正しく復号することができると判断（検証）することができる。従って、結果として、検証用データよりもデータサイズの大きい平文データの暗号文データを復号することなく、係る検証を行うことができる。本実施形態は、平文データと検証用データとのデータサイズの差が大きければ大きいほど、より大きな効果を奏する。
【００４６】
なお、本実施形態では、暗号化処理、復号化処理は、コンピュータ３００上で動作するプログラムをＣＰＵ３０３が実行することで行っている。例えば係るプログラムが暗号化、復号化用の関数プログラムである場合には、本体プログラム（例えば、画像編集プログラムなど）から平文データへのポインタ、暗号化鍵のデータへのポインタ等の引数を渡すことで係る関数プログラムを動作させても良い。
【００４７】
また、本実施形態に係る暗号化処理、復号化処理をＬＳＩなどのハードウェアでもって行う場合には、係るハードウェアに対して、平文データを示す信号、暗号化鍵を示す信号などを入力することによって、係るハードウェアを動作せるようにしても良い。
【００４８】
［第２の実施形態］
第１の実施形態では、検証用データとして、平文データの暗号文データのハッシュデータを用いていた。即ち、検証用データは、平文データと関係のあるデータであった。しかし、検証用データは、平文データとは無関係のデータであっても良い。
【００４９】
本実施形態では、平文データと無関係の検証用データの一例として、乱数を用いる。
検証用データとして乱数を用いた場合における暗号化処理は、基本的には図５のフローチャートに示した処理と同じであるが、ステップＳ５０５では、適当な乱数を発生させ、これを検証用データｒとする。そしてステップＳ５０６では、検証用データｒを、ステップＳ５０２で取得した暗号化鍵のデータを用いて暗号化することで、検証用データｒの暗号文データｃ３を得る。
【００５０】
図２は、ステップＳ５０７で、検証用データｒ、検証用データｒの暗号文データｃ３、平文データの暗号文データｃ１を１つのデータパケットにまとめて出力する場合の、このデータパケットの構成例を示す図である。同図において２０４は検証用データｒを格納している領域、２０３は、検証用データｒの暗号文データｃ３を格納している領域、２０２は、平文データの暗号文データｃ１を格納している領域である。なお、データパケット中の各領域２０２〜２０４を特定するための情報、例えば、各領域２０２〜２０４の先頭位置を特定するための情報については、このデータパケットに添付される不図示のヘッダに含められる。なお、検証用データｒ、検証用データｒの暗号文データｃ３、平文データの暗号文データｃ１についてはこのように１つのデータパケットにまとめて出力することに限定するものではなく、それぞれを別個に出力しても良い。
【００５１】
一方、本実施形態に係る復号処理は、基本的には図６のフローチャートにおいて、ステップＳ６０４、Ｓ６０５における処理は省略し、検証用データｈの代わりに検証用データｒ、暗号文データｃ２の代わりに暗号文データｃ３を用いる点が異なる。
【００５２】
本実施形態に係る暗号化処理、復号処理では、ハッシュデータ算出処理よりも処理速度の速い「乱数の発生処理」により検証用データを生成するので、第１の実施形態に係る暗号化処理、復号化処理よりも早く暗号化処理、復号化処理を行うことができる。
【００５３】
しかし、検証用データｒと検証用データｒの暗号文データｃ３との組と、暗号文データｃ１とは無関係であるので、次のような攻撃が想定される。即ち、ある暗号化鍵ｋを用いて作成された暗号文データｃ１、検証用データｒ、検証用データｒの暗号文データｃ３からなるデータを入手した攻撃者は、暗号文データｃ１を別の暗号文データ、例えば乱数データとすりかえる。そして復号の際に、暗号文データｃ１に対応する復号鍵を用いて暗号文データｃ３を復号し、復号結果と検証用データｒとが一致しているか否かを判定する。しかし、係る判定で一致していると判定したとしても、この復号鍵を用いて暗号文データｃ１とすりかえられた乱数データを復号することになるので、当然、この復号結果は、平文データとは一致しない。即ち、本来の平文データを得ることはできない。このように、計算時間と計算量を無駄に費やさせる攻撃が発生する可能性がある。
【００５４】
なお、異なる平文データを暗号化するときは異なる鍵を用いる。また、異なる平文データには異なる乱数を用いる。
【００５５】
［第３の実施形態］
本実施形態では、暗号化鍵と復号化鍵とが同じであることを前提にした場合に、検証用データは生成せずに、第１の実施形態における暗号文データｃ２、第２の実施形態における暗号文データｃ３の代わりに、暗号化鍵の暗号文データｃ４を生成する。
【００５６】
本実施形態に係る暗号化処理は、図５のフローチャートにおいて以下の点が第１の実施形態とは異なる。即ち、ステップＳ５０５における処理を省略し、ステップＳ５０６では、ステップＳ５０２で取得した暗号化鍵のデータを用いてこの暗号化鍵のデータを暗号化することで、暗号化鍵のデータの暗号文データｃ４を得る。
【００５７】
図４は、ステップＳ５０７で、暗号化鍵のデータの暗号文データｃ４、平文データの暗号文データｃ１を１つのデータパケットにまとめて出力する場合の、このデータパケットの構成例を示す図である。同図において４０３は、暗号化鍵のデータの暗号文データｃ４を格納している領域、４０２は、平文データの暗号文データｃ１を格納している領域である。なお、データパケット中の各領域４０２、４０３を特定するための情報、例えば、各領域４０２、４０３の先頭位置を特定するための情報については、このデータパケットに添付される不図示のヘッダに含められる。なお、暗号化鍵のデータの暗号文データｃ４、平文データの暗号文データｃ１についてはこのように１つのデータパケットにまとめて出力することに限定するものではなく、それぞれを別個に出力しても良い。
【００５８】
一方、本実施形態に係る復号化処理は、図６のフローチャートにおいて、以下の点が第１の実施形態とは異なる。ステップＳ６０１では、暗号文データｃ１、暗号文データｃ４を取得する。ステップＳ６０３では、暗号文データｃ１、暗号文データｃ４、復号鍵のデータがＲＡＭ３０５に取得されたか否かを判定する。
【００５９】
そして、ステップＳ６０４，Ｓ６０５を省略する。ステップＳ６０６では、暗号化鍵の暗号文データｃ４を、復号鍵のデータを用いて復号する。そしてステップＳ６０７では、暗号文データｃ４の復号結果と、復号鍵のデータとを比較する。ここで、暗号化鍵のデータと復号鍵のデータとは同じであるという前提であるので、暗号文データｃ４の復号結果と、復号鍵のデータとが一致すれば、係る復号鍵のデータは、平文データを復号するための正しい復号鍵のデータであると判断することができる。従って、暗号文データｃ４の復号結果と、復号鍵のデータとが一致した場合には、処理をステップＳ６０８に進める。一方、一致しない場合には、異常終了させる。
【００６０】
本実施形態に係る暗号化処理、復号処理では、ハッシュデータ算出処理を行わないので、第１の実施形態に係る暗号化処理、復号化処理よりも早く暗号化処理、復号化処理を行うことができる。また、本実施形態では、データパケットには、検証用データを含めないので、データパケットのサイズが、第１，２の実施形態よりも小さくなる。
【００６１】
しかし、暗号化鍵の暗号文データｃ４は平文データの暗号文データｃ１から生成されたものではないので、それぞれのデータ間の関係は無い。従って、次のような攻撃が考えられる。
【００６２】
ある暗号化鍵ｋを用いて作成された暗号文データｃ１、暗号化鍵の暗号文データｃ４、を入手した攻撃者は、平文データの暗号文データｃ１を別の暗号文データ、例えば乱数とすりかえる。そして復号の際に、暗号文データｃ１に対応する復号鍵を用いて暗号文データｃ４を復号し、復号結果と復号鍵のデータとが一致しているか否かを判定する。しかし、係る判定で一致していると判定したとしても、この復号鍵を用いて暗号文データｃ１とすりかえられた乱数データを復号することになるので、当然、この復号結果は、平文データとは一致しない。即ち、本来の平文データを得ることはできない。このように、計算時間と計算量を無駄に費やさせる攻撃が発生する可能性がある。
【００６３】
なお、異なる平文データを暗号化するときは異なる鍵のデータを用いる。
【００６４】
また、本実施形態では、暗号化鍵と復号鍵とは同じものであるとしたが、同じでなくても良い。この場合、暗号化鍵と復号鍵との間の関係（鍵間関係）さえ事前に分かっていれば、上記ステップＳ６０７では、暗号文データｃ４の復号結果と、復号鍵のデータとの間の関係が、上記鍵間関係を満たしているか否かをチェックすればよい。係るチェックには、例えば、次のようなものがある。
【００６５】
例えば、RSA公開鍵暗号のような非対称暗号系で暗号化する場合は、以下のようになる。
【００６６】
ＲＳＡ暗号において、暗号化鍵は（ｅ、Ｎ）、復号鍵は（ｄ、Ｎ）と表され、Ｎは大きな素数ｐと大きな素数ｑの積、ｅは３以上の素数で、（ｐ−１）と（ｑ−１）の最小公倍数をＬとするとｅ×ｄ≡１（ｍｏｄ  Ｌ）が成りたつ。Ａ≡Ｂ（ｍｏｄ  Ｃ）は、ＡとＢの差がＣの整数倍であること（整数をｋとすると、Ａ−Ｂ＝ｋ×Ｃ）を示す。平文Ｍの暗号化はＭ＾ｅ  ｍｏｄ  Ｎによって計算され、暗号文Ｃの復号はＣ＾ｄ  ｍｏｄ  Ｎによって計算される。Ａ＝Ｂ  ｍｏｄ  Ｃは、ＢをＣで除算した剰余がＡであることを示す。実際に暗号化方式として使われる場合は、OAEP(Optimal Asymmetric Encryption Padding)と呼ばれる手法を用いたRSA-OAEPが安全性の観点で好ましいとされている。
【００６７】
RSA-OAEPを本実施形態に適用する場合は、以下のようになる。
【００６８】
平文データをRSA-OAEPで暗号化した暗号文データをc1とする。復号鍵（ｄ、Ｎ）のうち、ｄに着目し、ｄをRSA-OAEPで暗号化した暗号文データをｃ４とする。ｃ１とｃ４を入手したら、ｃ４をRSA-OAEPで復号する。復号の際は（ｄ、Ｎ）を用いるので、ｃ４の復号結果がｄと一致することを確認する。確認後、ｃ１をRSA-OAEPで復号する。この適用方法では、暗号化鍵（ｅ、Ｎ）と復号鍵（ｄ、Ｎ）が異なるが、あらかじめ定められた関係、すなわち、RSA-OAEPの暗号化鍵と復号鍵の関係を満たしていることをチェックしている。
【００６９】
あるいは、以下のようにRSA-OAEPを本実施形態に適用する別の方法もある。平文データをRSA-OAEPで暗号化した暗号文データをｃ１とする。暗号化鍵（ｅ、Ｎ）のうち、ｅに着目し、ｅをRSA-OAEPで暗号化した暗号文データをｃ４とする。ｃ１とｃ４を入手したら、ｃ４をRSA-OAEPで復号する。ｃ４の復号結果がｅと一致することを確認する。確認後、ｃ１をRSA-OAEPで復号する。この別の適用方法では，暗号化鍵（ｅ、Ｎ）と復号鍵（ｄ、Ｎ）が異なるが、あらかじめ定められた関係、すなわち、RSA-OAEPの暗号化鍵と復号鍵の関係を満たしていることをチェックしている。
【００７０】
同様の適用方法は、RSA-OAEPに限るわけではなく、安全な公開鍵暗号化方式を用いて構成することができる。
【００７１】
つまり、暗号化鍵のデータを、公開鍵暗号方式の公開鍵とした場合、復号鍵のデータは、公開鍵と対となる秘密鍵である。また、正しく復号された場合の復号結果は、公開鍵であるので、ステップＳ６０７では、復号鍵のデータである秘密鍵と対となる公開鍵かどうかを判定すればよい。
【００７２】
［その他の実施形態］
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体（または記憶媒体）を、システムあるいは装置に供給する。係る記憶媒体は言うまでもなく、コンピュータ読み取り可能な記憶媒体である。そして、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【００７３】
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００７４】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００７５】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【００７６】
【図１】ステップＳ５０７で、検証用データｈ、検証用データｈの暗号文データｃ２、平文データの暗号文データｃ１を１つのデータパケットにまとめて出力する場合の、このデータパケットの構成例を示す図である。
【図２】ステップＳ５０７で、検証用データｒ、検証用データｒの暗号文データｃ３、平文データの暗号文データｃ１を１つのデータパケットにまとめて出力する場合の、このデータパケットの構成例を示す図である。
【図３】本発明の第１の実施形態に係る情報処理装置として機能するコンピュータのハードウェア構成を示すブロック図である。
【図４】ステップＳ５０７で、暗号化鍵のデータの暗号文データｃ４、平文データの暗号文データｃ１を１つのデータパケットにまとめて出力する場合の、このデータパケットの構成例を示す図である。
【図５】コンピュータ３００が行う情報処理方法の１つである暗号化処理のフローチャートである。
【図６】コンピュータ３００が行う情報処理方法の１つである、復号処理、即ち、平文データの暗号文データｃ１を復号するための処理のフローチャートである。
【図１】
2008306395.tif 000003
【図２】
2008306395.tif 000004
【図３】
2008306395.tif 000005
【図４】
2008306395.tif 000006
【図５】
2008306395.tif 000007
【図６】
2008306395.tif 000008