(57)【要約】      （修正有）【課題】メッセージを安全にフォーマット保存暗号化する暗号文生成装置、暗号文生成方法及び暗号文生成プログラムを提供する。【解決手段】暗号化装置１は、平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、文字列の情報量が閾値を超える度に文字列を含むブロックを生成する第１ブロック化部１０３と、第１ブロック化部１０３により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する暗号化部１０５とを有する。【選択図】図３
2018117304.tif 000002
【特許請求の範囲】
【請求項１】
平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成するブロック化部と、
前記ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する暗号化部と、
を有する暗号文生成装置。
【請求項２】
前記ブロック化部は、
最後のブロックに含まれる文字列の情報量が前記閾値より小さい場合、前記最後のブロックに含まれる文字列を、前記最後のブロックの直前のブロックと連結する、
請求項１記載の暗号文生成装置。
【請求項３】
前記暗号化部は、
前記ブロック化部により生成された各ブロックの暗号文を、当該ブロックの直前のブロックまたは初期ベクトルを用いて生成する、
請求項１又は２記載の暗号文生成装置。
【請求項４】
前記暗号化部は、
前記ブロック化部により生成された各ブロックの暗号文を、当該ブロックの順番を表すカウンタ値をナンスに加算した値に対する前記フォーマット保存暗号化により生成された暗号文を用いて生成する、
請求項１又は２記載の暗号文生成装置。
【請求項５】
前記ブロック化部により生成された各ブロックについて、当該ブロックの直前のブロックまたは初期ベクトルのフォーマットを、当該ブロックのフォーマットに変換する変換部
をさらに有する請求項３記載の暗号文生成装置。
【請求項６】
前記ブロック化部により生成された各ブロックについて、当該ブロックの順番を表すカウンタ値を前記ナンスに加算した値または当該値に対する前記フォーマット保存暗号化により生成された暗号文のフォーマットを、当該ブロックのフォーマットに変換する変換部
をさらに有する請求項４記載の暗号文生成装置。
【請求項７】
前記暗号化部により生成された各暗号文に含まれる文字の順序を変更する変更部
をさらに有する請求項１乃至６のいずれか１つ記載の暗号文生成装置。
【請求項８】
前記変更部は、
前記暗号化部により生成された各暗号文に含まれる文字のうち最後の文字以外の文字の順序を変更する、
請求項７記載の暗号文生成装置。
【請求項９】
前記変更部は、
前記暗号化部により生成された各暗号文に含まれる文字の順序を変更し、前記暗号化部により生成された各暗号文の文字数の情報を出力する、
請求項７記載の暗号文生成装置。
【請求項１０】
前記変更部は、
前記暗号化部により生成された各暗号文が連結された暗号文に含まれる文字の順序を変更する、
請求項７記載の暗号文生成装置。
【請求項１１】
コンピュータが、
平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成し、
前記ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する、
処理を実行する暗号文生成方法。
【請求項１２】
コンピュータに、
平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成し、
前記ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する、
処理を実行させる暗号文生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号文の生成技術に関する。
【背景技術】
【０００２】
フォーマット保存暗号化（ＦＰＥ：Format-Preserving Encryption）と呼ばれる、出力フォーマットが入力フォーマットと同じである暗号技術が存在する。フォーマットが維持されることで、暗号化の前後でデータの入出力および保存等の条件を変える必要がなくなるという点で、利便性が高い暗号技術である。
【０００３】
文字の種類が均一であるフォーマット（以下、均一フォーマットと呼ぶ）に対し、例えば日本語のフォーマットのような、文字の種類が均一ではないフォーマット（以下、不均一フォーマットと呼ぶ）においては、文字のデータサイズが文字の種類毎に異なっている。従って、フォーマットを保存するために文字数で暗号化のブロックを区切ると、ブロックのフォーマットの大きさにバラツキが生じ、安全性が低い暗号文が生じる可能性がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１３／１６１８４１号
【特許文献２】特表２０１５−５２６７５７号公報
【特許文献３】特開２００４−２２６９６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、１つの側面では、メッセージを安全にフォーマット保存暗号化する技術を提供することである。
【課題を解決するための手段】
【０００６】
一態様に係る暗号文生成装置は、平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、文字列の情報量が閾値を超える度に文字列を含むブロックを生成するブロック化部と、ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する暗号化部とを有する。
【発明の効果】
【０００７】
１つの側面では、メッセージを安全にフォーマット保存暗号化することができるようになる。
【図面の簡単な説明】
【０００８】
【図１】図１は、不均一フォーマットを有する平文のブロック化について説明するための図である。
【図２】図２は、不均一フォーマットを有する平文のブロック化について説明するための図である。
【図３】図３は、暗号化装置の機能ブロック図である。
【図４】図４は、復号化装置の機能ブロック図である。
【図５】図５は、第１の実施の形態の暗号化装置が実行する処理の処理フローを示す図である。
【図６】図６は、第１の実施の形態の暗号化装置が実行する処理の処理フローを示す図である。
【図７】図７は、第１の実施の形態の暗号化装置が実行する処理の処理フローを示す図である。
【図８】図８は、第１の実施の形態におけるフォーマット保存暗号化の処理フローを示す図である。
【図９】図９は、第１の実施の形態におけるフォーマット保存暗号化について説明するための図である。
【図１０】図１０は、第１の実施の形態の攪拌処理を示す図である。
【図１１】図１１は、ブロック化について説明するための図である。
【図１２】図１２は、ブロック化について説明するための図である。
【図１３】図１３は、第１の実施の形態の復号化装置が実行する処理の処理フローを示す図である。
【図１４】図１４は、第１の実施の形態の復号化装置が実行する処理の処理フローを示す図である。
【図１５】図１５は、第１の実施の形態の復号化装置が実行する処理の処理フローを示す図である。
【図１６】図１６は、第１の実施の形態のフォーマット保存復号化の処理フローを示す図である。
【図１７】図１７は、第２の実施の形態の暗号化装置が実行する処理の処理フローを示す図である。
【図１８】図１８は、第２の実施の形態の暗号化装置が実行する処理の処理フローを示す図である。
【図１９】図１９は、第２の実施の形態の暗号化装置が実行する処理の処理フローを示す図である。
【図２０】図２０は、第２の実施の形態の復号化装置が実行する処理の処理フローを示す図である。
【図２１】図２１は、第２の実施の形態の復号化装置が実行する処理の処理フローを示す図である。
【図２２】図２２は、第２の実施の形態の復号化装置が実行する処理の処理フローを示す図である。
【図２３】図２３は、第２の実施の形態におけるフォーマット保存暗号化の処理フローを示す図である。
【図２４】図２４は、第２の実施の形態におけるフォーマット保存暗号化について説明するための図である。
【図２５】図２５は、第２の実施の形態におけるフォーマット保存復号化の処理フローを示す図である。
【図２６】図２６は、第３の実施の形態におけるフォーマット保存暗号化の処理フローを示す図である。
【図２７】図２７は、第３の実施の形態におけるフォーマット保存暗号化について説明するための図である。
【図２８】図２８は、第３の実施の形態におけるフォーマット保存復号化の処理フローを示す図である。
【図２９】図２９は、第４の実施の形態の攪拌処理を説明するための図である。
【図３０】図３０は、第５の実施の形態の攪拌処理を説明するための図である。
【図３１】図３１は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【０００９】
実装上の制約から、暗号化される平文のサイズを無限大にすることは非現実的であり、何らかの方法でブロックサイズを定め、暗号利用モードを適用することが好ましい。
【００１０】
図１及び図２を用いて、不均一フォーマットを有する平文のブロック化について説明する。図１には、文字数に基づきブロック化を行った場合の例が示されており、図２には、データサイズに基づきブロック化を行った場合の例が示されている。
【００１１】
図１において、実線は文字の区切りを表し、太い実線はブロックの区切りを表す。図１の例では、第２ブロックの３番目の文字のデータサイズが他の文字のデータサイズと比べて大きいことが原因で、第１ブロックのデータサイズと第２ブロックのデータサイズとが異なっている。背景技術の欄で述べたように、ブロックのフォーマットの大きさにバラツキが生じ、安全性が低い暗号文が生じる可能性がある。なお、フォーマットの大きさとは、或るフォーマットについて、そのフォーマットに対応する文字列の全ての場合の数をいう。例えば、１０進数８桁の数字列のフォーマットの大きさは、１０8≒２26.57である。
【００１２】
図２において、実線は文字の区切りを表し、破線はブロックの区切りを表す。図２の例では、７番目の文字の途中及び９番目の文字の途中にブロックの区切りが有る。このような場合には、フォーマットを維持しつつ平文を暗号化することができない。
【００１３】
また、不均一フォーマットの平文の場合、ブロック毎にフォーマットが異なるので、例えばＣＢＣ（Cipher Block Chaining）モードのような暗号化を適用することができない。
【００１４】
さらに、不均一フォーマットにおいては、フォーマット自体が情報を有しているため、暗号文のフォーマットから平文の情報を特定される可能性がある。例えば、平文「12月3日」を暗号化して暗号文「45暗6号」を得た場合、１０月以降の月日に関する情報であることがわかってしまう可能性がある。
【００１５】
そこで、本実施の形態においては、以下に示す方法でフォーマット保存暗号化を実行する。
【００１６】
［実施の形態１］
図３に、暗号化装置１の機能ブロック図を示す。暗号化装置１は、第１管理部１０１と、第１ブロック化部１０３と、暗号化部１０５と、第１フォーマット変換部１０７と、第１攪拌部１０９と、第１入力データ格納部１１１と、第１ブロック候補格納部１１３と、第１ブロック格納部１１５と、暗号データ格納部１１７と、第１出力データ格納部１１９とを有する。
【００１７】
第１管理部１０１、第１ブロック化部１０３、暗号化部１０５、第１フォーマット変換部１０７および第１攪拌部１０９は、図３１に示したメモリ２５０１にロードされたプログラムがＣＰＵ（Central Processing Unit）２５０３により実行されることで実現される。第１入力データ格納部１１１、第１ブロック候補格納部１１３、第１ブロック格納部１１５、暗号データ格納部１１７および第１出力データ格納部１１９は、メモリ２５０１又はＨＤＤ（Hard Disk Drive）２５０５に設けられる。
【００１８】
第１管理部１０１は、暗号化装置１の操作者からデータ（例えば、暗号化の対象である平文、鍵およびセキュリティパラメータ等）の入力を受け付け、第１入力データ格納部１１１に格納する。第１ブロック化部１０３は、第１入力データ格納部１１１に格納されているデータを用いて処理を実行し、処理途中のデータを第１ブロック候補格納部１１３に格納しつつ、処理結果を第１ブロック格納部１１５に格納する。暗号化部１０５は、第１ブロック格納部１１５に格納されているデータを用いて処理を実行し、処理結果を暗号データ格納部１１７に格納する。第１フォーマット変換部１０７は、第１ブロック格納部１１５に格納されているデータ及び暗号データ格納部１１７に格納されているデータを用いて処理を実行し、暗号化部１０５に出力する。第１攪拌部１０９は、暗号データ格納部１１７に格納されているデータに基づき処理を実行し、処理結果を暗号データ格納部１１７に格納する。第１ブロック化部１０３は、暗号データ格納部１１７に格納されている暗号文等を連結した暗号文を、第１出力データ格納部１１９に格納する。
【００１９】
図４に、復号化装置２の機能ブロック図を示す。復号化装置２は、第２管理部２０１と、第２ブロック化部２０３と、復号化部２０５と、第２フォーマット変換部２０７と、第２攪拌部２０９と、第２入力データ格納部２１１と、第２ブロック候補格納部２１３と、第２ブロック格納部２１５と、復号データ格納部２１７と、第２出力データ格納部２１９とを有する。
【００２０】
第２管理部２０１、第２ブロック化部２０３、復号化部２０５、第２フォーマット変換部２０７および第２攪拌部２０９は、図３１に示したメモリ２５０１にロードされたプログラムがＣＰＵ２５０３により実行されることで実現される。第２入力データ格納部２１１、第２ブロック候補格納部２１３、第２ブロック格納部２１５、復号データ格納部２１７および第２出力データ格納部２１９は、メモリ２５０１又はＨＤＤ２５０５に設けられる。
【００２１】
第２管理部２０１は、復号化装置２の操作者からデータ（例えば、復号化の対象である暗号文、鍵およびセキュリティパラメータ等）の入力を受け付け、第２入力データ格納部２１１に格納する。第２ブロック化部２０３は、第２入力データ格納部２１１に格納されているデータを用いて処理を実行し、処理途中のデータを第２ブロック候補格納部２１３に格納しつつ、処理結果を第２ブロック格納部２１５に格納する。第２攪拌部２０９は、第２ブロック格納部２１５に格納されているデータに基づき処理を実行し、処理結果を復号データ格納部２１７に格納する。復号化部２０５は、復号データ格納部２１７に格納されているデータを用いて処理を実行し、処理結果を復号データ格納部２１７に格納する。第２フォーマット変換部２０７は、第２ブロック格納部２１５に格納されているデータ及び復号データ格納部２１７に格納されているデータを用いて処理を実行し、処理結果を復号化部２０５に出力する。第２ブロック化部２０３は、復号データ格納部２１７に格納されている復号文等を連結した復号文を第２出力データ格納部２１９に格納する。
【００２２】
なお、暗号化装置１および復号化装置２は、ＬＡＮ（Local Area Network）或いはインターネット等のネットワークに接続され、通信により暗号文を送受信することができる。或いは、暗号化装置１で生成された暗号文が記憶された可搬記憶媒体を、暗号化装置１の操作者が復号化装置２の操作者に渡し、復号化装置２の操作者が、可搬記憶媒体に記憶された暗号文を復号化装置２の記憶装置に移動させてもよい。
【００２３】
次に、図５乃至図１２を用いて、第１の実施の形態の暗号化装置１が実行する処理を説明する。
【００２４】
まず、第１管理部１０１は、暗号化および攪拌処理において使用される鍵及びセキュリティパラメータ等の設定の入力を受け付け（図５：ステップＳ１）、第１入力データ格納部１１１に格納する。セキュリティパラメータはエントロピーの閾値（例えば１２８ビット長）である。入力は、例えば、暗号化装置１の操作者により行われる。
【００２５】
第１管理部１０１は、平文の入力を受け付け（ステップＳ３）、第１入力データ格納部１１１に格納する。入力は、例えば、暗号化装置１の操作者により行われる。なお、暗号化装置１の記憶装置に予め平文が格納されている場合には、ステップＳ３において平文を記憶装置から読み出すようにしてもよい。
【００２６】
第１管理部１０１は、疑似乱数生成器を用いて初期ベクトルを算出し（ステップＳ５）、第１入力データ格納部１１１に格納する。なお、疑似乱数生成器を用いる方法ではなくその他の方法で初期ベクトルを算出してもよい。
【００２７】
第１管理部１０１は、文字列のエントロピーＥをＥ＝０と設定する（ステップＳ７）。
【００２８】
第１ブロック化部１０３は、ステップＳ３において入力を受け付けた平文の最初の文字を特定する（ステップＳ９）。
【００２９】
第１ブロック化部１０３は、直前のステップ（ここでは、ステップＳ９又はステップＳ１５）において特定した文字が属する文字種のエントロピー（情報量とも呼ばれる）を、Ｅに加算する（ステップＳ１１）。なお、或る文字種Ωについて、Ωの文字の総数Ｘの対数ｌｏｇ2Ｘを文字種Ωのエントロピーと呼ぶ。例えば、１０進数のエントロピーはｌｏｇ2１０≒３．３２である。また、ＪＩＳ（Japanese Industrial Standards） Ｘ ０２０８の第一水準の文字数および第二水準の漢字の数の合計は６３５５であり、エントロピーはｌｏｇ2６３５５≒１２．６３である。なお、上で説明した「フォーマットの大きさ」は、フォーマットを構成する文字種のエントロピーの総和を２のべき乗した値と等しい。
【００３０】
第１ブロック化部１０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ１３）。
【００３１】
Ｅがセキュリティパラメータより大きくない場合（ステップＳ１３：Ｎｏルート）、ブロックの暗号文の安全性は高くないと考えられるので、第１ブロック化部１０３は、次の文字を特定する（ステップＳ１５）。そして処理はステップＳ１１に戻る。
【００３２】
Ｅがセキュリティパラメータより大きい場合（ステップＳ１３：Ｙｅｓルート）、第１ブロック化部１０３は、第１ブロックの候補を、第１ブロック候補格納部１１３に格納する（ステップＳ１７）。第１ブロックの候補は、最初の文字から最後にステップＳ１５において特定された文字までの文字列を含む。
【００３３】
第１ブロック化部１０３は、ＥをＥ＝０と設定する（ステップＳ１９）。そして処理は端子Ａを介して図６のステップＳ２１に移行する。
【００３４】
図６の説明に移行し、第１ブロック化部１０３は、処理対象ブロック候補を第１ブロック候補格納部１１３から取り出す（図６：ステップＳ２１）。初めてステップＳ２１の処理を実行する場合には、処理対象ブロックの候補としてステップＳ１７において格納された第１ブロックの候補が特定される。２回目以降である場合、後述のステップＳ５７において格納された次ブロックの候補が、処理対象ブロックの候補として特定される。
【００３５】
第１ブロック化部１０３は、処理対象ブロックの次の文字が有るか判定する（ステップＳ２３）。処理対象ブロックの次の文字が有る場合（ステップＳ２３：Ｙｅｓルート）、第１ブロック化部１０３は、次の文字を特定する（ステップＳ２５）。
【００３６】
第１ブロック化部１０３は、ステップＳ２５又はステップＳ３３において特定した文字が属する文字種のエントロピーを、Ｅに加算する（ステップＳ２７）。
【００３７】
第１ブロック化部１０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ２９）。Ｅがセキュリティパラメータより大きい場合（ステップＳ２９：Ｙｅｓルート）、処理は端子Ｂを介して図７のステップＳ５１に移行する。
【００３８】
図７の説明に移行し、第１ブロック化部１０３は、処理対象ブロックの候補を処理対象ブロックとして第１ブロック格納部１１５に格納する（図７：ステップＳ５１）。
【００３９】
第１ブロック化部１０３は、ステップＳ５１において第１ブロック格納部１１５に格納された処理対象ブロックを暗号化部１０５に渡す。これに応じ、暗号化部１０５は、処理対象ブロックに対してフォーマット保存暗号化を実行する（ステップＳ５３）。暗号化においては、ステップＳ１において入力を受け付けた鍵が使用される。
【００４０】
第１の実施の形態のフォーマット保存暗号化については、図８を用いて説明する。まず、暗号化部１０５は、第１フォーマット変換部１０７に処理対象ブロックを渡す。これに応じ、第１フォーマット変換部１０７は、処理対象ブロックの前ブロックの暗号文を暗号データ格納部１１７から読み出す。そして、第１フォーマット変換部１０７は、前ブロックの暗号文のフォーマットを、所定の方法で処理対象ブロックのフォーマットに変換する（ステップＳ６１）。なお、処理対象ブロックが第１ブロックである場合には、前ブロックが存在しないので、代わりに第１入力データ格納部１１１から初期ベクトルが読み出される。
【００４１】
第１フォーマット変換部１０７が実行するフォーマット変換は、或るフォーマットΩの文字列から、フォーマットΨの文字列を得る処理である。より具体的には、所定の関数（例えばＮＵＭ関数）によりフォーマットΩの文字列から数字を生成し、生成された数字を種として疑似乱数生成器により数字をさらに生成し、さらに生成された数字にＳＴＲ関数を適用することでフォーマットΨの文字列を得る。疑似乱数生成器ではなく単に恒等関数を用いてもよい。
【００４２】
ここで、ＮＵＭ関数及びＳＴＲ関数について説明する。或るフォーマットΩについて、辞書式順序を用いることで、フォーマットΩの文字列から数字を一意に定めることができる。例えば、フォーマットΩがΩ1，Ω2，・・・，Ωnの文字種からなるｎ文字の文字列のフォーマットであるとし、Ωi（ｉ＝１，２，・・・，ｎ）の文字の総数をＸiとする。さらに、Ωiの元にはＸiより小さい自然数ｍi（≧０）が対応しており、自然数ｍiによって番号付け（すなわちランク付け）がされているものとする。ここで、フォーマットΩの文字列ｓが（ｍ1，ｍ2，・・・，ｍn）と表されるとすると、文字列ｓに対応する整数ＮＵＭ（ｓ）は、以下のように表される。
【００４３】
【数１】
2018117304.tif 000003
【００４４】
さらに、ＮＵＭ関数の逆関数としてＳＴＲ関数を定義する。ＳＴＲ関数は、フォーマットΩとフォーマットΩの大きさより小さい数字ｘに対して、ＮＵＭ（Ω，ｓ）＝ｘとなる文字列ｓ＝ＳＴＲ（Ω，ｘ）を対応させる関数である。ここで、フォーマットΩの大きさは以下のように表される。
【００４５】
【数２】
2018117304.tif 000004
【００４６】
さらに、Ｘより大きい数字Ｍに対してＳＴＲ（Ｍ）：＝ＳＴＲ（Ｍ mod Ｘ）として、ＳＴＲの定義域を自然数全体に拡張することができる。なお、ＮＵＭ関数及びＳＴＲ関数を用いた処理の具体例を後で示す。
【００４７】
そして、暗号化部１０５は、フォーマット変換後の暗号文を第１フォーマット変換部１０７から受け取る。そして、暗号化部１０５は、フォーマット変換後の暗号文を、処理対象ブロックの平文に加算する（ステップＳ６３）。
【００４８】
ステップＳ６３においては、例えば、文字毎にランクを加算して文字種の構成文字数で割ったときの剰余を求める方法、又は、文字列に対応する数字をＮＵＭ関数により計算しその数字を加算してフォーマットの大きさで割ったときの剰余を求め、求めた剰余からＳＴＲ関数を用いて文字列を得る方法が利用される。詳細については、後述の具体例を参照のこと。
【００４９】
暗号化部１０５は、ステップＳ６３における加算後のデータに対して、入力された鍵及び所定のアルゴリズムにより、不均一フォーマットのフォーマット保存暗号化を実行し、実行結果である暗号文を暗号データ格納部１１７に格納する（ステップＳ６５）。そして処理は呼び出し元に戻る。不均一フォーマットのフォーマット保存暗号化としては、例えば、ファイステル構造及び使用する文字の順序付けを用いた暗号化が利用される。この暗号化においては、メッセージ長及びメッセージに含まれる文字種を自由に選択することができる。なお、不均一フォーマットのフォーマット保存暗号化自体はよく知られた技術であるので、ここではこれ以上説明しない。
【００５０】
以上のように、本実施の形態においては、図９に示すようなＣＢＣモードに相当する方法でフォーマット保存暗号化が行われる。具体的には、前ブロックの暗号文Ｃn-1に対してフォーマット変換を実行して、前ブロックの暗号文のフォーマットと処理対象ブロックのフォーマットとを一致させる。そして、両者を加算した後に不均一フォーマットのフォーマット保存暗号化を実行する。
【００５１】
図７の説明に戻り、第１攪拌部１０９は、処理対象ブロックの暗号文を暗号データ格納部１１７から読み出す。そして、第１攪拌部１０９は、処理対象ブロックの暗号文を、攪拌処理によりさらに暗号化する（ステップＳ５５）。攪拌処理においては、ステップＳ１において入力を受け付けた鍵が使用される。第１攪拌部１０９は、ステップＳ５５において生成された暗号文を暗号データ格納部１１７に格納する。
【００５２】
図１０に、本実施の形態の攪拌処理を示す。図１０に示すように、各ブロックの最後の文字（左側のブロックは「一」、右側のブロックは「三」）以外の文字について、文字の順序が変更される。攪拌処理においては、例えば、疑似ランダム置換関数が使用される。
【００５３】
第１ブロック化部１０３は、次ブロックの候補（すなわち、ステップＳ２５において特定された文字から最後にステップＳ３３において特定された文字までの文字列）を第１ブロック候補格納部１１３に格納する（ステップＳ５７）。
【００５４】
第１ブロック化部１０３は、ＥをＥ＝０と設定する（ステップＳ５９）。そして処理は端子Ａを介して図６のステップＳ２１に戻る。
【００５５】
図６の説明に戻り、Ｅがセキュリティパラメータより大きくない場合（ステップＳ２９：Ｎｏルート）、第１ブロック化部１０３は、次の文字が有るか判定する（ステップＳ３１）。
【００５６】
次の文字が有る場合（ステップＳ３１：Ｙｅｓルート）、第１ブロック化部１０３は、次の文字を特定する（ステップＳ３３）。そして処理はステップＳ２７に戻る。
【００５７】
一方、次の文字が無い場合（ステップＳ３１：Ｎｏルート）、第１ブロック化部１０３は、処理対象ブロックの候補と次ブロックの候補とを連結して最終ブロックを生成する（ステップＳ３５）。第１ブロック化部１０３は、最終ブロックを第１ブロック格納部１１５に格納する。
【００５８】
暗号化部１０５は、最終ブロックを第１ブロック格納部１１５から読み出す。そして、暗号化部１０５は、最終ブロックに対してフォーマット保存暗号化を実行し（ステップＳ３７）、暗号文を暗号データ格納部１１７に格納する。ステップＳ３７の処理は、ステップＳ５３の処理と同様であるので、詳細な説明を省略する。
【００５９】
第１攪拌部１０９は、暗号データ格納部１１７から最終ブロックの暗号文を読み出す。そして、第１攪拌部１０９は、最終ブロックの暗号文を、攪拌処理によりさらに暗号化する（ステップＳ３９）。第１攪拌部１０９は、ステップＳ３９において生成された暗号文を暗号データ格納部１１７に格納する。ステップＳ３９の処理はステップＳ５５の処理と同様であるので、詳細な説明を省略する。
【００６０】
一方、次の文字が無い場合（ステップＳ２３：Ｎｏルート）、第１ブロック化部１０３は、最終ブロック（ここでは、処理対象ブロックの候補）を第１ブロック格納部１１５に格納する（ステップＳ４１）。
【００６１】
暗号化部１０５は、最終ブロックを第１ブロック格納部１１５から読み出す。そして、暗号化部１０５は、最終ブロックに対してフォーマット保存暗号化を実行し（ステップＳ４３）、暗号文を暗号データ格納部１１７に格納する。ステップＳ４３の処理は、ステップＳ５３の処理と同様であるので、詳細な説明を省略する。
【００６２】
第１攪拌部１０９は、暗号データ格納部１１７から最終ブロックの暗号文を読み出す。そして、第１攪拌部１０９は、最終ブロックの暗号文を、攪拌処理によりさらに暗号化する（ステップＳ４５）。第１攪拌部１０９は、ステップＳ４５において生成された暗号文を暗号データ格納部１１７に格納する。ステップＳ４５の処理はステップＳ５５の処理と同様であるので、詳細な説明を省略する。
【００６３】
第１ブロック化部１０３は、第１入力データ格納部１１１に格納されている初期ベクトル及び最終的に生成された全暗号文を連結し（ステップＳ４７）、第１出力データ格納部１１９に格納する。そして処理は終了する。
【００６４】
以上のような処理を実行すれば、ブロックに含まれる文字列の情報量が閾値より大きいことが保証されるので、長さが長い不均一フォーマット等の平文についても、安全にフォーマット保存暗号化することができるようになる。
【００６５】
また、セキュリティパラメータを予め設定することにより、暗号利用モードによる逐次暗号化処理において、暗号化の安全性を保証しつつ暗号化することが可能になる。
【００６６】
さらに、攪拌処理を実行することで、平文の内容を特定される可能性をさらに低くすることができるようになる。
【００６７】
図１１及び図１２を用いて、本実施の形態のブロック化について説明を追加する。上で述べたように、各ブロックに含まれる文字列のエントロピーがセキュリティパラメータより大きくなった場合にブロック化が行われる。図１１（ａ）においては、１個目の文字から５個目の文字まででエントロピーがセキュリティパラメータ（ハッチングされた部分に相当する）を超えたので、１個目の文字から５個目の文字までが第１ブロックの候補になる。図１１（ｂ）においては、６個目の文字から１０個目の文字まででエントロピーがセキュリティパラメータ（ハッチングされた部分に相当する）を超えたので、６個目の文字から１０個目の文字までが第２ブロックの候補になる。第２ブロックの候補が決まった時点で、第１ブロックの候補は第１ブロックになる。
【００６８】
同様にしてブロック化が行われていき、図１２（ａ）においては、５個の文字を含む文字列になった時点でエントロピーがセキュリティパラメータ（ハッチングされた部分に相当する）を超えるため第（Ｎ−１）ブロックの候補が決まる。そして、図１２（ｂ）においては、残り４個の文字を含む第Ｎブロックの候補のエントロピーがセキュリティパラメータ（ハッチングされた部分に相当する）を超えない。従って、図１２（ｃ）に示すように、第（Ｎ−１）ブロックの候補と第Ｎブロックの候補とが連結されて第（Ｎ−１）ブロックになる。このようにすれば、全てのブロックのエントロピーがセキュリティパラメータより大きいことが保証される。
【００６９】
次に、図１３乃至図１６を用いて、第１の実施の形態の復号化装置２が実行する処理を説明する。前提として、暗号化装置１において生成された暗号文が何らかの方法によって復号化装置２の第２入力データ格納部２１１に格納されたとする。
【００７０】
まず、第２管理部２０１は、復号化および攪拌処理の逆処理において使用される鍵及びセキュリティパラメータ等の設定の入力を受け付け（図１３：ステップＳ９１）、第２入力データ格納部２１１に格納する。入力は、例えば、復号化装置２の操作者により行われる。鍵及びセキュリティパラメータは、暗号化の際に使用された鍵及びセキュリティパラメータと同じであるとする。
【００７１】
第２管理部２０１は、暗号化装置１において生成された暗号文を第２入力データ格納部２１１から読み出す（ステップＳ９３）。
【００７２】
第２管理部２０１は、ステップＳ４７において暗号文に付加された初期ベクトルを読み込む（ステップＳ９５）。
【００７３】
第２管理部２０１は、文字列のエントロピーＥをＥ＝０と設定する（ステップＳ９７）。
【００７４】
第２ブロック化部２０３は、ステップＳ９３において読み出した暗号文の最初の文字を特定する（ステップＳ９９）。
【００７５】
第２ブロック化部２０３は、直前のステップ（ここでは、ステップＳ９９又はステップＳ１０５）において特定した文字が属する文字種のエントロピー（情報量とも呼ばれる）を、Ｅに加算する（ステップＳ１０１）。
【００７６】
第２ブロック化部２０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ１０３）。
【００７７】
Ｅがセキュリティパラメータより大きくない場合（ステップＳ１０３：Ｎｏルート）、第２ブロック化部２０３は、次の文字を特定する（ステップＳ１０５）。そして処理はステップＳ１０１に戻る。
【００７８】
Ｅがセキュリティパラメータより大きい場合（ステップＳ１０３：Ｙｅｓルート）、第２ブロック化部２０３は、第１ブロックの候補を第２ブロック候補格納部２１３に格納する（ステップＳ１０７）。第１ブロックの候補は、最初の文字から最後にステップＳ１０５において特定された文字までの文字列を含む。
【００７９】
第２ブロック化部２０３は、ＥをＥ＝０と設定する（ステップＳ１０９）。そして処理は端子Ｅを介して図１４のステップＳ１１１に移行する。
【００８０】
図１４の説明に移行し、第２ブロック化部２０３は、処理対象ブロック候補を第２ブロック候補格納部２１３から取り出す（図１４：ステップＳ１１１）。初めてステップＳ１１１の処理を実行する場合には、処理対象ブロックの候補としてステップＳ１０７において格納された第１ブロックの候補が特定される。２回目以降である場合、後述のステップＳ１４７において格納された次ブロックの候補が、処理対象ブロックの候補として特定される。
【００８１】
第２ブロック化部２０３は、処理対象ブロックの次の文字が有るか判定する（ステップＳ１１３）。処理対象ブロックの次の文字が有る場合（ステップＳ１１３：Ｙｅｓルート）、第２ブロック化部２０３は、次の文字を特定する（ステップＳ１１５）。
【００８２】
第２ブロック化部２０３は、ステップＳ１１５又はステップＳ１２３において特定した文字が属する文字種のエントロピーを、Ｅに加算する（ステップＳ１１７）。
【００８３】
第２ブロック化部２０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ１１９）。Ｅがセキュリティパラメータより大きい場合（ステップＳ１１９：Ｙｅｓルート）、処理は端子Ｆを介して図１５のステップＳ１４１に移行する。
【００８４】
図１５の説明に移行し、第２ブロック化部２０３は、処理対象ブロックの候補を処理対象ブロックとして第２ブロック格納部２１５に格納する（図１５：ステップＳ１４１）。
【００８５】
第２攪拌部２０９は、ステップＳ１４１において第２ブロック格納部２１５に格納された処理対象ブロックを読み出す。そして、第２攪拌部２０９は、処理対象ブロックの暗号文を、暗号化装置１において実行された攪拌処理の逆処理（すなわち、攪拌処理が行われていない暗号文に戻す処理）により復号化する（ステップＳ１４３）。攪拌処理の逆処理においては、ステップＳ９１において入力を受け付けた鍵が使用される。第２攪拌部２０９は、ステップＳ１４３において生成された復号文を復号データ格納部２１７に格納する。
【００８６】
復号化部２０５は、処理対象ブロックの復号文を復号データ格納部２１７から読み出す。そして、復号化部２０５は、読み出した復号文に対してフォーマット保存復号化を実行する（ステップＳ１４５）。第１の実施の形態のフォーマット保存復号化については、図１６を用いて説明する。フォーマット保存復号化は、基本的には、既に説明したフォーマット保存暗号化の逆処理であるので、簡単に説明する。
【００８７】
まず、復号化部２０５は、処理対象ブロックの復号文（すなわち、攪拌処理の逆処理により復号化された暗号文）に対して、入力された鍵および所定のアルゴリズムにより、不均一フォーマットのフォーマット保存復号化を実行する（図１６：ステップＳ１５１）。不均一フォーマットのフォーマット保存復号化は、フォーマットを維持したまま復号化する処理である。
【００８８】
復号化部２０５は、第２フォーマット変換部２０７にフォーマット保存復号化が実行された復号文を渡す。これに応じ、第２フォーマット変換部２０７は、処理対象ブロックの前ブロックの復号文のフォーマットを、所定の方法で処理対象ブロックのフォーマットに変換する（ステップＳ１５３）。なお、処理対象ブロックが第１ブロックである場合には、前ブロックが存在しないので、代わりに初期ベクトルが読み出される。
【００８９】
復号化部２０５は、フォーマット変換後の復号文を第２フォーマット変換部２０７から受け取る。そして、復号化部２０５は、フォーマット変換後の復号文を、処理対象ブロックの復号文から減算し、減算後の復号文を復号データ格納部２１７に格納する（ステップＳ１５５）。なお、減算はステップＳ６３における加算に対応しており、剰余演算を含んだ減算が行われるものとする。
【００９０】
図１５の説明に戻り、第２ブロック化部２０３は、次ブロックの候補（すなわち、ステップＳ１１５において特定された文字から最後にステップＳ１２３において特定された文字までの文字列）を第２ブロック候補格納部２１３に格納する（ステップＳ１４７）。
【００９１】
第２ブロック化部２０３は、ＥをＥ＝０と設定する（ステップＳ１４９）。そして処理は端子Ｅを介して図１４のステップＳ１１１に戻る。
【００９２】
図１４の説明に戻り、Ｅがセキュリティパラメータより大きくない場合（ステップＳ１１９：Ｎｏルート）、第２ブロック化部２０３は、次の文字が有るか判定する（ステップＳ１２１）。
【００９３】
次の文字が有る場合（ステップＳ１２１：Ｙｅｓルート）、第２ブロック化部２０３は、次の文字を特定する（ステップＳ１２３）。そして処理はステップＳ１１７に戻る。
【００９４】
一方、次の文字が無い場合（ステップＳ１２１：Ｎｏルート）、第２ブロック化部２０３は、処理対象ブロックの候補と次ブロックの候補とを連結して最終ブロックを生成する（ステップＳ１２５）。第２ブロック化部２０３は、最終ブロックを第２ブロック格納部２１５に格納する。
【００９５】
第２攪拌部２０９は、第２ブロック格納部２１５から最終ブロックを読み出す。そして、第２攪拌部２０９は、読み出した最終ブロックを、暗号化装置１において実行された攪拌処理の逆処理により復号化する（ステップＳ１２７）。第２攪拌部２０９は、ステップＳ１２７において生成された復号文を復号データ格納部２１７に格納する。ステップＳ１２７の処理はステップＳ１４３の処理と同様であるので、詳細な説明を省略する。
【００９６】
復号化部２０５は、最終ブロックの復号文を復号データ格納部２１７から読み出す。そして、復号化部２０５は、読み出した復号文に対してさらにフォーマット保存復号化を実行する（ステップＳ１２９）。ステップＳ１２９の処理はステップＳ１４５の処理と同様であるので、詳細な説明を省略する。
【００９７】
一方、次の文字が無い場合（ステップＳ１１３：Ｎｏルート）、第２ブロック化部２０３は、最終ブロック（ここでは、処理対象ブロックの候補）を第２ブロック格納部２１５に格納する（ステップＳ１３１）。
【００９８】
第２攪拌部２０９は、第２ブロック格納部２１５から最終ブロックを読み出す。そして、第２攪拌部２０９は、読み出した最終ブロックを、暗号化装置１において実行された攪拌処理の逆処理により復号化する（ステップＳ１３３）。第２攪拌部２０９は、ステップＳ１３３において生成された復号文を復号データ格納部２１７に格納する。ステップＳ１３３の処理はステップＳ１４３の処理と同様であるので、詳細な説明を省略する。
【００９９】
復号化部２０５は、最終ブロックの復号文を復号データ格納部２１７から読み出す。そして、復号化部２０５は、読み出した復号文に対してさらにフォーマット保存復号化を実行する（ステップＳ１３５）。ステップＳ１３５の処理はステップＳ１４５の処理と同様であるので、詳細な説明を省略する。
【０１００】
第２ブロック化部２０３は、最終的に生成された全復号文を連結し（ステップＳ１３７）、第２出力データ格納部２１９に格納する。そして処理は終了する。
【０１０１】
以上のような処理を実行すれば、本実施の形態の暗号化方法を利用した場合であっても元の平文を復元することができるようになる。
【０１０２】
［実施の形態２］
図１７乃至図２２を用いて、第２の実施の形態における暗号化装置１が実行する処理を説明する。
【０１０３】
まず、第１管理部１０１は、暗号化および攪拌処理において使用される鍵及びセキュリティパラメータ等の設定の入力を受け付け（図１７：ステップＳ１６１）、第１入力データ格納部１１１に格納する。入力は、例えば、暗号化装置１の操作者により行われる。
【０１０４】
第１管理部１０１は、平文の入力を受け付け（ステップＳ１６３）、第１入力データ格納部１１１に格納する。入力は、例えば、暗号化装置１の操作者により行われる。なお、暗号化装置１の記憶装置に予め平文が格納されている場合には、ステップＳ１６３において平文を記憶装置から読み出すようにしてもよい。
【０１０５】
第１管理部１０１は、疑似乱数生成器によりナンスを算出して第１入力データ格納部１１１に格納するとともに、ブロック番号を表すカウンタを０に設定する（ステップＳ１６５）。なお、疑似乱数生成器を用いる方法ではなくその他の方法でナンスを算出してもよい。
【０１０６】
第１管理部１０１は、文字列のエントロピーＥをＥ＝０と設定する（ステップＳ１６７）。
【０１０７】
第１ブロック化部１０３は、ステップＳ１６３において入力を受け付けた平文の最初の文字を特定する（ステップＳ１６９）。
【０１０８】
第１ブロック化部１０３は、直前のステップ（ここでは、ステップＳ１６９又はステップＳ１７５）において特定した文字が属する文字種のエントロピー（情報量とも呼ばれる）を、Ｅに加算する（ステップＳ１７１）。
【０１０９】
第１ブロック化部１０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ１７３）。
【０１１０】
Ｅがセキュリティパラメータより大きくない場合（ステップＳ１７３：Ｎｏルート）、ブロックの暗号文の安全性は高くないと考えられるので、第１ブロック化部１０３は、次の文字を特定する（ステップＳ１７５）。そして処理はステップＳ１７１に戻る。
【０１１１】
Ｅがセキュリティパラメータより大きい場合（ステップＳ１７３：Ｙｅｓルート）、第１ブロック化部１０３は、第１ブロックの候補を、第１ブロック候補格納部１１３に格納する（ステップＳ１７７）。第１ブロックの候補は、最初の文字から最後にステップＳ１７５において特定された文字までの文字列を含む。
【０１１２】
第１ブロック化部１０３は、ＥをＥ＝０と設定する（ステップＳ１７９）。そして処理は端子Ｃを介して図１８のステップＳ１８１に移行する。
【０１１３】
図１８の説明に移行し、第１ブロック化部１０３は、処理対象ブロック候補を第１ブロック候補格納部１１３から取り出す（図１８：ステップＳ１８１）。初めてステップＳ１８１の処理を実行する場合には、処理対象ブロックの候補としてステップＳ１７７において格納された第１ブロックの候補が特定される。２回目以降である場合、後述のステップＳ２１９において格納された次ブロックの候補が、処理対象ブロックの候補として特定される。
【０１１４】
第１ブロック化部１０３は、処理対象ブロックの次の文字が有るか判定する（ステップＳ１８３）。処理対象ブロックの次の文字が有る場合（ステップＳ１８３：Ｙｅｓルート）、第１ブロック化部１０３は、次の文字を特定する（ステップＳ１８５）。
【０１１５】
第１ブロック化部１０３は、ステップＳ１８５又はステップＳ１９３において特定した文字が属する文字種のエントロピーを、Ｅに加算する（ステップＳ１８７）。
【０１１６】
第１ブロック化部１０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ１８９）。Ｅがセキュリティパラメータより大きい場合（ステップＳ１８９：Ｙｅｓルート）、処理は端子Ｄを介して図１９のステップＳ２１１に移行する。
【０１１７】
図１９の説明に移行し、第１ブロック化部１０３は、処理対象ブロックの候補を処理対象ブロックとして第１ブロック格納部１１５に格納する（図１９：ステップＳ２１１）。
【０１１８】
第１ブロック化部１０３は、ステップＳ２１１において第１ブロック格納部１１５に格納された処理対象ブロックを暗号化部１０５に渡す。これに応じ、暗号化部１０５は、処理対象ブロックに対してフォーマット保存暗号化を実行する（ステップＳ２１３）。ステップＳ２１３において実行されるフォーマット保存暗号化については、後で説明する。
【０１１９】
第１攪拌部１０９は、処理対象ブロックの暗号文を暗号データ格納部１１７から読み出す。そして、第１攪拌部１０９は、処理対象ブロックの暗号文を、攪拌処理によりさらに暗号化する（ステップＳ２１５）。ステップＳ２１５において実行される攪拌処理は第１の実施の形態において実行される攪拌処理と同様であるので、詳細な説明を省略する。
【０１２０】
第１ブロック化部１０３は、カウンタを１インクリメントする（ステップＳ２１７）。
【０１２１】
第１ブロック化部１０３は、次ブロックの候補（すなわち、ステップＳ１８５において特定された文字から最後にステップＳ１９３において特定された文字までの文字列）を第１ブロック候補格納部１１３に格納する（ステップＳ２１９）。
【０１２２】
第１ブロック化部１０３は、ＥをＥ＝０と設定する（ステップＳ２２１）。そして処理は端子Ｃを介して図１８のステップＳ１８１に戻る。
【０１２３】
図１８の説明に戻り、Ｅがセキュリティパラメータより大きくない場合（ステップＳ１８９：Ｎｏルート）、第１ブロック化部１０３は、次の文字が有るか判定する（ステップＳ１９１）。
【０１２４】
次の文字が有る場合（ステップＳ１９１：Ｙｅｓルート）、第１ブロック化部１０３は、次の文字を特定する（ステップＳ１９３）。そして処理はステップＳ１８７に戻る。
【０１２５】
一方、次の文字が無い場合（ステップＳ１９１：Ｎｏルート）、第１ブロック化部１０３は、処理対象ブロックの候補と次ブロックの候補とを連結して最終ブロックを生成する（ステップＳ１９５）。第１ブロック化部１０３は、最終ブロックを第１ブロック格納部１１５に格納する。
【０１２６】
暗号化部１０５は、最終ブロックを第１ブロック格納部１１５から読み出す。そして、暗号化部１０５は、最終ブロックに対してフォーマット保存暗号化を実行し（ステップＳ１９７）、暗号文を暗号データ格納部１１７に格納する。ステップＳ１９７のフォーマット保存暗号化はステップＳ２１３の処理と同様であるので、詳細な説明を省略する。
【０１２７】
第１攪拌部１０９は、暗号データ格納部１１７から最終ブロックの暗号文を読み出す。そして、第１攪拌部１０９は、最終ブロックの暗号文を、攪拌処理によりさらに暗号化する（ステップＳ１９９）。第１攪拌部１０９は、ステップＳ１９９において生成された暗号文を暗号データ格納部１１７に格納する。ステップＳ１９９の処理は第１の実施の形態の攪拌処理と同様であるので、詳細な説明を省略する。
【０１２８】
一方、次の文字が無い場合（ステップＳ１８３：Ｎｏルート）、第１ブロック化部１０３は、最終ブロック（ここでは、処理対象ブロックの候補）を第１ブロック格納部１１５に格納する（ステップＳ２０１）。
【０１２９】
暗号化部１０５は、最終ブロックを第１ブロック格納部１１５から読み出す。そして、暗号化部１０５は、最終ブロックに対してフォーマット保存暗号化を実行し（ステップＳ２０３）、暗号文を暗号データ格納部１１７に格納する。ステップＳ２０３の処理はステップＳ２１３の処理と同様であるので、詳細な説明を省略する。
【０１３０】
第１攪拌部１０９は、暗号データ格納部１１７から最終ブロックの暗号文を読み出す。そして、第１攪拌部１０９は、最終ブロックの暗号文を、攪拌処理によりさらに暗号化する（ステップＳ２０５）。第１攪拌部１０９は、ステップＳ２０５において生成された暗号文を暗号データ格納部１１７に格納する。ステップＳ２０５の処理は第１の実施の形態の攪拌処理と同様であるので、詳細な説明を省略する。
【０１３１】
第１ブロック化部１０３は、第１入力データ格納部１１１に格納されているナンス及び最終的に生成された全暗号文を連結し（ステップＳ２０７）、第１出力データ格納部１１９に格納する。そして処理は終了する。
【０１３２】
以上のように、ナンス及びカウンタを使用する場合においても、ブロックに含まれる文字列の情報量が閾値より大きいことが保証されるので、例えば任意の長さの不均一フォーマット等の平文についても、安全にフォーマット保存暗号化することができるようになる。
【０１３３】
次に、図２０乃至図２２を用いて、復号化装置２が実行する処理を説明する。前提として、暗号化装置１において生成された暗号文が何らかの方法によって復号化装置２の第２入力データ格納部２１１に格納されたとする。
【０１３４】
まず、第２管理部２０１は、復号化および攪拌処理の逆処理において使用される鍵及びセキュリティパラメータ等の設定の入力を受け付け（図２０：ステップＳ２３１）、第２入力データ格納部２１１に格納する。入力は、例えば、復号化装置２の操作者により行われる。鍵及びセキュリティパラメータは、暗号化の際に使用された鍵及びセキュリティパラメータと同じであるとする。
【０１３５】
第２管理部２０１は、暗号化装置１において生成された暗号文を第２入力データ格納部２１１から読み出す（ステップＳ２３３）。
【０１３６】
第２管理部２０１は、ステップＳ２０７において暗号文に付加されたナンスを読み込み、ブロック番号を表すカウンタに０を設定する（ステップＳ２３５）。
【０１３７】
第２管理部２０１は、文字列のエントロピーＥをＥ＝０と設定する（ステップＳ２３７）。
【０１３８】
第２ブロック化部２０３は、ステップＳ２３３において読み出した暗号文の最初の文字を特定する（ステップＳ２３９）。
【０１３９】
第２ブロック化部２０３は、直前のステップ（ここでは、ステップＳ２３９又はステップＳ２４５）において特定した文字が属する文字種のエントロピー（情報量とも呼ばれる）を、Ｅに加算する（ステップＳ２４１）。
【０１４０】
第２ブロック化部２０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ２４３）。
【０１４１】
Ｅがセキュリティパラメータより大きくない場合（ステップＳ２４３：Ｎｏルート）、第２ブロック化部２０３は、次の文字を特定する（ステップＳ２４５）。そして処理はステップＳ２４１に戻る。
【０１４２】
Ｅがセキュリティパラメータより大きい場合（ステップＳ２４３：Ｙｅｓルート）、第２ブロック化部２０３は、第１ブロックの候補を第２ブロック候補格納部２１３に格納する（ステップＳ２４７）。第１ブロックの候補は、最初の文字から最後にステップＳ２４５において特定された文字までの文字列を含む。
【０１４３】
第２ブロック化部２０３は、ＥをＥ＝０と設定する（ステップＳ２４９）。そして処理は端子Ｇを介して図２１のステップＳ２５１に移行する。
【０１４４】
図２１の説明に移行し、第２ブロック化部２０３は、処理対象ブロック候補を第２ブロック候補格納部２１３から取り出す（図２１：ステップＳ２５１）。初めてステップＳ２５１の処理を実行する場合には、処理対象ブロックの候補としてステップＳ２４７において格納された第１ブロックの候補が特定される。２回目以降である場合、後述のステップＳ２８９において格納された次ブロックの候補が、処理対象ブロックの候補として特定される。
【０１４５】
第２ブロック化部２０３は、処理対象ブロックの次の文字が有るか判定する（ステップＳ２５３）。処理対象ブロックの次の文字が有る場合（ステップＳ２５３：Ｙｅｓルート）、第２ブロック化部２０３は、次の文字を特定する（ステップＳ２５５）。
【０１４６】
第２ブロック化部２０３は、ステップＳ２５５又はステップＳ２６３において特定した文字が属する文字種のエントロピーを、Ｅに加算する（ステップＳ２５７）。
【０１４７】
第２ブロック化部２０３は、Ｅがセキュリティパラメータより大きいか判定する（ステップＳ２５９）。Ｅがセキュリティパラメータより大きい場合（ステップＳ２５９：Ｙｅｓルート）、処理は端子Ｈを介して図２２のステップＳ２８１に移行する。
【０１４８】
図２２の説明に移行し、第２ブロック化部２０３は、処理対象ブロックの候補を第２ブロック格納部２１５に格納する（図２２：ステップＳ２８１）。
【０１４９】
第２攪拌部２０９は、ステップＳ２８１において第２ブロック格納部２１５に格納された処理対象ブロックを読み出す。そして、第２攪拌部２０９は、処理対象ブロックの暗号文を、暗号化装置１において実行された攪拌処理の逆処理（すなわち、攪拌処理が行われていない暗号文に戻す処理）により復号化する（ステップＳ２８３）。攪拌処理の逆処理においては、ステップＳ２３１において入力を受け付けた鍵が使用される。第２攪拌部２０９は、ステップＳ２８３において生成された復号文を復号データ格納部２１７に格納する。
【０１５０】
復号化部２０５は、処理対象ブロックの復号文を復号データ格納部２１７から読み出す。そして、復号化部２０５は、読み出した復号文に対してフォーマット保存復号化を実行する（ステップＳ２８５）。第２の実施の形態のフォーマット保存復号化については、後で説明する。
【０１５１】
第２ブロック化部２０３は、カウンタを１インクリメントする（ステップＳ２８７）。
【０１５２】
第２ブロック化部２０３は、次ブロックの候補（すなわち、ステップＳ２５５において特定された文字から最後にステップＳ２６３において特定された文字までの文字列）を第２ブロック候補格納部２１３に格納する（ステップＳ２８９）。
【０１５３】
第２ブロック化部２０３は、ＥをＥ＝０と設定する（ステップＳ２９１）。そして処理は端子Ｇを介して図２１のステップＳ２５１に戻る。
【０１５４】
図２１の説明に戻り、Ｅがセキュリティパラメータより大きくない場合（ステップＳ２５９：Ｎｏルート）、第２ブロック化部２０３は、次の文字が有るか判定する（ステップＳ２６１）。
【０１５５】
次の文字が有る場合（ステップＳ２６１：Ｙｅｓルート）、第２ブロック化部２０３は、次の文字を特定する（ステップＳ２６３）。そして処理はステップＳ２５７に戻る。
【０１５６】
一方、次の文字が無い場合（ステップＳ２６１：Ｎｏルート）、第２ブロック化部２０３は、処理対象ブロックの候補と次ブロックの候補とを連結して最終ブロックを生成する（ステップＳ２６５）。第２ブロック化部２０３は、最終ブロックを第２ブロック格納部２１５に格納する。
【０１５７】
第２攪拌部２０９は、第２ブロック格納部２１５から最終ブロックを読み出す。そして、第２攪拌部２０９は、読み出した最終ブロックを、暗号化装置１において実行された攪拌処理の逆処理により復号化する（ステップＳ２６７）。第２攪拌部２０９は、ステップＳ２６７において生成された復号文を復号データ格納部２１７に格納する。ステップＳ２６７の処理は第１の実施の形態において説明した攪拌処理の逆処理と同様であるので、詳細な説明を省略する。
【０１５８】
復号化部２０５は、最終ブロックの復号文を復号データ格納部２１７から読み出す。そして、復号化部２０５は、読み出した復号文に対してさらにフォーマット保存復号化を実行する（ステップＳ２６９）。ステップＳ２６９の処理はステップＳ２８５の処理と同様であるので、詳細な説明を省略する。
【０１５９】
一方、次の文字が無い場合（ステップＳ２５３：Ｎｏルート）、第２ブロック化部２０３は、最終ブロック（ここでは、処理対象ブロックの候補）を第２ブロック格納部２１５に格納する（ステップＳ２７１）。
【０１６０】
第２攪拌部２０９は、第２ブロック格納部２１５から最終ブロックを読み出す。そして、第２攪拌部２０９は、読み出した最終ブロックを、暗号化装置１において実行された攪拌処理の逆処理により復号化する（ステップＳ２７３）。第２攪拌部２０９は、ステップＳ２７３において生成された復号文を復号データ格納部２１７に格納する。ステップＳ２７３の処理は第１の実施の形態の攪拌処理の逆処理と同様であるので、詳細な説明を省略する。
【０１６１】
復号化部２０５は、最終ブロックの復号文を復号データ格納部２１７から読み出す。そして、復号化部２０５は、読み出した復号文に対してさらにフォーマット保存復号化を実行する（ステップＳ２７５）。ステップＳ２７５の処理はステップＳ２８５の処理と同様であるので、詳細な説明を省略する。
【０１６２】
第２ブロック化部２０３は、最終的に生成された全復号文を連結し（ステップＳ２７７）、第２出力データ格納部２１９に格納する。そして処理は終了する。
【０１６３】
以上のような処理を実行すれば、ナンス及びカウンタを利用する場合においても、元の平文を復元することができるようになる。
【０１６４】
図２３及び図２４を用いて、第２の実施の形態におけるフォーマット保存暗号化（ステップＳ２１３）について説明する。
【０１６５】
暗号化部１０５は、ブロック番号を表すカウンタの値をナンスに加算する（図２３：ステップＳ３０１）。
【０１６６】
暗号化部１０５は、加算後の値を第１フォーマット変換部１０７に渡す。これに応じ、第１フォーマット変換部１０７は、加算後の値のフォーマットを、所定の方法で処理対象ブロックのフォーマットに変換する（ステップＳ３０３）。所定の方法については、第１の実施の形態の説明で述べたとおりである。
【０１６７】
暗号化部１０５は、フォーマット変換後のデータに対して、入力された鍵および所定のアルゴリズムにより、不均一フォーマットのフォーマット保存暗号化を実行する（ステップＳ３０５）。不均一フォーマットのフォーマット保存暗号化については、第１の実施の形態の説明で述べたとおりである。
【０１６８】
暗号化部１０５は、ステップＳ３０５の処理の実行結果である暗号文を、処理対象ブロックの平文に加算する（ステップＳ３０７）。なお、加算においては、ステップＳ６３と同様に、剰余演算を含んだ加算を行うものとする。
【０１６９】
暗号化部１０５は、ステップＳ３０７における加算後のデータを、処理対象ブロックの暗号文として暗号データ格納部１１７に格納する（ステップＳ３０９）。そして処理は呼び出し元に戻る。
【０１７０】
以上のように、本実施の形態においては、図２４に示すようにフォーマット保存暗号化が行われる。具体的には、ナンスにカウンタの値を加えた値に対してフォーマット変換を実行して、さらに、フォーマット変換後のデータに対して不均一フォーマットのフォーマット保存暗号化を実行する。これにより、ナンスにカウンタの値を加えた値のフォーマットと処理対象ブロックのフォーマットとを一致させる。そして、両者を加算することで処理対象ブロックの暗号文を得る。なお、加算においては、ステップＳ６３と同様に、剰余演算を含んだ加算を行うものとする。
【０１７１】
図２５を用いて、第２の実施の形態におけるフォーマット保存暗号化に対応するフォーマット保存復号化（ステップＳ２８５）について説明する。
【０１７２】
まず、復号化部２０５は、ブロック番号を表すカウンタの値をナンスに加算する（図２５：ステップＳ３２１）。
【０１７３】
第２フォーマット変換部２０７は、ステップＳ３２１における加算後の値を復号化部２０５から受け取る。そして、第２フォーマット変換部２０７は、加算後の値のフォーマットを、所定の方法で処理対象ブロックのフォーマットに変換する（ステップＳ３２３）。
【０１７４】
復号化部２０５は、フォーマット変換後のデータを第２フォーマット変換部２０７から受け取る。そして、復号化部２０５は、フォーマット変換後のデータに対して、入力された鍵および所定のアルゴリズムにより、不均一フォーマットのフォーマット保存復号化を実行する（ステップＳ３２５）。不均一フォーマットのフォーマット保存復号化については、第１の実施の形態の説明で述べたとおりである。
【０１７５】
復号化部２０５は、ステップＳ３２５の実行結果である暗号文を、処理対象ブロックの暗号文から減算し、減算後のデータを復号データ格納部２１７に格納する（ステップＳ３２７）。そして処理は終了する。なお、減算においては、ステップＳ１５５と同様に、剰余演算を含んだ減算を行うものとする。
【０１７６】
このように、カウンタモードに相当する方法で暗号化を実行する場合においても、フォーマット変換を実行することで、不均一フォーマットのフォーマット保存暗号化を適切に実行することができるようになる。以下で説明する第３の実施の形態のフォーマット保存暗号化と比較すると、処理量が少なくすることができる。
【０１７７】
［実施の形態３］
以下では、第１及び第２の実施の形態のフォーマット保存暗号化およびフォーマット保存復号化とは異なるフォーマット保存暗号化およびフォーマット保存復号化を示す。
【０１７８】
図２６及び図２７を用いて、第３の実施の形態におけるフォーマット保存暗号化について説明する。
【０１７９】
暗号化部１０５は、ブロック番号を表すカウンタの値をナンスに加算する（図２６：ステップＳ３１１）。
【０１８０】
暗号化部１０５は、ステップＳ３１１において求めた値に対して、入力された鍵および所定のアルゴリズムにより、均一フォーマットのフォーマット保存暗号化を実行する（ステップＳ３１３）。なお、均一フォーマットのフォーマット保存暗号化自体はよく知られた技術であるので、ここではこれ以上説明しない。
【０１８１】
暗号化部１０５は、ステップＳ３１３の実行結果のデータを第１フォーマット変換部１０７に渡す。これに応じ、第１フォーマット変換部１０７は、受け取ったデータのフォーマットを、所定の方法で処理対象ブロックのフォーマットに変換する（ステップＳ３１５）。所定の方法については、第１の実施の形態の説明で述べたとおりである。
【０１８２】
暗号化部１０５は、ステップＳ３１５におけるフォーマット変換後のデータを、処理対象ブロックの平文に加算する（ステップＳ３１７）。なお、加算においては、ステップＳ６３と同様に、剰余演算を含んだ加算を行うものとする。
【０１８３】
暗号化部１０５は、ステップＳ３１７における加算後のデータを、処理対象ブロックの暗号文として暗号データ格納部１１７に格納する（ステップＳ３１９）。そして処理は呼び出し元に戻る。
【０１８４】
以上のように、本実施の形態においては、図２７に示すようにフォーマット保存暗号化が行われる。具体的には、ナンスにカウンタの値を加えた値に対して均一フォーマットのフォーマット保存暗号化を実行して、さらに、暗号化後のデータに対してフォーマット変換を実行する。これにより、ナンスにカウンタの値を加えた値の暗号文のフォーマットと処理対象ブロックのフォーマットとを一致させる。そして、両者を加算することで処理対象ブロックの暗号文を得る。なお、加算においては、ステップＳ６３と同様に、剰余演算を含んだ加算を行うものとする。
【０１８５】
図２８を用いて、第３の実施の形態におけるフォーマット保存暗号化に対応するフォーマット保存復号化について説明する。
【０１８６】
まず、復号化部２０５は、ブロック番号を表すカウンタの値をナンスに加算する（図２８：ステップＳ３３１）。
【０１８７】
復号化部２０５は、加算後の値に対して、入力された鍵および所定のアルゴリズムにより、均一フォーマットのフォーマット保存復号化を実行する（ステップＳ３３３）。
【０１８８】
第２フォーマット変換部２０７は、ステップＳ３３３における復号化後のデータを復号化部２０５から受け取る。そして、第２フォーマット変換部２０７は、復号化後のデータのフォーマットを、所定の方法で処理対象ブロックのフォーマットに変換する（ステップＳ３３５）。
【０１８９】
復号化部２０５は、フォーマット変換後のデータを第２フォーマット変換部２０７から受け取る。そして、復号化部２０５は、フォーマット変換後のデータを、処理対象ブロックの暗号文から減算し、減算後のデータを復号データ格納部２１７に格納する（ステップＳ３３７）。そして処理は終了する。なお、減算においては、ステップＳ１５５と同様に、剰余演算を含んだ減算を行うものとする。
【０１９０】
このように、フォーマット変換を実行することで、不均一フォーマットのフォーマット保存暗号化を適切に実行することができるようになる。なお、第２の実施の形態の方法と比較すると、第３の実施の形態においてはブロックが無い状態においても処理を進めることができるという利点がある。
【０１９１】
［実施の形態４］
以下では、第１乃至第３の実施の形態の攪拌処理とは異なる攪拌処理を示す。
【０１９２】
図２９を用いて、第４の実施の形態における攪拌処理について説明する。第４の実施の形態においては、各ブロックの最後の文字（左側のブロックは「一」、右側のブロックは「三」）をも含む全文字について、文字の順序が変更される。攪拌処理においては、例えば、疑似ランダム置換関数が使用される。最終的な出力には、各ブロックに含まれる文字数の情報が付加される。これに応じて、復号化装置２が文字数の情報を利用してブロック化を実行する。
【０１９３】
第４の実施の形態の攪拌処理は、第１乃至第３の実施の形態の攪拌処理と比較すると、最後の文字をも含めて順序を変更するため、より安全性が高くなる。但し、文字数の情報を送信する処理が必要になる。
【０１９４】
なお、第４の実施の形態の攪拌処理を利用する場合には、前ブロックの暗号文として、攪拌処理が実行された暗号文が処理対象ブロックに加算される。
【０１９５】
［実施の形態５］
以下では、第１乃至第４の実施の形態の攪拌処理とは異なる攪拌処理を示す。
【０１９６】
図３０を用いて、第５の実施の形態における攪拌処理について説明する。第５の実施の形態においては、各ブロックの暗号文が連結され、連結後の暗号文に含まれる文字の順序が変更される。攪拌処理においては、例えば、疑似ランダム置換関数が使用される。
【０１９７】
第５の実施の形態の攪拌処理は、ブロックの入力に対して並列処理を実行することができないため、第１乃至第４の実施の形態の攪拌処理と比較すると処理性能が劣るものの、データ全体に対する攪拌処理が実行されるので、安全性がさらに高くなる。
【０１９８】
なお、第５の実施の形態の攪拌処理を利用する場合には、前ブロックの暗号文として、攪拌処理が実行されていない暗号文が処理対象ブロックに加算される。また、第１乃至第４の実施形態とは異なるタイミングで攪拌処理が実行される。
【０１９９】
［処理の具体例１］
実施の形態１及び２のフォーマット保存暗号化と攪拌処理を実行した場合の処理例を示す。
【０２００】
処理の対象は文字列ｐ「〒2118588神奈川県川崎市中原区上小田中4-1-1株式会社〇△□研究所〇△□太郎」（〇、△及び□は漢字１文字に対応する）である。ＥＵＣ（Extended UNIX（登録商標） Code）コードにおける文字種を以下の通り分割して用いる。
【０２０１】
（i）半角文字集合Ω１
１６進表示２１から７ｅまでの９４字を含み、辞書式順序に沿ってランク付けがされている。エントロピーはｌｏｇ２ ９４≒６．５５である。例えば、Ω１の１０文字目は半角文字「*」である。必要に応じてエントロピーの有効桁数を増やす。
【０２０２】
（ii）全角文字集合Ω２
以下の全ての集合の和集合をΩ２として用いる。ＪＩＳ Ｘ ０２０８漢字コード表に存在するものをＥＵＣコードから抽出したものに相当する。表示は全て１６進表示に従う。
ａ１ａ１からａ２ａｅ：「  」から「〓」までの１０８字
ａ２ｂａからａ２ｃ１：「∈」から「∩」までの８字
ａ２ｃａからａ２ｄ０：「∧」から「∃」までの７字
ａ２ｄｃからａ２ｅａ：「∠」から「∬」までの１５字
ａ２ｆ２からａ２ｆ９：「Å」から「¶」までの８字
ａ２ｆｅからａ２ｆｅ：「〇」の１字
ａ３ｂ０からａ３ｂ９：「０」から「９」までの１０字
ａ３ｃ１からａ３ｄａ：「Ａ」から「Ｚ」までの２６字
ａ３ｅ１からａ３ｆａ：「ａ」から「ｚ」までの２６字
ａ４ａ１からａ４ｆ３：「ぁ」から「ん」までの８３字
ａ５ａ１からａ５ｆ６：「ァ」から「ヶ」までの８６字
ａ６ａ１からａ６ｂ８：「Α」から「Ω」までの２４字
ａ６ｃ１からａ６ｄ８：「α」から「ω」までの２４字
ａ７ａ１からａ７ｃ１：「А」から「Я」までの３３字
ａ７ｄ１からａ７ｆ１：「а」から「я」までの３３字
ａ８ａ１からａ８ｃ０：「─」から「╂」までの３２字
ｂ０ａ１からｃｆｄ３：「亜」から「腕」までの第一水準漢字２９６５字
ｄ０ａ１からｆ４ａ６：「弌」から「熙」までの第二水準漢字３３９０字
以上で計６８７９字である。エントロピーはＬｏｇ２ ６８７９≒１２．７５である。Ω１と同じく辞書式順序でランク付けされる。また、これらのランク付けを用いて、ＮＵＭ関数とＳＴＲ関数により、文字列に数字を対応付けることができる。
セキュリティパラメータは１２８（１２８ビット文字列のエントロピー）であるとする。
【０２０３】
１．ＮＵＭ関数およびＳＴＲ関数
文字列「1月1日」に着目すると、「1」はΩ１における１７字目、「月」はΩ２における１２６０字目、日はΩ２における２７７８字目であるので、「1月1日」に対応する数字はＮＵＭ（（Ω１，Ω２，Ω１，Ω２），（16，1259，16，2777））＝７１９８４４５９０３９と計算される。
【０２０４】
さらに、このフォーマット（Ω１，Ω２，Ω１，Ω２の順序で文字種が出現するフォーマット）には、４１８１２５１８３８７６（＝９４＊６８７９＊９４＊６８７９）までの数字が１対１に対応しており、例えばＳＴＲ（３８８０５６３８９９５５）で与えられる文字列は「x時y分」である。実際、ＮＵＭ（（Ω１，Ω２，Ω１，Ω２），（87，1651，88，2979））＝３８８０５６３８９９５５である。
【０２０５】
２．フォーマット変換
本例のフォーマット変換においては、疑似乱数生成器を用いてブロックの暗号文から十分大きな数字を生成し、その数字からＳＴＲ関数を用いてフォーマットを変換した文字列を生成するものとする。
【０２０６】
３．初期ベクトルの算出
疑似乱数生成器を用いて初期ベクトルを計算する。ここでは、１０進６０桁の数字ｉｖを用いる。ｉｖを「123456789101112131415161718192021222324252627282930313233343」とする。
【０２０７】
４．ブロック分割
（１）１ブロック目の決定
「2118588神奈川県川」までの総エントロピーは約１２２．３７であり「〒2118588神奈川県川崎」までの総エントロピーが約１３５．１２であるので、１ブロック目候補は「〒2118588神奈川県川崎」となる。次ブロックの候補は、同様に計算して、「市中原区上小田中4-1-」（総エントロピーは約１２８．２０）に決定する。この時点で１ブロック目が「〒2118588神奈川県川崎」に決定する。
【０２０８】
（２）２ブロック目の決定
２ブロック目の候補は、先に計算した「市中原区上小田中4-1-」である。次ブロックの候補を計算すると「1株式会社〇△□研究所」（総エントロピー約134.03）に決定するので、２ブロック目が「市中原区上小田中4-1-」に決定する。
【０２０９】
（３）３ブロック目の決定
３ブロック目の候補は、先に計算した「1株式会社〇△□研究所」である。次ブロックの候補は、「〇△□太郎」でデータが終了するので「〇△□太郎」である。この文字列のエントロピーは６３．７４であり、セキュリティパラメータを下回るので、３ブロック目は「1株式会社〇△□研究所〇△□太郎」に決定する。
【０２１０】
５．暗号化
（１）１ブロック目の暗号化
１ブロック目の「〒2118588神奈川県川崎」に対応する数字列は、この文字列のフォーマットをΨ１＝（Ω２，Ω１，Ω１，Ω１，Ω１，Ω１，Ω１，Ω１，Ω２，Ω２，Ω２，Ω２，Ω２，Ω２）とすれば、数字列（102，17，16，16，23，20，23，23，1965，2655，2105，1284，2105，1537）が対応する。さらに、初期ベクトルｉｖからＳＴＲ関数により、フォーマットがΨ１である文字列がＳＴＲ（Ψ１，iv）＝（2474，19，74，76，5，71，20，91，3660，591，196，3414，6868，2647）と定まる。「〒2118588神奈川県川崎」を文字毎に加算して剰余をとる方法により、文字列（2576，36，90，92，28，91，43，20，5625，3246，2301，4698，2094，4184）を得る。各文字は対応する数字で記載されている。
【０２１１】
さらに、この文字列に対して不均一フォーマットのフォーマット保存暗号化を実行することにより、例えば、（2177，89，2，60，43，64，50，12，3229，1936，1867，2757，2142，5606）＝「層{#\LaS-治殖昭蝿全网」を得る。
【０２１２】
最後に、この文字列から最後の文字を除いたものに対して攪拌処理を実行し、１ブロック目の暗号文として「殖全\S治{層a蝿-#昭L网」を得る。
【０２１３】
（２）２ブロック目の暗号化
２ブロック目「市中原区上小田中4-1-」に対応する数字列は、このフォーマットをΨ２として（1609，2379，12987，1159，1908，1853，2533，2379，19，12，16，12）である。
【０２１４】
前ブロックの暗号文である「殖全\S治{層a蝿-#昭L网」はＮＵＭ関数により「13305219735931605333191464555362186118901」に対応していることがわかり、この数字列を用いて、疑似乱数生成器及びＳＴＲ関数から文字列（1678，2444，6632，1262，2413，5423，1932，3584，12，89，57，19）を得る。
【０２１５】
前ブロックから生成された文字列と２ブロック目の文字列とを文字毎に加算して剰余をとることにより、文字列（3287，4823，1050，2421，4321，397，4465，5963，33，7，73，31）を得る。
【０２１６】
さらに、この文字列に対して不均一フォーマットのフォーマット保存暗号化を実行することにより、例えば、（3713，3296，4524，6549，3906，4748，5152，4286，10，53，51，92）＝「準溶暸勒塋歹痰慘+VT}」を得る。
【０２１７】
最後に、この文字列から最後の文字を除いた文字列に対して撹拌処理を実行し、１ブロック目の暗号文として「塋+溶歹準慘T勒暸V痰}」を得る。
【０２１８】
（３）３ブロック目の暗号化
最後のブロック「1株式会社〇△□研究所〇△□太郎」に対応する数字列は、このフォーマットをΨ３として（16，889，1667，792，1701，2930，1603，2447，1281，1063，1819，2930，1603，2447，2247，3463）である。
【０２１９】
前ブロックの暗号文である「塋+溶歹準慘}勒T暸V痰」は、ＮＵＭ関数により「222296801808118388074856335307474207286｝に対応していることがわかる。この数字と疑似乱数生成器及びＳＴＲ関数から文字列（59，2943，5568，901，925，272，2684，1028，5023，3127，944，162，1655，917，6423，231）を得る。
【０２２０】
前ブロックから得た文字列と３ブロック目の文字列とを文字毎に加算して剰余をとることにより、文字列（75，3832，356，1693，2626，3202，4287，3475，6304，4190，2763，3092，3258，3364，1791，3694）を得る。
【０２２１】
さらに、この文字列に対して不均一フォーマットのフォーマット保存暗号化を実行することにより、例えば、（19，2079，3868，866，4343，5085，537，446，5507，588，68，5163，3440，1265，3500，1223）＝「4脊圓掛扎瓔握ｙ緲衣≦瘢錬券亂景」を得る。
【０２２２】
最後に、この文字列から最後の文字を除いたものに対して攪拌処理を実行し、１ブロック目の暗号文として「亂圓掛衣4瘢ｙ脊≦扎券握緲瓔錬景」を得る。
【０２２３】
以上より、最終的な暗号文として「殖全\S治{層a蝿-#昭L网塋+溶歹準慘T勒暸V痰}亂圓掛衣4瘢ｙ脊≦扎券握緲瓔錬景」を得る。
【０２２４】
次に、「殖全\S治{層a蝿-#昭L网塋+溶歹準慘T勒暸V痰}亂圓掛衣4瘢ｙ脊≦扎券握緲瓔錬景」の復号化について説明する。
【０２２５】
６．初期ベクトルの算出
初期ベクトルは、暗号化に用いた初期ベクトルと同じ10進60桁の数字ｉｖ「123456789101112131415161718192021222324252627282930313233343」である。
【０２２６】
７．ブロック分割
（１）１ブロック目の決定
【０２２７】
「殖全\S治{層a蝿-#昭L」までの総エントロピーは約１２２．３７であり、「殖全\S治{層a蝿-#昭L网」までの総エントロピーが約１３５．１２であるので、１ブロック目の候補は「殖全\S治{層a蝿-#昭L网」となる。次ブロックの候補は、同様に計算して「塋+溶歹準慘T勒暸V痰}」（総エントロピーは約１２８．２０）に決定する。この時点で１ブロック目が「殖全\S治{層a蝿-#昭L网」に確定する。
【０２２８】
（２）２ブロック目の決定
２ブロック目の候補は、先に計算した「塋+溶歹準慘T勒暸V痰}」である。次ブロックの候補を計算すると、「亂圓掛衣4瘢ｙ脊≦扎券」（総エントロピー約134.03）に決定するので、２ブロック目が「塋+溶歹準慘T勒暸V痰}」に決定する。
【０２２９】
（３）３ブロック目の決定
３ブロック目の候補は、先に計算した「亂圓掛衣4瘢ｙ脊≦扎」である。次ブロックの候補を計算すると「握緲瓔錬景」でデータが終了するので、「握緲瓔錬景」である。このエントロピーは６３．７４であり、セキュリティパラメータを下回るので３ブロック目は「亂圓掛衣4瘢ｙ脊≦扎券握緲瓔錬景」に決定する。
【０２３０】
８．復号化
（１）１ブロック目の復号化
ブロックの暗号文「全\S治{層a蝿-#昭L网」に対して、暗号化の時と同じ攪拌処理の逆処理を実行することで文字列「層{#\LaS-治殖昭蝿全网」を得る。この文字列に対して、不均一フォーマットのフォーマット保存復号化を実行することによりフォーマットがΨ１＝（Ω２，Ω１，Ω１，Ω１，Ω１，Ω１，Ω１，Ω１，Ω２，Ω２，Ω２，Ω２，Ω２，Ω２）である文字列（2576，36，90，92，28，91，43，20，5625，3246，2301，4698，2094，4184）である。
【０２３１】
さらに、初期ベクトルｉｖからＳＴＲ関数により、フォーマットがΨ１である文字列が、ＳＴＲ（Ψ１，iv）＝（2474，19，74，76，5，71，20，91，3660，591，196，3414，6868，2647）と定まる。先にブロックから得た文字列から、この初期ベクトルからできた文字列を文字毎に減算して剰余をとることにより、復号文として「〒2118588神奈川県川崎」を得る。
【０２３２】
（２）２ブロック目の復号化
ブロックの暗号文「塋+溶歹準慘T勒暸V痰}」に対して、暗号化の時と同じ攪拌処理の逆処理を実行することで文字列「準溶暸勒塋歹痰慘+VT}」を得る。この文字列に対して、不均一フォーマットのフォーマット保存暗号化を実行することにより、文字列（3287，4823，1050，2421，4321，397，4465，5963，33，7，73，31）を得る。
【０２３３】
さらに、前ブロックの暗号文である「殖全\S治{層a蝿-#昭L网」はＮＵＭ関数により「13305219735931605333191464555362186118901」に対応していることがわかる。この数字を用いて、疑似乱数生成器及びＳＴＲ関数から文字列（1678，2444，6632，1262，2413，5423，1932，3584，12，89，57，19）を得ることができる。
【０２３４】
先に２ブロック目から得た文字列から、前ブロックから得た文字列を文字毎に減算して剰余をとることにより、復号文として「市中原区上小田中4-1-」を得る。
【０２３５】
（３）３ブロック目の復号化
ブロックの暗号文「亂圓掛衣4瘢ｙ脊≦扎券握緲瓔錬景」に対して、暗号化の時と同じ攪拌処理の逆処理を実行することで文字列「4脊圓掛扎瓔握ｙ緲衣≦瘢錬券亂景」を得る。この文字列に対して、不均一フォーマットのフォーマット保存暗号化を実行することにより、文字列（75，3832，356，1693，2626，3202，4287，3475，6304，4190，2763，3092，3258，3364，1791，3694）を得る。
【０２３６】
更に、前ブロックの暗号文である「塋+溶歹準慘}勒T暸V痰」は、ＮＵＭ関数により、「222296801808118388074856335307474207286」に対応していることがわかる。この数字を用いて、疑似乱数生成器及びＳＴＲ関数から文字列（59，2943，5568，901，925，272，2684，1028，5023，3127，944，162，1655，917，6423，231）を得る。
【０２３７】
先に３ブロック目から得た文字列から、前ブロックから得た文字列を文字毎に減算して剰余をとることにより、復号文として「1株式会社〇△□研究所〇△□太郎」を得る。
【０２３８】
以上より、最終的な復号文として「〒2118588神奈川県川崎市中原区上小田中4-1-1株式会社〇△□研究所〇△□太郎」を得る。
【０２３９】
［処理の具体例２］
ここでは、実施の形態２のフォーマット保存暗号化と実施の形態５の攪拌処理とを実行した場合の処理例を示す。
【０２４０】
本例では、文字列ｑ＝「2016年12月31日△△△研究所A棟B会議室09:00役員会議」を暗号化する。使用する文字種はΩ１およびΩ２である。セキュリティパラメータは１２８である。
【０２４１】
１．ナンスの算出
疑似乱数生成器を用いてナンスを計算する。ここでは、次の１０進６０桁の数字ｎ「863457500757017169409954688578215497424710808084847918656501」を用いる。
【０２４２】
２．ブロック分割
（１）１ブロック目の決定
「2016年12月31日〇△」までの総エントロピーは約１１６．１８であり、「2016年12月31日〇△□」までの総エントロピーは約１２８．９２なので、１ブロック目の候補は「2016年12月31日〇△□」である。次ブロック候補は、同様に計算して、「研究所A棟B会議室09:0」（総エントロピーは約１２８．５６）に決定する。この時点で、１ブロック目が「2016年12月31日〇△□」に決定する。
【０２４３】
（２）２ブロック目の決定
２ブロック目の候補は、先に計算した「研究所A棟B会議室09:0」である。次のブロック候補を計算すると、「0役員会議」でデータが終了するので、「0役員会議」である。このエントロピーは約５７．５５であり、セキュリティパラメータを下回るので、２ブロック目が「研究所A棟B会議室09:00役員会議」に決定する。
【０２４４】
３．暗号化
（１）１ブロック目の暗号化
１ブロック目「2016年12月31日〇△□」に対応する数字は、この文字列のフォーマットをΦ１を（Ω１，Ω１，Ω１，Ω１，Ω２，Ω１，Ω１，Ω２，Ω１，Ω１，Ω２，Ω２，Ω２，Ω２）とすれば、ＮＵＭ関数を用いて、ＮＵＭ（Φ１，（17，15，16，21，2700，16，17，1259，18，16，2683，2930，1603，2447））＝117923354341169626291044990114518702375と計算される。
【０２４５】
さらに、ナンスｎと１ブロック目を示すカウンタ値＝１との和（ｎ＋１）から、疑似乱数生成器とＳＴＲ関数とを用いたフォーマット変換により、例えば、次の数字列（91，58，58，88，1067，44，0，6065，67，83，344，5599，5549，3089）を得る。
【０２４６】
さらに、この数字列に対して不均一フォーマットのフォーマット保存暗号化を実行し、例えば、文字列（72，82，14，69，5266，18，58，1837，63，69，2681，5022，4484，3083）＝「is/f磑3[除`f虹狆旒剖」を得る。
【０２４７】
得られた文字列とブロックの文字列とを加算する（すなわち、対応する数字をＮＵＭ関数から求めて加算し、フォーマットの大きさで剰余をとって、対応する文字列をＳＴＲ関数で得る）ことにより、１ブロック目の暗号文として（2，3，30，91，1087，34，75，3096，81，85，5365，1073，6087，5485）＝「#$?|京Cl肪rv笵渠諫綏」を得る。
【０２４８】
（２）２ブロック目の暗号化
２ブロック目「研究所A棟B会議室09:00役員会議」に対応するフォーマットをΦ２とおく。ナンスｎと２ブロック目を示すカウンタ値＝２の和（ｎ＋２）から、フォーマット変換により、例えば、数字列（2604，1834，6706，36，1314，85，5842，135，5696，20，21，58，10，70，405，4054，1401，6245）を得る。
【０２４９】
さらに、この数字列に対して不均一フォーマットのフォーマット保存暗号化を実行し、（3134，4659，6196，46，392，5，755，2074，5011，14，84，87，49，90，3765，4748，2759，1822）を得る。これと、ブロックの文字列とを加算することにより、２ブロック目の暗号文として（4415，5723，1136，78，2968，38，1547，3103，6690，30，15，18，65，12，123，5358，3551，2851）＝「搗芍均o福G柵吠鬢?03b-∠笏俤疲」を得る。
【０２５０】
４．撹拌処理
暗号化により得た暗号文を連結して得られる文字列「#$?|京Cl肪rv笵渠諫綏搗芍均o福G柵吠鬢?03b-∠笏俤疲」に対して攪拌処理を実行することにより、最終的な暗号文「G俤綏olv肪-均笏柵芍r諫渠#搗C京鬢? 3福∠? 吠b0$疲|笵」を得る。
【０２５１】
次に、「G俤綏olv肪-均笏柵芍r諫渠#搗C京鬢? 3福∠? 吠b0$疲|笵」の復号化について説明する。
【０２５２】
５．ナンス
ナンスは、暗号化の際に用いたものと同じナンスである、１０進６０桁の数字ｎ「863457500757017169409954688578215497424710808084847918656501」である。
【０２５３】
６．攪拌処理の逆処理による復元
暗号文「G俤綏olv肪-均笏柵芍r諫渠#搗C京鬢? 3福∠? 吠b0$疲|笵」に対して、暗号化の時と同じ攪拌処理の逆処理を実行することで、「#$?|京Cl肪rv笵渠諫綏搗芍均o福G柵吠鬢?03b-∠笏俤疲」を得る。
【０２５４】
７．ブロック分割
（１）１ブロック目の決定
「#$?|京Cl肪rv笵渠諫」までの総エントロピーは約１１６．１８であり、「#$?|京Cl肪rv笵渠諫綏」までの総エントロピーは約１２８．９２であるので、１ブロック目の候補は「#$?|京Cl肪rv笵渠諫綏」である。次ブロックの候補は、同様に計算して、「搗芍均o福G柵吠鬢?03b」（総エントロピー約１２８．５６）に決定する。この時点で、１ブロック目が「#$?|京Cl肪rv笵渠諫綏」に決定する。
【０２５５】
（２）２ブロック目の決定
２ブロック目の候補は、先に計算した「搗芍均o福G柵吠鬢?03b」である。次ブロックの候補を計算すると、「-∠笏俤疲」でデータが終了するので、「-∠笏俤疲」である。このエントロピーは約５７．５５であり、セキュリティパラメータを下回るので、２ブロック目が「搗芍均o福G柵吠鬢?03b-∠笏俤疲」に決定する。
【０２５６】
８．復号化
（１）１ブロック目の復号化
ナンスｎと１ブロック目を示すカウンタ値＝１の和（ｎ＋１）から、疑似乱数生成器とＳＴＲ関数とを用いたフォーマット変換により、数字列（91，58，58，88，1067，44，0，6065，67，83，344，5599，5549，3089）を得る。
【０２５７】
さらに、この数字列に対して不均一フォーマットのフォーマット保存暗号化を実行し、文字列（72，82，14，69，5266，18，58，1837，63，69，2681，5022，4484，3083）＝
「is/f磑3[除`f虹狆旒剖」を得る。
【０２５８】
１ブロック目の暗号文（2，3，30，91，1087，34，75，3096，81，85，5365，1073，6087，5485）から、先にナンスから得た文を減算する（すなわち、対応する数字をＮＵＭ関数により計算し、数字同士の減算を行ってからＳＴＲ関数を用いて文字列を得る）ことにより、復号文として「2016年12月31日〇△□」を得る。
【０２５９】
（２）２ブロック目の復号化
ナンスｎと２ブロック目を示すカウンタ値＝２との和（ｎ＋１）から、フォーマット変換により、数字列（2604，1834，6706，36，1314，85，5842，135，5696，20，21，58，10，70，405，4054，1401，6245）を得る。
【０２６０】
さらに、この数字列に対して不均一フォーマットのフォーマット保存暗号化を実行し、（3134，4659，6196，46，392，5，755，2074，5011，14，84，87，49，90，3765，4748，2759，1822）を得る。
【０２６１】
２ブロック目の暗号文である（4415，5723，1136，78，2968，38，1547，3103，6690，30，15，18，65，12，123，5358，3551，2851）から、先にナンスから得た文を減算する（すなわち、対応する数字をＮＵＭ関数により計算し、数字同士の減算を行ってからＳＴＲ関数を用いて文字列を得る）ことにより、復号文として「研究所A棟B会議室09:00役員会議」を得る。
【０２６２】
以上より、最終的な復号文として「2016年12月31日〇△□研究所A棟B会議室09:00役員会議」を得る。
【０２６３】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した暗号化装置１および復号化装置２の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【０２６４】
また、上で説明したデータ構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【０２６５】
また、暗号化装置１と復号化装置２とが一体であってもよい。
【０２６６】
また、日本語以外の言語（例えば、中国語及び韓国語など）に対しても本実施の形態の処理を適用することが可能である。
【０２６７】
なお、上で述べた暗号化装置１および復号化装置２は、コンピュータ装置であって、図３１に示すように、メモリ２５０１とＣＰＵ２５０３とＨＤＤ２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０２６８】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０２６９】
本実施の形態の第１の態様に係る暗号文生成装置は、（Ａ）平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、文字列の情報量が閾値を超える度に文字列を含むブロックを生成するブロック化部（例えば第１ブロック化部１０３）と、（Ｂ）ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する暗号化部（例えば暗号化部１０５）とを有する。
【０２７０】
ブロックに含まれる文字列の情報量が閾値より大きいことが保証されるので、例えば任意の長さの不均一フォーマット等の平文についても、安全にフォーマット保存暗号化することができるようになる。
【０２７１】
また、ブロック化部は、（ａ１）最後のブロックに含まれる文字列の情報量が閾値より小さい場合、最後のブロックに含まれる文字列を、最後のブロックの直前のブロックと連結してもよい。
【０２７２】
最後のブロックについても、情報量が閾値より大きいことが保証されるようになる。
【０２７３】
また、暗号化部は、（ｂ１）ブロック化部により生成された各ブロックの暗号文を、当該ブロックの直前のブロックまたは初期ベクトルを用いて生成してもよい。
【０２７４】
直前のブロックの暗号文または初期ベクトルを利用することで、平文の内容が特定される可能性をより低くすることができるようになる。
【０２７５】
また、暗号化部は、（ｂ２）ブロック化部により生成された各ブロックの暗号文を、当該ブロックの順番を表すカウンタ値をナンスに加算した値に対するフォーマット保存暗号化により生成された暗号文を用いて生成してもよい。
【０２７６】
ナンス及びカウンタの値を利用することで、平文の内容が特定される可能性をより低くすることができるようになる。
【０２７７】
また、本暗号文生成装置は、（Ｃ）ブロック化部により生成された各ブロックについて、当該ブロックの直前のブロックまたは初期ベクトルのフォーマットを、当該ブロックのフォーマットに変換する変換部（例えば第１フォーマット変換部１０７）をさらに有してもよい。
【０２７８】
フォーマットを同じにすることで種々の計算（例えば、ブロック内の対応する値同士の加算等）を実行できるようになる。
【０２７９】
また、（Ｄ）ブロック化部により生成された各ブロックについて、当該ブロックの順番を表すカウンタ値をナンスに加算した値または当該値に対するフォーマット保存暗号化により生成された暗号文のフォーマットを、当該ブロックのフォーマットに変換する変換部（例えば第１フォーマット変換部１０７）をさらに有してもよい。
【０２８０】
フォーマットを同じにすることで種々の計算（例えば、対応するブロック同士の加算等）を実行できるようになる。
【０２８１】
また、本暗号文生成装置は、（Ｅ）暗号化部により生成された各暗号文に含まれる文字の順序を変更する変更部（例えば第１攪拌部１０９）をさらに有してもよい。
【０２８２】
不均一フォーマットの場合、たとえ暗号化されていたとしても暗号文から平文の内容を特定されてしまうことがあるが、上記処理を行えば、安全性をより高くすることができるようになる。
【０２８３】
また、変更部は、（ｅ１）暗号化部により生成された各暗号文に含まれる文字のうち最後の文字以外の文字の順序を変更してもよい。
【０２８４】
複数のブロックを並列で処理することが可能であるので、順序の変更処理に要する時間を短縮できるようになる。また、各ブロックの文字数の情報を出力する処理を実行しなくてもよい。
【０２８５】
また、変更部は、（ｅ２）暗号化部により生成された各暗号文に含まれる文字の順序を変更し、暗号化部により生成された各暗号文の文字数の情報を出力してもよい。
【０２８６】
複数のブロックを並列で処理することが可能であるので、順序の変更処理に要する時間を短縮できるようになる。また、各ブロックの文字数の情報を出力する処理を実行することになるが、最後の文字をも含めて順序を変更するため、安全性をより高くできるようになる。
【０２８７】
また、変更部は、（ｅ３）暗号化部により生成された各暗号文が連結された暗号文に含まれる文字の順序を変更してもよい。
【０２８８】
連結されたデータ全体に対して処理を実行できるので、安全性をより高くすることができるようになる。
【０２８９】
本実施の形態の第２の態様に係る暗号文生成方法は、（Ｆ）平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、文字列の情報量が閾値を超える度に文字列を含むブロックを生成し、（Ｇ）ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する処理を含む。
【０２９０】
本実施の形態の第３の態様に係る復号文生成装置は、（Ｈ）暗号文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、文字列の情報量が閾値を超える度に文字列を含むブロックを生成するブロック化部（例えば第２ブロック化部２０３）と、（Ｉ）ブロック化部により生成された各ブロックから、フォーマット保存復号化により復号文を生成する復号化部（例えば復号化部２０５）とを有する。
【０２９１】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０２９２】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２９３】
（付記１）
平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成するブロック化部と、
前記ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する暗号化部と、
を有する暗号文生成装置。
【０２９４】
（付記２）
前記ブロック化部は、
最後のブロックに含まれる文字列の情報量が前記閾値より小さい場合、前記最後のブロックに含まれる文字列を、前記最後のブロックの直前のブロックと連結する、
付記１記載の暗号文生成装置。
【０２９５】
（付記３）
前記暗号化部は、
前記ブロック化部により生成された各ブロックの暗号文を、当該ブロックの直前のブロックまたは初期ベクトルを用いて生成する、
付記１又は２記載の暗号文生成装置。
【０２９６】
（付記４）
前記暗号化部は、
前記ブロック化部により生成された各ブロックの暗号文を、当該ブロックの順番を表すカウンタ値をナンスに加算した値に対する前記フォーマット保存暗号化により生成された暗号文を用いて生成する、
付記１又は２記載の暗号文生成装置。
【０２９７】
（付記５）
前記ブロック化部により生成された各ブロックについて、当該ブロックの直前のブロックまたは初期ベクトルのフォーマットを、当該ブロックのフォーマットに変換する変換部
をさらに有する付記３記載の暗号文生成装置。
【０２９８】
（付記６）
前記ブロック化部により生成された各ブロックについて、当該ブロックの順番を表すカウンタ値を前記ナンスに加算した値または当該値に対する前記フォーマット保存暗号化により生成された暗号文のフォーマットを、当該ブロックのフォーマットに変換する変換部
をさらに有する付記４記載の暗号文生成装置。
【０２９９】
（付記７）
前記暗号化部により生成された各暗号文に含まれる文字の順序を変更する変更部
をさらに有する付記１乃至６のいずれか１つ記載の暗号文生成装置。
【０３００】
（付記８）
前記変更部は、
前記暗号化部により生成された各暗号文に含まれる文字のうち最後の文字以外の文字の順序を変更する、
付記７記載の暗号文生成装置。
【０３０１】
（付記９）
前記変更部は、
前記暗号化部により生成された各暗号文に含まれる文字の順序を変更し、前記暗号化部により生成された各暗号文の文字数の情報を出力する、
付記７記載の暗号文生成装置。
【０３０２】
（付記１０）
前記変更部は、
前記暗号化部により生成された各暗号文が連結された暗号文に含まれる文字の順序を変更する、
付記７記載の暗号文生成装置。
【０３０３】
（付記１１）
コンピュータが、
平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成し、
前記ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する、
処理を実行する暗号文生成方法。
【０３０４】
（付記１２）
コンピュータに、
平文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成し、
前記ブロック化部により生成された各ブロックから、フォーマット保存暗号化により暗号文を生成する、
処理を実行させる暗号文生成プログラム。
【０３０５】
（付記１３）
暗号文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成するブロック化部と、
前記ブロック化部により生成された各ブロックから、フォーマット保存復号化により復号文を生成する復号化部と、
を有する復号文生成装置。
【０３０６】
（付記１４）
コンピュータが、
暗号文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成し、
前記ブロック化部により生成された各ブロックから、フォーマット保存復号化により復号文を生成する、
処理を実行する復号文生成方法。
【０３０７】
（付記１５）
コンピュータに、
暗号文に含まれる文字の種別の情報量を文字の出現順に加算して文字列の情報量を求め、前記文字列の情報量が閾値を超える度に前記文字列を含むブロックを生成し、
前記ブロック化部により生成された各ブロックから、フォーマット保存復号化により復号文を生成する、
処理を実行させる復号文生成プログラム。
【符号の説明】
【０３０８】
１  暗号化装置    １０１  第１管理部
１０３  第１ブロック化部    １０５  暗号化部
１０７  第１フォーマット変換部    １０９  第１攪拌部
１１１  第１入力データ格納部    １１３  第１ブロック候補格納部
１１５  第１ブロック格納部    １１７  暗号データ格納部
１１９  第１出力データ格納部
２  復号化装置    ２０１  第２管理部
２０３  第２ブロック化部    ２０５  復号化部
２０７  第２フォーマット変換部    ２０９  第２攪拌部
２１１  第２入力データ格納部    ２１３  第２ブロック候補格納部
２１５  第２ブロック格納部    ２１７  復号データ格納部
２１９  第２出力データ格納部
【図１】
2018117304.tif 000005
【図２】
2018117304.tif 000006
【図３】
2018117304.tif 000007
【図４】
2018117304.tif 000008
【図５】
2018117304.tif 000009
【図６】
2018117304.tif 000010
【図７】
2018117304.tif 000011
【図８】
2018117304.tif 000012
【図９】
2018117304.tif 000013
【図１０】
2018117304.tif 000014
【図１１】
2018117304.tif 000015
【図１２】
2018117304.tif 000016
【図１３】
2018117304.tif 000017
【図１４】
2018117304.tif 000018
【図１５】
2018117304.tif 000019
【図１６】
2018117304.tif 000020
【図１７】
2018117304.tif 000021
【図１８】
2018117304.tif 000022
【図１９】
2018117304.tif 000023
【図２０】
2018117304.tif 000024
【図２１】
2018117304.tif 000025
【図２２】
2018117304.tif 000026
【図２３】
2018117304.tif 000027
【図２４】
2018117304.tif 000028
【図２５】
2018117304.tif 000029
【図２６】
2018117304.tif 000030
【図２７】
2018117304.tif 000031
【図２８】
2018117304.tif 000032
【図２９】
2018117304.tif 000033
【図３０】
2018117304.tif 000034
【図３１】
2018117304.tif 000035