(57)【要約】      （修正有）【課題】暗号の安全性を高めた暗号生成装置を提供する。【解決手段】暗号化部２０２０は、暗号鍵及び乱数を用いて、平文から暗号文を生成する。乱数情報出力部２０４０は、暗号化部２０２０が平文及び暗号鍵の双方を取得する前に乱数情報を出力する。暗号出力部２０６０は、暗号化部２０２０によって生成された暗号文を出力する。暗号生成装置２０００は、暗号化部２０２０が、平文と乱数とを結合したデータから暗号文を生成すること、暗号出力部２０６０が、暗号文と乱数を共に出力すること、のいずれか一方を満たす。【選択図】図１
2017129779.tif 000002
【特許請求の範囲】
【請求項１】
暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化部と、
前記暗号化部が前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力部と、
前記暗号文を出力する暗号出力部と、を有し、
前記暗号化部は前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力部は前記暗号文と前記乱数を共に出力する、暗号生成装置。
【請求項２】
前記暗号化部は、再配置暗号方式で前記平文を暗号化することで前記暗号文を生成する、請求項１に記載の暗号生成装置。
【請求項３】
前記乱数情報は、前記乱数か、又は所定のハッシュ関数を用いて前記乱数から算出されたハッシュ値を示す、請求項１又は２に記載の暗号生成装置。
【請求項４】
前記暗号出力部によって出力される情報及び前記乱数情報出力部によって出力される前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証部を有する、請求項１乃至３いずれか一項に記載の暗号生成装置。
【請求項５】
前記暗号化部は、前記平文と前記乱数とを結合したデータを前記暗号鍵で暗号化して前記暗号文を生成し、
前記乱数情報は前記乱数を示し、
前記安全性検証部は、暗号文を復号することで暗号化に用いられた乱数を復元し、その乱数と前記乱数情報によって示される乱数とが一致するか否かを判定することで、前記暗号文の安全性を検証する、請求項４に記載の暗号生成装置。
【請求項６】
前記暗号化部は、前記平文と前記乱数とを結合したデータを前記暗号鍵で暗号化して前記暗号文を生成し、
前記乱数情報は、所定のハッシュ関数を用いて前記乱数から算出したハッシュ値を示し、
前記安全性検証部は、前記暗号文を復号することで暗号化に用いられた乱数を復元し、前記所定のハッシュ関数を用いて前記復元した乱数のハッシュ値を算出し、そのハッシュ値と前記乱数情報によって示されるハッシュ値とが一致するか否かを判定することで、前記暗号文の安全性を検証する、請求項４に記載の暗号生成装置。
【請求項７】
前記暗号出力部は前記暗号文と前記乱数を共に出力し、
前記乱数情報は前記乱数を示し、
前記安全性検証部は、前記暗号出力部によって出力される乱数と、前記乱数情報によって示される乱数とが一致するか否かを判定することで、前記暗号文の安全性を検証する、請求項４に記載の暗号生成装置。
【請求項８】
前記暗号出力部は前記暗号文と前記乱数を共に出力し、
前記乱数情報は前記乱数から算出したハッシュ値を示し、
前記安全性検証部は、前記所定のハッシュ関数を用いて、前記暗号出力部によって出力された乱数からハッシュ値を算出し、そのハッシュ値と前記乱数情報によって示されるハッシュ値とが一致するか否かを判定することで、前記暗号文の安全性を検証する、請求項４に記載の暗号生成装置。
【請求項９】
請求項１乃至８いずれか一項に記載の暗号生成装置、及び受信装置を有するデータ伝送システムであって、
前記受信装置は、
前記暗号出力部によって出力された情報及び前記乱数情報を受信する受信部と、
前記受信部によって受信された、前記暗号出力部によって出力された情報及び前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証部と、を有するデータ伝送システム。
【請求項１０】
請求項９に記載の受信装置。
【請求項１１】
コンピュータによって実行される暗号生成方法であって、
暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化ステップと、
前記暗号化ステップにおいて、前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力ステップと、
前記暗号文を出力する暗号出力ステップと、を有し、
前記暗号化ステップにおいて前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力する、暗号生成方法。
【請求項１２】
暗号生成装置と受信装置とを有するデータ伝送システムによって実行されるデータ伝送方法であって、
暗号生成装置が、暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化ステップと、
暗号生成装置が、前記暗号化ステップにおいて、前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力ステップと、
暗号生成装置が、前記暗号文を出力する暗号出力ステップと、
受信装置が、前記暗号出力ステップにおいて出力された情報及び前記乱数情報を受信する受信ステップと、
受信装置が、前記受信ステップにおいて受信された、前記暗号出力ステップにおいて出力された情報及び前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証ステップと、を有し、
前記暗号化ステップにおいて前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力する、データ伝送方法。
【請求項１３】
請求項１２に記載のデータ伝送方法において受信装置が行う各ステップを有する受信方法。
【請求項１４】
請求項１１に記載の暗号生成方法における各ステップをコンピュータに実行させるプログラム。
【請求項１５】
請求項１３に記載の受信方法における各ステップをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号技術に関する。
【背景技術】
【０００２】
装置間で安全に情報をやりとりするために、暗号が用いられる。送信側の装置では、送信先の装置に伝達したい情報（以下、平文）を暗号鍵を用いて暗号化して、暗号文を生成する。送信先の装置では、この暗号文を取得し、復号鍵を用いて暗号文を復号することで、平文を復元する。
【０００３】
暗号処理に関する先行技術を示す文献として、例えば特許文献１や２がある。特許文献１の暗号化装置は、暗号化対象の情報の価値に基づいて、暗号化の強度を決定する。特許文献２は、本発明者が発明した再配置暗号方式を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−９４２４１号公報
【特許文献２】特許第４７３７３３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
暗号文に対する攻撃の一つとして、インサイダー攻撃と呼ばれるものがある。インサイダー攻撃は、暗号化の処理を行う装置やその装置で用いられる暗号プログラムの制作者や管理者等が、その装置や暗号プログラムが行う処理の中に不正な処理を含めることで、ユーザに気付かれないように平文や暗号鍵の内容を漏洩させるという攻撃である。
【０００６】
本発明者は、特許文献２に開示されている再配置暗号方式、及び Initial Value（IV）として乱数を用いる暗号利用モードの Advanced Encryption Standard（AES）暗号方式に、インサイダー攻撃に対する脆弱性があることを見出した。特許文献１は、このようなインサイダー攻撃について記載していない。
【０００７】
本発明は、以上の課題を鑑みてなされたものである。本発明の目的は暗号の安全性を高める技術を提供することである。
【課題を解決するための手段】
【０００８】
本発明の暗号生成装置は、１）暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化部と、２）前記暗号化部が前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力部と、３）前記暗号文を出力する暗号出力部と、を有する。４）前記暗号化部は前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力部は前記暗号文と前記乱数を共に出力する。
【０００９】
本発明のデータ伝送システムは、本発明の暗号生成装置、及び受信装置を有する。受信装置は、１）前記暗号出力部によって出力された情報及び前記乱数情報を受信する受信部と、２）前記暗号出力部によって出力された情報及び前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証部と、を有する。
【００１０】
本発明の暗号生成方法は、コンピュータによって実行される。当該暗号生成方法は、１）暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化ステップと、２）前記暗号化ステップにおいて、前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力ステップと、３）前記暗号文を出力する暗号出力ステップと、を有する。さらに、４）前記暗号化ステップにおいて前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力する。
【００１１】
本発明のデータ伝送方法は、暗号生成装置と受信装置とを有するデータ伝送システムによって実行される。当該データ伝送方法は、１）暗号生成装置が、暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化ステップと、２）暗号生成装置が、前記暗号化ステップにおいて、前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力ステップと、３）暗号生成装置が、前記暗号文を出力する暗号出力ステップと、４）受信装置が、前記暗号出力ステップにおいて出力された情報及び前記乱数情報を受信する受信ステップと、５）受信装置が、前記受信ステップにおいて受信された、前記暗号出力ステップにおいて出力された情報及び前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証ステップと、を有する。さらに、６）前記暗号化ステップにおいて前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力する。
【発明の効果】
【００１２】
本発明によれば、暗号の安全性を高める技術が提供される。
【図面の簡単な説明】
【００１３】
【図１】実施形態１に係る暗号生成装置を例示するブロック図である。
【図２】AES 暗号方式を用いる場合におけるインサイダー攻撃を例示する図である。
【図３】再配置暗号方式について、インサイダー攻撃を含む暗号生成処理を例示するフローチャートである。
【図４】暗号生成装置を実現する計算機の構成を例示する図である。
【図５】実施形態１の暗号生成装置によって実行される処理の流れを例示するフローチャートである。
【図６】実施形態２に係る暗号生成装置を例示するブロック図である。
【図７】実施形態２の方法１を概念的に示した図である。
【図８】実施形態２の方法２を概念的に示した図である。
【図９】実施形態３の方法１を概念的に示した図である。
【図１０】実施形態３の方法２を概念的に示した図である。
【図１１】実施形態４の暗号システムを例示するブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。また、各ブロック図において、矢印の流れは、情報の流れを示している。さらに、各ブロック図において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を示している。
【００１５】
[実施形態１]
＜概要＞
図１は、実施形態１に係る暗号生成装置２０００を例示するブロック図である。暗号生成装置２０００は、暗号化部２０２０、乱数情報出力部２０４０、及び暗号出力部２０６０を有する。暗号化部２０２０は、暗号鍵及び乱数を用いて、平文から暗号文を生成する。乱数情報出力部２０４０は、暗号化部２０２０が平文及び暗号鍵の双方を取得する前に乱数情報を出力する。つまり乱数情報出力部２０４０は、１）暗号化部２０２０が平文を取得した後かつ暗号鍵を取得する前、２）暗号化部２０２０が暗号鍵を取得した後かつ平文を取得する前、又は３）暗号化部２０２０が平文を取得する前かつ暗号鍵を取得する前のいずれかのタイミングで、乱数情報を出力する。ここで、乱数情報は、暗号化部２０２０によって取得される乱数を特定する情報である。暗号出力部２０６０は、暗号化部２０２０によって生成された暗号文を出力する。
【００１６】
暗号生成装置２０００は、以下の２つの前提条件の内、少なくとも一方を満たす。一つ目の前提条件は、暗号化部２０２０が、平文と乱数とを結合したデータから暗号文を生成することである。二つ目の条件は、暗号出力部２０６０が、暗号文と乱数を共に出力することである。以下、前者を第１前提条件、後者を第２前提条件と呼ぶ。
【００１７】
前述した前提条件のどちらが満たされるのかは、暗号化部２０２０が利用する暗号方式によって異なる。以下、それぞれについて説明する。
【００１８】
＜第１前提条件が満たされる場合について＞
第１前提条件が満たされる場合、暗号化部２０２０は、再配置暗号方式を利用する。再配置暗号方式は特許文献２に開示されている暗号方式である。以下、再配置暗号方式の概略を説明する。なお、再配置暗号方式の詳細な説明は、特許文献２に開示されている。
【００１９】
暗号化部２０２０は、第１の疑似乱数 R を取得する。暗号化部２０２０は、R を初期値として第２の疑似乱数 R2 を生成する。暗号化部２０２０は、R2を用いて平文をストリーム暗号化し、中間データ M' を生成する。暗号化部２０２０は、第１の疑似乱数 R 及び中間データ M' について、再配置表 K を SBOX として用いて、非線形な一体化をする。最後に暗号化部２０２０は、この一体化されたデータを再配置表 K を用いて再配置することで、最終的な暗号文 C を出力する。ここで、再配置暗号方式では、暗号鍵が再配置表 K として用いられる。
【００２０】
上述のように、再配置暗号方式では、乱数（第１の疑似乱数 R）と平文とを結合したデータ（中間データ Cx）を暗号化することで、暗号文が生成される。よって、暗号化部２０２０が再配置暗号方式で暗号化を行う場合、第１前提条件が満たされる。
【００２１】
＜第２前提条件が満たされる場合について＞
第２前提条件が満たされるのは、例えば暗号化部２０２０が Initial Value（IV）として乱数を用いる Advanced Encryption Standard（AES）暗号方式で暗号文を生成する場合である。AES 暗号方式では、IV を用いる暗号利用モード（以下、IV モード）が広く利用されている。ここで、IV モードには、CBC モード（Cipher Block Chaining Mode）、CTR モード（Counter Mode）、CFB モード（Cipher Feedback Mode）、及び OFB モード（Output Feedback Mode）などがある。
【００２２】
これらの暗号利用モードの AES 暗号方式では、暗号文の提供先に対し、暗号文のヘッダに IV を付加したデータを提供する。そのため、暗号化部２０２０は、暗号文及び IV を共に出力する。
【００２３】
なお、上述の各暗号利用モードにおける具体的な暗号処理は既知の技術であるため、その説明は省略する。
【００２４】
＜作用・効果＞
第１前提条件又は第２前提条件が満たされる暗号方式にはインサイダー攻撃に対する脆弱性が存在する。インサイダー攻撃は、「暗号生成装置や暗号生成装置で用いられる暗号プログラムを制作者などが、暗号生成装置で行われる処理に不正な処理を含めることで、暗号生成装置のユーザに気づかれずに暗号鍵や平文の内容を漏洩させる」という攻撃である。
【００２５】
以下、インサイダー攻撃について具体的に説明する。まず、AES 暗号方式におけるインサイダー攻撃の例を説明する。このインサイダー攻撃は、「暗号化の処理で用いられる乱数に、平文又は暗号鍵に関する情報を含める」というものである。例えば攻撃者は、暗号化の処理で用いる乱数を生成するプログラムを、「暗号鍵 K を暗号化した値 e(K) を算出し、この e(K) の値を乱数として出力する」というものとして実装する。ここで、e(K) は、暗号文を復号するプログラムにおいて用いられる復号用関数 d によって復号できる。ただし、攻撃者は暗号プログラムの制作者等であるため、復号用関数 d を知っている。上述のインサイダー攻撃により、攻撃者は、平文や暗号鍵を取得することができる。
【００２６】
図２は、AES 暗号方式を用いる場合におけるインサイダー攻撃を例示する図である。図２（ａ）は、AES 暗号方式について、インサイダー攻撃を含む暗号生成処理を例示している。暗号生成処理は、前述したように、暗号鍵 K を暗号化して、e(K) を算出する。そして暗号生成処理は、e(K) をIV として用いて、平文 M を AES 暗号方式で暗号化し、暗号文 I(K, M)を生成する。暗号生成処理は、IV として用いた e(K) を暗号文 I(K, M) のヘッダに付加したデータを出力する。例えばこのデータはネットワークを介し、受信装置へ送信される。
【００２７】
インサイダー攻撃の攻撃者は、上記データを取得する。図２（ｂ）は、暗号文 I(K, M) に e(K) が付加されたデータを取得した攻撃者が行う処理の流れを例示している。攻撃者は、取得した暗号文 I(K, M) のヘッダに付加されている e(K) が、復号用関数 d を用いて復号できることを知っている。そこで攻撃者は、復号用関数 d で e(K) を復号することで、暗号鍵 K を取得する。さらに攻撃者は、取得した暗号鍵 K を用いて暗号文 I(K,M) を復号し、平文 M を取得する。このようにして、攻撃者は暗号鍵及び平文を取得することができる。
【００２８】
次に、再配置暗号方式におけるインサイダー攻撃の例を説明する。このインサイダー攻撃は、「暗号文の所定位置に暗号鍵の情報が含まれるまで暗号化を繰り返す（乱数を変更する）ことで、暗号文の所定位置に暗号鍵の情報が含まれるようにする」というものである。
【００２９】
図３は、再配置暗号方式について、インサイダー攻撃を含む暗号生成処理を例示するフローチャートである。暗号生成処理は第１の疑似乱数 R を生成する（Ｓ２０２）。暗号生成処理は R を初期値として第２の疑似乱数 R2 を生成する（Ｓ２０４）。暗号生成処理は、R2 を用いて平文 M をストリーム暗号化して、中間データ M' を生成する（Ｓ２０６）。暗号生成処理は、暗号鍵 K を用いて中間データ M' を暗号化し、暗号文 C を生成する（Ｓ２０８）。暗号生成処理は、(C の先頭の２バイト mod Length(K))＋１を算出し、この値を x とする（Ｓ２１０）。ここで、Length(K) は、暗号鍵 K のサイズをビットの単位で出力する関数である。暗号生成処理は、K の x ビット目と C の１７ビット目とを比較する（Ｓ２１２）。これらの値が同じであれば（Ｓ２１２：ＹＥＳ）、暗号生成処理は暗号文 C を出力する（Ｓ２１４）。一方、これらの値が異なれば（Ｓ２１２：ＮＯ）、暗号生成処理はＳ２０２に戻る。
【００３０】
以上の動作により、出力される暗号文 C の１７ビット目は、K の x ビット目の値と同一になる。つまり攻撃者は、暗号文 C を復号しなくても、暗号文 C の 17 ビット目を見ることで、K の x ビット目の値を知ることができる。ここで x の値は C の値によって異なる。そのため攻撃者は、暗号化生成装置から送信される暗号文 C を繰り返し取得することで、各暗号文 C から、K のそれぞれ異なるビットの値を知ることができる。最終的に攻撃者は、K の全体を把握することができる。なお、Ｓ２１０における「２バイト」やＳ２１２における「１７ビット目」はあくまで例示であり、これらの値は任意に変更可能である。
【００３１】
以上のように、IV を用いる AES 暗号方式や再配置暗号方式には、インサイダー攻撃に対する脆弱性が存在する。
【００３２】
なお、インサイダー攻撃を行う攻撃者は、暗号生成装置２０００から出力される情報（暗号文など）を取得し、その情報を利用してインサイダー攻撃を行う。一般に、暗号文はネットワークを介してやりとりされることが多い。例えば、メールの送信元が暗号生成装置２０００である場合、暗号生成装置２０００は、メールの本文や添付ファイルを暗号化して暗号文を生成し、この暗号文を送信する。そのため、例えば攻撃者は、暗号生成装置２０００がネットワークを介して他の装置と行う通信を盗聴することで、暗号文などを取得できる。このような盗聴の方法は既知の技術であるため、その実現方法については説明を省略する。
【００３３】
上述のインサイダー攻撃では必然的に、平文や暗号鍵を取得した後において、乱数の生成又は変更が行われる。AES 暗号方式の場合、乱数に平文や暗号鍵の情報を含めるため、平文や暗号鍵を取得した後に、乱数の値の生成又は変更が行われる。また再配置暗号方式の場合、平文や暗号鍵の情報が暗号文の所定位置に含まれるまで暗号生成処理が繰り返されるため、それに伴って第１の疑似乱数 R の値が変更される。このことから、暗号化部２０２０が平文や暗号鍵を取得する前に乱数が生成されており、さらにはその乱数が変更されなければ、インサイダー攻撃は行われていないこととなる。よって、暗号化部２０２０が平文や暗号鍵を取得する前に乱数が生成されており、さらにはその乱数が変更されていないことを確認できれば、インサイダー攻撃が行われていないことを確認できる。
【００３４】
そこで本実施形態の暗号生成装置２０００は、暗号化部２０２０によって平文及び暗号鍵の双方が取得される前に、暗号化部２０２０が暗号化に利用する乱数を特定する乱数情報を出力する。こうすることで、暗号化部２０２０が暗号化に別の乱数を用いた場合、つまりはインサイダー攻撃が行われた場合に、乱数が異なっていることを検出することができる。よって、本実施形態によれば、再配置暗号方式や AES 暗号方式を利用する暗号装置等におけるインサイダー攻撃に対する安全性を向上することができる。
【００３５】
＜＜証明＞＞
例として、再配置暗号とハッシュ関数が安全ならば、乱数情報として乱数のハッシュ値を出力する場合に、再配置暗号がインサイダー攻撃に対して安全であることの証明を示する。まず乱数情報出力部２０４０は、第１の疑似乱数 R を生成し、そのハッシュ値 h(R) を生成する。ここで、h はハッシュ関数であり、衝突困難性を有するとする。
【００３６】
上述したインサイダー攻撃を行う場合、暗号文の所定位置に暗号鍵の情報が含まれるようになるまで暗号化を繰り返すため、第１の疑似乱数 R の値が変化する。ここで、暗号文が出力された際における第１の疑似乱数の値を R' とする。ここで、第１の疑似乱数の値が変化したことがユーザに気付かれないようにするためには、乱数のハッシュ値が変化しないようにしなければならない。つまり、h(R) = h(R') を満たす必要がある。
【００３７】
しかし、ハッシュ関数 h は衝突困難性を有するため、h(R) = h(R') であり、なおかつ R ≠ R' となるような R、R' の組を効率よく見つけることができない。よって、h(R) = h(R') であり、なおかつ R ≠ R' となることは、ハッシュ関数 h が衝突困難性を有することと矛盾する。よって、暗号化部２０２０において第１の疑似乱数 R が変化してしまう上述したインサイダー攻撃を行うことはできない。
【００３８】
なお、乱数を変化させる以外に平文や暗号鍵の内容を漏洩させる方法として、暗号文に対して平文や暗号鍵の情報を別途付加する方法が考えられる。しかし、この方法では暗号化部２０２０から出力されるデータのデータ長が変化する。
【００３９】
例えば、平文を M、ゼロパディングした平文を M0、暗号文を C、暗号鍵を K、あるデータ X のデータ長を Length(X) と表記する。この場合、AES 暗号方式及び再配置暗号方式では、Length(M0) = Length(C)、Length(K) > 0 となる。よって、暗号文 C に暗号鍵 K の情報を付加すると、Length(M0) + Length(K) > Length(C) となり、データ長が大きくなる。よって、暗号化部２０２０から出力されるデータ長を監視することで、暗号文に暗号鍵や平文の情報を別途付加する攻撃を阻止することができる。
【００４０】
また、上述の様に暗号文に対して平文や暗号鍵の情報を別途付加したデータを圧縮することによって元の暗号文のデータ長と同じにすることで、データ長を見てもインサイダー攻撃が行われたことが分からないようにすることも考えられる。しかしこの方法では、ユーザが暗号文を復号できなくなる。そして、ユーザは、暗号文を復号できない場合、暗号文に対して何らかの攻撃が行われた可能性があることを把握することができる。よって、このようにデータの圧縮を行う方法でも、インサイダー攻撃を行うことはできない。
【００４１】
＜ハードウエア構成＞
暗号生成装置２０００の各機能構成部は、各機能構成部を実現するハードウエア（例：ハードワイヤードされた電子回路など）で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ（例：電子回路とそれを制御するプログラムの組み合わせなど）で実現されてもよい。以下、暗号生成装置２０００の各機能構成部がハードウエアとソフトウエアとの組み合わせで実現される場合について、さらに説明する。
【００４２】
計算機１０００は、Personal Computer（PC）、サーバマシン、タブレット端末、又はスマートフォンなど、種々の計算機である。計算機１０００は、暗号生成装置２０００を実現するために設計された専用の計算機であってもよいし、汎用の計算機であってもよい。
【００４３】
図４は、暗号生成装置２０００を実現する計算機１０００の構成を例示する図である。計算機１０００は、バス１０２０、プロセッサ１０４０、メモリ１０６０、ストレージ１０８０、及び入出力インタフェース１１００を有する。バス１０２０は、プロセッサ１０４０、メモリ１０６０、及びストレージ１０８０が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ１０４０などを互いに接続する方法は、バス接続に限定されない。プロセッサ１０４０は、CPU (Central Processing Unit) や GPU (Graphics Processing Unit) などの演算処理装置である。メモリ１０６０は、RAM (Random Access Memory) や ROM (Read Only Memory) などのメモリである。ストレージ１０８０は、ハードディスク、SSD (Solid State Drive)、又はメモリカードなどの記憶装置である。また、ストレージ１０８０は、RAM や ROM などのメモリであってもよい。
【００４４】
入出力インタフェース１１００は、計算機１０００と入出力デバイスとを接続するためのインタフェースである。例えば入出力インタフェース１１００には、キーボードやディスプレイ装置などが接続される。
【００４５】
ストレージ１０８０は暗号生成装置２０００の各機能を実現するプログラムモジュールを記憶している。プロセッサ１０４０は、これら各プログラムモジュールを実行することで、そのプログラムモジュールに対応する各機能を実現する。
【００４６】
計算機１０００のハードウエア構成は図４に示した構成に限定されない。例えば、各プログラムモジュールはメモリ１０６０に格納されてもよい。この場合、計算機１０００は、ストレージ１０８０を備えていなくてもよい。
【００４７】
＜処理の流れ＞
図５は、実施形態１の暗号生成装置２０００によって実行される処理の流れを例示するフローチャートである。乱数情報出力部２０４０は、乱数情報を出力する（Ｓ１０２）。暗号化部２０２０は、平文及び暗号鍵を取得する（Ｓ１０４）。暗号化部２０２０は、平文を暗号化して暗号文を生成する（Ｓ１０６）。暗号出力部２０６０は、暗号文を出力する（Ｓ１０８）。
【００４８】
＜暗号化部２０２０の詳細＞
暗号化部２０２０は、平文及び暗号鍵を取得する。ここで、平文は任意のデータである。例えば平文は、文字列、画像データ、又は音声データなどである。暗号化部２０２０が平文を取得する方法は様々である。例えば暗号化部２０２０は、ユーザによって入力される平文を取得する。また例えば、暗号化部２０２０は、暗号生成装置２０００の内部又は外部に設けられている記憶装置に記憶されている平文を取得する。
【００４９】
暗号化部２０２０が暗号鍵を取得する方法は様々である。例えば暗号化部２０２０は、ユーザによって入力される暗号鍵を取得する。また例えば、暗号化部２０２０は、暗号生成装置２０００の内部又は外部に設けられている記憶装置に記憶されている暗号鍵を取得する
【００５０】
暗号化部２０２０が平文を暗号化する方法については、前述した通りである。
【００５１】
＜乱数情報出力部２０４０の詳細＞
乱数情報出力部２０４０は、乱数を生成し、その乱数を特定する乱数情報を出力する（Ｓ１０２）。例えば乱数情報は、特定する乱数そのものを示す。また例えば乱数情報は、特定する乱数から算出されたハッシュ値を示す。このハッシュ値の算出に用いるハッシュ関数は、衝突困難性を有する任意のハッシュ関数（例えば SHA-1）である。なお、乱数からハッシュ値を生成する処理は、乱数情報出力部２０４０によって行われてもよいし、乱数情報出力部２０４０の外部で行われてもよい。後者の場合、乱数情報出力部２０４０は乱数のハッシュ値を取得し、そのハッシュ値を乱数情報として出力する。
【００５２】
なお、乱数情報出力部２０４０が乱数を生成する方法には、既知の様々な方法が利用できる。
【００５３】
ここで、暗号化部２０２０が再配置暗号方式で暗号化を行う場合、乱数情報出力部２０４０が出力する乱数情報によって特定される乱数は、第１の疑似乱数 R である。そのために、乱数情報出力部２０４０は第１の疑似乱数 R を生成する。暗号化部２０２０は、乱数情報出力部２０４０によって生成された第１の疑似乱数 R を用いて暗号化を行う。
【００５４】
＜暗号出力部２０６０の詳細＞
暗号出力部２０６０は、暗号文を出力する（Ｓ１０８）。ここで、暗号出力部２０６０が暗号文を出力する方法は任意である。例えば暗号出力部２０６０は、暗号文を記憶装置に出力することで、記憶装置に暗号文を記憶させる。また例えば暗号出力部２０６０は、ネットワークを介して暗号文を送信する。
【００５５】
暗号出力部２０６０は、暗号文のみを出力してもよいし、暗号文と別の情報を共に出力してもよい。ただし、暗号化部２０２０が AES 暗号方式で暗号化を行う場合（第２前提条件が満たされる場合）、暗号出力部２０６０は暗号文と乱数とを共に出力する。
【００５６】
［実施形態２］
図６は、実施形態２に係る暗号生成装置２０００を例示するブロック図である。本実施形態における暗号化部２０２０は、再配置暗号方式で暗号化を行う。つまり、本実施形態においては、前述した第１前提条件が満たされる。また、実施形態２の暗号生成装置２０００は、安全性検証部２０８０をさらに有する。安全性検証部２０８０は、暗号出力部２０６０によって出力された暗号文の安全性を検証する。具体的には、安全性検証部２０８０は、上記暗号文についてインサイダー攻撃が行われたか否かを判定する。以下、その方法を具体的に２つ例示する。
【００５７】
＜方法１＞
本方法は、乱数情報が乱数を示す場合において安全性検証部２０８０が実行する方法である。図７は、実施形態２の方法１を概念的に示した図である。安全性検証部２０８０は、暗号化部２０２０によって生成された暗号文を復号する。その結果、安全性検証部２０８０は、平文と乱数とを得る。そして、安全性検証部２０８０は、この乱数と、乱数情報出力部２０４０によって出力された乱数情報が示す乱数とが一致するか否かを判定する。
【００５８】
これらの乱数が一致すれば、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化していないこととなる。よって、インサイダー攻撃が行われていないことが分かる。一方、暗号文を復号して得られた乱数と、乱数情報が示す乱数とが一致しない場合、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化していることとなる。つまり、インサイダー攻撃が行われている可能性があることが分かる。
【００５９】
＜方法２＞
本方法は、乱数情報が乱数のハッシュ値を示す場合において安全性検証部２０８０が実行する方法である。図８は、実施形態２の方法２を概念的に示した図である。まず安全性検証部２０８０は、方法１と同様に、暗号文を復号して平文と乱数とを得る。次に、安全性検証部２０８０はこの乱数のハッシュ値を算出する。このハッシュ値の算出に用いられるハッシュ関数は、乱数情報出力部２０４０がハッシュ値の算出に利用するハッシュ関数と同じハッシュ関数である。そして、安全性検証部２０８０は、算出したハッシュ値と、乱数情報が示すハッシュ値とが一致するか否かを判定する。
【００６０】
これらのハッシュ値が一致すれば、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化していないこととなる。一方、暗号文を復号して得られた乱数から算出したハッシュ値と、乱数情報が示すハッシュ値とが一致しない場合、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化していることとなる。よって、方法１の場合と同様に、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化しているか否かを把握することができるため、インサイダー攻撃が行われていないかどうかを把握することができる。
【００６１】
なお、上述の各方法では、安全性検証部２０８０が暗号文を復号できることを前提としている。そのために、安全性検証部２０８０は、暗号化部２０２０によって生成された暗号文を復号するための復号鍵を取得する。例えば復号鍵は、暗号生成装置２０００の内部又は外部に設けられた記憶装置に記憶されている。なお、暗号化を行う装置では、暗号化に用いる暗号鍵だけでなく、その暗号文の復号に用いる復号鍵も用意されていることが一般的である。
【００６２】
［実施形態３］
実施形態３に係る暗号生成装置２０００は、実施形態２の暗号生成装置２０００と同様に図６で表される。本実施形態における暗号化部２０２０は、IV を用いる AES 暗号方式で暗号化を行う。つまり、本実施形態においては、第２前提条件が満たされる。さらに、実施形態３の暗号生成装置２０００は、実施形態２の暗号生成装置２０００と同様に安全性検証部２０８０を有する。以下、本実施形態の安全性検証部２０８０の動作の例を具体的に２つ例示する。
【００６３】
＜方法１＞
本方法は、乱数情報が乱数を示す場合において安全性検証部２０８０が実行する方法である。図９は、実施形態３の方法１を概念的に示した図である。本実施形態では、暗号出力部２０６０によって、暗号文と共に乱数が出力される。安全性検証部２０８０は、暗号出力部２０６０によって暗号文と共に出力された乱数と、乱数情報出力部２０４０によって出力された乱数情報が示す乱数とが一致するか否かを判定する。これらの乱数が一致すれば、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化していないこととなる。一方、これらの乱数が一致しなければ、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化したこととなる。よって、実施形態２で説明した安全性検証部２０８０と同様に、暗号化部２０２０によって平文及び暗号鍵が取得された前後において乱数が変化したか否かを把握できるため、インサイダー攻撃が行われたか否かを把握することができる。
【００６４】
＜方法２＞
本方法は、乱数情報が乱数のハッシュ値を示す場合において安全性検証部２０８０が実行する方法である。図１０は、実施形態３の方法２を概念的に示した図である。安全性検証部２０８０は、暗号出力部２０６０によって暗号文と共に出力された乱数のハッシュ値を算出する。このハッシュ値の算出に用いられるハッシュ関数は、乱数情報出力部２０４０がハッシュ値の算出に利用するハッシュ関数と同じハッシュ関数である。そして、安全性検証部２０８０は、算出したハッシュ値と、乱数情報が示すハッシュ値とが一致するか否かを判定する。これらのハッシュ値が一致すれば、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化していないこととなる。一方、これらのハッシュ値が一致しなければ、暗号化部２０２０によって平文及び暗号鍵が取得された前後において、乱数が変化したこととなる。よって、実施形態２で説明した安全性検証部２０８０と同様に、暗号化部２０２０によって平文及び暗号鍵が取得された前後において乱数が変化したか否かを把握できるため、インサイダー攻撃が行われたか否かを把握することができる。
【００６５】
なお、本実施形態の場合、安全性検証部２０８０は暗号文を復号する必要がない。
【００６６】
［実施形態４］
図１１は、実施形態４のデータ伝送システム４０００を例示するブロック図である。実施形態４において、暗号生成装置２０００は、受信装置３０００と通信可能に（例えばネットワークを介して）接続されている。暗号生成装置２０００は、暗号出力部２０６０によって出力される情報、及び乱数情報出力部２０４０によって出力される乱数情報を、受信装置３０００へ送信する。前述したように暗号出力部２０６０から出力される情報は、暗号文のみ、暗号文と乱数、又は暗号文と乱数のハッシュ値などである。受信装置３０００は、暗号生成装置２０００から送信された情報を受信する。受信装置３０００は、受信した暗号文を復号して平文を取得する。これにより、受信装置３０００のユーザは、平文の内容を知ることができる。例えば平文が、暗号生成装置２０００のユーザが作成したメールの文章であれば、受信装置３０００は、そのメールを読むことができる。
【００６７】
さらに、受信装置３０００は、受信した暗号文の安全性を検証する。つまり、実施形態２や実施形態３で説明した安全性検証部２０８０による動作と同様の動作が、受信装置３０００において行われる。
【００６８】
上記機能を実現するため、受信装置３０００は受信部３０２０及び安全性検証部３０４０を有する。受信部３０２０は、暗号出力部２０６０によって出力される情報、及び乱数情報を取得する。前述したように、暗号出力部２０６０によって出力される情報は、暗号文のみ、暗号文と乱数、又は暗号文と乱数のハッシュ値などである。
【００６９】
＜暗号化部２０２０が再配置暗号方式で暗号化を行う場合＞
安全性検証部３０４０は、受信部３０２０が受信した暗号文を用い、実施形態２で説明した各方法と同様の方法により、インサイダー攻撃が行われていないかどうかを判定する。
【００７０】
なおこの場合、安全性検証部３０４０は、暗号文を復号して乱数を得る必要がある。この点、受信装置３０００は取得した暗号文を復号する装置であるため、暗号文を復号するための復号鍵を有している。そのため、安全性検証部３０４０は、この復号鍵を用いて暗号文を復号することができる。
【００７１】
＜暗号化部２０２０が AES 暗号方式で暗号化を行う場合＞
安全性検証部３０４０は、受信部３０２０が受信した暗号文及び乱数を用い、実施形態３で説明した各方法で、インサイダー攻撃が行われていないかどうかを判定する。
【００７２】
＜作用・効果＞
本実施形態によれば、暗号生成装置２０００から出力される暗号文の安全性を、受信装置３０００において検証することができる。具体的には、暗号生成装置２０００から出力される暗号文についてインサイダー攻撃が行われていないかどうかを検証することができる。そのため、受信装置３０００のユーザは、インサイダー攻撃が行われていないことを確認した上で、安心して暗号生成装置２０００との間で暗号文のやりとりをすることができる。
【００７３】
以上、図面を参照して本発明の実施形態及び実施例について述べたが、これらは本発明の例示であり、上記実施形態や実施例の組み合わせ、及び上記実施形態や実施例以外の様々な構成を採用することもできる。
【００７４】
以下、参考形態の例を付記する。
１．  暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化部と、
前記暗号化部が前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力部と、
前記暗号文を出力する暗号出力部と、を有し、
前記暗号化部は前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力部は前記暗号文と前記乱数を共に出力する、暗号生成装置。
２．  前記暗号化部は、再配置暗号方式で前記平文を暗号化することで前記暗号文を生成する、１．に記載の暗号生成装置。
３．  前記乱数情報は、前記乱数か、又は所定のハッシュ関数を用いて前記乱数から算出されたハッシュ値を示す、１．又は２．に記載の暗号生成装置。
４．  前記暗号出力部によって出力される情報及び前記乱数情報出力部によって出力される前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証部を有する、１．乃至３．いずれか一つに記載の暗号生成装置。
５．  前記暗号化部は、前記平文と前記乱数とを結合したデータを前記暗号鍵で暗号化して前記暗号文を生成し、
前記乱数情報は前記乱数を示し、
前記安全性検証部は、暗号文を復号することで暗号化に用いられた乱数を復元し、その乱数と前記乱数情報によって示される乱数とが一致するか否かを判定することで、前記暗号文の安全性を検証する、４．に記載の暗号生成装置。
６．  前記暗号化部は、前記平文と前記乱数とを結合したデータを前記暗号鍵で暗号化して前記暗号文を生成し、
前記乱数情報は、所定のハッシュ関数を用いて前記乱数から算出したハッシュ値を示し、
前記安全性検証部は、前記暗号文を復号することで暗号化に用いられた乱数を復元し、前記所定のハッシュ関数を用いて前記復元した乱数のハッシュ値を算出し、そのハッシュ値と前記乱数情報によって示されるハッシュ値とが一致するか否かを判定することで、前記暗号文の安全性を検証する、４．に記載の暗号生成装置。
７．  前記暗号出力部は前記暗号文と前記乱数を共に出力し、
前記乱数情報は前記乱数を示し、
前記安全性検証部は、前記暗号出力部によって出力される乱数と、前記乱数情報によって示される乱数とが一致するか否かを判定することで、前記暗号文の安全性を検証する、４．に記載の暗号生成装置。
８．  前記暗号出力部は前記暗号文と前記乱数を共に出力し、
前記乱数情報は、所定のハッシュ関数を用いて前記乱数から算出したハッシュ値を示し、
前記安全性検証部は、前記所定のハッシュ関数を用いて、前記暗号出力部によって出力された乱数からハッシュ値を算出し、そのハッシュ値と前記乱数情報によって示されるハッシュ値とが一致するか否かを判定することで、前記暗号文の安全性を検証する、４．に記載の暗号生成装置。
９．  １．乃至８．いずれか一つに記載の暗号生成装置、及び受信装置を有するデータ伝送システムであって、
前記受信装置は、
前記暗号出力部によって出力された情報及び前記乱数情報を受信する受信部と、
前記受信部によって受信された、前記暗号出力部によって出力された情報及び前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証部と、を有するデータ伝送システム。
１０．  ９．に記載の受信装置。
１１．  コンピュータによって実行される暗号生成方法であって、
暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化ステップと、
前記暗号化ステップにおいて、前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力ステップと、
前記暗号文を出力する暗号出力ステップと、を有し、
前記暗号化ステップにおいて前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力する、暗号生成方法。
１２．  前記暗号化ステップにおいて、再配置暗号方式で前記平文を暗号化することで前記暗号文を生成する、１１．に記載の暗号生成方法。
１３．  前記乱数情報は、前記乱数か、又は所定のハッシュ関数を用いて前記乱数から算出されたハッシュ値を示す、１１．又は１２．に記載の暗号生成方法。
１４．  前記暗号出力ステップにおいて出力される情報及び前記乱数情報出力部において出力される前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証ステップを有する、１１．乃至１３．いずれか一つに記載の暗号生成方法。
１５．  前記暗号化ステップにおいて、前記平文と前記乱数とを結合したデータを前記暗号鍵で暗号化して前記暗号文を生成し、
前記乱数情報は前記乱数を示し、
前記安全性検証ステップにおいて、暗号文を復号することで暗号化に用いられた乱数を復元し、その乱数と前記乱数情報によって示される乱数とが一致するか否かを判定することで、前記暗号文の安全性を検証する、１４．に記載の暗号生成方法。
１６．  前記暗号化ステップにおいて、前記平文と前記乱数とを結合したデータを前記暗号鍵で暗号化して前記暗号文を生成し、
前記乱数情報は、所定のハッシュ関数を用いて前記乱数から算出したハッシュ値を示し、
前記安全性検証ステップにおいて、前記暗号文を復号することで暗号化に用いられた乱数を復元し、前記所定のハッシュ関数を用いて前記復元した乱数のハッシュ値を算出し、そのハッシュ値と前記乱数情報によって示されるハッシュ値とが一致するか否かを判定することで、前記暗号文の安全性を検証する、１４．に記載の暗号生成方法。
１７．  前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力し、
前記乱数情報は前記乱数を示し、
前記安全性検証ステップにおいて、前記暗号出力ステップによって出力される乱数と、前記乱数情報によって示される乱数とが一致するか否かを判定することで、前記暗号文の安全性を検証する、１４．に記載の暗号生成方法。
１８．  前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力し、
前記乱数情報は、所定のハッシュ関数を用いて前記乱数から算出したハッシュ値を示し、
前記安全性検証ステップにおいて、前記所定のハッシュ関数を用いて、前記暗号出力ステップによって出力された乱数からハッシュ値を算出し、そのハッシュ値と前記乱数情報によって示されるハッシュ値とが一致するか否かを判定することで、前記暗号文の安全性を検証する、１４．に記載の暗号生成方法。
１９．  暗号生成装置と受信装置とを有するデータ伝送システムによって実行されるデータ伝送方法であって、
暗号生成装置が、暗号鍵及び乱数を用いて、平文から暗号文を生成する暗号化ステップと、
暗号生成装置が、前記暗号化ステップにおいて、前記平文及び前記暗号鍵の双方を取得する前に、前記乱数を特定する乱数情報を出力する、乱数情報出力ステップと、
暗号生成装置が、前記暗号文を出力する暗号出力ステップと、
受信装置が、前記暗号出力ステップにおいて出力された情報及び前記乱数情報を受信する受信ステップと、
受信装置が、前記受信ステップにおいて受信された、前記暗号出力ステップにおいて出力された情報及び前記乱数情報を用いて、前記暗号文の安全性を検証する安全性検証ステップと、を有し、
前記暗号化ステップにおいて前記平文と前記乱数とを結合したデータから前記暗号文を生成するか、又は前記暗号出力ステップにおいて前記暗号文と前記乱数を共に出力する、データ伝送方法。
２０．  １９．に記載のデータ伝送方法において受信装置が行う各ステップを有する受信方法。
２１．  １１．乃至１８．いずれか一つに記載の暗号生成方法における各ステップをコンピュータに実行させるプログラム。
２２．  ２０．に記載の受信方法における各ステップをコンピュータに実行させるプログラム。
【符号の説明】
【００７５】
１０００  計算機
１０２０  バス
１０４０  プロセッサ
１０６０  メモリ
１０８０  ストレージ
１１００  入出力インタフェース
２０００  暗号生成装置
２０２０  暗号化部
２０４０  乱数情報出力部
２０６０  暗号出力部
２０８０  安全性検証部
３０００  受信装置
３０２０  受信部
３０４０  安全性検証部
４０００  データ伝送システム
【図１】
2017129779.tif 000003
【図２】
2017129779.tif 000004
【図３】
2017129779.tif 000005
【図４】
2017129779.tif 000006
【図５】
2017129779.tif 000007
【図６】
2017129779.tif 000008
【図７】
2017129779.tif 000009
【図８】
2017129779.tif 000010
【図９】
2017129779.tif 000011
【図１０】
2017129779.tif 000012
【図１１】
2017129779.tif 000013