(57)【要約】【課題】ＥＣＢモードの欠点を解消しつつ、初期化ベクトルを付加することなく平文を暗号化する。【解決手段】平文データ５Ａを所定のサイズの複数の平文ブロックＬａに分割し、平文ブロックＬａ＿１からＬａ＿（ｎ−１）までのハッシュ値Ｈａを算出し、平文ブロックＬａ＿ｎを暗号化したＬｃ＿ｎを、ハッシュ値Ｈａを用いて生成し（＃７０３、＃７０４）、Ｌａ＿１ないしＬａ＿（ｎ−１）をそれぞれ暗号化した暗号ブロックＬｃ＿１ないしＬｃ＿（ｎ−１）を、１つ前に生成された暗号ブロックＬｃを用いて生成する（＃７０５、＃７０６、…、＃７１ｙ）。【選択図】図５
2018010237.tif 000002
【特許請求の範囲】
【請求項１】
所定のサイズの平文のブロックであるｎ個の平文ブロックのそれぞれを暗号化する暗号化装置であって、
前記ｎ個の平文ブロックのうちの１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いて所定の方法によってハッシュ値を算出するハッシュ値算出手段と、
前記ｎ個の平文ブロックのうちのｎ番目の平文ブロックに対応するｎ番目の暗号ブロックを、前記ハッシュ値を用いて生成する、第一の暗号化手段と、
前記１番目ないし（ｎ−１）番目の平文ブロックのうちの１番目の平文ブロックに対応する１番目の暗号ブロックを、前記ｎ番目の暗号ブロックを用いて生成し、ｐ（ただし、２≦ｐ≦（ｎ−１））番目の平文ブロックに対応するｐ番目の暗号ブロックを、（ｐ−１）番目の暗号ブロックを用いて生成する、第二の暗号化手段と、
を有することを特徴とする暗号化装置。
【請求項２】
前記１番目の暗号ブロックから、前記ｎ番目の暗号ブロックを用いて前記１番目の平文ブロックを生成し、前記ｐ番目の暗号ブロックから、前記（ｐ−１）番目の暗号ブロックを用いて前記ｐ番目の平文ブロックを生成する、第一の復号手段と、
前記第一の復号手段によって得られた前記１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いて前記所定の方法によって前記ハッシュ値を算出する第二のハッシュ値算出手段と、
前記ｎ番目の暗号ブロックから、前記第二のハッシュ値算出手段によって生成された前記ハッシュ値を用いて前記ｎ番目の平文ブロックを生成する、第二の復号手段と、
を有する、
請求項１に記載の暗号化装置。
【請求項３】
前記第一の暗号化手段は、前記ｎ番目の平文ブロックと前記ハッシュ値との排他的論理和を算出し、当該排他的論理和を暗号化することによって、前記ｎ番目の暗号ブロックを生成し、
前記第二の暗号化手段は、前記１番目の平文ブロックと前記ｎ番目の暗号ブロックとの排他的論理和を算出し、当該排他的論理和を暗号化することによって、前記１番目の暗号ブロックを生成し、前記ｐ番目の平文ブロックと前記（ｐ−１）番目の暗号ブロックとの排他的論理和を算出し、当該排他的論理和のそれぞれを暗号化することによって、前記ｐ番目の暗号ブロックを生成する、
請求項２に記載の暗号化装置。
【請求項４】
前記第一の復号手段は、前記１番目の暗号ブロックを復号して前記ｎ番目の暗号ブロックとの排他的論理和を算出することによって、前記１番目の平文ブロックを生成し、前記ｐ番目の暗号ブロックを復号し前記（ｐ−１）番目の暗号ブロックそれぞれとの排他的論理和を算出することによって、前記ｐ番目の平文ブロックを生成し、
前記第二の復号手段は、前記ｎ番目の暗号ブロックを復号し前記ハッシュ値との排他的論理和を算出することによって前記ｎ番目の平文ブロックを生成する、
請求項３に記載の暗号化装置。
【請求項５】
前記第一の暗号化手段は、前記ｎ番目の平文ブロックと前記ハッシュ値との排他的論理和を算出し、当該排他的論理和を暗号化することによって、前記ｎ番目の暗号ブロックを生成し、
前記第二の暗号化手段は、前記１番目の平文ブロックと前記ｎ番目の暗号ブロックとの排他的論理和を算出し、当該排他的論理和を暗号化することによって、前記１番目の暗号ブロックを生成し、前記（ｐ−１）番目の平文ブロックと前記（ｐ−１）番目の暗号ブロックとの排他的論理を算出し、当該排他的論理和と前記ｐ番目の平文ブロックとの排他的論理和を算出して暗号化することによって、前記ｐ番目の暗号ブロックを生成する、
請求項２に記載の暗号化装置。
【請求項６】
前記第一の復号手段は、前記１番目の暗号ブロックを復号して前記ｎ番目の暗号ブロックとの排他的論理和を算出することによって、前記１番目の平文ブロックを生成し、前記（ｐ−１）番目の暗号ブロックと前記（ｐ−１）番目の平文ブロックとの第一の排他的論理和を算出し、当該第一の排他的論理和と前記ｐ番目の暗号ブロックを復号したものとの第二の排他的論理和を算出することによって、前記ｐ番目の平文ブロックを生成し、
前記第二の復号手段は、前記ｎ番目の暗号ブロックを復号し前記ハッシュ値との排他的論理和を算出することによって前記ｎ番目の平文ブロックを生成する、
請求項５に記載の暗号化装置。
【請求項７】
前記第一の暗号化手段は、前記ハッシュ値を暗号化して前記ｎ番目の平文ブロックとの排他的論理和を算出することによって、前記ｎ番目の暗号ブロックを生成し、
前記第二の暗号化手段は、前記ｎ番目の暗号ブロックを暗号化して前記１番目の平文ブロックとの排他的論理和を算出することによって前記１番目の暗号ブロックを生成し、前記（ｐ−１）番目の暗号ブロックを暗号化して前記ｐ番目の平文ブロックとの排他的論理和を算出することによって、前記ｐ番目の暗号ブロックを生成する、
請求項２に記載の暗号化装置。
【請求項８】
前記第一の復号手段は、前記ｎ番目の暗号ブロックを復号して前記１番目の暗号ブロックとの排他的論理和を算出することによって、前記１番目の平文ブロックを生成し、前記（ｐ−１）番目の暗号ブロックを復号して前記ｐ番目の暗号ブロックとの排他的論理和を算出することによって、前記ｐ番目の平文ブロックを生成し、
前記第二の復号手段は、前記ハッシュ値を復号し前記ｎ番目の暗号ブロックとの排他的論理和を算出することによって前記ｎ番目の平文ブロックを生成する、
請求項７に記載の暗号化装置。
【請求項９】
前記第一の暗号化手段は、前記ハッシュ値を暗号化して前記ｎ番目の平文ブロックとの排他的論理和を算出することによって、前記ｎ番目の暗号ブロックを生成し、
前記第二の暗号化手段は、前記ｎ番目の暗号ブロックを暗号化して前記１番目の平文ブロックとの排他的論理和を算出することによって前記１番目の暗号ブロックを生成し、前記ｎ番目の暗号ブロックをｐ回暗号化したものと前記ｐ番目の平文ブロックとの排他的論理和を算出することによって、前記ｐ番目の暗号ブロックを生成する、
請求項２に記載の暗号化装置。
【請求項１０】
前記第一の復号手段は、前記ｎ番目の暗号ブロックを復号して前記１番目の暗号ブロックとの排他的論理和を算出することによって前記１番目の平文ブロックを生成し、前記ｎ番目の暗号ブロックをｐ回復号したものと前記ｐ番目の暗号ブロックとの排他的論理和を算出することによって、前記ｐ番目の平文ブロックを生成し、
前記第二の復号手段は、前記ハッシュ値を復号し前記ｎ番目の暗号ブロックとの排他的論理和を算出することによって前記ｎ番目の平文ブロックを生成する、
請求項９に記載の暗号化装置。
【請求項１１】
前記第一の暗号化手段は、ｎ番目のカウンタと前記ハッシュ値とを用いてｎ番目のカウンタブロックを生成し、当該ｎ番目のカウンタブロックを暗号化して前記ｎ番目の平文ブロックとの排他的論理和を算出することによって、ｎ番目の暗号ブロックを生成し、
前記第二の暗号化手段は、ｍ（ただし、１≦ｍ≦（ｎ−１））番目のカウンタと前記ｎ番目の暗号ブロックとを用いてｍ番目のカウンタブロックを生成し、当該ｍ番目のカウンタブロックを暗号化して前記ｍ番目の平文ブロックとの排他的論理和を算出することによって、前記ｍ番目の暗号ブロックを生成する、
請求項２に記載の暗号化装置。
【請求項１２】
前記第一の復号手段は、前記ｍ番目のカウンタと前記ｎ番目の暗号ブロックとを用いて前記ｍ番目のカウンタブロックを生成し、当該ｍ番目のカウンタブロックを復号して前記ｍ番目の暗号ブロックとの排他的論理和を算出することによって、前記ｍ番目の平文ブロックを生成し、
前記第二の復号手段は、前記ｎ番目のカウンタと前記ハッシュ値とを用いて前記ｎ番目のカウンタブロックを生成し、当該ｎ番目のカウンタブロックを復号して前記ｎ番目の暗号ブロックとの排他的論理和を算出することによって、前記ｎ番目の平文ブロックを生成する、
請求項１１に記載の暗号化装置。
【請求項１３】
前記ハッシュ値算出手段は、前記１番目ないし（ｎ−１）番目の平文ブロックの排他的論理和を算出することによって、前記ハッシュ値を算出する、
請求項１ないし請求項１２のいずれかに記載の暗号化装置。
【請求項１４】
前記第二のハッシュ値算出手段は、前記１番目ないし（ｎ−１）番目の平文ブロックの排他的論理和を算出することによって、前記ハッシュ値を算出する、
請求項２ないし請求項１２に記載の暗号化装置。
【請求項１５】
前記第一の暗号化手段は、暗号化の際に、公開鍵暗号方式の一対の第一の鍵および第二の鍵のうちのいずれか一方を使用し、
前記第二の暗号化手段は、暗号化の際に、前記第一の鍵および前記第二の鍵のうちの前記第一の暗号化手段が使用したほうを使用し、
前記第一の復号手段は、復号の際に、前記第一の鍵および前記第二の鍵のうちの前記第一の暗号化手段が使用していないほうを使用し、
前記第二の復号手段は、復号の際に、前記第一の鍵および前記第二の鍵のうちの前記第一の暗号化手段が使用していないほうを使用する、
請求項２ないし請求項１２のいずれかに記載の暗号化装置。
【請求項１６】
前記第一の暗号化手段によって生成された前記ｎ番目の暗号ブロックおよび前記第二の暗号化手段によって生成された前記ｐ番目の暗号ブロックを表わす二次元コードを用紙に印刷する処理を印刷装置に実行させる印刷処理手段、
を有する、
請求項１ないし請求項１５のいずれかに記載の暗号化装置。
【請求項１７】
前記ｎ個の平文ブロックは、ドキュメントのハッシュ値と本人であることを表わす情報をと示す平文のデータを分割したものである、
請求項１ないし請求項１６のいずれかに記載の暗号化装置。
【請求項１８】
前記情報は、サインの画像である、
請求項１７に記載の暗号化装置。
【請求項１９】
前記ハッシュ値算出手段、前記第一の暗号化手段、および前記第二の暗号化手段は、ＲＡＭ（Random Access Memory）にロードされたコンピュータプログラムをＣＰＵ（Central Processing Unit）で実行することによって実現される、
請求項１ないし請求項１８のいずれかに記載の暗号化装置。
【請求項２０】
前記第一の復号手段、前記第二のハッシュ値算出手段、および前記第二の復号手段は、前記ＲＡＭにロードされたコンピュータプログラムを前記ＣＰＵで実行することによって実現される、
請求項２ないし請求項１２のいずれかに記載の暗号化装置。
【請求項２１】
所定のサイズの暗号化されたブロックであるｎ個の暗号ブロックのそれぞれを復号する復号装置であって、
前記ｎ個の暗号ブロックのうちの１番目の暗号ブロックから、ｎ番目の暗号ブロックを用いて１番目の平文ブロックを生成し、ｐ（ただし、２≦ｐ≦（ｎ−１））番目の暗号ブロックから、（ｐ−１）番目の暗号ブロックを用いてｐ番目の平文ブロックを生成する、第一の復号手段と、
前記第一の復号手段によって得られた前記１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いてハッシュ値を算出するハッシュ値算出手段と、
前記ｎ番目の暗号ブロックから、前記ハッシュ値を用いてｎ番目の平文ブロックを生成する、第二の復号手段と、
を有する、
ことを特徴とする復号装置。
【請求項２２】
前記第一の復号手段、前記ハッシュ値算出手段、および前記第二の復号手段は、ＲＡＭにロードされたコンピュータプログラムをＣＰＵで実行することによって実現される、
請求項２１に記載の復号装置。
【請求項２３】
所定のサイズの平文のブロックであるｎ個の平文ブロックのそれぞれを暗号化する暗号化方法、
前記ｎ個の平文ブロックのうちの１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いて所定の方法によってハッシュ値を算出し、
前記ｎ個の平文ブロックのうちのｎ番目の平文ブロックに対応するｎ番目の暗号ブロックを、前記ハッシュ値を用いて生成し、
前記１番目ないし（ｎ−１）番目の平文ブロックのうちの１番目の平文ブロックに対応する１番目の暗号ブロックを、前記ｎ番目の暗号ブロックを用いて生成し、ｐ（ただし、２≦ｐ≦（ｎ−１））番目の平文ブロックに対応するｐ番目の暗号ブロックを、（ｐ−１）番目の暗号ブロックを用いて生成する、
ことを特徴とする暗号化方法。
【請求項２４】
所定のサイズの平文のブロックであるｎ個の平文ブロックのそれぞれを暗号化するコンピュータに用いられるコンピュータプログラムであって、
前記コンピュータに、
前記ｎ個の平文ブロックのうちの１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いて所定の方法によってハッシュ値を算出する第一の処理を実行させ、
前記ｎ個の平文ブロックのうちのｎ番目の平文ブロックに対応するｎ番目の暗号ブロックを、前記ハッシュ値を用いて生成する第二の処理を実行させ、
前記１番目ないし（ｎ−１）番目の平文ブロックのうちの１番目の平文ブロックに対応する１番目の暗号ブロックを、前記ｎ番目の暗号ブロックを用いて生成し、ｐ（ただし、２≦ｐ≦（ｎ−１））番目の平文ブロックに対応するｐ番目の暗号ブロックを、（ｐ−１）番目の暗号ブロックを用いて生成する第三の処理を実行させる、
ことを特徴とするコンピュータプログラム。
【請求項２５】
前記第三の処理によって生成された前記１番目ないしｎ番目の暗号ブロックを１つのファイルとして記録媒体に記憶させる第四の処理を、前記コンピュータに実行させる、
請求項２４に記載のコンピュータプログラム。
【請求項２６】
所定のサイズの平文のｎ個の平文ブロックのうちの１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部に基づくハッシュ値とｎ番目の平文ブロックとによって生成されたｎ番目の暗号ブロックと、
前記ｎ個の平文ブロックのうちの１番目の平文ブロックと前記ｎ番目の暗号ブロック
とによって生成された１番目の暗号ブロックと、
前記ｎ個の平文ブロックのうちのｐ（ただし、２≦ｐ≦（ｎ−１））番目の平文ブロックと（ｐ−１）番目の暗号ブロックとによって生成されたｐ番目の暗号ブロックと、
によって構成されることを特徴とするデータ構造。
【請求項２７】
請求項１ないし請求項１９のいずれかに記載の暗号化装置によって生成された１番目ないしｎ番目の暗号ブロックによって構成される、
ことを特徴とするデータ構造。
【請求項２８】
請求項２６または請求項２７に記載のデータ構造のデータが記憶されている、
ことを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロック暗号の技術に関する。
【背景技術】
【０００２】
従来、ブロック暗号の技術が普及している。この技術は、平文のデータを所定のサイズのブロック（平文ブロック）に分割し、ブロックごとに暗号化するものである（非特許文献１）。また、ブロック暗号のモード（暗号利用モード）として、次のようなモードが提案されている。
【０００３】
ＥＣＢ（Electronic Codebook）モードは、各平文ブロックを、他のいずれの平文ブロックにも関連させることなく暗号化するモードである。つまり、各平文ブロックを独立的に暗号化するモードである。
【０００４】
しかし、ＥＣＢモードによると、すべての平文ブロックに共通の暗号鍵を用いて暗号化すると、次のような欠点が生じる。
【０００５】
ＥＣＢモードで複数の暗号化されたブロック（暗号ブロック）のうちの特定の暗号ブロックに対応する平文が分かると、この暗号ブロックに一致する他の暗号ブロックも解読されたことになる。この性質を用いて暗号を解読する方法は、「暗号文一致攻撃」と呼ばれる。
【０００６】
また、暗号ブロックの順番を入れ換えても復号することができる。よって、例えば、銀行の送金の処理の暗号データの中の送金先の口座番号の暗号ブロックと送金元の口座番号の暗号ブロックとを入れ換えても、銀行において送金の処理が行われ得る。すると、本来の目的に反する処理がなされてしまう。この性質を用いて不正を行う方法は、「暗号文改ざん攻撃」と呼ばれる。
【０００７】
また、ＥＣＢモードで暗号化すると、データに何らかのパターンが残留してしまうことがある。例えば、ビットマップの画像を暗号化すると、同一のパターンを表わす複数の平文ブロックは、ともに、同一の暗号ブロックになる。よって、暗号化しても、画像の輪郭などが残留してしまう。
【０００８】
ＥＣＢモードの欠点を解消するための暗号利用モードとして、ＣＢＣ（Cipher Block Chaining）モードが提案され、普及している。
【０００９】
ＣＢＣモードは、平文ブロックと１つ前の暗号ブロックとの排他的論理和（exclusive OR）を算出し、この排他的論理和を暗号化することによって、この平文ブロックの暗号ブロックを生成する。ただし、最初の平文ブロックには、１つ前の暗号ブロックが存在しないので、その代わりに初期化ベクトルが用いられる。初期化ベクトルは、ランダムな値である。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】http://www.techscore.com/tech/Java/JavaSE/JCE/5/
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ＣＢＣモードによると、ＥＣＢモードの欠点を解消することができる。しかし、暗号されたデータに初期化ベクトルを付加しなければならない。よって、ＥＣＢモードで暗号化した場合よりも、データのサイズが大きくなってしまう。
【００１２】
本発明は、このような問題点に鑑み、ＥＣＢモードの欠点を解消しつつ、初期化ベクトルを付加することなく平文を暗号化することを、目的とする。
【課題を解決するための手段】
【００１３】
本発明の一形態に係る暗号化装置は、所定のサイズの平文のブロックであるｎ個の平文ブロックのそれぞれを暗号化する暗号化装置であって、前記ｎ個の平文ブロックのうちの１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いて所定の方法によってハッシュ値を算出するハッシュ値算出手段と、前記ｎ個の平文ブロックのうちのｎ番目の平文ブロックに対応するｎ番目の暗号ブロックを、前記ハッシュ値を用いて生成する、第一の暗号化手段と、前記１番目ないし（ｎ−１）番目の平文ブロックのうちの１番目の平文ブロックに対応する１番目の暗号ブロックを、前記ｎ番目の暗号ブロックを用いて生成し、ｐ（ただし、２≦ｐ≦（ｎ−１））番目の平文ブロックに対応するｐ番目の暗号ブロックを、（ｐ−１）番目の暗号ブロックを用いて生成する、第二の暗号化手段と、を有する。
【００１４】
さらに、前記１番目の暗号ブロックから、前記ｎ番目の暗号ブロックを用いて前記１番目の平文ブロックを生成し、前記ｐ番目の暗号ブロックから、前記（ｐ−１）番目の暗号ブロックを用いて前記ｐ番目の平文ブロックを生成する、第一の復号手段と、前記第一の復号手段によって得られた前記１番目ないし（ｎ−１）番目の平文ブロックのすべてまたは一部を用いて前記所定の方法によって前記ハッシュ値を算出する第二のハッシュ値算出手段と、前記ｎ番目の暗号ブロックから、前記第二のハッシュ値算出手段によって生成された前記ハッシュ値を用いて前記ｎ番目の平文ブロックを生成する、第二の復号手段と、を有してもよい。
【００１５】
好ましくは、前記第一の暗号化手段は、前記ｎ番目の平文ブロックと前記ハッシュ値との排他的論理和を算出し、当該排他的論理和を暗号化することによって、前記ｎ番目の暗号ブロックを生成し、前記第二の暗号化手段は、前記１番目の平文ブロックと前記ｎ番目の暗号ブロックとの排他的論理和を算出し、当該排他的論理和を暗号化することによって、前記１番目の暗号ブロックを生成し、前記ｐ番目の平文ブロックと前記（ｐ−１）番目の暗号ブロックとの排他的論理和を算出し、当該排他的論理和のそれぞれを暗号化することによって、前記ｐ番目の暗号ブロックを生成する。
【００１６】
または、前記第一の復号手段は、前記１番目の暗号ブロックを復号して前記ｎ番目の暗号ブロックとの排他的論理和を算出することによって、前記１番目の平文ブロックを生成し、前記ｐ番目の暗号ブロックを復号し前記（ｐ−１）番目の暗号ブロックそれぞれとの排他的論理和を算出することによって、前記ｐ番目の平文ブロックを生成し、前記第二の復号手段は、前記ｎ番目の暗号ブロックを復号し前記ハッシュ値との排他的論理和を算出することによって前記ｎ番目の平文ブロックを生成する。
【発明の効果】
【００１７】
本発明によると、ＥＣＢモードの欠点を解消しつつ、初期化ベクトルを付加することなく平文を暗号化することができる。
【図面の簡単な説明】
【００１８】
【図１】機密データ処理装置を含むシステムの全体の構成の例を示す図である。
【図２】機密データ処理装置のハードウェア構成の例を示す図である。
【図３】機密データ処理装置の機能的構成の例を示す図である。
【図４】平文データの分割およびハッシュ値の算出の例を説明するための図である。
【図５】平文データの暗号化の処理の例を説明するための図である。
【図６】暗号データを復号する処理の例を説明するための図である。
【図７】暗号化復号プログラムによる全体的な処理の流れの例を説明するフローチャートである。
【図８】暗号化処理の流れの例を説明するフローチャートである。
【図９】復号処理の流れの例を説明するフローチャートである。
【図１０】ＰＣＢＣモードを変形した暗号化の処理の例を説明するための図である。
【図１１】ＰＣＢＣモードを変形した復号の処理の例を説明するための図である。
【図１２】ＣＦＢモードを変形した暗号化の処理の例を説明するための図である。
【図１３】ＣＦＢモードを変形した復号の処理の例を説明するための図である。
【図１４】ＯＦＢモードを変形した暗号化の処理の例を説明するための図である。
【図１５】ＯＦＢモードを変形した復号の処理の例を説明するための図である。
【図１６】ＣＴＲモードを変形した暗号化の処理の例を説明するための図である。
【図１７】ＣＴＲモードを変形した復号の処理の例を説明するための図である。
【発明を実施するための形態】
【００１９】
図１は、機密データ処理装置１を含むシステムの全体の構成の例を示す図である。図２は、機密データ処理装置１のハードウェア構成の例を示す図である。図３は、機密データ処理装置１の機能的構成の例を示す図である。
【００２０】
機密データ処理装置１は、機密にすべきデータを暗号化して出力する。また、暗号化されたデータを復号する。
【００２１】
機密データ処理装置１は、図１に示すように、通信回線３を介して複合機２などと接続される。
【００２２】
機密データ処理装置１として、パーソナルコンピュータまたはいわゆるサーバ機などが用いられる。以下、機密データ処理装置１としてパーソナルコンピュータが用いられる場合を例に説明する。
【００２３】
機密データ処理装置１は、図２に示すように、ＣＰＵ（Central Processing Unit）１０ａ、ＲＡＭ（Random Access Memory）１０ｂ、ＲＯＭ（Read Only Memory）１０ｃ、補助記憶装置１０ｄ、液晶ディスプレイ１０ｅ、ＮＩＣ（Network Interface Card）１０ｆ、キーボード１０ｇ、およびポインティングデバイス１０ｈなどによって構成される。
【００２４】
液晶ディスプレイ１０ｅは、ユーザに対するメッセージを示す画面、ユーザがコマンドまたは情報を入力するための画面、およびＣＰＵ１０ａが実行した処理の結果を示す画面などを表示する。
【００２５】
ＮＩＣ１０ｆは、ＴＣＰ／ＩＰなどのプロトコルによって複合機２などと通信回線３を介して通信を行う。
【００２６】
キーボード１０ｇおよびポインティングデバイス１０ｈは、ユーザがコマンドまたは情報を入力するために用いられる。
【００２７】
ＲＯＭ１０ｃまたは補助記憶装置１０ｄには、オペレーティングシステムのほか、暗号化復号プログラム１０Ｐが記憶されている。これらのプログラムは、ＲＡＭ１０ｂにロードされ、ＣＰＵ１０ａによって実行される。補助記憶装置１０ｄとして、ハードディスクまたはＳＳＤ（Solid State Drive）などが用いられる。
【００２８】
複合機２は、コピー、ネットワークプリント、ファックス、およびスキャンなどの機能を集約した装置である。「ＭＦＰ（Multi Function Peripherals）」または「画像形成装置」などと呼ばれることがある。
【００２９】
暗号化復号プログラム１０Ｐによると、データを暗号化したり暗号化されたデータを復号したりすることができる。特に、初期化ベクトルを付加することなくＥＣＢ（Electronic Codebook）モードよりも機密性の高い暗号化を実現することができる。以下、この仕組みについて説明する。初期化ベクトルは、「ＩＶ（initialization vector）」と呼ばれることがある。
【００３０】
暗号化復号プログラム１０Ｐによると、図３に示す平文データ分割部１０１、第一のハッシュ値演算部１０２、第一の排他的論理和演算部１０３、第一の暗号化処理部１０４、第二の排他的論理和演算部１０５、第二の暗号化処理部１０６、暗号ブロック結合部１０７、印刷処理部１０８、暗号データ分割部１２１、第一の復号処理部１２２、第三の排他的論理和演算部１２３、第二のハッシュ値演算部１２４、第二の復号処理部１２５、第四の排他的論理和演算部１２６、および平文ブロック結合部１２７などの機能が実現される。以下、図３に示す各部の処理を、暗号化の処理および復号の処理に大別して説明する。
【００３１】
〔暗号化〕
図４は、平文データ５Ａの分割およびハッシュ値Ｈａの算出の例を説明するための図である。図５は、平文データ５Ａの暗号化の処理の例を説明するための図である。
【００３２】
ユーザは、暗号化する対象のデータを機密データ処理装置１に用意する。このデータは、平文のデータである。以下、このデータを「平文データ５Ａ」と記載する。
【００３３】
例えば、平文データ５Ａとして、契約書などのドキュメントのハッシュ値および契約者のサインの画像のデータを用意する。
【００３４】
そして、ユーザは、暗号化復号プログラム１０Ｐを機密データ処理装置１に起動させ、平文データ５Ａを指定する。
【００３５】
すると、平文データ分割部１０１ないし暗号ブロック結合部１０７は、図４および図５に示す手順で処理を実行する。
【００３６】
平文データ分割部１０１は、平文データ５Ａを所定のサイズ（例えば、２５６バイト）
の平文ブロックＬａに分割する（図４の＃７０１）。平文ブロックＬａは、ビット列のデータとして取り扱われる。
【００３７】
以下、平文データ分割部１０１によって平文データ５Ａがｎ個の平文ブロックＬａに分割された場合を例に説明する。１番目の平文ブロックＬａ、２番目の平文ブロックＬａ、…、ｎ番目の平文ブロックＬａをそれぞれ「平文ブロックＬａ＿１」、「平文ブロックＬａ＿２」、…、「平文ブロックＬａ＿ｎ」と区別して記載することがある。
【００３８】
第一のハッシュ値演算部１０２は、１番目から（ｎ−１）番目までのそれぞれの平文ブロックＬａ＿の排他的論理和を、平文データ５Ａの、平文ブロックＬａ＿ｎを除いた部分のハッシュ値Ｈａとして算出する（＃７０２）。すなわち、次の（１）式によってハッシュ値Ｈａを算出する。ハッシュ値Ｈａのサイズは、平文ブロックＬａのサイズに等しい。
Ｈａ＝Ｌａ＿１ xor Ｌａ＿２ xor … xor Ｌａ＿（ｎ−１）        （１）
第一の排他的論理和演算部１０３は、ｎ番目の平文ブロックＬａとハッシュ値Ｈａとの排他的論理和Ｌｂ＿ｎを算出する（図５の＃７０３）。
【００３９】
第一の暗号化処理部１０４は、第一の排他的論理和演算部１０３によって算出された排他的論理和Ｌｂ＿ｎを公開鍵暗号方式で暗号化することによって、ｎ番目の暗号ブロックＬｃを生成する（＃７０４）。暗号ブロックＬｃのサイズは、平文ブロックＬａのサイズに等しい。この際に、暗号鍵として、１対の公開鍵５Ｐおよび秘密鍵５Ｑのうちの一方が用いられる。以下、公開鍵５Ｐが用いられる場合を例に説明する。
【００４０】
第二の排他的論理和演算部１０５および第二の暗号化処理部１０６は、１番目から（ｎ−１）番目までのそれぞれの暗号ブロックＬｃを生成する（＃７０５、＃７０６、…）。
【００４１】
ここで、ｋ番目の暗号ブロックＬｃを生成する場合の、第二の排他的論理和演算部１０５および第二の暗号化処理部１０６の処理を説明する。
【００４２】
第二の排他的論理和演算部１０５は、ｋ番目の排他的論理和Ｌｂ（つまり、排他的論理和Ｌｂ＿ｋ）として、ｋ番目の平文ブロックＬａと（ｋ−１）番目の暗号ブロックＬｃとの排他的論理和を算出する。ただし、ｋ＝１の場合は、１番目の平文ブロックＬａとｎ番目の暗号ブロックＬｃとの排他的論理和を算出する。
【００４３】
第二の暗号化処理部１０６は、第二の排他的論理和演算部１０５によって算出されたｋ番目の排他的論理和（すなわち、排他的論理和Ｌｂ＿ｋ）を公開鍵暗号方式で暗号化することによって、ｋ番目の暗号ブロックＬｃを生成する。この際に、第一の暗号化処理部１０４で用いられた暗号鍵が用いられる。つまり、本実施形態では、公開鍵５Ｐが用いられる。
【００４４】
以上の処理によって、１番目からｎ番目までのそれぞれの暗号ブロックＬｃが得られる。以下、１番目、２番目、…、ｎ番目それぞれの暗号ブロックＬｃを「暗号ブロックＬｃ＿１」、「暗号ブロックＬｃ＿２」、…、「暗号ブロックＬｃ＿ｎ」と区別して記載することがある。
【００４５】
具体的には、第二の排他的論理和演算部１０５は、平文ブロックＬａ＿１と暗号ブロックＬｃ＿ｎとの排他的論理和を算出することによって、排他的論理和Ｌｂ＿１を算出する（＃７０５）。そして、第二の暗号化処理部１０６は、排他的論理和Ｌｂ＿１を公開鍵暗号方式で暗号化することによって、暗号ブロックＬｃ＿１を生成する（＃７０６）。
【００４６】
同様に、平文ブロックＬａ＿２および暗号ブロックＬｃ＿１から排他的論理和Ｌｂ＿２が算出され（＃７０７）、排他的論理和Ｌｂ＿２を公開鍵暗号方式で暗号化することによって暗号ブロックＬｃ＿２が生成される（＃７０８）。平文ブロックＬａ＿３および暗号ブロックＬｃ＿２から排他的論理和Ｌｂ＿３が算出され（＃７０９）、排他的論理和Ｌｂ＿３を公開鍵暗号方式で暗号化することによって暗号ブロックＬｃ＿３が生成される（＃７１０）。以下、同様に処理が行われる。
【００４７】
そして、最後に、平文ブロックＬａ＿（ｎ−１）および暗号ブロックＬｃ（ｎ−２）から排他的論理和Ｌｂ＿（ｎ−１）が算出され（＃７１ｘ）、排他的論理和Ｌｂ＿（ｎ−１）を公開鍵暗号方式で暗号化することによって暗号ブロックＬｃ＿（ｎ−１）が生成される（＃７１ｙ）。
【００４８】
暗号ブロック結合部１０７は、１番目からｎ番目までのそれぞれの暗号ブロックＬｃ（Ｌｃ＿１、Ｌｃ＿２、…、Ｌｃ＿ｎ）を１つのデータに結合することによって、暗号データ５Ｂを生成する。
【００４９】
暗号データ５Ｂは、ユーザが指定した記録媒体またはフォルダなどに保存されまたはユーザが指定した装置へ送信される。印刷処理部１０８によって次のように使用される。
【００５０】
印刷処理部１０８は、暗号データ５Ｂを表わす二次元バーコードを生成し、二次元バーコードを印刷するための印刷データ５Ｄを生成する。そして、二次元バーコードを印刷するように複合機２へ指令する。この際に、印刷データ５Ｄを複合機２へ送信する。印刷データ５Ｄは、複合機２に対応したＰＤＬ（Page Description Language）で記述すればよい。
【００５１】
複合機２は、指令および印刷データ５Ｄを機密データ処理装置１から受信すると、これらに基づいて二次元バーコードを用紙に印刷する。
【００５２】
〔復号〕
図６は、暗号データ５Ｂを復号する処理の例を説明するための図である。
【００５３】
次に、暗号データ５Ｂを復号する際の機密データ処理装置１の各部の処理およびユーザの操作を、図６を参照しながら説明する。
【００５４】
ユーザは、暗号化復号プログラム１０Ｐを予め起動しておく。そして、復号する対象のデータとして暗号データ５Ｂを指定する。
【００５５】
または、ユーザは、二次元バーコードが印刷された用紙を複合機２にセットし、二次元バーコードを複合機２に読み取らせる。複合機２から機密データ処理装置１へ二次元バーコードの画像データを送信させる。そして、二次元バーコードを機密データ処理装置１に解析させることによって、暗号データ５Ｂを機密データ処理装置１に用意する。二次元バーコードの解析は、複合機２に行わせてもよい。
【００５６】
すると、暗号データ分割部１２１は、暗号データ５Ｂを所定のサイズ（例えば、２５６バイト）に分割する。これにより、暗号データ５Ｂが複数の暗号ブロックＬｄに分割される。
【００５７】
暗号ブロックＬｄは、平文ブロックＬａ、排他的論理和Ｌｂ、および暗号ブロックＬｃと同様に、ビット列のデータとして取り扱われる。
【００５８】
暗号データ５Ｂが改ざんされていなければ、暗号データ５Ｂを分割することによって、ｎ個の暗号ブロックＬｄが得られる。以下、１番目、２番目、…、ｎ番目のそれぞれの暗号ブロックＬｄを「暗号ブロックＬｄ＿１」、「暗号ブロックＬｄ＿２」、…、「暗号ブロックＬｄ＿ｎ」と区別して記載することがある。
【００５９】
また、暗号データ５Ｂが改ざんされていなければ、暗号ブロックＬｄ＿１、Ｌｄ＿２、…、Ｌｄ＿ｎは、それぞれ、暗号ブロックＬｃ＿１、Ｌｃ＿２、…、Ｌｃ＿ｎと一致する。
【００６０】
第一の復号処理部１２２および第三の排他的論理和演算部１２３は、１番目から（ｎ−１）番目までのそれぞれの平文ブロックＬｆを次のように生成する。
【００６１】
ここで、ｊ番目の平文ブロックＬｆを生成する場合の、第一の復号処理部１２２および第三の排他的論理和演算部１２３の処理を説明する。
【００６２】
第一の復号処理部１２２は、ｊ番目の暗号ブロックＬｄを公開鍵暗号方式によって復号する。この際に、公開鍵５Ｐおよび秘密鍵５Ｑのうち、第一の暗号化処理部１０４によって暗号鍵として使用された鍵とは異なるほうが復号鍵として用いられる。したがって、本実施形態では、暗号ブロックＬｄを復号するために秘密鍵５Ｑが用いられる。
【００６３】
以下、暗号ブロックＬｄを復号することによって得られた平文のブロックを「平文ブロックＬｅ」と記載する。また、１番目、２番目、…、ｎ番目の平文ブロックＬｅをそれぞれ「平文ブロックＬｅ＿１」、「平文ブロックＬｅ＿２」、…、「平文ブロックＬｅ＿ｎ」と区別して記載することがある。
【００６４】
第三の排他的論理和演算部１２３は、ｊ番目の平文ブロックＬｅ（つまり、平文ブロックＬｅ＿ｊ）と（ｊ−１）番目の暗号ブロックＬｄ（つまり、暗号ブロックＬｄ＿（ｊ−１））との排他的論理和を算出する。この排他的論理和が、ｊ番目の平文ブロックＬｆである。ただし、ｊ＝１の場合は、１番目の平文ブロックＬｅとｎ番目の暗号ブロックＬｄとの排他的論理和を算出する。
【００６５】
以下、１番目、２番目、…、ｎ番目の平文ブロックＬｆをそれぞれ「平文ブロックＬｆ＿１」、「平文ブロックＬｆ＿２」、…、「平文ブロックＬｆ＿ｎ」と区別して記載することがある。
【００６６】
具体的には、まず、第一の復号処理部１２２は、暗号ブロックＬｄ＿２を復号する（図６の＃７２１）。これにより、平文ブロックＬｅ＿２が生成される。第三の排他的論理和演算部１２３は、平文ブロックＬｅ＿１と暗号ブロックＬｄ＿ｎとの排他的論理和を平文ブロックＬｆ＿１として算出する（＃７２２）。
【００６７】
さらに、第一の復号処理部１２２は、暗号ブロックＬｄ＿２を復号することによって、平文ブロックＬｅ＿２を生成する（＃７２３）。第三の排他的論理和演算部１２３は、平文ブロックＬｅ＿２と暗号ブロックＬｄ＿１との排他的論理和を平文ブロックＬｆ＿２として算出する（＃７２４）。
【００６８】
以下、同様に、適宜、各ブロックが１つずつシフトしながら、暗号ブロックＬｄ＿ｊが復号されて平文ブロックＬｅ＿ｊが生成され、平文ブロックＬｅ＿ｊと暗号ブロックＬｄ＿（ｊ−１）との排他的論理和が平文ブロックＬｆ＿ｊとして算出される。
【００６９】
そして、最後に、暗号ブロックＬｄ＿ｎが復号されて平文ブロックＬｅ＿（ｎ−１）が生成され（＃７２ｘ）、平文ブロックＬｅ＿（ｎ−１）と暗号ブロックＬｄ＿（ｎ−２）との排他的論理和が平文ブロックＬｆ＿（ｎ−１）として算出される（＃７２ｙ）。
【００７０】
なお、暗号データ５Ｂが改ざんされていなければ、平文ブロックＬｆ＿１、Ｌｆ＿２、…、Ｌｆ＿（ｎ−１）は、それぞれ、図５に示した平文ブロックＬａ＿１、Ｌａ＿２、…、Ｌａ＿（ｎ−１）と一致する。
【００７１】
第二のハッシュ値演算部１２４は、第三の排他的論理和演算部１２３によって算出された１番目から（ｎ−１）番目までのそれぞれの平文ブロックＬｆ（Ｌｆ＿１、Ｌｆ＿２、…、Ｌｆ＿（ｎ−１））の排他的論理和を、ハッシュ値Ｈｂとして算出する（＃７３１）。
【００７２】
暗号データ５Ｂが改ざんされていなければ、ハッシュ値Ｈｂは、ハッシュ値Ｈａと一致する。
【００７３】
第二の復号処理部１２５は、ステップ＃７３１の処理と並行してまたは前後して、第一の復号処理部１２２で用いられた復号鍵（本実施形態では、秘密鍵５Ｑ）を用いて公開鍵暗号方式によって暗号ブロックＬｄ＿ｎを復号する（＃７３２）。これにより、平文ブロックＬｅ＿ｎが生成される。
【００７４】
第四の排他的論理和演算部１２６は、第二のハッシュ値演算部１２４によって得られたハッシュ値Ｈｂと第二の復号処理部１２５によって得られた平文ブロックＬｅ＿ｎとの排他的論理和を、平文ブロックＬｆ＿ｎとして算出する（＃７３３）。
【００７５】
暗号データ５Ｂが改ざんされていなければ、平文ブロックＬｆ＿ｎは、平文ブロックＬａ＿ｎと一致する。
【００７６】
そして、平文ブロック結合部１２７は、１番目からｎ番目までの平文ブロックＬｆ（Ｌｆ＿１、Ｌｆ＿２、…、Ｌｆ＿ｎ）を１つのデータに結合することによって、平文データ５Ｃを生成する。
【００７７】
以上の処理によって、暗号データ５Ｂが復号される。暗号データ５Ｂが改ざんされていなければ、平文データ５Ｃは、平文データ５Ａと一致する。
【００７８】
平文データ５Ｃは、ユーザが指定したフォルダに保存されまたはユーザが指定した装置へ送信される。
【００７９】
図７は、暗号化復号プログラム１０Ｐによる全体的な処理の流れの例を説明するフローチャートである。図８は、暗号化処理の流れの例を説明するフローチャートである。図９は、復号処理の流れの例を説明するフローチャートである。
【００８０】
次に、図７〜図９のフローチャートを参照しながら、機密データ処理装置１の全体的な処理の流れを説明する。
【００８１】
機密データ処理装置１は、図７に示す処理を暗号化復号プログラム１０Ｐに基づいて実行する。
【００８２】
機密データ処理装置１は、暗号化する対象のデータとして平文データ５Ａが指定されると（図７の＃１１）、平文データ５Ａを取得し（＃１２）、平文データ５Ａを暗号化する処理を実行する（＃１３）。暗号化の処理の手順は、図８に示す通りである。
【００８３】
図８において、機密データ処理装置１は、平文データ５Ａを所定のサイズの複数の平文ブロックＬａに分割する（＃７４１）。以下、ｎ個の平文ブロックＬａ（Ｌａ＿１、Ｌａ＿２、…、Ｌａ＿ｎ）に分割された場合を例に説明する。最後の平文ブロックＬａを除く平文ブロックＬａ（つまり、平文ブロックＬａ＿１〜Ｌａ＿（ｎ−１））のハッシュ値Ｈａを生成する（＃７４２）。
【００８４】
機密データ処理装置１は、ハッシュ値Ｈａと平文ブロックＬａ＿ｎとの排他的論理和Ｌｂ＿ｎを算出し（＃７４３）、排他的論理和Ｌｂ＿ｎを公開鍵５Ｐで暗号化することによって暗号ブロックＬｃ＿ｎを生成する（＃７４４）。
【００８５】
さらに、機密データ処理装置１は、１番目から（ｎ−１）番目までのそれぞれの暗号ブロックＬｃ（Ｌｃ＿１〜Ｌｃ＿（ｎ−１））を次のように生成する（＃７４６〜＃７４９）。
【００８６】
機密データ処理装置１は、平文ブロックＬａ＿ｋと暗号ブロックＬｃ＿（ｋ−１）の排他的論理和Ｌｃ＿ｋを算出する（＃７４６）。ただし、ｋ＝１、の場合は、暗号ブロックＬｃ＿ｎが用いられる。そして、排他的論理和Ｌｃ＿ｋを公開鍵５Ｐで暗号化することによって暗号ブロックＬｄ＿ｋを生成する（＃７４７）。ｋは、２、３、…、（ｎ−１）と、１ずつインクリメントされる。
【００８７】
暗号ブロックＬｃ＿１〜Ｌｃ＿ｎが生成されたら、機密データ処理装置１は、これらを結合することによって暗号データ５Ｂを生成する（＃７５０）。
【００８８】
このように＃７４１〜＃７５０の処理によって、平文データ５Ａが暗号化され、暗号データ５Ｂが得られる。
【００８９】
図７に戻って、機密データ処理装置１は、暗号データ５Ｂを、ユーザが指定したフォルダに保存し、ユーザが指定した装置へ送信し、または、暗号データ５Ｂを表わす二次元バーコードを生成し、複合機２に印刷させる（＃１４）。
【００９０】
または、機密データ処理装置１は、復号する対象として暗号データ５Ｂが指定されると（＃１５でＹｅｓ）、暗号データ５Ｂを取得し（＃１６）、暗号データ５Ｂを復号する処理を実行する（＃１７）。復号の処理の手順は、図９に示す通りである。
【００９１】
図９において、機密データ処理装置１は、暗号データ５Ｂを所定のサイズの複数の暗号ブロックＬｄに分割する（＃７６１）。以下、ｎ個の暗号ブロックＬｄ（Ｌｄ＿１〜Ｌｄ＿ｎ）に分割された場合を例に説明する。
【００９２】
機密データ処理装置１は、１番目から（ｎ−１）番目までの平文ブロックＬｆ（Ｌｆ＿１〜Ｌｆ＿（ｎ−１））を次のように生成する（＃７６２〜＃７６６）。
【００９３】
機密データ処理装置１は、暗号ブロックＬｄ＿ｊを秘密鍵５Ｑで復号することによって平文ブロックＬｅ＿ｊを生成し（＃７６３）、平文ブロックＬｅ＿ｊと暗号ブロックＬｄ＿（ｊ−１）との排他的論理和を平文ブロックＬｆ＿ｊとして算出する（＃７６４）。ただし、ｊ＝１、の場合は、暗号ブロックＬｄ＿ｎが用いられる。ｊは、１、２、…、（ｎ−１）と、１つずつインクリメントされる。
【００９４】
さらに、機密データ処理装置１は、平文ブロックＬｆ＿１〜Ｌｆ＿（ｎ−１）のハッシュ値Ｈｂを算出するとともに（＃７６７）、暗号ブロックＬｄ＿ｎを秘密鍵５Ｑで復号することによって平文ブロックＬｅ＿ｎを生成する（＃７６８）。
【００９５】
そして、機密データ処理装置１は、ハッシュ値Ｈｂと暗号ブロックＬｅ＿ｎとの排他的論理和を平文ブロックＬｆ＿ｎとして算出する（＃７６９）。
【００９６】
平文ブロックＬｆ＿１〜Ｌｆ＿ｎが生成されたら、機密データ処理装置１は、これらを結合することによって平文データ５Ｃを生成する（＃７７０）。
【００９７】
図７に戻って、機密データ処理装置１は、平文データ５Ｃを、ユーザが指定したフォルダに保存し、または、ユーザが指定した装置へ送信する（＃１８）。
【００９８】
本実施形態によると、ＥＣＢモードの欠点を解消しつつ、初期化ベクトルを付加することなく平文データ５Ａを暗号化することができる。これにより、ＥＣＢモードの欠点を解消する従来の暗号利用モードよりも、暗号データ５Ｂのサイズを小さくすることができる。
【００９９】
よって、暗号データ５Ｂを表わす二次元バーコードのサイズを、従来の暗号利用モードよりも小さくすることができる。
【０１００】
図１０は、ＰＣＢＣモードを変形した暗号化の処理の例を説明するための図である。図１１は、ＰＣＢＣモードを変形した復号の処理の例を説明するための図である。図１２は、ＣＦＢモードを変形した暗号化の処理の例を説明するための図である。図１３は、ＣＦＢモードを変形した復号の処理の例を説明するための図である。図１４は、ＯＦＢモードを変形した暗号化の処理の例を説明するための図である。図１５は、ＯＦＢモードを変形した復号の処理の例を説明するための図である。図１６は、ＣＴＲモードを変形した暗号化の処理の例を説明するための図である。図１７は、ＣＴＲモードを変形した復号の処理の例を説明するための図である。
【０１０１】
本実施形態では、機密データ処理装置１は、ハッシュ値Ｈａおよびハッシュ値Ｈｂを（ｎ−１）個のブロックの排他的論理和を算出することによって生成したが、他の方法によって生成してもよい。例えば、ＳＨＡ−３（Secure Hashing Algorithm 3）のＳＨＡＫＥ２５６によって算出してもよい。または、（ｎ−１）個未満の特定のブロックの排他的論理和を算出することによって生成してもよい。または、特定のブロック（平文ブロックＬａ）をハッシュ値Ｈａとして使用し、特定のブロック（その平文ブロックＬａに対応する平文ブロックＬｆ）をハッシュ値Ｈｂとして使用してもよい。
【０１０２】
本実施形態では、機密データ処理装置１は、ＣＢＣ（Cipher Block Chaining）モードを次のように変形して、暗号化および復号を行った。
【０１０３】
（Ａ１）  暗号化の際に、ＣＢＣモードでは、平文ブロックＬａ＿ｎと暗号ブロックＬｃ＿（ｎ−１））との排他的論理和を算出する。しかし、本実施形態では、図５のステップ＃７０３〜＃７０４に示した通り、暗号ブロックＬｃ＿（ｎ−１）の代わりにハッシュ値Ｈａを用いて排他的論理和を算出する。
【０１０４】
（Ａ２）  暗号化の際に、ＣＢＣモードでは、初期化ベクトルを用意し、平文ブロックＬａ＿１と初期化ベクトルとの排他的論理和を算出する。しかし、本実施形態では、ステップ＃７０５に示した通り、初期化ベクトルの代わりに暗号ブロックＬｃ＿ｎを用いて排他的論理和を算出する。
【０１０５】
（Ａ３）  復号の際に、ＣＢＣモードでは、暗号ブロックＬｄ＿１と暗号データに含まれる初期化ベクトルとの排他的論理和を算出する。しかし、本実施形態では、初期化ベクトルの代わりに暗号ブロックＬｄ＿ｎを用いて排他的論理和を算出する。
【０１０６】
（Ａ４）  復号の際に、ＣＢＣモードでは、暗号ブロックＬｄ＿ｎを復号したもの（つまり、平文ブロックＬｅ＿ｎ）と暗号ブロックＬｄ＿（ｎ−１）との排他的論理和を算出する。しかし、本実施形態では、暗号ブロックＬｄ＿（ｎ−１）の代わりにハッシュ値Ｈｂを用いて排他的論理和を算出する。
【０１０７】
上記の（Ａ１）〜（Ａ４）は、ＣＢＣモード以外の暗号利用モードを変形する際にも適用することができる。
【０１０８】
例えば、ＰＣＢＣ（Propagating Cipher Block Chaining）モードを変形し、図１０に示すように暗号化を行い、図１１に示すように復号を行ってもよい。
【０１０９】
つまり、第一の排他的論理和演算部１０３および第一の暗号化処理部１０４の代わりに、第一の暗号化処理部は、図１０に示すように、平文ブロックＬａ＿ｎとハッシュ値Ｈａとの排他的論理和を算出し、この排他的論理和を暗号化することによって、暗号ブロックＬｃ’＿ｎを生成する。
【０１１０】
さらに、第二の排他的論理和演算部１０５および第二の暗号化処理部１０６の代わりに、第二の暗号化処理部は、平文ブロックＬａ＿１と暗号ブロックＬｃ’＿ｎとの排他的論理和を算出し、この排他的論理和を暗号化することによって、１番目の暗号ブロックＬｃ’＿１を生成する。平文ブロックＬａ＿（ｐ−１）と暗号ブロックＬｃ’＿（ｐ−１）との第一の排他的論理を算出し、この第一の排他的論理和と平文ブロックＬａ＿ｐとの第二の排他的論理和を算出し、この第二の排他的論理和を暗号化することによって、暗号ブロックＬｃ’＿ｐを生成する。ただし、２≦ｐ≦（ｎ−１）、である。以下、同様である。
【０１１１】
そして、暗号ブロックＬｃ'＿１、Ｌｃ'＿２、…、Ｌｃ'＿ｎを結合することによって、暗号データが生成される。図１２、図１４、および図１６においても、同様である。
【０１１２】
第一の復号処理部１２２および第三の排他的論理和演算部１２３の代わりに、第一の復号処理部は、図１１に示すように、暗号ブロックＬｄ’＿１を復号して暗号ブロックＬｄ’＿ｎとの排他的論理和を算出することによって、平文ブロックＬｆ＿１を生成する。暗号ブロックＬｄ’＿（ｐ−１）と平文ブロックＬｆ＿（ｐ−１）との第一の排他的論理和を算出し、この第一の排他的論理和と暗号ブロックＬｄ’＿ｐを復号したものとの第二の排他的論理和を算出することによって、平文ブロックＬｆ＿ｐを生成する。
【０１１３】
さらに、第二の復号処理部１２５および第四の排他的論理和演算部１２６の代わりに第二の復号処理部は、暗号ブロックＬｄ’＿ｎを復号しハッシュ値Ｈｂとの排他的論理和を算出することによって平文ブロックＬｆ＿ｎを生成する。
【０１１４】
暗号データが改ざんされていなければ、暗号ブロックＬｄ’＿１、Ｌｄ’＿２、…、Ｌｄ'＿ｎは、それぞれ、暗号ブロックＬｃ’＿１、Ｌｃ’＿２、…、Ｌｃ'＿ｎと一致する。そして、平文ブロックＬａ＿１、Ｌａ＿２、…、Ｌａ＿ｎは、それぞれ、平文ブロックＬｆ＿１、Ｌｆ＿２、…、Ｌｆ＿ｎと一致する。図１２〜図１７においても、同様である。
【０１１５】
または、ＣＦＢ（Cipher Feedback）モードを変形し、図１２に示すように暗号化を行い、図１３に示すように復号を行ってもよい。
【０１１６】
第一の暗号化処理部は、図１２に示すように、ハッシュ値Ｈａを暗号化して平文ブロックＬａ＿ｎとの排他的論理和を算出することによって、暗号ブロックＬｃ’＿ｎを生成する。
【０１１７】
第二の暗号化処理部は、暗号ブロックＬｃ’＿ｎを暗号化して平文ブロックＬａ＿１との排他的論理和を算出することによって暗号ブロックＬｃ’＿１を生成し、暗号ブロックＬｃ’＿（ｐ−１）を暗号化して平文ブロックＬａ＿ｐとの排他的論理和を算出することによって、暗号ブロックＬｃ’＿ｐを生成する。
【０１１８】
第一の復号処理部は、図１３に示すように、暗号ブロックＬｄ’＿ｎを復号して暗号ブロックＬｄ’＿１との排他的論理和を算出することによって、平文ブロックＬｆ＿１を生成し、暗号ブロックＬｄ’＿（ｐ−１）を復号して暗号ブロックＬｄ’＿ｐとの排他的論理和を算出することによって、平文ブロックＬｆ＿ｐを生成する。
【０１１９】
第二の復号処理部は、ハッシュ値Ｈｂを復号し暗号ブロックＬｄ’＿ｎとの排他的論理和を算出することによって平文ブロックＬｆ＿ｎを生成する、
または、ＯＦＢ（Output Feedback）モードを変形し、図１４に示すように暗号化を行い、図１５に示すように復号を行ってもよい。
【０１２０】
第一の暗号化処理部は、図１４に示すように、ハッシュ値Ｈａを暗号化して平文ブロックＬａ＿ｎとの排他的論理和を算出することによって、暗号ブロックＬｃ’＿ｎを生成する。
【０１２１】
第二の暗号化処理部は、暗号ブロックＬｃ’＿ｎを暗号化して平文ブロックＬａ＿１との排他的論理和を算出することによって暗号ブロックＬｃ’＿１を生成し、暗号ブロックＬｃ’＿ｎをｐ回暗号化したものと平文ブロックＬａ＿ｐとの排他的論理和を算出することによって、暗号ブロックＬｃ’＿ｐを生成する。
【０１２２】
第一の復号処理部は、図１５に示すように、暗号ブロックＬｄ’＿ｎを復号して暗号ブロックＬｄ’＿１との排他的論理和を算出することによって平文ブロックＬｆ＿１を生成する。暗号ブロックＬｄ’＿ｎをｐ回復号したものと暗号ブロックＬｄ’＿ｐとの排他的論理和を算出することによって、平文ブロックＬｆ＿ｐを生成する。
【０１２３】
第二の復号処理部は、ハッシュ値Ｈｂを復号し暗号ブロックＬｄ’＿ｎとの排他的論理和を算出することによって平文ブロックＬｆ＿ｎを生成する。
【０１２４】
または、ＣＴＲ（Counter）モードを、Ｎｏｎｃｅを使用することなく暗号化および復号を行えるように次のように変形してもよい。
【０１２５】
（Ｂ１）  暗号化の際に、ＣＴＲモードでは、Ｎｏｎｃｅと平文ブロックＬａ＿ｎに対応するカウンタＣｒ＿ｎとを組み合わせることによって、カウンタブロックＣｋ＿ｎを生成する。以下、排他的論理和を算出することによって両者を組み合わせる場合を例に説明する。しかし、機密データ処理装置１は、図１６に示すように、ＮＯＮＣＥの代わりにハッシュ値Ｈａを用いてカウンタブロックＣｋ＿ｎを生成する。
【０１２６】
（Ｂ２）  暗号化の際に、ＣＴＲモードでは、１〜（ｎ−１）番目のカウンタブロックＣｋ（つまり、カウンタブロックＣｋ＿１〜Ｃｋ＿（ｎ−１））を、Ｎｏｎｃｅと１〜（ｎ−１）番目それぞれのカウンタＣｒ（つまり、カウンタＣｒ＿１〜Ｃｒ＿（ｎ−１））とを組み合わせることによって、生成する。しかし、機密データ処理装置１は、図１６に示すように、Ｎｏｎｃｅの代わりに暗号ブロックＬｃ’＿ｎを用いて生成する。
【０１２７】
（Ｂ３）  復号の際に、Ｂ２同様に、ＣＴＲモードでは、カウンタブロックＣｋ＿１〜Ｃｋ＿（ｎ−１）を、ＮｏｎｃｅとカウンタＣｒ＿１〜Ｃｒ＿（ｎ−１）とを組み合わせることによって、生成する。しかし、機密データ処理装置１は、図１７に示すように、Ｎｏｎｃｅの代わりに暗号ブロックＬｄ’＿ｎを用いて生成する。
【０１２８】
（Ｂ４）  復号の際に、ＣＴＲモードでは、Ｎｏｎｃｅと平文ブロックＬｆ＿ｎに対応するカウンタＣｒ＿ｎとを組み合わせることによって、カウンタブロックＣｋ＿ｎを生成する。しかし、機密データ処理装置１は、Ｎｏｎｃｅの代わりにハッシュ値Ｈｂを組み合わせることによって生成する。
【０１２９】
つまり、第一の暗号化処理部は、図１６に示すように、カウンタＣｒ＿ｎとハッシュ値Ｈａとの排他的論理和を算出することによって、カウンタブロックＣｋ＿ｎを生成する。カウンタブロックＣｋ＿ｎを暗号化して平文ブロックＬａ＿ｎとの排他的論理和を算出することによって、暗号ブロックＬｃ’＿ｎを生成する。
【０１３０】
第二の暗号化処理部は、カウンタＣｒ＿ｍと暗号ブロックＬｃ’＿ｎとの排他的論理和を算出することによってカウンタブロックＣｋ＿ｍを生成し、カウンタブロックＣｋ＿ｍをを暗号化して平文ブロックＬａ＿ｍとの排他的論理和を算出することによって、暗号ブロックＬｃ’＿ｍを生成する。ただし、１≦ｍ≦（ｎ−１）、である。
【０１３１】
第一の復号処理部は、図１７に示すように、カウンタＣｒ＿ｍと暗号ブロックＬｄ’＿ｍとの排他的論理和を算出することによってカウンタブロックＣｋ＿ｍを生成し、カウンタブロックＣｋ＿ｍを復号して暗号ブロックＬｄ’＿ｍとの排他的論理和を算出することによって、平文ブロックＬｆ＿ｍを生成する。
【０１３２】
第二の復号処理部は、カウンタＣｒ＿ｎとハッシュ値Ｈｂとの排他的論理和を算出することによってカウンタブロックＣｋ＿ｎを生成し、カウンタブロックＣｋ＿ｎを復号して暗号ブロックＬｄ’＿ｎとの排他的論理和を算出することによって、平文ブロックＬｆ＿ｎを生成する。
【０１３３】
本実施形態では、暗号化の処理および復号の処理を、暗号化復号プログラム１０ＰをＣＰＵ１０ａで実行することによって実現したが、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field Programmable Gate Array）などの回路によって実現してもよい。
【０１３４】
本実施形態では、公開鍵暗号方式によって暗号化および復号を行ったが、共通鍵暗号方式によって暗号化および復号を行ってもよい。
【０１３５】
本実施形態では、平文データ５Ａとして、契約書などのドキュメントのハッシュ値および契約者のサインの画像のデータを用いたが、他のデータを用いてもよい。例えば、契約書などのドキュメントのハッシュ値および契約者の印鑑（印影）のデータを用いてもよい。または、機密資料のデータを用いてもよい。
【０１３６】
その他、機密データ処理装置１の全体または各部の構成、処理の内容、処理の順序などは、本発明の趣旨に沿って適宜変更することができる。
【符号の説明】
【０１３７】
１  機密データ処理装置（暗号化装置、復号装置）
１０１  平文データ分割部（分割手段）
１０２  第一のハッシュ値演算部（ハッシュ値算出手段）
１０３  第一の排他的論理和演算部（第一の暗号化手段）
１０４  第一の暗号化処理部（第一の暗号化手段）
１０５  第二の排他的論理和演算部（第二の暗号化手段）
１０６  第二の暗号化処理部（第二の暗号化手段）
１０８  印刷処理部（印刷処理手段）
１２１  暗号データ分割部（分割手段）
１２２  第一の復号処理部（第一の復号手段）
１２３  第三の排他的論理和演算部（第一の復号手段）
１２４  第二のハッシュ値演算部（第二のハッシュ値算出手段）
１２５  第二の復号処理部（第二の復号手段）
１２６  第四の排他的論理和演算部（第二の復号手段）
２  複合機（印刷装置）
５Ａ  平文データ
５Ｃ  平文データ
５Ｐ  公開鍵（第一の鍵）
５Ｑ  秘密鍵（第二の鍵）
Ｌａ  平文ブロック
Ｌｂ  排他的論理和
Ｌｃ  暗号ブロック
Ｌｄ  暗号ブロック
Ｌｆ  平文ブロック
Ｈａ  ハッシュ値
Ｈｂ  ハッシュ値
【図１】
2018010237.tif 000003
【図２】
2018010237.tif 000004
【図３】
2018010237.tif 000005
【図４】
2018010237.tif 000006
【図５】
2018010237.tif 000007
【図６】
2018010237.tif 000008
【図７】
2018010237.tif 000009
【図８】
2018010237.tif 000010
【図９】
2018010237.tif 000011
【図１０】
2018010237.tif 000012
【図１１】
2018010237.tif 000013
【図１２】
2018010237.tif 000014
【図１３】
2018010237.tif 000015
【図１４】
2018010237.tif 000016
【図１５】
2018010237.tif 000017
【図１６】
2018010237.tif 000018
【図１７】
2018010237.tif 000019