(57)【要約】【課題】秘匿強度の高い暗号化処理を実行するための暗号化方法、復号方法、暗号化装置、及び復号装置を提供することにある。【解決手段】本発明による暗号化装置１０は、暗号化部３１と、復号命令生成部３３と、混在データ生成部３５とを具備する。暗号化部３１は、データ１００を暗号化して暗号化データ１０１を生成する。復号命令生成部３３は、暗号化データ１０１を復号する装置のアーキテクチャに基づいて、暗号化データ１０１に対応する命令コード１０４を生成する。混在データ生成部３５は、暗号化データ１０１と命令コード１０４とを統合して混在データ１０８を生成する。【選択図】図２
2008124824.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを用いて、入力された元データに対して暗号化を行う方法であって、
前記元データを暗号化して暗号化データを生成するステップと、
前記暗号化データを復号する復号計算式から、前記暗号化データを前記元データに復号するための復号命令コードを生成するステップと、
前記暗号化データと前記復号命令コードとを統合して混在データを生成するステップと、
を具備する暗号化方法。
【請求項２】
請求項１に記載の暗号化方法において、
前記暗号化データを復号する演算装置の型式を指定するステップを更に具備し、
前記復号命令コードは、前記型式に対応する命令コードである
暗号化方法。
【請求項３】
請求項１又は２に記載の暗号化方法において、
前記暗号化データを、複数の暗号化データに分割するステップと、
前記復号命令コードを複数の復号命令コードに分割するステップと、
を更に具備し、
前記混在データを生成するステップは、
前記複数の暗号化データと、前記複数の復号命令コードとを統合して混在データを生成するステップを備える
暗号化方法。
【請求項４】
請求項３に記載の暗号化方法において、
前記混在データを生成するステップは、
前記複数の復号命令コードをチェーン化するためのＪｕｍｐ命令コードを前記混在データに統合するステップを更に備える
暗号化方法。
【請求項５】
請求項４に記載の暗号化方法において、
前記混在データを生成するステップは、
前記Ｊｕｍｐ命令コードと、前記複数の暗号化データと、前記複数の復号命令コードのそれぞれのデータサイズに基づいて、前記混在データにおける前記複数の復号命令コードのそれぞれの位置情報を取得するステップと、
前記位置情報に基づいて、前記Ｊｕｍｐ命令コードを生成するステップと
を備える
暗号化方法。
【請求項６】
請求項１から５いずれか１項に記載の暗号化方法において、
前記混在データを生成するステップは、
前記混在データから前記暗号化データを抽出するための抽出命令コードを、前記混在データに統合するステップを更に備える
暗号化方法。
【請求項７】
請求項１から６いずれか１項に記載の暗号化方法をコンピュータに実現させる暗号化プログラム。
【請求項８】
コンピュータを用いて、入力されたデータを復号する方法であって、
命令コードと、暗号化されたデータである暗号化データとを有する混在データから、前記暗号化データを復号するための復号命令コードを読み出すステップと、
前記復号命令コードが復号処理を実行する演算装置の型式に対応する命令コードである場合、前記復号命令コードを実行し、前記暗号化データを前記元データに復号するステップと、
を具備する復号方法。
【請求項９】
請求項８に記載の復号方法において、
前記混在データは、前記暗号化データを分割した複数の暗号化データと、抽出命令コードとを有し、
前記暗号化データを復号するステップは、
前記抽出命令コードを実行し、前記複数の暗号化データを抽出して前記暗号化データを生成するステップとを更に備える
復号方法。
【請求項１０】
請求項９に記載の復号方法において、
前記混在データは、
前記復号命令コードを分割した複数の復号命令コードと、
前記複数の復号命令コードをチェーン化するためのＪｕｍｐ命令コードとを更に有し、
前記暗号化データを復号するステップは、
前記複数の復号命令コードのいずれかに続けて、前記Ｊｕｍｐ命令コードを実行するステップと、
前記Ｊｕｍｐ命令コードによって指定される他の復号命令コードを実行するステップと
を備える
復号方法。
【請求項１１】
請求項８から１０いずれか１項に記載の復号方法をコンピュータに実現させる復号プログラム。
【請求項１２】
元データを暗号化して暗号化データを生成する暗号化部と、
前記暗号化データを復号する復号計算式から、前記暗号化データを前記元データに復号するための復号命令コードを生成する復号命令生成部と、
前記暗号化データと前記復号命令コードとを統合して混在データを生成する混在データ生成部と、
を具備する暗号化装置。
【請求項１３】
請求項１２に記載の暗号化装置において、
前記復号命令生成部は、前記暗号化データを復号する演算装置の型式を指定するアーキテクチャ情報に対応する前記復号命令コードを作成する
暗号化装置。
【請求項１４】
請求項１２又は１３に記載の暗号化装置において、
前記暗号化データを、複数の暗号化データに分割する暗号化データ分割部と、
前記復号命令コードを複数の復号命令コードに分割する復号命令分割部と、
を更に具備し、
前記混在データ生成部は、前記複数の暗号化データと、前記複数の復号命令コードとを統合して混在データを生成する
暗号化装置。
【請求項１５】
請求項１４に記載の暗号化装置において、
前記混在データ生成部は、前記複数の復号命令コードをチェーン化するＪｕｍｐ命令コードを生成し、前記混在データに統合する
暗号化装置。
【請求項１６】
請求項１５に記載の暗号化装置において、
混在データ生成部は、前記Ｊｕｍｐ命令コードと、前記複数の暗号化データと、前記複数の復号命令コードのそれぞれのデータサイズに基づいて、前記混在データにおける前記複数の復号命令コードの位置情報を取得し、前記位置情報に基づいて、前記Ｊｕｍｐ命令コードを生成する
暗号化装置。
【請求項１７】
請求項１２から１６いずれか１項に記載の暗号化装置において、
前記混在データ生成部は、前記混在データから前記暗号化データを抽出するための抽出命令コードを前記混在データに統合する
暗号化方法。
【請求項１８】
命令コードと暗号化されたデータである暗号化データとを有する混在データから、復号処理を行うための復号命令コードを読み出す復号部と、
復号処理を行う演算装置の型式を示すアーキテクチャ情報を有する記憶装置と、
を具備し、
前記復号部は、前記復号命令コードが自身のアーキテクチャ情報に基づく命令コードである場合、前記復号命令コードを実行し、前記暗号化データを前記元データに復号する
復号装置。
【請求項１９】
請求項１８に記載の復号装置において、
前記混在データは、前記暗号化データを分割した複数の暗号化データと、抽出命令コードとを有し、
前記抽出命令コードを実行し、前記混在データから前記複数の暗号化データを抽出して前記暗号化データを生成する暗号化データ抽出部を更に具備する
復号装置。
【請求項２０】
請求項１８又は１９に記載の復号装置において、
前記混在データは、
前記復号命令コードを分割した複数の復号命令コードと、
前記複数の復号命令コードをチェーン化するためのＪｕｍｐ命令コードとを更に有し、
前記復号部は、前記複数の命令コードのいずれかに続けて、前記Ｊｕｍｐ命令コードを実行し、前記Ｊｕｍｐ命令コードによって指定される他の復号命令コードを読み出して実行する
復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化方法、復号方法、暗号化装置、及び復号装置に関する。
【背景技術】
【０００２】
従来広く利用されている暗号化技術は、元データに対して何らかの暗号化計算式を用いてデータ変換（暗号化）を行い、元データの閲覧を不可能にするものである。この際、復号に利用される復号鍵は、暗号化処理に伴って生成される。元データへの復号に際しては、暗号化されたデータ及び復号鍵を用いて、復号計算式を利用し、元データへの復元が行われる。このように、従来技術では、元データから復号鍵を取り出すことで情報の欠落を発生させ、復号を困難にしている。
【０００３】
暗号化の方式には、大きく共通鍵方式と公開鍵方式の２つの方式がある。公開鍵方式は、秘密鍵と、秘密鍵に基づいて生成された公開鍵とを利用して、暗号化及び復号を行う（例えば、特許文献１：特開２００４−２８９８４７号公報、特許文献２：特開２００６−０９１９６７号公報）。公開鍵方式では、データの送信先（閲覧者）に対し１つの公開鍵を用意すれば良く、鍵の管理が容易である。又、公開鍵が漏洩しても、秘密鍵がなければ復号することができないので、秘匿性が高い。しかし、暗号化（復号）アルゴリズムが複雑であるため暗号化（復号）処理の速度は比較的遅い。このため、公開鍵方式によって膨大な量のデータを暗号化（復号）すると、多くの時間を要してしまう。一方、共通鍵方式による暗号化方法では、暗号化処理や復号処理を比較的高速に行うことができる。一般に、公開鍵暗号方式に比べて高速に処理することができるため、データ量の大きなデータの暗号化に適している。
【０００４】
近年、コンピュータ間、あるいはコンピュータ内のデバイス間における通信速度や演算処理能力の向上に伴い、膨大な量の情報の転送が行われている。このため、インターネット回線を介した動画コンテンツの配信、デジタル放送番組データの記録、ＤＶＤ等に記録されたコンテンツデータの読み取り等が普及している。すなわち、大きなデータ量で、且つ暗号化を必要とするデータが装置間で転送される場面が急増している。従って、これらのデータに対する暗号化（復号）には、より高速に暗号化が可能な共通鍵方式が有効である。
【０００５】
共通鍵方式では、復号処理をする装置は、復号鍵を取得して復号処理を実行する。このため、暗号化データの転送元が復号鍵を復号側の装置に転送する、あるいは予め復号側の装置が復号鍵を保持している必要がある。従って、共通鍵方式では、復号鍵が第三者に渡ると容易に復号される恐れがあるため、復号鍵の転送や管理には充分注意しなければならない。
【０００６】
一方、復号鍵は、暗号化計算式を使用してデータを暗号化する際に取り出される。すなわち、暗号化されたデータ（以下、暗号化データと称す）には元データに関する情報と復号鍵に関する情報とが内包される。このため、暗号化データと暗号計算式とによって、復号鍵の推理が可能であり、時間さえかければ復号鍵を作成し、元データを解読・閲覧することが可能となる。このため、暗号化されたデータと別のデータとを混在させたデータを復号先に転送することで、データの秘匿性を高める技術がある。以下に、暗号化データと別データとを混在させたデータによって暗号強度を向上させた暗号化技術の一例を示す。
【０００７】
特開２００２−０２３６２５号公報には、暗号化データに他の暗号化データを統合したデータを復号する技術が記載されている（特許文献３参照）。特許文献１に記載の技術では、暗号化データの統合の際、統合する暗号化データ毎の位置を指定するキーコードが使用される。又、統合されたデータを分離・復号する際、このキーコードを用いてデータを分離し、分離したデータのそれぞれを復号する。特開２００６−０８５６７６号公報に記載の暗号化命令処理装置は、暗号化されたプログラムと、復号鍵を識別する鍵識別子とを備えたデータを暗号化拡張命令コードとして生成する。復号側の装置は、復号鍵を予め保持し、送信される暗号化命令拡張コードに含まれる鍵識別子に対応する復号鍵を利用して復号処理を行う（特許文献４参照）。特開平１１−２１５１２２号公報に記載のデータ暗号化装置は、復号する範囲を指定する復号範囲指定命令や、復号に用いる復号鍵を指定する鍵情報指定命令を暗号化されたデータに追加して復号側の受信装置に転送する。復号側では、予め復号鍵を有しており、鍵情報指定命令に対応する復号鍵を用いて、復号範囲指定命令で指定された範囲の暗号化データを復号する（特許文献５参照）。
【特許文献１】特開２００４−２８９８４７号公報
【特許文献２】特開２００６−０９１９６７号公報
【特許文献３】特開２００２−０２３６２５号公報
【特許文献４】特開２００６−０８５６７６号公報
【特許文献５】特開平１１−２１５１２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
暗号化されたデータと別のデータを混在させることで、転送されるデータの秘匿性は高まるが、正当な閲覧権利者における復号が困難になる恐れがある。特に、無作為なデータを暗号化データに混在させた場合、適切な復号キーを使用しても復号の対象となるデータを適切に分離しなければ復号に失敗することがある。
【課題を解決するための手段】
【０００９】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を括弧付きで用いて、［課題を解決するための手段］を説明する。この番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］の記載との対応関係を明らかにするために付加されたものであるが、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１０】
本発明による暗号化装置（１０）は、暗号化部（３１）と、復号命令生成部（３３）と、混在データ生成部（３５）とを具備する。暗号化部（３１）は、元データ（１００）を暗号化して暗号化データ（１０１）を生成する。復号命令生成部（３３）は、復号計算式から、暗号化データ（１０１）を元データ（１００）に復号するための復号命令コード（１０４）を生成する。混在データ生成部（３５）は、暗号化データ（１０１）と復号命令コード（１０４）とを統合して混在データ（１０８）を生成する。本発明によれば、復号命令コード（１０４）を暗号化データ（１０２）に混在させるため、暗号化データ（１０１）を特定しにくく、復号鍵の推測が困難となる。又、無作為なデータを暗号化データ（１０１）に混在させているのではなく、暗号化データ（１０１）を復号するための復号命令コード（１０４）を混在させているため、データ（１００）の閲覧を許可された装置は、復号に失敗することなく暗号化データを元データ（１００）に復号することができる。
【００１１】
本発明による復号命令生成部（３３）は、暗号化データ（１０１）を復号する演算装置（１）の型式を指定するアーキテクチャ情報（３４０）に対応する復号命令コード（１０４）を生成することが好ましい。このように本発明によれば、アーキテクチャ情報（３４０）に基づく復号命令コード（１０４）を暗号化データ（１０２）に混在させるため、復号命令コード（１０４）が不正に抽出されても、アーキテクチャが一致していない演算装置では、この復号命令コード（１０４）を実行することができず、対応する暗号化データ（１０１）を特定することができない。このように、本発明による暗号化装置（１０）は秘匿強度の高い暗号化を実現できる。
【００１２】
本発明による暗号化装置（１０）は、暗号化データ（１０１）を、複数の暗号化データ（１０２）に分割する暗号化データ分割部（３２）と、復号命令コード（１０４）を複数の復号命令コード（１０５）に分割する復号命令分割部（３４）とを更に具備することが好ましい。この場合、混在データ生成部（３５）は、複数の暗号化データ（１０２）と、複数の復号命令コード（１０５）とを統合して混在データ（１０８）を生成する。このように、暗号化データ（１０１）と復号命令コード（１０４）とをそれぞれ分割して統合することで、更に秘匿強度を高めることができる。
【００１３】
暗号化部（３１）は、複数の暗号化データ（１０２）の復号に使用する復号鍵（１０７）を生成する。複数の復号命令コード（１０５）が実行されると、この復号鍵（１０７）が用いられて対応する暗号化データ（１０２）が復号される。このように、復号鍵（１０７）と、複数の暗号化データ（１０２）と、混在データ（１０８）内の複数の復号命令コード（１０５）とが、複数の暗号化データ（１０２）の復号に使用されるため、復号命令コード（１０５）を実行できる装置は、容易に暗号化データ（１０２）を復号することができる。
【００１４】
混在データ生成部（３５）は、複数の復号命令コード（１０５）をチェーン化するＪｕｍｐ命令を生成し混在データ（１０８）に統合することが好ましい。複数の復号命令コード（１０５）をチェーン化することで、混在データ（１０８）内にばらばらで存在する複数の命令コード（１０５）を一連の命令コード（１０４）として実行することができる。
【００１５】
又、混在データ生成部（３５）は、混在データ（１０８）から暗号化データ（１０４）を抽出するための抽出命令コード（１０３）を混在データ（１０８）に統合することが好ましい。
【００１６】
本発明による復号装置（１０）は、命令コードと暗号化されたデータである暗号化データ（１０１）とを有する混在データ（１０８）から、復号処理を行うための復号命令コード（１０４）を読み出す復号部（３７）と、復号処理を行う演算装置（１）の型式を示すアーキテクチャ情報（３４０）を有する記憶装置とを具備する。復号部（３７）は、復号命令コード（１０４）が自身のアーキテクチャ情報（３４０）に基づく復号命令コード（１０４）である場合、復号命令コード（１０４）を実行し、暗号化データ（１０１）を元データ１０１に復号する。
【００１７】
ここで、混在データ（１０８）は、暗号化データ（１０１）を分割した複数の暗号化データ（１０２）と、抽出命令コード（１０３）とを有することが好ましい。この場合、抽出命令コード（１０３）を実行することで、混在データ（１０８）から複数の暗号化データ（１０２）を抽出し、暗号化データ（１０１）を生成する暗号化データ抽出部（３６）を更に具備することが好ましい。
【００１８】
又、混在データ（１０８）は、復号命令コード（１０４）を分割した複数の復号命令コード（１０５）と、複数の復号命令コード（１０５）をチェーン化するためのＪｕｍｐ命令コード（１０６）とを更に有することが好ましい。この際、復号部（３７）は、複数の命令コード（１０４）のいずれかに続けて、Ｊｕｍｐ命令コード（１０６）を実行し、Ｊｕｍｐ命令コード（１０６）によって指定される他の復号命令コードを読み出して実行する。これにより、複数の復号命令コード（１０５）は一連の復号命令コード（１０４）として実行され、暗号化データ（１０１）を復号することができる。
【００１９】
本発明による暗号化方法は、コンピュータによって実行されるプログラム（３１０）で実現され、データを暗号化して暗号化データ（１０１）を生成するステップと、暗号化データ（１０１）を復号する演算装置のアーキテクチャに基づいて、暗号化データ（１０１）に対応する命令コード（１０４）を生成するステップと、暗号化データ（１０１）と命令コード（１０４）とを統合して混在データ（１０８）を生成するステップとを具備する。
【００２０】
又、本発明による復号方法は、コンピュータによって実行されるプログラム（３１０）で実現され、命令コードと暗号化されたデータである暗号化データ（１０１）とを有する混在データ（１０８）から、暗号化データ（１０１）を復号するための復号命令コード（１０４）を読み出すステップと、復号命令コード（１０４）が自身のアーキテクチャ情報（３４０）に基づく命令コードである場合、復号命令コード（１０４）を実行し、混在データ（１０８）内の暗号化データ（１０１）を元データ（１００）に復号するステップとを具備する。
【発明の効果】
【００２１】
本発明によれば、秘匿強度の高い暗号化を実現できる。
【００２２】
又、データの復号に用いる復号鍵が漏洩しても復号が困難となる。
【００２３】
更に、データの復号に用いる復号計算式の使用を制限することができる。
【００２４】
更に、暗号化、又は復号に要する時間を短縮できる。
【発明を実施するための最良の形態】
【００２５】
以下、添付図面を参照して、本発明による暗号化方法、暗号化プログラム、及び暗号化装置の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示している。
【００２６】
１．構成
図１から図３を参照して、本実施の形態における暗号化装置１０の構成を説明する。図１は、暗号化装置１０の構成を示す図である。図１を参照して、暗号化装置１０は、相互にバス５を介して接続される演算装置１、ＲＡＭ２、記憶装置３、Ｉ／Ｏインタフェースを具備する。
【００２７】
演算装置１は、ＣＰＵに例示され、記憶装置３に格納される暗号化プログラム３１０を実行する。この際、各種データやプログラムは、ＲＡＭ２に一次格納されて演算装置１に利用される。Ｉ／Ｏインタフェース４は、図示しない外部装置と、演算装置１や記憶装置３との間における各種データの転送を制御する。この外部装置とは、例えば、図示しないネットワークを介して接続される外部のコンピュータ装置や、図示しない外部バスを介して接続される外部記憶装置（例：ＤＶＤドライバやハードディスクドライバ）等である。又、Ｉ／Ｏインタフェース４は、他の暗号化装置１０に接続され、この暗号化装置１０との間におけるデータの転送を制御する。
【００２８】
記憶装置３は、暗号化又は復号に必要な各種プログラム及びデータを格納する。詳細には、記憶装置３は、暗号化プログラム３１０、暗号化計算式３２０、復号計算式３３０、アーキテクチャ情報３４０を格納している。暗号化プログラム３１０は、演算装置１によって実行されることで、対象データに対し暗号化処理又は復号処理を施す。暗号化計算式３２０は、データを暗号化するためのアルゴリズムにより決定される式である。復号計算式３３０は、暗号化計算式３２０の逆手順を記載した式である。アーキテクチャ情報３４０は、復号処理を実行する暗号化装置１０における演算装置１の型式（例えば、Ｖ８５０、Ｉｎｔｅｌ（登録商標）、ＳＨ等）を指定する情報である。復号処理を実行する暗号化装置１０が複数あり、それぞれのアーキテクチャが異なる場合、記憶装置３にはそれぞれの暗号化装置１０に対応する複数種のアーキテクチャ情報３４０が格納される。又、記憶装置３に格納される暗号化計算式３２０及び復号計算式３３０は１つとは限らず複数種の式でも構わない。
【００２９】
図２は、暗号化処理時における暗号化装置１０のブロック図である。図２を参照して、演算装置１は暗号化プログラム３１０を実行することで、暗号化部３１、暗号化データ分割部３２、復号命令生成部３３、復号命令分割部３４、混在データ生成部３５の機能を実現する。
【００３０】
暗号化部３１は、Ｉ／Ｏインタフェース４を介して入力されるデータ（元データ１００）に対し、記憶装置３内の暗号化計算式３３０を用いて暗号化処理を行い暗号化データ１０１を生成する。又、暗号化データ１０１を生成する際に復号鍵を抽出し、Ｉ／Ｏインタフェース４を介して復号処理を実行する装置に転送する。
【００３１】
暗号化データ分割部３２は、暗号化データ１０１を所定の大きさに分割して複数の分割暗号化データ１０２として出力する。尚、複数の分割暗号化データ１０２のそれぞれのデータサイズは、一定でも良いが、暗号強度を高めるため、それぞれ異なる大きさであることが好ましい。
【００３２】
復号命令生成部３３は、記憶装置３内の復号計算式３３０を、アーキテクチャ情報３４０に基づいてクロスコンパイルして、復号命令コード１０４を生成する。ここで使用されるアーキテクチャ情報３４０は、閲覧を許可された装置に対応するアーキテクチャ情報３４０である。このため、生成された復号命令コード１０４は、閲覧を許可された暗号装置１０のアーキテクチャに対応した命令コードとなる。又、復号命令分割部３４は、復号命令コード１０４を所定の大きさに分割して、複数の分割復号命令コード１０５を生成する。尚、複数の分割復号命令コード１０５のそれぞれのデータサイズは、一定でも良いが、暗号強度を高めるため、それぞれ異なる大きさであることが好ましい。
【００３３】
混在データ生成部３５は、暗号化データ１０１に復号命令コード１０４を挿入して混在データ１０８を生成する。すなわち、混在データ生成部３５は、複数の分割暗号化データ１０２と、複数の分割復号命令コード１０５とを所定の順で統合して混在データ１０８を生成する。この際、混在データ生成部３５は、復号処理を実行する際に統合データ１０８から暗号化データ１０１を抽出するための抽出命令コード１０３を生成して混在データ１０８に統合する。又、混在データ生成部３５は、混在データ１０８内の命令コードをチェーン化して一連の命令コードとして実行させるためのＪｕｍｐ命令コード１０６を生成し、混在データ１０８に統合する。
【００３４】
抽出命令コード１０３及びＪｕｍｐ命令コード１０６は、復号命令コード１０４を生成する際に用いたアーキテクチャ情報３４０に基づいて生成されることが好ましい。抽出命令コード１０３は、抽出対象の分割暗号データ１０２を指定するためのオフセットアドレス及び抽出対象の分割分割暗号データ１０２のデータサイズを含む。又、Ｊｕｍｐ命令コード１０６は、抽出命令コード１０３や分割復号命令コード１０５に対応して生成され、対応する命令コードの次に実行すべき分割復号命令コード１０５を指定する命令コードを含む。
【００３５】
混在データ生成部３５は、混在データ１０８に統合する分割暗号化データ１０２、抽出命令コード１０３、分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６のそれぞれのデータサイズ、データ数を統合パラメータとして取得する。又、混在データ生成部３５は、混在データ１０８を生成する前に、統合されるそれぞれのデータ及び命令コードの位置（統合順）を決定する。混在データ生成部３５は統合パラメータ及び統合順に応じて、混在データ１０８における分割暗号化データ１０２、及び各命令コードの位置（アドレス）を決定する。尚、統合パラメータ及び統合順は、予め設定された値でも、元データ１００の大きさに応じて変更される値でも良い。混在データ生成部３５は、この統合パラメータ及び統合順に基づき、抽出命令コード１０３に含まれるオフセットアドレスや、Ｊｕｍｐ命令コード１０６で指定する次に実行すべき分割復号命令コード１０５のアドレスを決定する。
【００３６】
混在データ生成部３５は、複数の分割暗号化データ１０２、複数の分割復号命令コード１０５、抽出命令１０３、及びＪｕｍｐ命令コード１０６を統合して混在データ１０８を生成し、Ｉ／Ｏインタフェース４を介して復号処理を実行する暗号化装置１０に転送する。又、復号処理のとき、最初に実行する抽出命令コード１０３のアドレスを指定する実行開始アドレス１０９を転送する。
【００３７】
図３は、復号処理時における暗号化装置１０のブロック図である。図３を参照して、演算装置１は暗号化プログラム３１０を実行することで、暗号化データ抽出部３６、復号部３７の機能を実現する。ここで暗号化装置１０は、復号装置として機能し、暗号化プログラム３１０は復号プログラムとして機能する。
【００３８】
図３を参照して、暗号化データ抽出部３６及び復号部３７は、Ｉ／Ｏインタフェース４を介して他の装置（暗号化処理を実行した暗号化装置１０）から転送された混在データ１０８に対し、復号鍵１０７、実行開始アドレス１０９、アーキテクチャ情報３４０を用いて復号処理を実行する。詳細には、混在データ１０８を受け取った暗号化データ抽出部３６は、転送された実行開始アドレス１０９に対応する抽出命令コード１０３を読み出して実行し、混在データ１０８から複数の分割暗号化データ１０２（暗号化データ１０１）を抽出する。復号部３７は、アーキテクチャ情報３４０に従い、混在データ１０８内の分割復号命令コード１０５を読み出して実行し、抽出された暗号化データ１０１を復号して元データ１００を出力する。元データ１００は、Ｉ／Ｏインターフェース４を介して図示しない記憶装置、あるいは表示装置等に出力される。尚、抽出命令コード１０３が、アーキテクチャ情報３４０に基づいて生成されている場合、暗号化データ抽出部３６は、アーキテクチャ情報３４０を参照して抽出命令コード１０３を実行する。
【００３９】
ここで、暗号化装置１０が暗号化処理を専用とする装置である場合、記憶装置３は復号計算式３３０を格納しなくても良く、暗号化プログラム３１０は、暗号化データ抽出部３６及び復号部３７を備えなくても良い。同様に暗号化装置１０が復号処理を専用とする復号装置である場合、記憶装置３は、暗号化計算式３２０を格納しなくても良く、暗号化プログラム３１０は、暗号化部３１、暗号化データ分割部３２、復号命令生成部３３、復号命令分割部３４、混在データ生成部３５を備えない復号プログラムとなる。
【００４０】
２．暗号化処理の動作
図４から図６を参照して、本実施の形態における暗号化装置１０の暗号化処理動作の詳細を説明する。以下では、図示しない外部記憶装置内のデータ（元データ１００）を暗号化装置１０で暗号化し、他の暗号化装置１０に転送するまでを説明する。図４は、本実施の形態における暗号化処理の動作を示すフロー図である。図５Ａ及び図５Ｂは、本実施の形態における暗号化処理の概念図である。
【００４１】
図４及び５Ａを参照して、Ｉ／Ｏインタフェース４を介して元データ１００が入力されると、暗号化部３１は、元データ１００を暗号化計算式３２０を用いて暗号化して暗号化データ１０１及び復号鍵１０７を生成する（ステップＳ１０１）。次に、暗号化データ分割部３２によって暗号化データ１０１は、複数の分割暗号化データ１０２（分割暗号化データＡ〜Ｃ）に分割される（ステップＳ１０２）。
【００４２】
一方、復号命令生成部３３は、暗号化部３２で使用された復号計算式３２０に対応する復号計算式３３０を記憶装置３から抽出するとともに、復号する暗号化装置１０（データの閲覧を許可された装置）に対応するアーキテクチャ情報３４０を記憶装置３から抽出する。復号命令生成部３３は、アーキテクチャ情報３４０に基づいて、抽出した復号計算式３３０をクロスコンパイルし、復号命令コード１０４を生成する（ステップＳ１０３）。又、復号命令分割部３４は、生成された復号命令コード１０４を所定の大きさ及び数に分割し、複数の分割復号命令コード１０５（分割復号命令コードＡ〜Ｃ）を生成する（ステップＳ１０４）。
【００４３】
図５Ｂは、混在データ生成部３５における混在データ１０８の生成処理の概念図である。図４及び図５Ｂを参照して、混在データ生成部３５は、混在データ１０８における分割暗号化データ１０２と分割復号命令コード１０５の位置を決定し、抽出命令コード１０３及びＪｕｍｐ命令コード１０６を生成する（ステップＳ１０５）。詳細には、混在データ生成部３５は、分割暗号化データ１０２、抽出命令コード１０３、分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６を、所定の順あるいはランダムに並び替え、統合順を決定する。この際、Ｊｕｍｐ命令コード１０６は、抽出命令コード１０３及び複数の分割復号命令コード１０５が一連の命令コードとして実行されるように、それぞれの命令コードの直後のアドレスに配置される。例えば、抽出命令コード１０３の後に、分割復号命令コードＡにジャンプするＪｕｍｐ命令コードＡが配置され、分割復号命令コードＡの後に分割命令コードＢにジャンプするＪｕｍｐ命令コードＢが配置される。これにより、後述する復号処理において、抽出命令コード１０３が実行された後にＪｕｍｐ命令コードＡが実行され、続けて分割復号命令コードＡが実行される。同様に、分割復号命令コードＡが実行された後にＪｕｍｐ命令コードＢが実行され、続いて分割復号命令コードＢが実行される。
【００４４】
又、混在データ生成部３５は、分割暗号化データ１０２、抽出命令コード１０３、分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６のデータサイズと統合順とに基づき、それぞれの混在データ１０８における位置情報を取得する。尚、Ｊｕｍｐ命令コード１０６のサイズは一意に決めてしまうことができる。混在データ生成部３５は、この位置情報に基づいて、抽出命令コード１０３を生成し、抽出対象の分割暗号化データ１０２を指定するためのオフセットアドレスを抽出命令コード１０３に追加する。
【００４５】
抽出命令コード１０３は、実行開始アドレス１０９にオフセット分を加えたアドレスにある分割暗号化データを抽出するように設定される。すなわち、オフセットアドレスは、実行開始アドレス１０９から抽出対象の分割暗号化データ１０２までに挿入されるデータのデータサイズに応じて設定される。例えば、図５Ｂに示される統合順で混在データ１０８が生成される場合、抽出対象の分割暗号化データＢに対応するオフセットアドレスは、抽出命令コード１０３、Ｊｕｍｐ命令コードＡ、分割暗号化データＡ、分割復号命令コードＡ、Ｊｕｍｐ命令コードＢのデータサイズに基づき設定される。又、抽出命令コード１０３には、抽出対象の分割暗号化データ１０２のデータサイズも設定される。このように、オフセットアドレス及び抽出対象データのデータサイズによって、抽出対象の分割暗号化データ１０２を特定することができる。
【００４６】
同様に、Ｊｕｍｐ命令コード１０６は、分割暗号化データ１０２、抽出命令コード１０３、分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６のデータサイズと統合順から得られた位置情報に基づいて生成される。Ｊｕｍｐ命令コード１０６は、混在データ１０８内の命令コードをチェーン化して一連の命令コードとして実行させるための命令コードである。すなわち、Ｊｕｍｐ命令コード１０６は、次に実行する分割復号命令コード１０５をジャンプ先として指定するように設定される。このため、Ｊｕｍｐ命令コード１０６には、自身の位置（アドレス）からジャンプ先の分割復号命令コード１０５までに挿入されるデータのデータサイズに応じてジャンプ先が設定される。本実施の形態では、抽出命令コード１０３、及び分割復号命令コードＡ〜Ｂの後に実行され、それぞれ分割復号命令コードＡ〜ＣにＪｕｍｐするためのＪｕｍｐ命令コードＡ〜Ｃが生成される。例えば、図５Ｂに示される統合順で混在データ１０８が生成される場合、Ｊｕｍｐ命令コードＡには、分割暗号化データＡのデータサイズに基づいて、分割復号命令コードＡの開始アドレスがジャンプ先として設定される。
【００４７】
次に、混在データ生成部３５は、分割暗号化データ１０２、抽出命令コード１０３、分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６を、統合順に従って統合し、混在データ１０８を生成する（ステップＳ１０６）。暗号化部３１及び混在データ生成部３５は、生成した復号鍵１０７、混在データ１０８、実行開始アドレス１０９をＩ／Ｏインタフェース４を介して復号処理を実行する他の暗号化装置１０に転送する。
【００４８】
尚、混在データ１０８における分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６、分割暗号化データ１０２、抽出命令コードの並び順は上記に限定せずランダムで良い。本実施の形態では、分割暗号化データ１０２の下位アドレスに分割復号命令コード１０５が挿入されているが、これに限らず上位アドレスに挿入されても構わない。又、抽出命令コード１０３は、最上位アドレス（先頭アドレス）に配置されているが、これに限らず、実行開始アドレス１０９に対応する位置に配置されればどこでも良い。更に、本実施の形態では、命令コードの実行順（Ａ、Ｂ、Ｃ）に対応して上位アドレスから順に配置されているがこれに限らない。
【００４９】
３．復号処理の動作
図６から図８Ｂを参照して、本実施の形態における暗号化装置１０の復号処理動作の詳細を説明する。以下では、他の暗号化装置１０で暗号化された暗号化データ（ここでは上述の暗号化処理によって生成された混在データ１０８）を複合化する動作について説明する。図６は、復号処理を行うために記憶装置に格納された混在データ１０８の一部を示す図である。図７は、本実施の形態における復号処理の動作を示すフロー図である。図８Ａ及び図８Ｂは、本実施の形態における復号処理の概念図である。
【００５０】
Ｉ／Ｏインタフェース４を介して復号鍵１０７、混在データ１０８、実行開始アドレス１０９が入力されると、混在データ１０８は、図６に示されるようにメモリ等の記憶装置に格納される。本実施の形態では、図５Ｂに示される統合順で生成された混在データ１０８が入力され、上位アドレスから順に、抽出命令コード１０３（0ｘ10000000〜0ｘ100007FC）、Ｊｕｍｐ命令コードＡ（0ｘ10000800）、分割暗号化データＡ（0ｘ10000804〜0ｘ10000C00）、復号命令コードＡ（0ｘ10000C04〜0ｘ10001000）、Ｊｕｍｐ命令コードB（0ｘ10001004）、分割暗号化データB（0ｘ10001008〜0ｘ10001400）、復号命令コードB（0ｘ10001408〜0ｘ10001C04）、Ｊｕｍｐ命令コードＣ（0ｘ10001C08）、・・・が書き込まれる。尚、図６には、説明の便宜上Ｊｕｍｐ命令コードＣまでが記載されているが、それ以降に続く分割暗号化データＣ、分割復号命令コードＣも同様に、続くアドレスに対応するメモリ領域に格納される。
【００５１】
暗号化データ抽出部３６は、実行開始アドレス１０９（0ｘ10000000）に対応する抽出命令コード１０３を読み出す（ステップＳ２０１）。この際、暗号化データ抽出部３６は、抽出命令コード１０３が記憶装置３内のアーキテクチャ情報３４０に対応していない命令コードである場合、復号処理を終了する（ステップＳ２０２Ｎｏ）。抽出命令コード１０３がアーキテクチャ情報３４０に対応している場合、暗号化データ抽出部３６は抽出命令コード１０３を実行して分割暗号化データＡ、Ｂ、・・・を抽出する（ステップＳ２０３）。
【００５２】
図６及び図８Ａを参照して、暗号化データ抽出部３６の動作の詳細を説明する。暗号化データ抽出部３６が実行する抽出処理は、入力された実行開始アドレス１０９に基づいて開始される。以降の実行アドレスは、演算装置１に備わっているプログラムカウンタ（ＰＣ（図示なし））で管理される。先ず、実行開始アドレス１０９が示す“0x10000000番地”の命令１を実行する。命令１には、実行開始アドレス１０９“0x10000000”をレジスタ（図示なし）に格納するような命令が格納されている。その後、プログラムカウンタが進み抽出命令２以降が順次実行されていく。
【００５３】
ここで抽出命令コード１０３には、抽出対象の分割暗号化データＡ、Ｂ、Ｃを指定するオフセットアドレス及びそれぞれのデータサイズが挿入されている。ここで、抽出対象の分割暗号化データＡ、Ｂを指定するオフセットアドレスをそれぞれ、“0ｘ00000804”、“0ｘ00000804”とし、それぞれのデータサイズは２５６バイトとする。
【００５４】
暗号化データ抽出部３６は、抽出命令２から抽出命令５１２を実行することで、以下の抽出処理を行う。先ず、レジスタに格納されたアドレス“0x10000000”とオフセットアドレス“0x00000804”を加算した “0x10000804”を抽出開始アドレスとする。次に、この抽出開始アドレスから抽出命令コード１０３に設定されたデータサイズ分の分割暗号化データ１０２を抽出する。ここでは、“0x00000804〜0x00000C00”に格納された分割暗号化データＡが抽出される。続いて、次に抽出する分割暗号化データ１０２に対応するオフセットアドレス“0x00000804”を抽出開始アドレスに加算して抽出開始アドレスを更新する。次に、この抽出開始アドレスから抽出命令コード１０３に設定されたデータサイズ分の分割暗号化データ１０２を抽出する。ここでは、“0x00001008〜0x00001404”に格納された分割暗号化データBが抽出される。暗号化データ抽出部３６は、同様にして、抽出開始アドレスの更新と、分割暗号化データ１０２の抽出処理を繰り返し、混在データ１０８内の全ての分割暗号化データＡ〜Ｃを抽出し、暗号化データ１０１として、図示しないメモリ内に展開する。尚、図６に記載されているアドレスなどは単なる一例であり、演算装置のアーキテクチャなどで異なる。
【００５５】
図６、図７及び図８Ｂを参照して、抽出命令コード１０３の全てが実行されると、プログラムカウンタが進むと、復号部３７は、引き続きＪｕｍｐ命令コードＡを読み出し実行する（ステップＳ２０４Ｙｅｓ）。復号部３７は、Ｊｕｍｐ命令コードＡに従い、次の分割復号命令コードＡを読み出す（ステップＳ２０５）。この際、復号部３７は、分割復号命令コードＡが記憶装置３内のアーキテクチャ情報３４０に対応していない命令コードである場合、復号処理を終了する（ステップＳ２０２Ｎｏ）。分割復号命令コードＡがアーキテクチャ情報３４０に対応している場合（ステップＳ２０２Ｙｅｓ）、復号部３７は読み出した分割復号命令コードＡを実行してメモリ内に展開された暗号化データ１０２に対し復号する（ステップＳ２０３）。復号部３７は、分割復号命令コードＡを実行すると引き続きＪｕｍｐ命令Ｂを実行し（ステップＳ２０４Ｙｅｓ）、分割復号命令コードＢを読み出して実行する（ステップＳ２０５、Ｓ２０２Ｙｅｓ、Ｓ２０３）。復号部３７は、以上のような復号処理を、Ｊｕｍｐ命令１０６がなくなるまで実行し（ステップＳ２０４Ｎｏ）、暗号化データ１０１を復号して元データ１００を生成・出力する（ステップＳ２０３）。尚、復号部３７は、入力された復号鍵１０７を用いて暗号化データ１０１を復号する。元データ１００はＩ／Ｏインタフェース４を介して外部装置（例えば画像処理装置）に出力される。
【００５６】
以上のように、本発明による暗号化装置１０は、暗号化データ１０１と復号に用いる復号命令コードを混在させたデータ（混在データ１０８）を生成し、これを復号側の装置に転送することで、暗号強度を向上させている。すなわち、転送されるデータ内に暗号化データ１０１とは別のデータが、分散して挿入されているため、このデータから復号鍵を推測することが困難となる。又、転送されるデータに混在させるデータが復号に用いる復号命令コードであり、その実行開始アドレス１０９を別に転送しているため、復号を許可された装置が、失敗せずに復号することができる。更に、混在データ１０８内の分割復号命令コード１０５を読み出せたとしても、自身のアーキテクチャによって読み取りが制限されるため、不正な閲覧を防止できる。例えば、１６ビット命令と３２ビット命令とでは、命令コードの読み取り自体が全く違うため、混在データ１０８を取得した装置のアーキテクチャが命令コードと異なる場合、その装置は分割復号命令コード１０５を解読することができない。
【００５７】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。本実施の形態では、復号命令コード１０４は、復号計算式３３０をアーキテクチャ情報に基づいてクロスコンパイルすることで生成しているが、復号命令コード１０４をアーキテクチャに依存しない独自命令コードとしてもよい。例えば、復号計算式３３０で加算式及び減算式が使われ、この加算式、減算式があるアーキテクチャではそれぞれ"ADD"、”SUB”という命令コードだった場合、これを"0xA0"、”0xA1”という独自命令コードに変換して、復号命令コード１０４として暗号化データ１０１に混在させる。"0xA0"、”0xA1”は単なる一例であるが、これだけでは意味を持たない16進コードとなっているため、更に、暗号強度を向上することができる。
【００５８】
独自命令コードへの変換は、図５において、抽出命令コード１０３、復号命令コード１０４、分割復号命令コード１０５、Ｊｕｍｐ命令コード１０６のいずれかに対して行えばよく、アーキテクチャ依存の命令コードを、独自命令コードに変換後、混在データ１０８とする。復号時においては、"ADD"−"0xA0"、”SUB”−”0xA1”という対応情報が必要となるため、当事者間でこの情報をお互いに保持することになる。そして、復号時は、この対応情報が、混在データ１０８、実行開始アドレス１０９、アーキテクチャ情報３４０、複合化鍵１０７とともに暗号化データ抽出部３６及び復号部３７に入力され、復号部３７は、独自命令コードを元のアーキテクチャに依存した復号命令コード１０４に逆変換した後、元データ１００へ復号する。図５に示した混在データ１０８において、復号命令コード１０４への逆変換は、分割復号命令コードA〜Cが有している独自命令コードに対して行われ、逆変換後は、図７のフローチャートと同様の復号処理が行われる。
【００５９】
以下に、独自形式の選別命令コードの一例を示す。ここでは、８ビットの独自命令コードの場合について説明する。
【００６０】
例えば、選別命令コードを以下のように規定する。
0xA0  ：  ADD命令  計算用レジスタ１及び2（図示なし）の値を加算し、結果をレジスタ１に格納する。
0xA1  ：  SUB命令  計算用レジスタ１の値から2番の値を減算し、結果をレジスタ１に格納する。
0xB0  ：  レジスタ１に格納されているアドレスからデータを1バイト読み出し、レジスタ１に格納する。
0xB1  ：  レジスタ２番に格納されているアドレスからデータを1バイト読み出し、レジスタ２番に格納する。
0xC0  ：  この命令の後に書かれている4バイトの数値を、レジスタ１に格納する。
0xC1  ：  この命令の後に書かれている4バイトの数値を、レジスタ２に格納する。
0x00  ：  何もしない（Not operation）
【００６１】
ここで、命令コードバイナリ（以下は全て16進）、バイナリデータ番地：0 1 2 3 4 5 6 7 8 9 A B C D E Fとし、混在データ１０８：00000000 C0 10 00 00 00 C1 10 00 00 01 B0 B1 A0 00 00 0000000010 C1 10 00 00 02 B1 A1 00 00 00 00 00 00 00 00 00が入力された場合、以下の実行処理が行われる。
１．0xC0命令  ：  0x10000000の数値を、レジスタ１に格納する。
２．0xC1命令  ：  0x10000001の数値を、レジスタ２に格納する。
３．0xB0命令  ：  1の工程でレジスタ１にセットしたアドレス0x10000000番地から1バイトRead
４．0xB1命令  ：  2の工程でレジスタ２にセットしたアドレス0x10000001番地から1バイトRead
５．0xA0命令  ：  3と4の工程でレジスタ１及び２に読み出した値を加算し、レジスタ１に格納する。
６．0xC1命令  ：  0x10000002の数値をレジスタ２番に格納する。
７．0xB1命令  ：  6の工程でレジスタ２にセットしたアドレス0x10000002番地から1バイトRead
８．0xA1命令  ：  5の加算結果数値から、7の工程でReadした値を減算し、レジスタ１に格納する。
【００６２】
以上のように、独自の選別命令コードを用いて、入力された混在データ１０８から暗号化データ１０１を抽出することができる。
【００６３】
更に、復号命令生成部３３は、復号する暗号化装置１０に対応するアーキテクチャを指定せずに復号命令コード１０４あるいは上記選別命令コードを生成しなくても良い。すなわち、復号する暗号化装置１０のアーキテクチャ情報３４０に基づいてデータを暗号化しなくても良い。この場合、復号命令生成部３３は、自身のアーキテクチャに基づいて復号命令コード１０４を作成する。
【図面の簡単な説明】
【００６４】
【図１】図１は、本発明による暗号化装置の実施の形態における構成を示す図である。
【図２】図２は、本発明による暗号化装置の暗号化処理におけるブロック図である。
【図３】図３は、本発明による暗号化装置の復号処理におけるブロック図である。
【図４】図４は、本発明による暗号化装置の暗号化処理の動作を示すフロー図である。
【図５Ａ】図５Ａは、本発明による暗号化装置の暗号化処理（分割処理）の概念図である。
【図５Ｂ】図５Ｂは、本発明による暗号化装置の暗号化処理（統合処理）の概念図である。
【図６】図６は、復号処理を行う暗号化装置に格納された混在データの一例を示す図である。
【図７】図７は、本発明による暗号化装置の復号処理の動作を示すフロー図である。
【図８Ａ】図８Ａは、本発明による暗号化装置の復号処理（抽出処理）の概念図である。
【図８Ｂ】図８Ｂは、本発明による暗号化装置の復号処理（復号処理）の概念図である。
【符号の説明】
【００６５】
１０：暗号化装置
１：演算装置
２：ＲＡＭ
３：記憶装置
４：Ｉ／Ｏインタフェース
５：バス
３１０：暗号化プログラム
３２０：暗号化計算式
３３０：復号計算式
３４０：アーキテクチャ情報
３１：暗号化部
３２：暗号化データ分割部
３３：復号命令生成部
３４：復号命令分割部
３５：混在データ生成部
３６：暗号化データ抽出部
３７：復号部
１００：元データ
１０１：暗号化データ
１０２：分割暗号化データ
１０３：抽出命令コード
１０４：復号命令コード
１０５：分割復号命令コード
１０６：Ｊｕｍｐ命令コード
１０７：復号鍵
１０８：混在データ
１０９：実行開始アドレス
１１０：復号データ
【図１】
2008124824.tif 000003
【図２】
2008124824.tif 000004
【図３】
2008124824.tif 000005
【図４】
2008124824.tif 000006
【図５Ａ】
2008124824.tif 000007
【図５Ｂ】
2008124824.tif 000008
【図６】
2008124824.tif 000009
【図７】
2008124824.tif 000010
【図８Ａ】
2008124824.tif 000011
【図８Ｂ】
2008124824.tif 000012