(57)【特許請求の範囲】
【請求項１】
連続するデジタルデータを所定の読込方向で順次読み込み、読み込んだデジタルデータが所定のビットパターンに一致するか否かを判定する判定処理手段と、
前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータについて、所定の演算値との排他的論理和を演算する演算処理手段と、
前記演算処理手段により演算された連続するデジタルデータ（以下、「処理データ」という）を、読込方向で順次読み込み、読み込んだ処理データが所定のビットパターンに一致するか否かを判定する処理データ判定処理手段と、
前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離の処理データに前記所定の演算値を所定のビット数ずつ埋め込む埋め込み処理手段と、
を備えたことを特徴とするデータ防護処理装置。
【請求項２】
さらに、前記演算値に所定の変更値を加算あるいは乗算し、または前記演算値を所定の変更値で除算する第１の変更処理手段と、
前記第１の変更処理手段により所定の変更値を加算あるいは乗算された演算値、または前記第１の変更処理手段により所定の変更値で除算された演算値にもとづいて、新たな演算値を算出する第２の変更処理手段と、
を備え、
前記演算処理手段は、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータについて、前記第２の変更処理手段により算出された新たな演算値との排他的論理和を演算することを特徴とする前記請求項１に記載のデータ防護処理装置。
【請求項３】
連続するデジタルデータを所定の読込方向で順次読み込み、読み込んだデジタルデータが所定のビットパターンに一致するか否かを判定する判定処理手段と、
前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータを、所定の回転値だけ回転する回転処理手段と、
前記回転処理手段により回転された連続するデジタルデータ（以下、「処理データ」という）を、読込方向で順次読み込み、読み込んだ処理データが所定のビットパターンに一致するか否かを判定する処理データ判定処理手段と、
前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離の処理データに前記所定の回転値を所定のビット数ずつ埋め込む埋め込み処理手段と、
を備えたことを特徴とするデータ防護処理装置。
【請求項４】
さらに、前記回転値に所定の変更値を加算あるいは乗算し、または前記回転値を所定の変更値で除算する第１の変更処理手段と、
前記第１の変更処理手段により所定の変更値を加算あるいは乗算された回転値、または前記第１の変更処理手段により所定の変更値で除算された回転値にもとづいて、新たな回転値を算出する第２の変更処理手段と、を備え、
前記回転処理手段は、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータを、前記第２の変更処理手段により算出された新たな回転値だけ回転することを特徴とする前記請求項３に記載のデータ防護処理装置。
【請求項５】
連続するデジタルデータを所定の読込方向で順次読み込み、読み込んだデジタルデータが所定のビットパターンに一致するか否かを判定する判定処理手段と、
前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在するデジタルデータを、当該デジタルデータから所定の数値により示される距離だけ前記所定の読込方向における末尾側に存在するデジタルデータと、当該数値により示される長さ分だけ入れ替える入れ替え処理手段と、
前記入れ替え処理手段により入れ替えされた連続するデジタルデータ（以下、「処理データ」という）を、読込方向で順次読み込み、読み込んだ処理データが所定のビットパターンに一致するか否かを判定する処理データ判定処理手段と、
前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離の処理データに前記所定の数値を所定のビット数ずつ埋め込む埋め込み処理手段と、
を備えたことを特徴とするデータ防護処理装置。
【請求項６】
さらに、前記数値に所定の変更値を加算あるいは乗算し、または前記数値を所定の変更値で除算する第１の変更処理手段と、
前記第１の変更処理手段により所定の変更値を加算あるいは乗算された数値、または前記第１の変更処理手段により所定の変更値で除算された数値にもとづいて、新たな数値を算出する第２の変更処理手段と、を備え、
前記演算処理手段は、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在するデジタルデータを、前記第２の変更処理手段により算出された新たな数値により示される距離だけ前記所定の読込方向における末尾側に存在するデジタルデータと、当該数値により示される長さ分だけ入れ替えることを特徴とする前記請求項５に記載のデータ防護処理装置。
【請求項７】
前記埋め込み手段は、
前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離だけ前記所定の読込方向における末尾側に存在する処理データの所定のビットを、所定のデジタルデータの所定のビットと入れ替えることを特徴とする前記請求項１〜請求項６のいずれか一つに記載のデータ防護処理装置。
【請求項８】
前記埋め込み手段は、
前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離だけ前記所定の読込方向における末尾側に存在する処理データの所定のビットと、所定のデジタルデータの所定のビットとの排他的論理和とを演算することを特徴とする前記請求項１〜請求項６のいずれか一つに記載のデータ防護処理装置。
【請求項９】
前記埋め込み手段は、
前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離だけ前記所定の読込方向における末尾側に存在する処理データに、所定のデジタルデータの所定のビットを挿入のうえ所定の回転値だけ回転することを特徴とする前記請求項１〜請求項６のいずれか一つに記載のデータ防護処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、無権限者などによる盗聴（盗み見）を防止するために、データの符号化および復号化をおこなうデータ防護処理装置に関する。
【０００２】
【従来の技術】
現在、送信者と受信者との間の通信を安全におこなうためのデータの符号化／復号化技術としては、（ａ）送信者・受信者の双方が同一の鍵を保持する共通秘密鍵方式と、（ｂ）対になる二つの鍵を用意し、一つを秘密鍵として送信者が、もう一つを公開鍵として受信者が、それぞれ保持する公開鍵方式（代表的なものにＲＳＡがある）とが広く知られている。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記従来技術による符号化／復号化は、処理が複雑で装置に負荷をかけてしまう、処理に時間を要する、符号化により全体のデータサイズが大きくなってしまうなどの問題点があった。また、上記従来技術による符号化／復号化をおこなうには、事前に符号化側から復号化側へ必要な鍵を渡しておかなければならないが、この際の安全性を確保するために厳密で複雑な手順を必要とするという問題点があった。
【０００４】
この発明は、上記に鑑みてなされたものであって、データの符号化／復号化を簡易かつ高速な処理によっておこなうとともに、符号化されたデータの復号化のために必要な情報を安全かつ容易に受け渡しすることが可能なデータ防護処理装置を提供することを目的とする。
【０００５】
【課題を解決するための手段】
上記の目的を達成するために、請求項１に記載の発明にかかるデータ防護処理装置は、連続するデジタルデータを所定の読込方向で順次読み込み、読み込んだデジタルデータが所定のビットパターンに一致するか否かを判定する判定処理手段と、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータについて、所定の演算値との排他的論理和を演算する演算処理手段と、前記演算処理手段により演算された連続するデジタルデータ（以下、「処理データ」という）を、読込方向で順次読み込み、読み込んだ処理データが所定のビットパターンに一致するか否かを判定する処理データ判定処理手段と、前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離の処理データに前記所定の演算値を所定のビット数ずつ埋め込む埋め込み処理手段と、を備えたことを特徴とする。
【０００６】
また、請求項２に記載の発明にかかるデータ防護処理装置は、前記請求項１に記載の発明において、さらに、前記演算値に所定の変更値を加算あるいは乗算し、または前記演算値を所定の変更値で除算する第１の変更処理手段と、前記第１の変更処理手段により所定の変更値を加算あるいは乗算された演算値、または前記第１の変更処理手段により所定の変更値で除算された演算値にもとづいて、新たな演算値を算出する第２の変更処理手段と、を備え、前記演算処理手段は、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータについて、前記第２の変更処理手段により算出された新たな演算値との排他的論理和を演算することを特徴とする。
【０００７】
また、請求項３に記載の発明にかかるデータ防護処理装置は、連続するデジタルデータを所定の読込方向で順次読み込み、読み込んだデジタルデータが所定のビットパターンに一致するか否かを判定する判定処理手段と、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータを、所定の回転値だけ回転する回転処理手段と、前記回転処理手段により回転された連続するデジタルデータ（以下、「処理データ」という）を、読込方向で順次読み込み、読み込んだ処理データが所定のビットパターンに一致するか否かを判定する処理データ判定処理手段と、前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離の処理データに前記所定の回転値を所定のビット数ずつ埋め込む埋め込み処理手段と、を備えたことを特徴とする。
【０００８】
また、請求項４に記載の発明にかかるデータ防護処理装置は、前記請求項３に記載の発明において、さらに、前記回転値に所定の変更値を加算あるいは乗算し、または前記回転値を所定の変更値で除算する第１の変更処理手段と、前記第１の変更処理手段により所定の変更値を加算あるいは乗算された回転値、または前記第１の変更処理手段により所定の変更値で除算された回転値にもとづいて、新たな回転値を算出する第２の変更処理手段と、を備え、前記回転処理手段は、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在する所定の範囲のデジタルデータを、前記第２の変更処理手段により算出された新たな回転値だけ回転することを特徴とする。
【０００９】
また、請求項５に記載の発明にかかるデータ防護処理装置は、連続するデジタルデータを所定の読込方向で順次読み込み、読み込んだデジタルデータが所定のビットパターンに一致するか否かを判定する判定処理手段と、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在するデジタルデータを、当該デジタルデータから所定の数値により示される距離だけ前記所定の読込方向における末尾側に存在するデジタルデータと、当該数値により示される長さ分だけ入れ替える入れ替え処理手段と、前記入れ替え処理手段により入れ替えされた連続するデジタルデータ（以下、「処理データ」という）を、読込方向で順次読み込み、読み込んだ処理データが所定のビットパターンに一致するか否かを判定する処理データ判定処理手段と、前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離の処理データに前記所定の数値を所定のビット数ずつ埋め込む埋め込み処理手段と、を備えたことを特徴とする。
【００１０】
また、請求項６に記載の発明にかかるデータ防護処理装置は、前記請求項５に記載の発明において、さらに、前記数値に所定の変更値を加算あるいは乗算し、または前記数値を所定の変更値で除算する第１の変更処理手段と、前記第１の変更処理手段により所定の変更値を加算あるいは乗算された数値、または前記第１の変更処理手段により所定の変更値で除算された数値にもとづいて、新たな数値を算出する第２の変更処理手段と、を備え、前記演算処理手段は、前記判定処理手段により前記所定のビットパターンに一致すると判定されたデジタルデータから所定の距離だけ前記所定の読込方向における末尾側に存在するデジタルデータを、前記第２の変更処理手段により算出された新たな数値により示される距離だけ前記所定の読込方向における末尾側に存在するデジタルデータと、当該数値により示される長さ分だけ入れ替えることを特徴とする。
【００１１】
また、請求項７に記載の発明にかかるデータ防護処理装置は、前記請求項１〜請求項６のいずれか一つに記載の発明において、前記埋め込み手段は、前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離だけ前記所定の読込方向における末尾側に存在する処理データの所定のビットを、所定のデジタルデータの所定のビットと入れ替えることを特徴とする。
【００１２】
また、請求項８に記載の発明にかかるデータ防護処理装置は、前記請求項１〜請求項６のいずれか一つに記載の発明において、前記埋め込み手段は、前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離だけ前記所定の読込方向における末尾側に存在する処理データの所定のビットと、所定のデジタルデータの所定のビットとの排他的論理和とを演算することを特徴とする。
【００１３】
また、請求項９に記載の発明にかかるデータ防護処理装置は、前記請求項１〜請求項６のいずれか一つに記載の発明において、前記埋め込み手段は、前記処理データ判定処理手段により前記所定のビットパターンに一致すると判定された処理データから所定の距離だけ前記所定の読込方向における末尾側に存在する処理データに、所定のデジタルデータの所定のビットを挿入のうえ所定の回転値だけ回転することを特徴とする。
【００１４】
【発明の実施の形態】
以下、この発明にかかるデータ防護処理装置およびデータ防護処理方法の好適な実施の形態について添付図面を参照し、詳細に説明する。なお、下記の実施の形態によってこの発明が限定されるものではない。
【００１５】
個々の実施の形態の説明に入る前に、まず本発明の概要を簡単に説明する。本発明は、要約すれば、
（１）符号化／復号化対象データ中から順に読み出した１バイト分のビットデータが、所定のビットパターンと一致する場合に、
（２）当該１バイト分のビットデータから所定の距離だけ後ろの１バイト分のビットデータを開始位置、当該開始位置からさらに所定の距離だけ後ろの１バイト分のビットデータを終了位置とする範囲内のビットデータに対して、
（３）所定の値をパラメータとする所定の処理を施すことで符号化および復号化をおこなうこと、
を特徴としている。
【００１６】
そして、以下では上記所定のビットパターンに一致するビットデータから上記開始位置のビットデータまでの距離（具体的にはバイト数）を「ワープ値」と呼ぶ。また、上記開始位置のビットデータから上記終了位置のビットデータまでの距離（これもバイト数）を「処理範囲」と呼ぶ。
【００１７】
さらに、上記処理範囲内のビットデータについて施される種々の処理のパラメータを、「防護キー値」と呼ぶ。これらの処理の一例と、各処理における防護キー値の意味合いを下記に示す。
【００１８】
（ａ）四則演算、たとえば加算の場合、処理範囲内のビットデータに１バイト単位で加算する値である。
（ｂ）論理演算、たとえば排他的論理和（ＸＯＲ）の場合、処理範囲内のビットデータと１バイト単位でＸＯＲする値である。
（ｃ）回転（ＲＯＴＡＴＥ）の場合、処理範囲内のビットデータを回転させるビット数である。
（ｄ）入れ替え（ＳＷＡＰ）の場合、入れ替えるビットデータのサイズ（バイト数）および当該ビットデータから入れ替え先のビットデータまでの距離（バイト数）である。
【００１９】
たとえば、所定のビットパターンを５Ｄ、ワープ値を１バイト、処理範囲を４バイト、防護キー値を１Ｅとし（いずれも１６進表記）、処理を加算とすると、“３Ｆ  ５Ｄ  ９Ｂ  １１  ４０  Ａ９  ＤＤ”を意味するビットデータは、後述のように“３Ｆ  ５Ｄ  Ｂ９  ２Ｆ  ５Ｅ  Ｃ７  ＤＤ”を意味するビットデータに符号化される。（１）所定のビットパターンと一致する５Ｄの１バイト後の９Ｂから、（２）４バイト分の９Ｂ、１１、４０、Ａ９の各数値に、（３）それぞれ１Ｅが加算されているのが分かる（たとえば９Ｂ＋１Ｅ＝Ｂ９）。
【００２０】
以下、上記（１）〜（３）の構成について、上記（ａ）〜（ｄ）の各処理の具体例を示しつつ実施の形態１により説明する。また、防護キー値は符号化／復号化の途中で変化させることができ、この構成について実施の形態２で説明する。
【００２１】
さらに、上記（１）〜（３）による符号化をおこなったデータの送信元は、受信先でその復号化が可能となるよう、符号化に使用した防護キー値などを何らかの形で受信先に通知しなければならない。そして、本発明ではこの防護キー値を、データと別に送信したりオフラインで受け渡ししたりといった迂遠な方法でなく、当該防護キー値により符号化したデータそのものに直に埋め込んで送信するようにしている。この構成について、実施の形態３で説明する。
【００２２】
（実施の形態１）
まず、実施の形態１にかかるデータ防護処理装置およびデータ防護処理方法について説明する。図１は、実施の形態１にかかるデータ防護処理装置の概略構成を示すブロック図である。
【００２３】
実施の形態１によるデータ防護処理装置は、上述のビットパターンなど符号化／復号化のための諸条件を保持する符号化／復号化条件記憶部１００、通信回線や通信機器へ送信しようとする送信データに対して、上記諸条件にもとづく符号化処理を施す符号化処理部１０１、逆に通信回線や通信機器から受信した受信データに対して、上記諸条件にもとづく復号化処理を施す復号化処理部１０２、から構成される。
【００２４】
まず、符号化／復号化条件記憶部１００は、符号化あるいは復号化の条件を規定する上述のビットパターン、ワープ値、処理範囲および防護キー値を記憶するものである。これらは図示しないキーボードなどにより外部から書き換え可能であり、符号化／復号化条件記憶部１００に書き込んである任意の符号化条件のもとで符号化したデータを、その符号化側（送信側）から復号化側（受信側）に上記条件とともに送信し、復号化側ではこれに対応する復号化条件をその符号化／復号化条件記憶部１００に書き込むことで、受信したデータの復号化をおこなう。
【００２５】
このように、特定の条件下で符号化されたデータは当該条件を知らされた特定の通信相手にしか復号化できないので、データの機密性を高めることができる。なお、このとき上記条件そのものが盗聴（盗み見）されては意味がないので、双方で共通の変換テーブル（暗号表）を保持しておき、符号化側ではデータの符号化時に使用した条件をこのテーブルにより変換のうえ復号化側に送信し、復号化側では受信した条件に上記テーブルによる変換を施してからその符号化／復号化条件記憶部１００に書き込むようにしてもよい。
【００２６】
また、各操作者の意図に関係なく、たとえばネットワーク上の時刻サーバやＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｉｎｔｉｎｇ  Ｓｙｓｔｅｍ）衛星の原子時計に同期して、一斉に各装置内の条件を変更することもできる。
【００２７】
次に、符号化処理部１０１は第１送信バッファ１０１ａ、符号化位置判定部１０１ｂ、（狭義の）符号化処理部１０１ｃ、一時記憶領域１０１ｄおよび第２送信バッファ１０１ｅから構成される。
【００２８】
まず、第１送信バッファ１０１ａは外部から受け取ったデータ、特にシリアルビットデータを蓄積する記憶部である。あるいは、後述する符号化処理部１０１ｃによる符号化の対象となる送信データを蓄積する、といってもよい。また、この第１送信バッファ１０１ａおよび後述する第２送信バッファ１０１ｅは、デジタルデータのシリアル−パラレル変換を可能としたＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリとしての機能を果たす。
【００２９】
符号化位置判定部１０１ｂは、第１送信バッファ１０１ａに蓄積されたビットデータをその蓄積順に１バイト分ずつ読み出し、読み出したビットデータが上述のビットパターンと一致するかどうかを判定する。そして、両者が一致した場合に、その保持する位置カウンタにより次段の符号化処理部１０１ｃによる符号化対象となるビットデータを特定する。
【００３０】
符号化処理部１０１ｃは、第１送信バッファ１０１ａから読み出された１バイト分のビットデータが上述のビットパターンと一致した場合に、当該ビットデータからの相対位置で示される処理範囲内のビットデータに対して、防護キー値をパラメータとする（ａ）加算（ｂ）ＸＯＲ（ｃ）回転あるいは（ｄ）入れ替えのいずれかによる符号化処理をおこなう。また、一時記憶領域１０１ｄはこの符号化処理のために、符号化位置判定部１０１ｂおよび符号化処理部１０１ｃにより使用されるワークエリアである。
【００３１】
第２送信バッファ１０１ｅは、符号化処理部１０１ｃにおいて上記処理が施されたビットデータ、および上記処理が施されなかったビットデータ（スルーされたビットデータ）を蓄積する記憶部である。あるいは、符号化処理部１０１ｃによる符号化の後の送信データを蓄積するといってもよい。
【００３２】
次に、復号化処理部１０２は第１受信バッファ１０２ａ、復号化位置判定部１０２ｂ、（狭義の）復号化処理部１０２ｃ、一時記憶領域１０２ｄおよび第２受信バッファ１０２ｅから構成され、上述の符号化処理部１０１とちょうど逆の処理をおこなう。
【００３３】
まず、第１受信バッファ１０２ａは外部から受け取ったデータ、特にシリアルビットデータを蓄積する記憶部である。あるいは、後述する復号化処理部１０２ｃによる復号化の対象となる受信データを蓄積する、といってもよい。また、この第１受信バッファ１０２ａおよび後述する第２受信バッファ１０２ｅは、デジタルデータのシリアル−パラレル変換を可能としたＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリとしての機能を果たす。
【００３４】
復号化位置判定部１０２ｂは、第１受信バッファ１０２ａに蓄積されたビットデータをその蓄積順に１バイト分ずつ読み出し、読み出したビットデータが上述のビットパターンと一致するかどうかを判定する。そして、両者が一致した場合に、その保持する位置カウンタにより次段の復号化処理部１０２ｃによる復号化対象となるビットデータを特定する。
【００３５】
復号化処理部１０２ｃは、第１受信バッファ１０２ａから読み出された１バイト分のビットデータが上述のビットパターンと一致した場合に、当該ビットデータからの相対位置で示される処理範囲内のビットデータに対して、防護キー値をパラメータとする（ａ）減算（ｂ）ＸＯＲ（ｃ）回転あるいは（ｄ）入れ替えのいずれかによる復号化処理をおこなう。いずれの処理をおこなうかは、復号化対象のデータについて、その符号化時に符号化処理部１０１ｃにより施されたのが上述の（ａ）加算（ｂ）ＸＯＲ（ｃ）回転あるいは（ｄ）入れ替えのいずれであったかにより決定される。また、一時記憶領域１０２ｄはこの復号化処理のために、復号化位置判定部１０２ｂおよび復号化処理部１０２ｃにより使用されるワークエリアである。
【００３６】
第２受信バッファ１０２ｅは、復号化処理部１０２ｃにおいて上記処理が施されたビットデータ、および上記処理が施されなかったビットデータ（スルーされたビットデータ）を蓄積する記憶部である。あるいは、復号化処理部１０２ｃによる復号化の後の受信データを蓄積するといってもよい。
【００３７】
なお、上記の符号化位置判定部１０１ｂと復号化位置判定部１０２ｂとは機能的に同一となるので、実際には一つの判定部を符号化処理部１０１と復号化処理部１０２とで共用するようにしてもよい。また、符号化処理部１０１ｃと復号化処理部１０２ｃも、後述のように処理の概略が同一となるので、実際には重複部分を共用することができる。なお、上記各部は専用の回路などによりハードウエア的に実現するのであってもよいが、ここではＨＤ、ＣＤ−ＲＯＭ、ＭＯなどの各種媒体に記録されたプログラムを、ＲＡＭなどに読み出してＣＰＵにより実行することで、上記各部をソフトウエア的に実現するものとする。
【００３８】
また、符号化処理部１０１の第１送信バッファ１０１ａと復号化処理部１０２の第１受信バッファ１０２ａ、一時記憶領域１０１ｄと１０２ｄ、および第２送信バッファ１０１ｅと第２受信バッファ１０２ｅも、蓄積する対象が異なるだけで機能的には同一となるので、それぞれ一つのバッファなどが両者を兼ねるようにしてもよい。実際には、これらはいずれもＲＡＭにより実現される。
【００３９】
なお、上記の符号化位置判定部１０１ｂおよび復号化位置判定部１０２ｂが請求項にいう「判定処理手段」に、そのおこなう処理が請求項にいう「判定処理工程」に、それぞれ相当する。また、上記の符号化処理部１０１ｃおよび復号化処理部１０２ｃが請求項にいう「演算処理手段」「回転処理手段」および「入れ替え処理手段」を兼ね、そのおこなう処理に請求項にいう「演算処理工程」「回転処理工程」および「入れ替え処理工程」が含まれる。
【００４０】
次に、実施の形態１によるデータ防護処理装置の動作、具体的には（ａ）加算／減算（ｂ）ＸＯＲ（ｃ）回転（ｄ）入れ替えのそれぞれの場合における符号化処理と復号化処理の詳細について説明する。なお、以下では説明を簡単にするために、上述のワープ値を常に１とする。これはすなわち、処理範囲は常に所定のビットパターンに一致するビットデータの１バイト後から開始すること、言い換えれば、符号化／復号化は常に所定のビットパターンに一致するビットデータの直後からおこなわれることを意味する。
【００４１】
（ａ）四則演算による符号化と復号化
図２は、実施の形態１にかかるデータ防護処理装置における、加算による符号化処理および減算による復号化処理の手順を示すフローチャートである。符号化処理と復号化処理との差異は、後述するステップＳ２０４における処理が前者では防護キー値の加算、後者では防護キー値の減算である点のみなので、同図には両処理の手順をまとめて示している。以下ではまず符号化処理の手順を説明し、次にそれとの差異を中心として、復号化処理の手順について説明する。
【００４２】
本フローチャートによる処理の開始に先立って、符号化位置判定部１０１ｂが保持する位置カウンタの値は０に初期化されているものとする。まず、ステップＳ２０１で符号化位置判定部１０１ｂは、第１送信バッファ１０１ａに蓄積された符号化対象の送信データから、蓄積順に１バイト分のビットデータを読み出す。
【００４３】
次に、ステップＳ２０２で符号化位置判定部１０１ｂは、その保持する位置カウンタの値が０より大きいかどうかを判定する。そして、位置カウンタが０である場合（ステップＳ２０２：Ｎｏ）には、読み出したビットデータに対して符号化処理を施す必要はない、言い換えれば読み出したビットデータは符号化すべき位置にはないと判断する。そして、さらにステップＳ２０３で、当該ビットデータが上述のビットパターンと一致するか否かを判定する。
【００４４】
そして、読み出したビットデータが所定のビットパターンとは一致しない場合（ステップＳ２０３：Ｎｏ）、ステップＳ２０８で符号化位置判定部１０１ｂは、読み出したビットデータを次段の符号化処理部１０１ｃに引き渡し、符号化処理部１０１ｃは当該ビットデータをそのまま第２送信バッファ１０１ｅに書き込む。
【００４５】
また、読み出したビットデータが所定のビットパターンと一致する場合（ステップＳ２０３：Ｙｅｓ）、ステップＳ２０６で符号化位置判定部１０１ｂは、その保持する位置カウンタをインクリメントしたうえでステップＳ２０８に移行し、当該ビットデータをそのまま第２送信バッファ１０１ｅに書き込む。
【００４６】
また、ステップＳ２０２で位置カウンタの値が０より大きい場合（ステップＳ２０２：Ｙｅｓ）には、符号化位置判定部１０１ｂは読み出したビットデータに対して符号化処理を施す必要がある、言い換えれば読み出したビットデータは符号化すべき位置にあると判断し、当該ビットデータを次段の符号化処理部１０１ｃに引き渡すとともに、その符号化を依頼する。そして、続くステップＳ２０４で上記依頼を受けた符号化処理部１０１ｃは、符号化／復号化条件記憶部１００から読み出した防護キー値を上記ビットデータに加算する。
【００４７】
次に、ステップＳ２０５で符号化位置判定部１０１ｂは、その保持する位置カウンタの値が符号化／復号化条件記憶部１００から読み出した処理範囲より小さいかどうかを判定する。そして、位置カウンタの値が処理範囲よりも小さければ（ステップＳ２０５：Ｙｅｓ）、ステップＳ２０６で位置カウンタの値をインクリメントした後、また逆に処理範囲に達していれば（ステップＳ２０５：Ｎｏ）、ステップＳ２０７で位置カウンタの値を０に初期化した後、それぞれステップＳ２０８に移行して、防護キー値加算後の上記ビットデータを第２送信バッファ１０１ｅに書き込む。
【００４８】
図３は、図２のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は、図示するようにビットパターンが５Ｄ、ワープ値が１、処理範囲が４、防護キー値が１Ｅであるものとする。
【００４９】
ステップＳ２０１で、まず第１送信バッファ１０１ａ内の符号化前データから、先頭の１バイト分である３Ｆが読み出され、この時点では位置カウンタの値は０なので（ステップＳ２０２：Ｎｏ）、ステップＳ２０３に移行する。そして、３Ｆは５Ｄとは一致しないので（ステップＳ２０３：Ｎｏ）、ステップＳ２０８で３Ｆがそのまま第２送信バッファ１０１ｅに蓄積される。
【００５０】
次に、再度ステップＳ２０１でその直後の５Ｄが読み出され、この時点でも位置カウンタの値は０なので（ステップＳ２０２：Ｎｏ）、ステップＳ２０３に移行する。そして、この５Ｄは所定のビットパターンと一致するので（ステップＳ２０３：Ｙｅｓ）、ステップＳ２０６で位置カウンタの値がインクリメントされた後、ステップＳ２０８で５Ｄがそのまま第２送信バッファ１０１ｅに蓄積される。
【００５１】
次に、再度ステップＳ２０１で直後の９Ｂが読み出され、この時点では位置カウンタの値は１なので（ステップＳ２０２：Ｙｅｓ）、ステップＳ２０４でこの９Ｂに防護キー値である１Ｅが加算される。なお、加算後の値が１バイトで表現できる値を超えたときは、その超えた分だけを加算後の値とする。
【００５２】
そして、ステップＳ２０５で位置カウンタの１と処理範囲である４とが比較され、まだ前者は後者より小さいので（ステップＳ２０５：Ｙｅｓ）、ステップＳ２０６で位置カウンタがインクリメントされた後、ステップＳ２０８で加算後の値Ｂ９（＝９Ｂ＋１Ｅ）が第２送信バッファ１０１ｅに蓄積される。
【００５３】
次に、再度ステップＳ２０１で直後の１１が読み出され、この時点では位置カウンタの値は２なので（ステップＳ２０２：Ｙｅｓ）、同様にステップＳ２０４での防護キー値の加算、ステップＳ２０６での位置カウンタのインクリメントを経て、ステップＳ２０８で加算後の値２Ｆ（＝１１＋１Ｅ）が第２送信バッファ１０１ｅに蓄積される。
【００５４】
次に、再度ステップＳ２０１で直後の４０が読み出され、この時点では位置カウンタの値は３なので（ステップＳ２０２：Ｙｅｓ）、同様にステップＳ２０４での防護キー値の加算、ステップＳ２０６での位置カウンタのインクリメントを経て、ステップＳ２０８で加算後の値５Ｅ（＝４０＋１Ｅ）が第２送信バッファ１０１ｅに蓄積される。
【００５５】
次に、再度ステップＳ２０１で直後のＡ９が読み出され、この時点では位置カウンタの値は４なので（ステップＳ２０２：Ｙｅｓ）、同様にステップＳ２０４で防護キー値を加算する。そして、この時点で位置カウンタの値が処理範囲に達するので（ステップＳ２０５：Ｎｏ）、ステップＳ２０７での位置カウンタの０への初期化を経て、ステップＳ２０８で加算後の値Ｃ７（＝Ａ９＋１Ｅ）が第２送信バッファ１０１ｅに蓄積される。
【００５６】
次に、再度ステップＳ２０１で最後のＤＤが読み出され、この時点では位置カウンタの値は０なので（ステップＳ２０２：Ｎｏ）、ステップＳ２０３でのビットパターンとの一致判定を経て、ステップＳ２０８でＤＤがそのまま第２送信バッファ１０１ｅに蓄積される。
【００５７】
なお、上記により符号化されたデータの復号化は、同様に図２に示すフローチャートの手順によっておこなう。ただし、この場合ステップＳ２０４における処理は加算でなく減算となり、また上記説明における符号化処理部１０１の各部は、それぞれ復号化処理部１０２の対応する各部に読み替えるものとする。たとえば、図３に示す符号化後のデータであれば、符号化時に防護キー値１Ｅを加算されているＢ９からＣ７までの各数値について、復号化時には逆に防護キー値１Ｅが減算される結果、復号化後のデータは符号化前のもとのデータに戻ることが分かる。
【００５８】
（ｂ）論理演算による符号化と復号化
次に、図４は実施の形態１にかかるデータ防護処理装置における、ＸＯＲによる符号化／復号化処理の手順を示すフローチャートである。ＸＯＲの場合、符号化と復号化の手順は後述のように完全に同一となる。図２に示した四則演算による符号化／復号化処理との本質的な差異は、ステップＳ４０４における処理が加算や減算でなく論理演算のＸＯＲ（排他的論理和）である点のみであり、他のステップについては図２と同一である。
【００５９】
図５は、図４のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は、図示するようにビットパターンが５Ｄ、ワープ値が１、処理範囲が４、防護キー値が１Ｅであるものとする。
【００６０】
ステップＳ４０１で、まず第１送信バッファ１０１ａ内の符号化前データから３Ｆが読み出され、この時点では位置カウンタの値は０なので（ステップＳ４０２：Ｎｏ）、ステップＳ４０３に移行する。そして、３Ｆは５Ｄとは一致しないので（ステップＳ４０３：Ｎｏ）、ステップＳ４０８で３Ｆがそのまま第２送信バッファ１０１ｅに蓄積される。
【００６１】
次に、再度のステップＳ４０１で５Ｄが読み出され、この時点でも位置カウンタの値は０なので（ステップＳ４０２：Ｎｏ）、ステップＳ４０３に移行する。そして、この５Ｄは所定のビットパターンと一致するので（ステップＳ４０３：Ｙｅｓ）、ステップＳ４０６で位置カウンタの値がインクリメントされた後、ステップＳ４０８で５Ｄがそのまま第２送信バッファ１０１ｅに蓄積される。
【００６２】
次に、再度のステップＳ４０１で９Ｂが読み出され、この時点では位置カウンタの値は１なので（ステップＳ４０２：Ｙｅｓ）、ステップＳ４０４でこの９Ｂと防護キー値である１ＥとのＸＯＲが計算される。９Ｂは２進表記で１００１１０１１、１Ｅは同じく０００１１１１０であり、そのＸＯＲは１００００１０１、すなわち８５となる。そして、ステップＳ４０５で位置カウンタの１と処理範囲である４とが比較され、まだ前者は後者より小さいので（ステップＳ４０５：Ｙｅｓ）、ステップＳ４０６で位置カウンタがインクリメントされた後、ステップＳ４０８でＸＯＲ後の値８５が第２送信バッファ１０１ｅに蓄積される。
【００６３】
次に、再度のステップＳ４０１で１１が読み出され、この時点では位置カウンタの値は２なので（ステップＳ４０２：Ｙｅｓ）、同様にステップＳ４０４での防護キー値とのＸＯＲ、ステップＳ４０６での位置カウンタのインクリメントを経て、ステップＳ４０８でＸＯＲ後の値０Ｆが第２送信バッファ１０１ｅに蓄積される。
【００６４】
次に、再度のステップＳ４０１で４０が読み出され、この時点では位置カウンタの値は３なので（ステップＳ４０２：Ｙｅｓ）、同様にステップＳ４０４での防護キー値とのＸＯＲ、ステップＳ４０６での位置カウンタのインクリメントを経て、ステップＳ４０８でＸＯＲ後の値５Ｅが第２送信バッファ１０１ｅに蓄積される。
【００６５】
次に、再度のステップＳ４０１でＡ９が読み出され、この時点では位置カウンタの値は４なので（ステップＳ４０２：Ｙｅｓ）、同様にステップＳ４０４で防護キー値とのＸＯＲを計算する。そして、この時点で位置カウンタの値が処理範囲に達するので（ステップＳ４０５：Ｎｏ）、ステップＳ４０７での位置カウンタの０への初期化を経て、ステップＳ４０８でＸＯＲ後の値Ｂ７が第２送信バッファ１０１ｅに蓄積される。
【００６６】
次に、再度のステップＳ４０１で最後のＤＤが読み出され、この時点では位置カウンタの値は０なので（ステップＳ４０２：Ｎｏ）、ステップＳ４０３でのビットパターンとの一致判定を経て、ステップＳ４０８でＤＤがそのまま第２送信バッファ１０１ｅに蓄積される。
【００６７】
なお、上記で符号化後のデータについてさらに同一の符号化を繰り返すと、２回目の符号化後のデータは１回目の符号化前のデータに戻る。図５に示す符号化後のデータでは、再度のＸＯＲがかかるのは５Ｄの１バイト後（＝ワープ値だけ後）の８５から、４バイト分（＝処理範囲内）のＢ７までであるが、たとえば８５は２進表記で１００００１０１、防護キー値の１Ｅは同じく０００１１１１０であり、それらのＸＯＲは１００１１０１１、すなわちもとの９Ｂとなる。
【００６８】
このように、ＸＯＲの場合は符号化の手順と復号化の手順とが完全に同一となる。ただし、上記説明における符号化処理部１０１の各部は、復号化の場合はそれぞれ復号化処理部１０２の対応する各部に読み替えるものとする。
【００６９】
（ｃ）回転（ＲＯＴＡＴＥ）による符号化と復号化
次に、図６は実施の形態１にかかるデータ防護処理装置における、回転（ＲＯＴＡＴＥ）による符号化／復号化処理の手順を示すフローチャートである。符号化処理と復号化処理との差異は、後述するステップＳ６０９における回転が前者では防護キー値だけ左、後者では防護キー値だけ右である点のみなので、同図には両処理の手順をまとめて示している。
【００７０】
図７は、図６のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は、図示するようにビットパターンが５Ｄ、ワープ値が１、処理範囲が４、防護キー値が１Ｅであるものとする。
【００７１】
ステップＳ６０１で、まず第１送信バッファ１０１ａ内の符号化前データから３Ｆが読み出され、この時点では位置カウンタの値は０なので（ステップＳ６０２：Ｎｏ）、ステップＳ６０３に移行する。そして、３Ｆは５Ｄとは一致しないので（ステップＳ６０３：Ｎｏ）、ステップＳ６１０で３Ｆがそのまま第２送信バッファ１０１ｅに蓄積される。
【００７２】
次に、再度のステップＳ６０１で５Ｄが読み出され、この時点でも位置カウンタの値は０なので（ステップＳ６０２：Ｎｏ）、ステップＳ６０３に移行する。そして、この５Ｄは所定のビットパターンと一致するので（ステップＳ６０３：Ｙｅｓ）、ステップＳ６０４で位置カウンタの値がインクリメントされた後、ステップＳ６１０で５Ｄがそのまま第２送信バッファ１０１ｅに蓄積される。
【００７３】
次に、再度のステップＳ６０１で９Ｂが読み出され、この時点では位置カウンタの値は１なので（ステップＳ６０２：Ｙｅｓ）、ステップＳ６０５で符号化位置判定部１０１ｂにより、この９Ｂが一時記憶領域１０１ｄに退避される。そして、ステップＳ６０６で位置カウンタの１と処理範囲である４とが比較され、まだ前者は後者より小さいので（ステップＳ６０６：Ｙｅｓ）、ステップＳ６０７で位置カウンタがインクリメントされた後、ステップＳ６０１で次の１１が読み出される。
【００７４】
そして、この時点では位置カウンタの値は２なので（ステップＳ６０２：Ｙｅｓ）、同様にステップＳ６０５での一時記憶領域１０１ｄへの退避、ステップＳ６０７での位置カウンタのインクリメントを経て、再度ステップＳ６０１に移行する。
【００７５】
以後同様に４０、Ａ９を読み出して順に一時記憶領域１０１ｄに退避するが、Ａ９を読み出した時点で位置カウンタの値が４となった後は（ステップＳ６０６：Ｎｏ）、ステップＳ６０８に移行して位置カウンタを０に初期化する。そして、ステップＳ６０９で符号化処理部１０１ｃにより、この時点までに一時記憶領域１０１ｄに退避されている全データを一つの数値として読み込んで、防護キー値である１Ｅビットだけ左に回転させる。
【００７６】
この時点では、一時記憶領域１０１ｄには“９Ｂ  １１  ４０  Ａ９”を意味するビットデータ（１００１１０１１  ０００１０００１  ０１００００００  １０１０１００１）が退避されている。この４バイト分のビットデータを左に１Ｅビットだけ回転するとは、右に２ビットだけ回転するのと結果的に同じであり、回転後の値は“６６  Ｃ４  ５０  ２Ａ”（０１１００１１０  １１０００１００  ０１０１００００  ００１０１０１０）となる。そして、ステップＳ６１０でこれらの値が、第２送信バッファ１０１ｅに蓄積される。
【００７７】
ただし、上記はＭｏｔｏｒｏｌａやＳｕｎ  ＳＰＡＲＣなど、一般に「ビッグエンディアン」と呼ばれるＣＰＵを使用した場合の結果であり、Ｉｎｔｅｌ系やＤＥＣ  Ａｌｐｈａなど、一般に「リトルエンディアン」と呼ばれるＣＰＵを採用した場合は結果が異なってくる。
【００７８】
すなわち、符号化位置判定部１０１ｂにより一時記憶領域１０１ｄ＝スタックに順次退避された“９Ｂ  １１  ４０  Ａ９”を、回転のため符号化処理部１０１ｃ＝ＣＰＵのレジスタに取り込むと、リトルエンディアンでは順序が“Ａ９  ４０  １１  ９Ｂ”のようにバイト単位で入れ替わるため、これを左に１Ｅビット回転させた結果は“ＥＡ  ５０  ０４  ６６”となる。さらに、これを第２送信バッファ１０１ｅに書き込む際にも、同様に順序が入れ替わるため、符号化後のデータでは“６６  ０４  ５０  ＥＡ”という順序になる。もっとも、上記の差異はＣＰＵが採用するバイトオーダーに起因する、もっぱら形式的なものであって、結果は異なるにせよ処理の本質は同じである。
【００７９】
次に、再度のステップＳ６０１で最後のＤＤが読み出され、この時点では位置カウンタの値は０なので（ステップＳ６０２：Ｎｏ）、ステップＳ６０３でのビットパターンとの一致判定を経て、ステップＳ６１０でＤＤがそのまま第２送信バッファ１０１ｅに蓄積される。
【００８０】
なお、上記により符号化されたデータの復号化は、同様に図６に示すフローチャートの手順によっておこなう。ただし、この場合ステップＳ６０９の回転は、符号化時とは逆の右方向へ、防護キー値だけおこなうものとする。また、上記説明における符号化処理部１０１の各部は、復号化の場合はそれぞれ復号化処理部１０２の対応する各部に読み替えるものとする。
【００８１】
（ｄ）入れ替え（ＳＷＡＰ）による符号化と復号化
次に、図８は実施の形態１にかかるデータ防護処理装置における、入れ替え（ＳＷＡＰ）による符号化／復号化処理の手順を示すフローチャートである。入れ替えの場合、符号化と復号化の手順は後述のように完全に同一となる。
【００８２】
図９は、図８のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は、図示するようにビットパターンが５Ｄ、ワープ値が１、防護キー値が３２であるものとする。入れ替えの場合、防護キー値の下位４ビットは入れ替えるビットデータのサイズ（バイト数）を、上位４ビットは当該ビットデータから入れ替え先のビットデータまでの距離（バイト数）を、それぞれ示している。したがって、上記条件は全体として、５Ｄの直後（ワープ値＝１バイトだけ後）の２バイトを、そこから３バイト先の２バイトと入れ替えることを意味している。
【００８３】
ステップＳ８０１で、まず第１送信バッファ１０１ａ内の符号化前データから３Ｆが読み出され、この時点では位置カウンタの値は０なので（ステップＳ８０２：Ｎｏ）、ステップＳ８０３に移行する。そして、３Ｆは５Ｄとは一致しないので（ステップＳ８０３：Ｎｏ）、ステップＳ８０９で３Ｆがそのまま第２送信バッファ１０１ｅに蓄積される。
【００８４】
次に、再度のステップＳ８０１で５Ｄが読み出され、この時点でも位置カウンタの値は０なので（ステップＳ８０２：Ｎｏ）、ステップＳ８０３に移行する。そして、この５Ｄは所定のビットパターンと一致するので（ステップＳ８０３：Ｙｅｓ）、ステップＳ８０４で位置カウンタの値がインクリメントされた後、ステップＳ８０９で５Ｄがそのまま第２送信バッファ１０１ｅに蓄積される。
【００８５】
次に、再度のステップＳ８０１で９Ｂが読み出され、この時点では位置カウンタの値は１なので（ステップＳ８０２：Ｙｅｓ）、ステップＳ８０５で符号化位置判定部１０１ｂにより、この９Ｂが一時記憶領域１０１ｄに退避される。そして、ステップＳ８０６で位置カウンタの１と、入れ替えるビットデータのサイズ＋入れ替え先までの距離、ここでは２＋３＝５とが比較され、まだ前者は後者より小さいので（ステップＳ８０６：Ｙｅｓ）、ステップＳ８０７で位置カウンタがインクリメントされた後、ステップＳ８０１で次の１１が読み出される。
【００８６】
そして、この時点では位置カウンタの値は２なので（ステップＳ８０２：Ｙｅｓ）、同様にステップＳ８０５での一時記憶領域１０１ｄへの退避、ステップＳ８０７での位置カウンタのインクリメントを経て、再度ステップＳ８０１に移行する。
【００８７】
以後同様に４０、Ａ９、ＤＤを読み出して順に一時記憶領域１０１ｄに退避するが、ＤＤを読み出した時点で位置カウンタの値が５となった後は（ステップＳ８０６：Ｎｏ）、ステップＳ８０８での位置カウンタの０への初期化を経て、ステップＳ８０９で符号化処理部１０１ｃにより、一時記憶領域１０１ｄ内のデータを順次取り出して第２送信バッファ１０１ｅに蓄積する。
【００８８】
このとき、まず退避した順序が遅いほうのデータから入れ替えサイズ＝２バイト分、ここではＡ９およびＤＤを取り出す。次に、退避した順序が早いほうのデータから入れ替えサイズ＝２バイト分、ここでは９Ｂおよび１１を残すように、それより後に退避したデータ、ここでは４０を取り出す。そして、最後に残りのデータ、ここでは９Ｂおよび１１を取り出すことで、９Ｂおよび１１と、Ａ９およびＤＤとを入れ替えることができる。
【００８９】
次に、再度のステップＳ８０１で最後のＥ７が読み出され、この時点では位置カウンタの値は０なので（ステップＳ８０２：Ｎｏ）、ステップＳ８０３でのビットパターンとの一致判定を経て、ステップＳ８０９でＥ７がそのまま第２送信バッファ１０１ｅに蓄積される。
【００９０】
なお、入れ替え後のデータについてさらに同一の入れ替えを繰り返すと、当然ながら２回目の入れ替え後のデータは１回目の入れ替え前のデータに戻ることになる。このように、入れ替えの場合は符号化の手順と復号化の手順とが完全に同一となる。ただし、上記説明における符号化処理部１０１の各部は、復号化の場合はそれぞれ復号化処理部１０２の対応する各部に読み替えるものとする。
【００９１】
以上説明したように、実施の形態１にかかるデータ防護処理装置およびデータ防護処理方法によれば、データサイズを変化させない符号化が可能である。また、データを送信しながらの符号化、あるいはデータを受信しながらの復号化といった逐次処理が可能であり、個々の処理も四則演算や論理演算などきわめて単純であるので、高速であるとともに装置への負荷を少なくすることができる。
【００９２】
なお、上述した実施の形態１では説明の便宜上、いずれもワープ値が１であるものとしたが、これは他の値であってももちろんよい。たとえば、図３に示した例でワープ値が２であった場合、防護キー値の加算の対象となるのは５Ｄから２バイト後の１１、４０、Ａ９およびＤＤである。また、ワープ値は負の値、たとえば−１とすることもでき、この場合防護キー値の加算の対象となるのは５Ｄの直前の３Ｆである。
【００９３】
また、上述した実施の形態１では、ビットパターンとして「０１０１１１０１」（５Ｄ）のようにその全体を指定したが、たとえば「１００＊＊＊＊＊」（＊は０でも１でもよいことを示す）のように一部だけを指定するようにしてもよい。この後者のビットパターンと一致するのは、具体的には「１０００００００」（８０）、「１００００００１」（８１）、・・・、「１０００１１１１」（８Ｆ）、「１００１００００」（９０）、「１００１０００１」（９１）、・・・、「１００１１１１１」（９Ｆ）の３２個（＝２の５乗）である。
【００９４】
このように、一部のビットだけでも一致していれば一致ありとすることで、より多くのデータに符号化を施すことができ、無権限者などによる解読の難易度をさらに高めることができる。たとえば、日本語の文字コードの一つであるＳｈｉｆｔ−ＪＩＳでは、全角文字は８１４０〜９ＦＦ０およびＥ０４０〜ＥＥＦＣの範囲に集中している。よって、この範囲の文字をより多くカバーできるようなビットパターン（上記の「１００＊＊＊＊＊」はその典型例である）を工夫することで、もとの文字をなるべく残すことなく、上述の符号化をおこなうことができる。
【００９５】
図１０は、ビットパターンを「１００＊＊＊＊＊」、ワープ値を１、処理範囲を１、防護キー値を３５として、図２のフローチャートによる符号化処理（防護キーの加算による符号化処理）をおこなった前後のデータの一例を示す説明図である。同図に示す日本語のテキストデータは、ほぼ原型をとどめずに符号化されている。ただし、「痺」の１バイト目は「１１１００００１」（Ｅ１）であって上記パターンに一致しないため、その２バイト目に防護キー値が加算されない結果、この文字だけが符号後のデータにもそのまま残っている。
【００９６】
なお、上記ビットパターンとの一致は、技術的には所定のマスクを使用することにより判定する。あらかじめ、上記３２個の値のうちいずれか一つ、たとえば最初の「１０００００００」（８０）を代表値として選んでおく。そして、この値の中で一致判定の際に注目するビット位置（少なくともここが同一であれば一致ありとするビット位置、といってもよい）、ここでは左から３番目までのビットに１を立てたマスク値「１１１０００００」（Ｅ０）を用意する。
【００９７】
そして、上述のステップＳ２０３、Ｓ４０３、Ｓ６０３あるいはＳ８０３において、符号化位置判定部１０１ｂあるいは復号化位置判定部１０２ｂは、まず判定対象の値と上記マスク値との論理和（ＡＮＤ）を計算する。そして、これがあらかじめ計算してある上記代表値と上記マスク値との論理和と完全一致したときに、当該対象値が所定のビットパターンに一致すると判定する。たとえば、「１００１１１１１」（９Ｆ）と上記マスク値とのＡＮＤ結果は「１０００００００」であり、これは代表値とマスク値とのＡＮＤ結果「１０００００００」と完全一致するので、当該対象値は上記パターンと一致することになる。
【００９８】
なお、上記は符号化対象が日本語中心のテキストデータである場合に有効であるが、対象がプログラムの場合は、符号化後の最上位ビットが１になるような条件を設定することで、より有効な符号化をおこなうことができる。プログラムは基本的には８ビットコードの配列として表現されているが、そのソースコードでは８ビット中７ビットしか使用していない。そこで、ソースコードについてこのように最上位ビットを１とするような符号化をおこなうと、コンピュータには実行できないコードとなるので、違法コピーの防止などの用途に応用することができる。
【００９９】
（実施の形態２）
さて、上述した実施の形態１では、符号化／復号化に使用する防護キー値は定数であるようにしたが（少なくとも一回の符号化／復号化の途中では変化しない）、以下に説明する実施の形態２のように、一回の符号化／復号化の途中で防護キー値を規則的に変更してゆくようにしてもよい。
【０１００】
図１１は、実施の形態２にかかるデータ防護処理装置の概略構成を示すブロック図である。これは、図１に示した実施の形態１の符号化処理部１０１および復号化処理部１０２に、それぞれ防護キー値変更部１１０１ｆ・１１０２ｆを追加した構成である。
【０１０１】
防護キー値変更部１１０１ｆはデータの符号化時、また防護キー値変更部１１０２ｆはデータの復号化時に、それぞれ符号化／復号化条件記憶部１１００から読み込んだ防護キー値に対して（ａ）所定の値を加算することにより、（ｂ）所定の値を乗算することにより、あるいは（ｃ）所定の値で除算することにより、当該値を順次変更してゆくものである。以下、防護キー値に加算・乗算または除算する所定の値を「変更値」、加算・乗算または除算の種別を「変更方法」と呼ぶ。この変更値と変更方法とは、符号化／復号化条件記憶部１１００にあらかじめ保持されており、防護キー値変更部１１０１ｆ・１１０２ｆはそれらを読み出して使用する。
【０１０２】
なお、上記は防護キー値そのものに対する処理を示しており、実施の形態１で説明した、防護キー値による符号化／復号化処理とは次元の異なるものである。たとえば同じ加算であっても、実施の形態１でいう「加算（による符号化）」とは、符号化対象データに所定の防護キー値「を」加算することを意味していたのであるが、実施の形態２でいう「加算（による防護キー値の変更）」とは、防護キー値「に」所定の変更値を加算することを意味している。
【０１０３】
したがって、実施の形態１で説明した（ａ）加算／減算（ｂ）ＸＯＲ（ｃ）回転（ｄ）入れ替えによる符号化／復号化と、実施の形態２で説明する（ａ）加算（ｂ）乗算（ｃ）除算による防護キー値の変更とは任意に組み合わせることができ、その組み合わせは４×３＝１２通りとなる。
【０１０４】
たとえば、符号化／復号化方法を加算／減算、防護キー値の変更方法を加算とした組み合わせは、「符号化／復号化対象データに対して、所定の変更値を順次加算された防護キー値を加算／減算する」ことを意味しており、下記（ａ）ではこの例を用いて、加算による防護キー値の変更処理を説明する。さらに、下記（ｂ）では符号化／復号化方法を加算／減算、防護キー値の変更方法を乗算とした組み合わせ、下記（ｃ）では符号化／復号化方法を加算／減算、防護キー値の変更方法を乗算とした組み合わせを用いて、それぞれ乗算あるいは除算による防護キー値の変更処理を順に説明する。
【０１０５】
（ａ）加算による防護キー値の変更
図１２は、実施の形態２にかかるデータ防護処理装置における、加算による防護キー値の変更を伴う符号化／復号化処理の手順を示すフローチャートである。同図は図２に示した加算による符号化／減算による復号化の手順に、ステップＳ１２０８およびＳ１２０９を挿入したものである。違いは符号化処理部１１０１ｃ／復号化処理部１１０２ｃがステップＳ１２０４での符号化／復号化の際、符号化／復号化条件記憶部１１００でなく防護キー値変更部１１０１ｆ／１１０２ｆに保持された、前回のステップＳ１２０８およびＳ１２０９で変更後の防護キー値を使用する点のみである。
【０１０６】
図１３は、図１２のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は、図示するようにビットパターンが８３、ワープ値が１、処理範囲が１、（当初の）防護キー値が２５であるものとする。また、防護キー値の変更値は３Ｂ、変更方法は加算であるものとする。
【０１０７】
そして、本フローチャートによる処理の開始に先立って、符号化位置判定部１１０１ｂが保持する位置カウンタの値は０に初期化されているものとする。また、防護キー値変更部１１０１ｆには符号化／復号化条件記憶部１１００から読み出された上記防護キー値、変更値および変更方法が保持されているものとする。
【０１０８】
同図に示す符号化前データのうち先頭の５Ｂ、ＢＥおよびＣ２は、ステップＳ１２０１で第１送信バッファ１１０１ａから読み出された後、ステップＳ１２０２およびＳ１２０３を経て、ステップＳ１２１０で第２送信バッファ１１０１ｅにそのまま蓄積される。
【０１０９】
そして、その次の８３（図１３では符号化前データ中、下線に（１）を付した記号で示す）は所定のビットパターンに一致するので（ステップＳ１２０３：Ｙｅｓ）、ステップＳ１２０３からステップＳ１２０６に分岐し、位置カウンタの１へのインクリメントの後、ステップＳ１２１０でそのまま第２送信バッファ１１０１ｅに蓄積される。
【０１１０】
次の５Ｄは、この時点で位置カウンタの値が１であるため（ステップＳ１２０２：Ｙｅｓ）、ステップＳ１２０２からステップＳ１２０４に分岐し、防護キー値変更部１１０１ｆ内の防護キー値を参照した符号化処理部１１０１ｃにより２５を加算されて８２となる。そして、この時点で位置カウンタの値が処理範囲の１に達するので（ステップＳ１２０５：Ｎｏ）、ステップＳ１２０７に分岐して位置カウンタが０に初期化される。
【０１１１】
さらに、ステップＳ１２０８で防護キー値変更部１１０１ｆにより、従来の防護キー値２５に変更値である３Ｂが加算されて６０となる。そして、この時点では加算後の防護キー値が１バイトで表現できる値（００〜ＦＦ）の範囲内なので問題ないが、加算を繰り返すうちにはいずれ超えるので、ステップＳ１２０９で変更後の防護キー値がＦＦを超えないような調整をおこなう。具体的には、加算後の値と００ＦＦとの論理和、すなわち加算後の値のうちＦＦを超えた部分のみを、新たな防護キー値として防護キー値変更部１１０１ｆに保持するようにする。
【０１１２】
そして、ステップＳ１２１０で防護キー値加算後の値の８２が第２送信バッファ１１０１ｅに蓄積され、続く８２から４８までの１８バイトは、ステップＳ１２０１からステップＳ１２０２およびＳ１２０３を経てステップＳ１２１０で、順次第２送信バッファ１１０１ｅに蓄積される。そして、その次の８３（図１３では下線に（２）を付した記号で示す）は所定のビットパターンに一致するので（ステップＳ１２０３：Ｙｅｓ）、ステップＳ１２０３からステップＳ１２０６に分岐し、位置カウンタの１へのインクリメントの後、ステップＳ１２１０でそのまま第２送信バッファ１１０１ｅに蓄積される。
【０１１３】
次の４３は、この時点で位置カウンタの値が１であるため（ステップＳ１２０２：Ｙｅｓ）、ステップＳ１２０２からステップＳ１２０４に分岐し、防護キー値変更部１１０１ｆ内の防護キー値を参照した符号化処理部１１０１ｃにより６０を加算されてＡ３となる。そして、この時点で位置カウンタの値が処理範囲の１に達するので（ステップＳ１２０５：Ｎｏ）、ステップＳ１２０７に分岐して位置カウンタが０に初期化される。
【０１１４】
さらに、ステップＳ１２０８で防護キー値変更部１１０１ｆにより、従来の防護キー値６０に変更値である３Ｂが加算され、さらにステップＳ１２０９による調整を受けて９Ｂとなる。そして、ステップＳ１２１０で防護キー値加算後の値のＡ３が第２送信バッファ１１０１ｅに蓄積される。以後は同様の処理の繰り返しであり、この次の８３（図１３では下線に（３）を付した記号で示す）の直後の４９は防護キー値の９Ｂを加算されてＥ４となり、さらにその次の８３（同（４））の直後の５Ｄは防護キー値Ｄ６（＝９Ｂ＋３Ｂ）を加算されて３３となる。符号化後のデータは図１３に示す通りである。
【０１１５】
（ｂ）乗算による防護キー値の変更
図１４は、実施の形態２にかかるデータ防護処理装置における、乗算による防護キー値の変更を伴う符号化／復号化処理の手順を示すフローチャートである。図１２との差異は、ステップＳ１４０８において、防護キー値に変更値を加算でなく乗算する点のみである。
【０１１６】
図１５は、図１４のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は図１３と同一であり、防護キー値の変更値も３Ｂであるが、その変更方法は加算でなく乗算であるものとする。なお、防護キー値を乗算により変更する場合には、変更値の最下位ビットは必ず１にする必要がある（言い換えれば、変更値は必ず奇数にする必要がある）。そうでなければ、数回〜数十回の変更をおこなうと防護キー値は必ず０になってしまう。
【０１１７】
図１５に示す符号化前データのうち先頭の５Ｂ、ＢＥおよびＣ２は、ステップＳ１４０１で第１送信バッファ１１０１ａから読み出された後、ステップＳ１４０２およびＳ１４０３を経て、ステップＳ１４１０で第２送信バッファ１１０１ｅにそのまま蓄積される。
【０１１８】
そして、その次の８３（図１５では符号化前データ中、下線に（１）を付した記号で示す）は所定のビットパターンに一致するので（ステップＳ１４０３：Ｙｅｓ）、ステップＳ１４０３からステップＳ１４０６に分岐し、位置カウンタの１へのインクリメントの後、ステップＳ１４１０でそのまま第２送信バッファ１１０１ｅに蓄積される。
【０１１９】
次の５Ｄは、この時点で位置カウンタの値が１であるため（ステップＳ１４０２：Ｙｅｓ）、ステップＳ１４０２からステップＳ１４０４に分岐し、防護キー値変更部１１０１ｆ内の防護キー値を参照した符号化処理部１１０１ｃにより２５を加算されて８２となる。そして、この時点で位置カウンタの値が処理範囲の１に達するので（ステップＳ１４０５：Ｎｏ）、ステップＳ１４０７に分岐して位置カウンタが０に初期化される。
【０１２０】
さらに、ステップＳ１４０８で防護キー値変更部１１０１ｆにより、従来の防護キー値２５に変更値である３Ｂが乗算されて８８７となる。ただし、ステップＳ１４０９で００ＦＦとの論理和によりＦＦを超える部分が無視され、下２桁の８７が新たな防護キー値として防護キー値変更部１１０１ｆに保持される。
【０１２１】
そして、ステップＳ１４１０で防護キー値加算後の値の８２が第２送信バッファ１１０１ｅに蓄積され、続く８２から４８までの１８バイトは、ステップＳ１４０１からステップＳ１４０２およびＳ１４０３を経てステップＳ１４１０で、順次第２送信バッファ１１０１ｅに蓄積される。そして、その次の８３（図１５では下線に（２）を付した記号で示す）は所定のビットパターンに一致するので（ステップＳ１４０３：Ｙｅｓ）、ステップＳ１４０３からステップＳ１４０６に分岐し、位置カウンタの１へのインクリメントの後、ステップＳ１４１０でそのまま第２送信バッファ１１０１ｅに蓄積される。
【０１２２】
次の４３は、この時点で位置カウンタの値が１であるため（ステップＳ１４０２：Ｙｅｓ）、ステップＳ１４０２からステップＳ１４０４に分岐し、防護キー値変更部１１０１ｆ内の防護キー値を参照した符号化処理部１１０１ｃにより８７を加算されてＣＡとなる。そして、この時点で位置カウンタの値が処理範囲の１に達するので（ステップＳ１４０５：Ｎｏ）、ステップＳ１４０７に分岐して位置カウンタが０に初期化される。
【０１２３】
さらに、ステップＳ１４０８で防護キー値変更部１１０１ｆにより、従来の防護キー値８７に変更値である３Ｂが乗算されて１Ｆ１Ｄとなるが、ステップＳ１４０９でＦＦを超える部分は無視されて１Ｄとなる。そして、ステップＳ１４１０で防護キー値加算後の値のＣＡが第２送信バッファ１１０１ｅに蓄積される。以後は同様の処理の繰り返しであり、符号化後のデータは図１５に示す通りとなる。
【０１２４】
（ｃ）除算による防護キー値の変更
図１６は、実施の形態２にかかるデータ防護処理装置における、除算による防護キー値の変更を伴う符号化／復号化処理の手順を示すフローチャートである。
【０１２５】
また、図１７は図１６のフローチャートによる符号化処理を具体例で説明するための説明図である。符号化の諸条件は、図示するようにビットパターンが８３、ワープ値が１、処理範囲が２、（当初の）防護キー値が１３２５であるものとする。また、防護キー値の変更値は１９、変更方法は除算であるものとする。なお、防護キー値を除算により変更する場合には、変更後の値が０や１０以下の小さな値になってしまうのを避けるため、変更値が当初の防護キー値よりも十分小さくなければならない。
【０１２６】
同図に示す符号化前データのうち先頭の５Ｂ、ＢＥおよびＣ２は、ステップＳ１６０１で第１送信バッファ１１０１ａから読み出された後、ステップＳ１６０２およびＳ１６０３を経て、ステップＳ１６１２で第２送信バッファ１１０１ｅにそのまま蓄積される。
【０１２７】
そして、その次の８３（図１７では符号化前データ中、下線に（１）を付した記号で示す）は所定のビットパターンに一致するので（ステップＳ１６０３：Ｙｅｓ）、ステップＳ１６０３からステップＳ１６０４に分岐し、位置カウンタの１へのインクリメントの後、ステップＳ１６１２でそのまま第２送信バッファ１１０１ｅに蓄積される。
【０１２８】
次の５Ｄは、この時点で位置カウンタの値が１であるため（ステップＳ１６０２：Ｙｅｓ）、ステップＳ１６０２からステップＳ１６０５に分岐し、符号化位置判定部１１０１ｂにより一時記憶領域１１０１ｄに退避される。そして、この時点では位置カウンタの値は処理範囲よりも小さいので（ステップＳ１６０６：Ｙｅｓ）、ステップＳ１６０６からステップＳ１６０７に分岐し、位置カウンタの２へのインクリメントの後、ステップＳ１６０１で次の８２が読み出される。
【０１２９】
そして、ステップＳ１６０２を経てステップＳ１６０５で、この８２も一時記憶領域１１０１ｄに退避され、この時点で位置カウンタの値が処理範囲の２に達するので（ステップＳ１６０６：Ｎｏ）、ステップＳ１６０８に分岐して位置カウンタが０に初期化される。そして、ステップＳ１６０９で、防護キー値変更部１１０１ｆ内の防護キー値を参照した符号化処理部１１０１ｃにより、一時記憶領域１１０１ｄから読み出された８２５Ｄに防護キー値１３２５が加算されて９５８２となる（リトルエンディアンのＣＰＵを使用した場合）。
【０１３０】
さらに、ステップＳ１６１０で防護キー値変更部１１０１ｆにより、従来の防護キー値１３２５が変更値である１９により除算されて００Ｃ４（００００００００１１０００１００）となる。ただし、処理を繰り返すうちに防護キー値があまりに小さな値になってしまうのを避けるため、ステップＳ１６１１でこの除算結果を、最上位ビットが１になるまで左にシフトさせてＣ４００（１１０００１００００００００００）とすることで、十分に大きな値になるよう調整する（なお、図１７の「→」はこの最上位ビットが１になるまでの左シフトを表す）。そして、この調整後の値Ｃ４００が新たな防護キー値として防護キー値変更部１１０１ｆに保持される。
【０１３１】
そして、ステップＳ１６１２で防護キー値加算後の値の９５８２が第２送信バッファ１１０１ｅに蓄積され、続く８２から４８までの１８バイトは、ステップＳ１６０１からステップＳ１６０２およびＳ１６０３を経てステップＳ１６１２で、順次第２送信バッファ１１０１ｅに蓄積される。そして、その次の８３（図１７では下線に（２）を付した記号で示す）は所定のビットパターンに一致するので（ステップＳ１６０３：Ｙｅｓ）、ステップＳ１６０３からステップＳ１６０４に分岐し、位置カウンタの１へのインクリメントの後、ステップＳ１６１２でそのまま第２送信バッファ１１０１ｅに蓄積される。
【０１３２】
次の４３および９Ｅは、同様にステップＳ１６０５で一時記憶領域１１０１ｄに退避され、ステップＳ１６０８で変更後の防護キー値Ｃ４００を加算されて６２４３となった後、ステップＳ１６１２で第２送信バッファ１１０１ｅに蓄積される。そして、このとき防護キー値もステップＳ１６１０の除算、ステップＳ１６１１の調整を経てＦＡＥ０に変更される。以後は同様の処理の繰り返しであり、符号化後のデータは図１７に示す通りとなる。
【０１３３】
上記説明から明らかなように、実施の形態２によるデータ保護処理装置は、符号化対象データ中に所定のビットパターンが見つかるごとに防護キー値を変更する、あるいは言い換えれば、処理範囲ごとに適用する防護キー値を変更するので、無権限者などによる符号化後のデータの解読がより困難となる。
【０１３４】
（実施の形態３）
さて、上述した実施の形態１や２による符号化後のデータは、上記から明らかなようにその符号化に用いられたビットパターン、ワープ値、処理範囲、防護キー値、符号化方法、あるいは防護キー値の変更値や変更方法といった情報がなければ正常に復号化することができない。そのため、データを符号化して相手方に送る場合は、その復号化に必要な上記情報を何らかの形で相手方に通知しなければならず、しかもその通知は第三者に盗聴（盗み見）されるようなものであってはならない。
【０１３５】
そこで、以下に説明する実施の形態３では、符号化したデータ自体にその復号化に必要な上記情報を埋め込んで送付するようにしている。ただ、上記情報は全部を常に変更する必要はなく、たとえば防護キー値のみを通信時や通信相手によって変更するようにしておけば、その他のビットパターンやワープ値、処理範囲、符号化方法、防護キー値の変更値や変更方法は同一であっても十分に安全な符号化が可能である。そこで、以下では他の条件は固定としておき、もっぱら符号化に用いた防護キー値のみを可変として、当該防護キー値を符号化後のデータに埋め込んでしまうことを考える。
【０１３６】
図１８は、実施の形態３にかかるデータ防護処理装置の概略構成を示すブロック図である。これは、図１に示した実施の形態１のそれに埋め込み情報設定部１８０３を追加したものである。この埋め込み情報設定部１８０３は、後述する埋め込み情報の入力を操作者から受け付けて、符号化／復号化条件記憶部１８００内に格納するものである。そして、実施の形態３にかかる符号化／復号化条件記憶部１８００は、実施の形態１および２と同様のビットパターンおよびワープ値のほか、埋め込み情報設定部１８０３により設定された埋め込み情報を保持している。
【０１３７】
図１９は、実施の形態３にかかるデータ防護処理装置における符号化処理の手順を示すフローチャートである。また、図２０は図１９のフローチャートによる処理を具体例で説明するための説明図であり、以下この例に沿いながら、図１９に示す手順を順次説明する。
【０１３８】
現実的には、図２０に示す符号化前データは、実施の形態１または２で上述したいずれかのフローチャートによる符号化処理をあらかじめ実施された後のデータである。そして、図１９のフローチャートはこの１回目の符号化の後、当該１回目の符号化に使用された防護キー値を当該１回目の符号化後のデータに埋め込むため、さらに当該データについて２回目の符号化処理をおこなうものである。
【０１３９】
本フローチャートによる処理の開始に先立って、符号化／復号化条件記憶部１８００にはビットパターン（図２０の例では３Ｆ）およびワープ値（同０１）のほか、符号化のために必要な埋め込み情報があらかじめ埋め込み情報設定部１８０３により設定されているものとする。この埋め込み情報とは、具体的には下記の通りである。
【０１４０】
（ａ）埋め込みデータ
符号化対象データ内に埋め込まれるデータであり、現実的には上記１回目の符号化に使用した任意の防護キー値を操作者が設定する。初期値はこのように操作者の設定した値、図２０の例では７５（０１１１０１０１）であるが、後述のように埋め込みの都度順次変更されてゆく。符号化完了時のこの埋め込みデータの値（最終的な変更結果といってもよい）を、特に「余剰値」と呼ぶ。
【０１４１】
（ｂ）埋め込みビット
上記埋め込みデータ中、符号化対象データ内に埋め込まれる、ｎ個（図２０の例では後述のように１個）の連続するビットのうち最上位のものである。初期値は７、すなわち最上位ビットであるが、後述のように埋め込みの都度ｎビットずつ下位へ移動される。ただし、最下位ビットの次は最上位ビットにジャンプする。
【０１４２】
（ｃ）被埋め込みビット
符号化対象データ内の、上記埋め込みビットを埋め込まれるビット位置は、当該位置にビットを立てた数値（以下「処理値」）により表現される。図２０の例では２０（００１０００００）であり、値が１になっている左から３番目のビットが、埋め込みビットを埋め込まれる位置である。また、１になっているビットの個数ｎ（この例では１）は被埋め込みビットの個数を表し、後述のように埋め込みビットと被埋め込みビットとは一対一に対応するので、同時に埋め込みビットの個数ｎも表すことになる。なお、この被埋め込みビットは上記の埋め込みビットのように、一回の符号化の途中で変更されることはないが、処理値を特に指定しなかった場合（００Ｈを指定したときなど）は、被埋め込みビットは埋め込みビットと同じビットとしてもよい。このときは被埋め込みビットも埋め込みの都度１ビットずつ下位へ移動する。
【０１４３】
（ｄ）埋め込み開始位置および埋め込み終了位置
符号化対象データのうち、上記埋め込みデータを埋め込む範囲の先頭位置と終端位置である。この埋め込み開始／終了位置を任意に設定することで、埋め込みによる符号化を第１送信バッファ１８０１ａ内のデータの一部（たとえば送信文書中のクレジットカード番号部分のみ、など）についておこなうことができる。ただし、特段の指定がなければ埋め込み開始位置は第１送信バッファ１８０１内の全データの先頭位置、埋め込み終了位置はその末端位置を示すものとする。図２０の例ではいずれの指定もされておらず、埋め込みデータの埋め込みは、第１送信バッファ１８０１ａ内の全データにわたっておこなうことを示している。
【０１４４】
（ｅ）埋め込み方法
ＳＷＡＰ／ＸＯＲ／ＲＯＴＡＴＥのいずれかであり、図２０の例ではＳＷＡＰが指定されているものとする。各処理の詳細については後述する。
（ｆ）埋め込み方向
順方向／逆方向のいずれかであり、図２０の例では順方向が指定されているものとする。
【０１４５】
また、図１９のフローチャートによる処理の開始に先立って、符号化位置判定部１８０１ｂが保持する位置カウンタの値は０に、第１送信バッファ１８０１ａ内のどのデータに注目しているかを示す処理ポインタは上記埋め込み開始位置に、それぞれ初期化されているものとする。
【０１４６】
ステップＳ１９０１で符号化位置判定部１８０１ｂは、図２０に示す符号化前のデータ（第１送信バッファ１８０１ａ内のデータ）から処理ポインタで示される位置の１バイト分のビットデータ、ここでは埋め込み開始位置すなわち上記データの先頭の２Ｄを読み出す。
【０１４７】
次に、ステップＳ１９０２で符号化位置判定部１８０１ｂは、上記で読み出したデータが符号化／復号化条件記憶部１８００から読み出した所定のビットパターン、この例では３Ｆと一致するかどうかを判定する。そして、ここでは読み出したデータは３Ｆではないので（ステップＳ１９０２：Ｎｏ）、ステップＳ１９０３に分岐し、読み出した２Ｄを一時記憶領域１８０１ｄに退避する。
【０１４８】
その後、ステップＳ１９０４で符号化位置判定部１８０１ｂは、その保持する位置カウンタの値をインクリメントし、さらにステップＳ１９０５でインクリメント後の位置カウンタの値が符号化／復号化条件記憶部１８００から読み出したワープ値より大きくなっているかどうかを判定する。そして、この時点での位置カウンタの値は１であり、ワープ値である１はまだ超えていないことから（ステップＳ１９０５：Ｎｏ）、ステップＳ１９０６およびＳ１９０７をスキップしてステップＳ１９０８に移行する。
【０１４９】
ステップＳ１９０８で符号化位置判定部１８０１ｂは、その保持する処理ポインタの値に１バイトを加算し、さらにステップＳ１９０９で加算後のアドレスが埋め込み終了位置、ここでは第１送信バッファ１８０１ａ内のデータの末端を超えたかどうかを判定する。そして、この時点では処理ポインタが示すのは２Ｄの次の３Ｆのアドレスであることから（ステップＳ１９０９：Ｎｏ）、ステップＳ１９０１に戻って処理ポインタが指し示す位置の３Ｆを読み出す。そして、これがステップＳ１９０２で所定のビットパターンに一致すると判定されるため（ステップＳ１９０２：Ｙｅｓ）、処理はステップＳ１９１０に分岐する。
【０１５０】
ステップＳ１９１０で符号化処理部１８０１ｃは、一時記憶領域１８０１ｄに退避されているデータのうち最も早く退避された先頭の１バイト分、ここでは２Ｄしか退避されていないので当該２Ｄを読み出す。そして、この２Ｄの被埋め込みビット、ここでは処理値２０（００１０００００）で示される左から３番目のビットに、埋め込みデータ７５の埋め込みビット、ここでは初期値７で示される最左端のビットを埋め込む。
【０１５１】
ここでいう埋め込みとは、具体的には埋め込み方法として指定されている入れ替え（ＳＷＡＰ）である。すなわち、埋め込み対象値である２Ｄ（００１０１１０１）の左から３番目のビット「１」（図２０では下線により示す）と、埋め込みデータ７５（０１１１０１０１）の最左端のビット「０」（図２０では文字囲みにより示す）とを入れ替えることで、前者を０Ｄ（００００１１０１）、後者をＦ５（１１１１０１０１）とする。
【０１５２】
そして、ステップＳ１９１１で符号化処理部１８０１ｃは、埋め込み後のデータ（ここでは０Ｄ）、一時記憶領域１８０１ｄ内の残りのデータ（ここでは２Ｄが取り出された後なので何もない）、および符号化位置判定部１８０１ｂから引き渡された、直前のステップＳ１９０２で読み出されたデータ（ここでは３Ｆ）とを、この順に第２送信バッファ１８０１ｅへ送出する。
【０１５３】
次に、ステップＳ１９１２で符号化処理部１８０１ｃは、埋め込みビットを下位方向へｎビットだけ移動する。この時点での埋め込みビットは初期値の７（最左端のビット）であり、またｎは上述のように１であるので、埋め込みビットは最左端のビットに代えて、左から２番目のビットに変更されることになる。
【０１５４】
さらに、ステップＳ１９１３で符号化位置判定部１８０１ｂは、その保持する位置カウンタを０に初期化する。その後、ステップＳ１９０８およびＳ１９０９における処理ポインタの加算と埋め込み終了位置との比較を経て、ステップＳ１９０１で符号化位置判定部１８０１ｂは、加算後の処理ポインタの位置にある２４を読み出す。そして、この２４はステップＳ１９０２を経て、ステップＳ１９０３で一時記憶領域１８０１ｄに退避される。
【０１５５】
この後、ステップＳ１９０４で１にインクリメントされた位置カウンタは、ステップＳ１９０５でまだワープ値を超えないと判定されるので（ステップＳ１９０５：Ｎｏ）、ステップＳ１９０８およびＳ１９０９における処理ポインタの加算と埋め込み終了位置との比較を経て、ステップＳ１９０１で次の６Ｃが読み出される。
【０１５６】
そして、この６ＣもステップＳ１９０２を経て、ステップＳ１９０３で一時記憶領域１８０１ｄに退避されるが、ステップＳ１９０４でインクリメント後の位置カウンタ２が、ステップＳ１９０５でワープ値１を超えたと判定されるため（ステップＳ１９０５：Ｙｅｓ）、ステップＳ１９０６に分岐する。
【０１５７】
ステップＳ１９０６で符号化処理部１８０１ｃは、一時記憶領域１８０１ｄ内に退避されているデータのうち最も早く退避された先頭の１バイト分、ここでは２４しか退避されていないので当該２４を読み出して、そのまま第２送信バッファ１８０１ｅに送出する。その後、ステップＳ１９０７で符号化位置判定部１８０１ｂは、その保持する位置カウンタの値を２からデクリメントして１とする。そして、ステップＳ１９０８およびＳ１９０９における処理ポインタの加算と埋め込み終了位置との比較を経て、ステップＳ１９０１で次の６８が読み出される。
【０１５８】
この６８もステップＳ１９０２を経て、ステップＳ１９０３で一時記憶領域１８０１ｄに退避されるが、ステップＳ１９０４でインクリメント後の位置カウンタ２が、ステップＳ１９０５でワープ値１を超えたと判定されるため（ステップＳ１９０５：Ｙｅｓ）、ステップＳ１９０６でさきに退避された６Ｃがそのまま第２送信バッファ１８０１ｅに送出される。その後、同様にステップＳ１９０７で位置カウンタのデクリメント、ステップＳ１９０８およびＳ１９０９で処理ポインタの加算と埋め込み終了位置との比較を経て、ステップＳ１９０１で次の７５が読み出される。
【０１５９】
以後２Ｄ、Ｂ０、０４、７５を同様に読み出して、一時記憶領域１８０１ｄを介して順次第２送信バッファ１８０１ｅに蓄積してゆくが、その次に読み出される３Ｆは所定のビットパターンに一致するため（ステップＳ１９０２：Ｙｅｓ）ステップＳ１９１０に分岐する。
【０１６０】
そして、その時点で一時記憶領域１８０１ｄに退避されている直前の７５（０１１１０１０１）の被埋め込みビット、すなわち左から３番目のビット「１」と、この時点での埋め込みデータＦ５（１１１１０１０１）のこの時点での埋め込みビット、すなわち左から２番目のビット「１」とが入れ替えられる。もっとも、入れ替える値が同じなので、埋め込みの後も両者の値に変化はない。
【０１６１】
この後、ステップＳ１９１１で（埋め込み後の）７５と３Ｆとが順に第２送信バッファ１８０１ｅに送出される。そして、ステップＳ１９１２で埋め込みビットが下位に１ビット移動、すなわち左から３番目のビットに変更された後、ステップＳ１９１３で位置カウンタが０に初期化される。
【０１６２】
以後は処理ポインタが埋め込み終了位置を超えるまで同様の処理の繰り返しであり、次の３Ｆが発見されると、ワープ値＝１バイト前の９８（１００１１０００）の左から３番目のビット「０」と、埋め込みデータＦ５（１１１１０１０１）の左から３番目のビット「１」とが入れ替えられ、埋め込み後のＢ８（１０１１１０００）、続いて３Ｆが第２送信バッファ１８０１ｅに蓄積される。そして、埋め込みデータはＤ５（１１０１０１０１）に、埋め込みビットは左から４番目にそれぞれ変更されて、次の３Ｆの直前のＡＢに埋め込まれる。以後の処理の詳細と符号化後のデータとを図２０に示す。
【０１６３】
次に、図２１は実施の形態３にかかるデータ防護処理装置における復号化処理の手順を示すフローチャートである。また、図２２は図２１のフローチャートによる処理を具体例で説明するための説明図であり、以下この例に沿いながら、図２１に示す手順を順次説明する。なお、図２２は図２０の符号化とちょうど逆の復号化をおこなうものであり、図２０に示す符号化後のデータ＝図２２に示す復号化前のデータである。
【０１６４】
図２１による処理の開始に先立って、符号化／復号化条件記憶部１８００にはビットパターン（図２２の例では３Ｆ）およびワープ値（同０１）のほか、復号化のために必要な埋め込み情報があらかじめ埋め込み情報設定部１８０３により設定されているものとする。この埋め込み情報とは、具体的には下記の通りである。
【０１６５】
（ａ）埋め込みデータ
復号化対象データ内に埋め込まれるデータであり、初期値は当該対象データの符号化時に用いられた埋め込みデータから一意に決定される。具体的には、符号化完了時の埋め込みデータの値すなわち余剰値であり、図２０に示す符号化後のデータ＝図２２に示す復号化前のデータを復号する場合、図２０の表内右下隅の最終的な埋め込みデータＣＥ（１１００１１１０）がこの初期値となる。
【０１６６】
（ｂ）埋め込みビット
上記埋め込みデータ中、復号化対象データ内に埋め込まれる、ｎ個の連続するビットのうち最上位のものである。初期値は符号化完了時の埋め込みビットの値であり、図２０に示す符号化後のデータ＝図２２に示す復号化前のデータを復号する場合、左から５番目のビットとなる。
【０１６７】
（ｃ）被埋め込みビット
復号化対象データ内の、上記埋め込みビットを埋め込まれるビット位置であり、当該対象データの符号化時に設定されたのと同一の位置である。
【０１６８】
（ｄ）埋め込み開始位置および埋め込み終了位置
復号化対象データのうち、上記埋め込みデータを埋め込む範囲の先頭位置と終端位置であり、当該対象データの符号化時に設定された埋め込み開始位置および埋め込み終了位置と同一である。
【０１６９】
（ｅ）埋め込み方法
ＳＷＡＰ／ＸＯＲ／ＲＯＴＡＴＥのいずれかであり、復号化対象データの符号化時に設定された埋め込み方法と同一である。
【０１７０】
（ｆ）埋め込み方向
順方向／逆方向のいずれかであり、復号化対象データの符号化時に設定された方向と逆の方向である。
【０１７１】
（ａ）（ｂ）についてはその初期値、（ｃ）〜（ｆ）については値そのものが、データの符号化側から符号化後のデータとともにその復号化側に提供される。ただし、ここでは説明の便宜上、符号化後のデータには上記（ａ）のみが添付されるものとし、また（ｃ）〜（ｆ）は固定であるものとする。
【０１７２】
なお、上記（ｂ）は復号化側で、復号化対象データに所定のビットパターンがいくつ含まれるかにより算出することができる。符号化時の埋め込みビットは所定のビットパターンを発見する都度、最上位ビットからｎ個ずつ下位にずれてゆくので、符号化前後のデータ中に当該ビットパターンがａ個あったとすると、最終的には初期値の最左端から「ａ＊ｎ／８の余り」だけ右にずれた位置となる。たとえば、図２０に示す符号化後のデータには３Ｆが１２個含まれており（ａ＝１２）、ｎ＝１なので、符号化完了時の埋め込みビットは最左端から１２＊１／８の余り４だけずれて、左から５番目となっている。そして、これが復号化時の埋め込みビットの初期値となる。
【０１７３】
また、図２１による処理の開始に先立って、復号化位置判定部１８０２ｂが保持する位置カウンタの値は０に、第１受信バッファ１８０２ａ内のどのデータに注目しているかを示す処理ポインタは上記埋め込み終了位置に、それぞれ初期化されているものとする。
【０１７４】
ステップＳ２１０１で復号化位置判定部１８０２ｂは、図２２に示す復号化前のデータ（第１受信バッファ１８０２ａ内のデータ）から処理ポインタで示される位置の１バイト分のビットデータ、ここでは埋め込み終了位置すなわち上記データの末尾の３４を読み出す。
【０１７５】
次に、ステップＳ２１０２で復号化位置判定部１８０２ｂは、上記で読み出したデータが符号化／復号化条件記憶部１８００から読み出した所定のビットパターン、この例では３Ｆと一致するかどうかを判定する。そして、ここでは読み出したデータは３Ｆではないので（ステップＳ２１０２：Ｎｏ）、ステップＳ２１０３に分岐し、自己の保持する位置カウンタの値が符号化／復号化条件記憶部１８００から読み出したワープ値以上になっているかどうかを判定する。
【０１７６】
そして、この時点では位置カウンタの値は０なので（ステップＳ２１０３：Ｎｏ）、ステップＳ２１０４で復号化位置判定部１８０２ｂは読み出した３４を復号化処理部１８０２ｃに引き渡し、復号化処理部１８０２ｃはこれをそのまま第２受信バッファ１８０２ｅに送出する。
【０１７７】
次に、ステップＳ２１０５で復号化位置判定部１８０２ｂは、その保持する処理ポインタの値から１バイトを減算し、さらにステップＳ２１０６で減算後のアドレスが埋め込み開始位置、ここでは第１送信バッファ１８０１ａ内のデータの先頭を下回ったかどうかを判定する。そして、この時点では処理ポインタが示すのは３４の前の１２のアドレスであることから（ステップＳ２１０６：Ｎｏ）、ステップＳ２１０１に戻って処理ポインタが指し示す位置の１２を読み出す。
【０１７８】
そして、この１２も３ＦではないためステップＳ２１０２からステップＳ２１０３に分岐し、この時点でも位置カウンタは０であってワープ値１に達しないのでステップＳ２１０４に分岐する結果、１２がそのまま第２受信バッファ１８０２ｅに送出される。その後、ステップＳ２１０５およびＳ２１０６における処理ポインタの減算と埋め込み開始位置との比較を経て、ステップＳ２１０１でさらにその前の３Ｆが読み出される。
【０１７９】
そして、この３ＦはステップＳ２１０２で所定のビットパターンに一致すると判定されるため（ステップＳ２１０２：Ｙｅｓ）、ステップＳ２１０７に分岐して復号化位置判定部１８０２ｂから復号化処理部１８０２ｃに引き渡され、そのまま第２受信バッファ１８０２ｅに送出される。さらに、ステップＳ２１０８で復号化位置判定部１８０２ｂは、自己の保持する位置カウンタをインクリメントする。
【０１８０】
その後、ステップＳ２１０５およびＳ２１０６における処理ポインタの減算と埋め込み開始位置との比較を経て、ステップＳ２１０１でさらにその前のＤ１が読み出される。これは３Ｆとは一致しないが（ステップＳ２１０２：Ｎｏ）、この時点の位置カウンタの値１がワープ値の１に達しているので（ステップＳ２１０３：Ｙｅｓ）、処理はステップＳ２１０９に分岐する。
【０１８１】
ステップＳ２１０９で復号化処理部１８０２ｃは、上記で読み出されたＤ１（１１０１０００１）の被埋め込みビット、ここでは処理値２０（００１０００００）で示される左から３番目のビット「０」に、埋め込みデータＣＥ（１１００１１１０）の埋め込みビット、ここでは左から５番目のビット「１」を埋め込む。ここでいう埋め込みも、具体的にはビットの入れ替え（ＳＷＡＰ）である。
【０１８２】
そして、ステップＳ２１１０で復号化処理部１８０２ｃは、埋め込みビットを上位方向へｎビット、ここでは１ビットだけ移動する。さらに、ステップＳ２１１１で復号化位置判定部１８０２ｂは、その保持する位置カウンタを０に初期化する。その後、ステップＳ２１０４で復号化処理部１８０２ｃは、埋め込み後のＤ１すなわちＦ１（１１１１０００１）を、第２送信バッファ１８０１ｅに送出する。
【０１８３】
以後は処理ポインタが埋め込み開始位置を超えるまで同様の処理の繰り返しであり、次の３Ｆが発見されると、そのワープ値＝１バイト後のデータの左から３番目のビットと、ステップＳ２１０９による変更後の埋め込みデータＣ６（１１０００１１０）の、ステップＳ２１１０による変更後の埋め込みビット、すなわち左から４番目の「０」とが入れ替えられることになる。
【０１８４】
以後の処理の詳細と復号化後のデータとを図２２に示す。図２２に示す復号化後のデータは、図２０に示す符号化前のデータと同一であり、図１９に示す手順でいったん符号化されたデータが、図２１に示す手順で復号化されたことが分かる。
【０１８５】
また、図２１による復号化完了時の埋め込みデータの値は最終的に７５となり、これは図１９による符号化開始時の埋め込みデータの値７５と一致する。すなわち、復号化対象データに符号化完了時の余剰値を埋め込んでゆくことで、符号化開始時のその初期値すなわち上述の１回目の符号化に使用された防護キー値が抽出できることになる。そして、次はこの防護キー値を用いて実施の形態１および２で上述したいずれかの復号化をおこなうことにより、データを１回目の符号化以前の平文に戻すことができる。
【０１８６】
このように、実施の形態３では符号化対象データに、実施の形態１または２のいずれかの手順による１回目の符号化を実施した後、その符号化に用いた防護キー値を当該符号化後のデータに埋め込むことで２回目の符号化を実施する。ただし、この防護キー値がそのまま埋め込まれるのは２回目の符号化の最初のみで、以後は符号化対象データとのビット単位の入れ替えにより、値が順次変更されてゆく。
【０１８７】
そして、データの符号化側からその復号化側へは、１回目の符号化に使用された防護キー値そのものでなく、２回目の符号化完了時の当該防護キー値（余剰値）のみが送付される。復号化側ではまずこの余剰値による１回目の復号化を実施してから、当該復号化完了時に抽出された防護キー値を使用して２回目の復号化を実施する。このように実施の形態３では二重の符号化／復号化をおこない、しかも符号化側から復号化側へは防護キー値そのものは渡さないので、無権限者などによる不正な復号化が非常に困難になる。
【０１８８】
なお、上記は埋め込みを入れ替え（ＳＷＡＰ）によりおこなった例であるが、埋め込み方法はこれに限らず、たとえば排他的論理和（ＸＯＲ）、回転（ＲＯＴＡＴＥ）などによることも考えられる。
【０１８９】
排他的論理和による埋め込みは、たとえば符号化対象データの被埋め込みビットと、埋め込みデータの埋め込みビットとのＸＯＲを算出し、その結果を埋め込みデータの埋め込みビットと入れ替えることによりおこなう。図２０の例であれば、先頭の２Ｄ（００１０１１０１）の左から３番目のビット「１」と、埋め込みデータ７５（０１１１０１０１）の最左端のビット「０」とのＸＯＲは「１」であり、これが７５の最左端のビットに埋め戻される結果、埋め込みデータはＦ５（１１１１０１０１）に変更される。
【０１９０】
なお、対象データ側の２Ｄには変更はない。このように、上記による埋め込みはもっぱら埋め込みデータを初期値から順次変更してゆくところに意味があり、対象データの変容は目的としていない。なお、復号化側では受信した余剰値に、復号化対象データとのＸＯＲ結果を同様に埋め込んでゆくことで、埋め込みデータの初期値である上記７５を得ることができる。
【０１９１】
また、回転による埋め込みの場合は、たとえば符号化対象データのキャリーフラグに埋め込みデータの埋め込みビットをセットして、上述の処理値だけ左に回転させた値を符号化後の値とする。また、回転後のキャリーフラグの値を埋め込みデータの埋め込みビットに埋め戻す。
【０１９２】
図２０の例であれば、先頭の２Ｄ（００１０１１０１）をレジスタに、埋め込みデータ７５（０１１１０１０１）の最左端のビット「０」をそのキャリーフラグにセットした後、左に１ビット回転させると、キャリーフラグの「０」が２Ｄの最下位ビットに入り、逆に２Ｄの最上位ビットがキャリーフラグに押し出される結果、回転後のレジスタの値は５Ａ（０１０１１０１０）、キャリーフラグの値は０となる。このように、埋め込みビットをキャリーフラグにセットしてレジスタ内の値を回転させることで、レジスタ内の値に埋め込みビットの値を挿入することができる。
【０１９３】
処理値の２０ビット（１０進表記では３２ビット）だけ左に回転させたときのレジスタの値はＡ２（１０１０００１０）であり、第１送信バッファ１８０１ａから読み出された２Ｄの代わりに、このＡ２が第２送信バッファ１８０１ｅに蓄積されることになる。また、この時点でのキャリーフラグの値は１であり、これが埋め込みデータの埋め込みビットに埋め戻される結果、埋め込みデータは上記の７５（０１１１０１０１）からＦ５（１１１１０１０１）に変更される。
【０１９４】
なお、復号化側では受信した余剰値の埋め込みビットをキャリーフラグにセットし、復号化対象データをレジスタに読み込んで右に処理値だけ回転させ、その時点でのキャリーフラグの値を埋め込みデータの埋め込みビットに埋め戻してゆくことで、その初期値である上記７５を得ることができる。
【０１９５】
実施の形態１〜３にかかるデータ防護処理方法は、ＲＯＭ、ハードディスク、ＣＤ−Ｒドライブ等の記録媒体にコンピュータプログラムとして記録することにより提供することもできる。また、上記コンピュータプログラムをネットワークを介して提供することもできる。
【０１９６】
また、本発明による符号化／復号化処理は、ハードウエア的に実現するにもごく単純な回路で足りるため、たとえばモデムなどの周辺機器に上記機能を持たせることも容易である。この場合、符号化用モデムを経由したデータは対応する機能を搭載した復号化用モデムでなければ解読できないため、復号化用モデムの配布を制限することで、符号化用モデムに接続された特定のコンピュータへのアクセスを復号化用モデムの保持者に制限することができる。
【０１９７】
また、たとえばハードディスクなどはたとえ起動のためのパスワードが設定されていても、他のコンピュータに接続されて他のハードディスクから起動されると容易に中身を参照・改竄されてしまうのであるが、ＳＣＳＩコントローラやＩＤＥコントローラに上記による符号化／復号化機能を持たせておき、書き込みの際には符号化、読み出しの際には復号化をおこなうようにすれば、特定のマザーボードを搭載するコンピュータからしかハードディスクの書き込み・読み出しができないように構成することができる。
【０１９８】
また、ＣＤ−ＲやＣＤ−ＲＷの普及によりプログラムＣＤの違法コピーや海賊版の問題が深刻化しているが、上記による符号化／復号化はこの問題の解決にも応用することができる。
【０１９９】
ＩＳＯ９６６０に準拠したＣＤの場合、リードイン領域とプログラム領域との間の約３５０ＫＢ（約２秒間）はＣＤ−ＲやＣＤ−ＲＷによってはコピー先のディスクにコピーされないのを利用して、この領域に防護キー値を書き込んでおく。そして、上記防護キー値により符号化されたＣＤ内のプログラムを、そのインストール時に復号化するようにしておけば、コピーのＣＤからは防護キー値が読み出せない（そもそも記録されていない）ため、インストールは不可能となる。すなわち、上記のようにすることでプログラムのインストールはオリジナルのＣＤからしかできないように構成することができる。
【０２００】
【発明の効果】
以上説明したように、この発明にかかるデータ防護処理装置によれば、機密性の高い符号化／復号化をごく単純なビット計算により実現できる上、データを送信しながら、あるいは受信しながらの逐次処理が可能なので、データの符号化／復号化を従来技術よりも高速におこなうことができるという効果を奏する。
【０２０１】
また、符号化／復号化の前後でデータのサイズが変わってしまうということがない。さらに、従来技術では安全性確保のために複雑な手順を要していた、鍵すなわち復号化に必要な情報の復号化側への配送を、データへの添付という形でごく容易におこなうことができるという効果を奏する。
【図面の簡単な説明】
【図１】  実施の形態１にかかるデータ防護処理装置の概略構成を示すブロック図である。
【図２】  実施の形態１にかかるデータ防護処理装置における、加算による符号化処理および減算による復号化処理の手順を示すフローチャートである。
【図３】  図２のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図４】  実施の形態１にかかるデータ防護処理装置における、ＸＯＲによる符号化／復号化処理の手順を示すフローチャートである。
【図５】  図４のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図６】  実施の形態１にかかるデータ防護処理装置における、回転（ＲＯＴＡＴＥ）による符号化／復号化処理の手順を示すフローチャートである。
【図７】  図６のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図８】  実施の形態１にかかるデータ防護処理装置における、入れ替え（ＳＷＡＰ）による符号化／復号化処理の手順を示すフローチャートである。
【図９】  図８のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図１０】  ビットパターンを「１００＊＊＊＊＊」として図２のフローチャートによる符号化処理をおこなった前後のデータの一例を示す説明図である。
【図１１】  実施の形態２にかかるデータ防護処理装置の概略構成を示すブロック図である。
【図１２】  実施の形態２にかかるデータ防護処理装置における、加算による防護キー値の変更を伴う符号化／復号化処理の手順を示すフローチャートである。
【図１３】  図１２のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図１４】  実施の形態２にかかるデータ防護処理装置における、乗算による防護キー値の変更を伴う符号化／復号化処理の手順を示すフローチャートである。
【図１５】  図１４のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図１６】  実施の形態２にかかるデータ防護処理装置における、除算による防護キー値の変更を伴う符号化／復号化処理の手順を示すフローチャートである。
【図１７】  図１６のフローチャートによる符号化処理を具体例で説明するための説明図である。
【図１８】  実施の形態３にかかるデータ防護処理装置の概略構成を示すブロック図である。
【図１９】  実施の形態３にかかるデータ防護処理装置における符号化処理の手順を示すフローチャートである。
【図２０】  図１９のフローチャートによる処理を具体例で説明するための説明図である。
【図２１】  実施の形態３にかかるデータ防護処理装置における復号化処理の手順を示すフローチャートである。
【図２２】  図２１のフローチャートによる処理を具体例で説明するための説明図である。
【符号の説明】
１００，１１００，１８００  符号化／復号化条件記憶部
１０１，１１０１，１８０１  符号化処理部
１０１ａ，１１０１ａ，１８０１ａ  第１送信バッファ
１０１ｂ，１１０１ｂ，１８０１ｂ  符号化位置判定部
１０１ｃ，１１０１ｃ，１８０１ｃ  符号化処理部
１０１ｄ，１１０１ｄ，１８０１ｄ  一時記憶領域
１０１ｅ，１１０１ｅ，１８０１ｅ  第２送信バッファ
１０２，１１０２，１８０２  復号化処理部
１０２ａ，１１０２ａ，１８０２ａ  第１受信バッファ
１０２ｂ，１１０２ｂ，１８０２ｂ  復号化位置判定部
１０２ｃ，１１０２ｃ，１８０２ｃ  復号化処理部
１０２ｄ，１１０２ｄ，１８０２ｄ  一時記憶領域
１０２ｅ，１１０２ｅ，１８０２ｅ  第２受信バッファ
１１０１ｆ，１１０２ｆ  防護キー値変更部
１８０３  埋め込み情報設定部
【図１】
0003930697.tif 000002
【図２】
0003930697.tif 000003
【図３】
0003930697.tif 000004
【図４】
0003930697.tif 000005
【図５】
0003930697.tif 000006
【図６】
0003930697.tif 000007
【図７】
0003930697.tif 000008
【図８】
0003930697.tif 000009
【図９】
0003930697.tif 000010
【図１０】
0003930697.tif 000011
【図１１】
0003930697.tif 000012
【図１２】
0003930697.tif 000013
【図１３】
0003930697.tif 000014
【図１４】
0003930697.tif 000015
【図１５】
0003930697.tif 000016
【図１６】
0003930697.tif 000017
【図１７】
0003930697.tif 000018
【図１８】
0003930697.tif 000019
【図１９】
0003930697.tif 000020
【図２０】
0003930697.tif 000021
【図２１】
0003930697.tif 000022
【図２２】
0003930697.tif 000023