(57)【要約】【課題】  文字データを暗号化しても、文字データであることを前提とした処理が正常に行うことができる暗号化システムを提供することを目的とする。【解決手段】  文字列を読み出して該文字列の文字セットを特定する手段と、特定した文字セットの中で文字種を分類する手段と、分類した文字種毎に文字列を構成する文字コードを０から連続するインデックスコードに変換する手段と、分類した文字種毎に変換したインデックスコードを暗号化する手段と、分類した文字種毎に暗号化したインデックスコードを文字コードに変換して変換した文字列を記憶する手段とを有する。【選択図】  図１
2005141282.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
文字列を読出して該文字列の文字セットを特定する手段、
特定した文字セットの中で文字種を分類する手段、
分類した文字種毎に、文字列を構成する文字コードを０から連続するインデックスコードに変換する手段、
分類した文字種毎に、変換したインデックスコードを暗号化する手段、
分類した文字種毎に、暗号化したインデックスコードを文字コードに変換して、変換した文字列を記憶する手段、
として機能させることを特徴とする文字列暗号化プログラム。
【請求項２】
コンピュータを、
文字列を読出して該文字列の文字セットを特定する手段、
特定した文字セットの中で文字種を分類する手段、
分類した文字種毎に、文字列を構成する文字コードが０から連続するインデックスコードに変換されて変換されたインデックスコードが暗号化されて暗号化されたインデックスコードが文字コードに変換された文字コードを、０から連続するインデックスコードに逆変換する手段、
分類した文字種毎に、逆変換したインデックスコードを復号化する手段、
分類した文字種毎に、復号化したインデックスコードを文字コードに逆変換して、逆変換した文字列を記憶する手段、
として機能させることを特徴とする文字列復号化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
文字データの暗号化の技術に関する。
【背景技術】
【０００２】
一般にデータを暗号化すると、文字データはバイナリデータとなってしまう。このため、通常暗号化されていない文字データを扱う処理において、単に文字データを暗号化してバイナリデータに置き換えてしまうと、文字データであることを前提とした処理が正常に動作しなくなってしまうことになる。例えば、コマンドの引数、ファイル名、メール本文、ＨＴＭＬ文書、ＸＭＬ文書等が暗号化されると、文字データであることを前提とした処理が正常に動作しなくなってしまう。
【０００３】
そのため電子メールでは、暗号化した文字データを添付ファイルとし、文字データであることを前提とした処理を行わせず、暗号化していない文字データをメール本文に書いて、文字データを前提とした処理を行わせている。暗号化したデータであっても、文字データであることを前提とした処理を正常に行わせるには、暗号化したデータを更に文字データに変換する方法が考えられるが、電子メールの添付ファイルで使われるＢＡＳＥ６４等のアルゴリズムを使うと、暗号化前のデータ量に対しデータ量が増大し、規定の範囲（メールサイズの最大値、コマンドバッファ長の最大値、ＤＢのフィールド最大長）に収まらなくなってしまう場合がある。
【０００４】
即ち、暗号化したデータであっても、文字データを前提とした処理を正常に行うためには、暗号化したデータが暗号化前のデータと同じ文字セット（文字種）に収め、データの長さも変わらないことが求められる。
【特許文献１】特開平１１−２０３２０７号公報
【特許文献２】特開平３−２３６０８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
以上の点に鑑み本発明は、文字データを暗号化しても、文字データであることを前提とした処理が正常に行うことができる暗号化システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本願発明は、文字セットを特定する手段と、特定した文字セットの中で文字種を分類する手段と、分類した文字種毎に文字コードを０から連続するインデックスコードに変換する手段と、分類した文字種毎に変換したインデックスコードを暗号化する手段と、分類した文字種毎に暗号化したインデックスコードを文字コードに変換する手段と、分類した文字種毎に文字コードが０から連続するインデックスコードに変換されて変換されたインデックスコードが暗号化されて暗号化されたインデックスコードが文字コードに変換された文字コードを０から連続するインデックスコードに逆変換する手段と、分類した文字種毎に逆変換したインデックスコードを復号化する手段と、分類した文字種毎に復号化したインデックスコードを文字コードに逆変換する手段を有する。
【発明の効果】
【０００７】
暗号化されたデータは、暗号化前と同じ文字種に変換され、データの長さも変化しないので、文字列であることを前提とした処理が正常に動作し、従来の処理に影響を与えることなく、文字データのデータ転送時の安全性を高めることができる。
【発明を実施するための最良の形態】
【０００８】
図１は本発明の実施例の構成で、暗号化システム１は、入力文字列記憶部２と文字セット特定部３と文字種分類部４とインデックスコード変換部５と暗号化部６と文字列変換部７と出力文字列記憶部８と変換テーブル９から構成される。
【０００９】
入力文字列記憶部２は、本発明により暗号化する文字列を記憶する処理部である。
【００１０】
文字セット特定部３は、入力文字列記憶部２から暗号化しようとする文字列を読み出して、文字セットを特定する処理を行う。文字セットとしては、ＡＳＣＩＩ、Ｓｈｉｆｔ−ＪＩＳ、ＵＮＩＣＯＤＥ、ＥＵＣなどが挙げられる。
【００１１】
文字種分類部４は、特定した文字セットの中で文字種を分類する。文字種とは、文字セットＳｈｉｆｔ−ＪＩＳを例に挙げれば、印刷可能なＡＳＣＩＩ、半角カナ、ＪＩＳ第一水準、ＪＩＳ第ニ水準、後述する暗号化の対象外（タブや改行などの制御コード、本来文字コードに含まれないコード、ＣＳＶ形式におけるカンマ等用途によっては暗号化の対象外になるもの）等が挙げられる。なお、この分類は、必ずしも固定的なものでなく暗号化対象の文字データの特性によって変わるものである。なお、例えばＳｈｉｆｔ−ＪＩＳでは１バイト系のコードと２バイト系のコードが混在しているが、別々の文字種として扱うので、本発明では１バイト系の文字コードと２バイト系の文字コードが混在していてもよい。
【００１２】
インデックスコード変換部５は、分類した文字種毎に、該当する文字コードを０から連続したインデックスコードに変換する。通常、文字コードは連続しているとは限らず、例えばＳｈｉｆｔ−ＪＩＳコードは飛び飛びになっているので、Ｓｈｉｆｔ−ＪＩＳコードを直接暗号化して再びＳｈｉｆｔ−ＪＩＳコードの範囲に収めるのは、通常使用されている暗号アルゴリズムでは不可能である。文字種毎に、連続していない飛び飛びの文字コードを０から連続したインデックスコードに変換しておくのは、後述する暗号化処理が容易になるためであり、その理由を以下説明する。
【００１３】
実用化されている暗号化アルゴリズムは、暗号化の出力が０からある一定の上限値までの連続する整数となっている。暗号アルゴリズムの大雑把な分類とその代表的な暗号アルゴリズムは、
（ａ）ＤＥＳ：ブロック暗号。ブロック単位に暗号化（ＤＥＳの場合８バイト）。
（ｂ）ＲＣ４：ストリーム暗号。任意の長さのデータを暗号化。
（ｃ）ＲＳＡ：公開鍵暗号：任意のデータを暗号化するような一般的用途では使用せず、認証や暗号鍵の交換等、特殊な用途に用いる。
例えばＤＥＳは８バイト単位のブロック暗号化アルゴリズムなので、暗号化した出力データは、０（０ｘ００００００００００００００００）〜２の６４乗−１（０ｘｆｆｆｆｆｆｆｆｆｆｆｆｆｆｆｆ）の範囲となる。ＲＣ４は、ストリーム暗号なので厳密には上限値は存在しないが、実装上は１バイト単位に処理しているので、出力データは０（０ｘ００）〜２５５（０ｘｆｆ）となる。ＲＳＡは２つの大きな素数Ｐ、Ｑの積で割った余りの範囲が出力となるので、０〜Ｐ×Ｑ−１となる。つまり、どのような暗号アルゴリズムであっても、出力は０から一定値までの連続した整数となる。インデックスコードを０から連続した整数に収めるということは、これら暗号化結果と足し算等の演算を施すと、数学で言う加法群を構成することが利点となる。なぜなら群は、常に逆演算（つまり復号）が常に可能だからである。インデックスコードが０から始まっていなかったり、途中でインデックスコードが跳んでいたりすると、この加法群を構成することができない。
【００１４】
以下、文字セットはＡＳＣＩＩ、文字種は英大字と数字を例に説明する。まず、インデックステーブルを使って変換する方法で説明する。図２は数字を変換するインデックステーブルであり、例えば数字２は文字コード０ｘ３２であり、これをインデックスコード０ｘ０３に変換する。図３は英大文字を変換するインデックステーブルであり、例えば英大文字Ｃは文字コード０ｘ４３であり、これをインデックスコード０ｘ０ｄに変換する。次に線形演算によって変換する方法で説明する。数字の変換式を「文字コード−０ｘ３０＝インデックスコード」とすると、数字２は文字コード０ｘ３２であり、０ｘ３２−０ｘ３０＝０ｘ０２たるインデックスコードに変換する。英字の変換式を「文字コード−０ｘ４１＝インデックスコード」とすると、英字Ｙは文字コード０ｘ５９であり、０ｘ５９−０ｘ４１＝０ｘ１８たるインデックスコードに変換する。なお、復号化処理にあっては、上記と逆の動きをする。
【００１５】
暗号化部６は、文字種毎にインデックスコードを暗号化する。例えば、文字種が数字ならば、インデックスコードに鍵となるコードを加え１０で割ったときの余った値を求めて暗号化する。他には、インデックスコードに鍵となるコードを加えテーブル（図示せず）を用いて暗号化する方法がある。もちろん、暗号化のやり方はこれらに捕われず、任意のアルゴリズムが使える。さらに、暗号化した結果がインデックスコードの範囲内（０からＮ）に収まるように、暗号化の手順にＮ＋１で割った余りを求める手順を入れておく。または、テーブル（図示せず）を使ってインデックスコードの範囲内に収める手順を入れておく。なお、復号化処理にあっては、上記と逆の動きをする。
【００１６】
文字列変換部７は、文字種毎に暗号化されたインデックスコードを文字コードに変換する。変換方法は、インデックスコード変換部５における変換とは逆の変換になる。かかる変換によって最終的に任意の文字列が、文字種毎に文字列全体の長さが変わらずに暗号化されることになる。例えば、文字種数字について文字コード変換テーブル（図４）を使うと、インデックスコード０ｘ０７は文字コード０ｘ３５として文字‘５’に変換される。線形演算を使うと、変換式「インデックスコード＋０ｘ３０＝文字コード」に従って、０ｘ０７＋０ｘ３０＝０ｘ３７たる文字‘７’に変換される。文字種英大文字について文字コード変換テーブル（図５）を使うと、インデックスコード０ｘ０４は文字コード０ｘ４ｂとして文字‘Ｋ’に変換される。線形演算を使うと、変換式「インデックスコード＋０ｘ４１＝文字コード」に従って、０ｘ０４＋０ｘ４１＝０ｘ４５たる文字‘Ｅ’に変換される。なお、復号化処理にあっては、上記と逆の動きをする。
【００１７】
文字列出力記憶部８は、文字列変換部７で変換された文字列を記憶する処理部である。
【００１８】
変換テーブル９は、インデックスコード変換部５や文字列変換部７で使われる変換テーブルを格納した記憶部であり、図２、図３、図４、図５が挙げられる。
【００１９】
次にフローチャート（図６）に従って暗号化処理について、文字セットＡＳＣＩＩの英大文字「ＤＯＧ」を例に説明する。まず、文字セット特定部３は、暗号化する文字列を入力文字列記憶部２から読出し、該文字列の文字セット（ここでは‘ＡＳＣＩＩ’）を特定する（Ｓ１）。次に文字種分類部４は、特定した文字セットの中で文字種（‘英大文字’）を分類する（Ｓ２）。次にインデックスコード変換部５は、分類した文字種毎に該当する文字コード（ＤＯＧ：‘０ｘ４４４ｆ４７’）を英大文字のインデックス変換テーブル（図３）を使って、Ｄ：０ｘ４４を０ｘ１８に、Ｏ：０ｘ４ｆを０ｘ０９に、Ｇ：０ｘ４７を０ｘ００とそれぞれ変換し、その結果インデックスコード（‘０ｘ１８０９００’）に変換する（Ｓ３）。次に暗号化部６は、文字種毎に変換されたインデックスコードを暗号化する（ここでは‘０ｘ０５０ｃ０ｄ’に暗号化されたとする）（Ｓ４）。次に、文字列変換部７は、文字種毎に暗号化されたインデックスコードを英大文字の文字コード変換テーブル（図５）を使って、０ｘ０５を０ｘ５ａ：Ｚに、０ｘ０ｃを０ｘ４６：Ｆに、０ｘ０ｄを０ｘ４３：Ｃにそれぞれ変換し、その結果文字コード（‘０ｘ５ａ４６４３’：ＺＦＣ）に変換し、出力文字列記憶部８に記憶する（Ｓ５）。そうすると、最終的に得られた「ＺＦＣ」はバラバラで意味のない文字列に、文字列の長さも変わらずに変換され、この文字列を入力元として、文字列であることを前提とした処理が正常に動作できることになる。
【００２０】
暗号化された文字コードの復号化処理は、上記フローと反対の処理を行うことになる（図７）。まず、文字セット特定部３は、復号化する文字列を入力文字列記憶部２から読出し、該文字列の文字セットを特定する（Ｓ６）。次に文字種分類部４は、特定した文字セットの中で文字種を分類する（Ｓ７）。次に文字列変換部７は、文字種毎にＳ５で変換された文字コードをインデックスコードに逆変換する（Ｓ８）。次に暗号化部６は、文字種毎に逆変換されたインデックスコードを復号化する（Ｓ９）。次にインデックスコード変換部５は、文字種毎に復号化したインデックスコードを文字コードに逆変換し、出力文字列記憶部８に記憶する（Ｓ１０）。こうして元の意味のある文字列に戻されたことになる。
【００２１】
以上、１バイト系の文字を例に説明したが、２バイト系の文字であれば２バイト単位でインデックス化と暗号化を行う。例えば、文字セット‘Ｓｈｉｆｔ−ＪＩＳコード’、文字種‘ひらがな’の文字列「つくえ」を例に挙げて説明する。文字列「つくえ」の文字コード‘８２Ｃ２  ８２ＡＤ  ８２Ａ６’が、図８の変換テーブルを使ってインデックスコード‘００２Ｆ  ０００Ｅ  ０００７’に変換される。そしてここでは‘００３Ｆ  ００２２  ００１Ａ’に暗号化されたとする。次に、図９の文字コード変換テーブルを使って‘８２ＤＥ  ８２Ｃ１  ８２Ｂ９’に文字変換され、最終的に得られた文字列は意味のない「むっせ」と変換され、この文字列を入力元として、文字列であることを前提とした処理が正常に動作できることになる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施例の構成
【図２】数字（ＡＳＣＩＩ）のインデックス変換テーブル
【図３】英大文字（ＡＳＣＩＩ）のインデックス変換テーブル
【図４】数字（ＡＳＣＩＩ）の文字コード変換テーブル
【図５】英大文字（ＡＳＣＩＩ）の文字コード変換テーブル
【図６】暗号化処理のフローチャート
【図７】復号化処理のフローチャート
【図８】ひらがな（シフトＪＩＳ）のインデックス変換テーブル
【図９】ひらがな（シフトＪＩＳ）の文字コード変換テーブル
【符号の説明】
【００２３】
１  本願発明の暗号化システム
２  入力文字列記憶部
３  文字セット特定部
４  文字種分類部
５  インデックスコード変換部
６  暗号化部
７  文字列変換部
８  出力文字列記憶部
９  変換テーブル
【図１】
2005141282.tif 000003
【図２】
2005141282.tif 000004
【図３】
2005141282.tif 000005
【図４】
2005141282.tif 000006
【図５】
2005141282.tif 000007
【図６】
2005141282.tif 000008
【図７】
2005141282.tif 000009
【図８】
2005141282.tif 000010
【図９】
2005141282.tif 000011