(57)【要約】【課題】秘密鍵が不要で、実行効率の低下が小さく、安全性を向上させることができるプログラム内データの保護装置を提供することを目的とする。【解決手段】プログラムの関数間で受け渡しされるプログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理と、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理と、プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理とを任意の順序で行う。【選択図】図５
2007298847.tif 000002
【特許請求の範囲】
【請求項１】
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うバイト置換手段と、
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うバイト攪拌手段と、
を備えたことを特徴とするプログラム内データの保護装置。
【請求項２】
プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行う演算ビット回転手段を更に備えたことを特徴とする請求項１に記載のプログラム内データの保護装置。
【請求項３】
前記バイト置換手段における置換演算処理の逆演算処理を行うバイト置換逆演算手段と、
前記バイト攪拌手段における攪拌演算処理の逆演算処理を行うバイト攪拌逆演算手段と、
を更に備えたことを特徴とする請求項１に記載のプログラム内データの保護装置。
【請求項４】
前記演算ビット回転手段における回転演算処理の逆演算処理を行う演算ビット回転逆演算手段を更に備えたことを特徴とする請求項２に記載のプログラム内データの保護装置。
【請求項５】
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップと、
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップと、
を任意の順序で実行することを特徴とするプログラム内データの保護方法。
【請求項６】
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップと、
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップと、
プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行うステップと、
を任意の順序で実行することを特徴とするプログラム内データの保護方法。
【請求項７】
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップと、
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップと、
を任意の順序でコンピュータに実行させるためのプログラム。
【請求項８】
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップと、
プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップと、
プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行うステップと、
を任意の順序でコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの関数間で受け渡しされるデータの第三者による解析を困難にさせるプログラム内データの保護装置、保護方法およびプログラムに関する。
【背景技術】
【０００２】
一般に、プログラムデータには、利用者に対して、秘匿すべき情報が含まれている可能性が高い。そのため、これらの秘匿すべき情報をプログラム中に保管したり、関数間での受け渡し処理が行われたりする場合には、不定な解析に対して、何らかの対策を講じることが求められる。こうした要望に対して、従来、プログラム内のデータを暗号化することにより保護する方法が提案されている（例えば、非特許文献１参照。）。
【非特許文献１】Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｓ  Ｐｕｂｌｉｃａｔｉｏｎ  １９７、“ＡＤＶＡＮＣＥＤ  ＥＮＣＲＹＰＴＩＯＮ  ＳＴＡＮＤＡＲＤ（ＡＥＳ）”、Ｎｏｖｅｍｂｅｒ  ２６、２００１
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、暗号化によりプログラム内のデータを保護する方法では、以下のような問題がある。すなわち、第１に、暗号化及び復号化の処理が増えるために、効率が低下する可能性がある。第２に、暗号化には、鍵が必要であり、この鍵を確実に管理する必要がある。その方法の一つとして、プログラム自身に鍵を隠蔽する方法があるが、この場合には、隠蔽する情報が元のデータから鍵に変わるだけであるため、本質的な解決手段にはなりえないという問題がある。また、別の方法として、鍵をプログラムの外部のハードウェアに格納する方法があるが、この場合には、鍵の管理コストが極めて高くなってしまうという問題がある。
【０００４】
そこで、本発明は、上述の問題点に鑑みてなされたものであり、秘密鍵が不要で、実行効率の低下が小さく、安全性を向上させることができるプログラム内データの保護装置、保護方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、上記の課題を解決するために、以下の事項を提案している。
（１）本発明は、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うバイト置換手段（例えば、図１および図２のバイト置換部２０に相当）と、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うバイト攪拌手段（例えば、図１および図２のバイト攪拌部３０に相当）と、を備えたことを特徴とするプログラム内データの保護装置を提案している。
【０００６】
この発明によれば、バイト置換手段がプログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行い、バイト攪拌手段がプログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行う。これにより、従来よりも安全性を向上させつつ、非常に高い実行効率を実現することができる。
【０００７】
（２）本発明は、（１）のプログラム内データの保護装置について、プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行う演算ビット回転手段（例えば、図１および図２の演算ビット回転部１０に相当）を更に備えたことを特徴とするプログラム内データの保護装置を提案している。
【０００８】
この発明によれば、さらに、演算ビット回転手段がプログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行うため、非常に高い実行効率を実現しつつ、非常に高い安全性を実現することができる。
【０００９】
（３）本発明は、（１）のプログラム内データの保護装置について、前記バイト置換手段における置換演算処理の逆演算処理を行うバイト置換逆演算手段（例えば、図２のバイト置換逆演算部３２に相当）と、前記バイト攪拌手段における攪拌演算処理の逆演算処理を行うバイト攪拌逆演算手段（例えば、図２のバイト攪拌逆演算部３１に相当）と、を更に備えたことを特徴とするプログラム内データの保護装置を提案している。
【００１０】
この発明によれば、バイト置換逆演算手段がバイト置換手段における置換演算処理の逆演算処理を行い、バイト攪拌逆演算手段がバイト攪拌手段における攪拌演算処理の逆演算処理を行うことから、関数間で受け渡されるデータについて、他の関数内で元の入力値が必要な場合に、元の入力値を得ることができ、加えて、従来よりも安全性を向上させつつ、非常に高い実行効率を実現することができる。
【００１１】
（４）本発明は、（２）のプログラム内データの保護装置について、前記演算ビット回転手段における回転演算処理の逆演算処理を行う演算ビット回転逆演算手段（例えば、図２の演算ビット回転逆演算部３３に相当）を更に備えたことを特徴とするプログラム内データの保護装置を提案している。
【００１２】
この発明によれば、さらに、演算ビット回転逆演算手段が演算ビット回転手段における回転演算処理の逆演算処理を行うことから、関数間で受け渡されるデータについて、他の関数内で元の入力値が必要な場合に、元の入力値を得ることができ、加えて、非常に高い実行効率を実現しつつ、非常に高い安全性を実現することができる。
【００１３】
（５）本発明は、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップ（例えば、図４のステップＳ１０３に相当）と、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップ（例えば、図４のステップＳ１０４に相当）とを任意の順序で実行することを特徴とするプログラム内データの保護方法を提案している。
【００１４】
この発明によれば、プログラム内のデータの任意の文字列に対して、任意の順序で、バイト単位での全単射の置換演算処理と、バイト単位での全単射の攪拌演算処理を行うことから、従来よりも安全性を向上させつつ、非常に高い実行効率を実現することができる。
【００１５】
（６）本発明は、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップ（例えば、図４のステップＳ１０３に相当）と、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップ（例えば、図４のステップＳ１０４に相当）と、プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行うステップ（例えば、図４のステップＳ１０２に相当）と、を任意の順序で実行することを特徴とするプログラム内データの保護方法を提案している。
【００１６】
この発明によれば、プログラム内のデータの任意の文字列に対して、任意の順序で、バイト単位での全単射の置換演算処理とバイト単位での全単射の攪拌演算処理と左に任意のビット数分回転させる回転演算処理を行うことから、非常に高い実行効率を実現しつつ、非常に高い安全性を実現することができる。
【００１７】
（７）本発明は、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップ（例えば、図４のステップＳ１０３に相当）と、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップ（例えば、図４のステップＳ１０４に相当）と、を任意の順序でコンピュータに実行させるためのプログラムを提案している。
【００１８】
この発明によれば、プログラム内のデータの任意の文字列に対して、任意の順序で、バイト単位での全単射の置換演算処理と、バイト単位での全単射の攪拌演算処理を行うことから、従来よりも安全性を向上させつつ、非常に高い実行効率を実現することができる。
【００１９】
（８）本発明は、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の置換演算処理を行うステップ（例えば、図４のステップＳ１０３に相当）と、プログラム内のデータの任意の文字列に対して、バイト単位での全単射の攪拌演算処理を行うステップ（例えば、図４のステップＳ１０４に相当）と、プログラム内のデータの任意の文字列に対して、左に任意のビット数分回転させる回転演算処理を行うステップ（例えば、図４のステップＳ１０２に相当）と、を任意の順序でコンピュータに実行させるためのプログラムを提案している。
【００２０】
この発明によれば、プログラム内のデータの任意の文字列に対して、任意の順序で、バイト単位での全単射の置換演算処理とバイト単位での全単射の攪拌演算処理と左に任意のビット数分回転させる回転演算処理を行うことから、非常に高い実行効率を実現しつつ、非常に高い安全性を実現することができる。
【発明の効果】
【００２１】
本発明によれば、高速な演算ビット回転、バイト置換及びバイト攪拌のみの処理を用いることにより、実行効率の低下を最小限に抑えることができるという効果がある。
また、本発明によれば、暗号鍵を用いない処理を実現できることから、従来に比べて低コストで実行効率の低下が少ない方法を提供できるという効果がある。
さらに、ビット単位の処理とバイト単位の処理とを組み合わせることにより、高い安全性を実現できるという効果がある。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施形態について、図１から図５を用いて詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００２３】
本実施形態に係るプログラム内データの保護装置は、図３に示すように、プログラム内のデータを関数１、関数２、関数３等の関数間で受け渡す場合に、そのデータを保護するものである。なお、図３において、上の図が従来の関数間におけるデータの受け渡しの様子を示しており、下の図が、本発明を適用した場合の関数間におけるデータの受け渡しの様子を示している。
【００２４】
ここで、関数１に対応するプログラム内データの保護装置の構成は、図１に示すように、演算ビット回転部１０と、バイト置換部２０と、バイト攪拌部３０とから構成されている。
【００２５】
演算ビット回転部１０は、文字列Ａに対し、左にｎビット回転させる演算を行う。以下、この演算をＲ（Ａ、ｎ）と略記する。具体的には、「１０１０１１０１」なる文字列に対して、左に３ビット回転させる演算を行うと、その文字列は、「０１１０１１０１」となる。これを、Ｒ（０ｂ１０１０１１０１、３）＝０１１０１１０１と表記する。
【００２６】
バイト置換部２０は、文字列Ａに対し、バイト単位での全単射の置換を行う演算を行う。以下、この演算をＳ（Ａ）と略記する。具体的には、「００」は「Ｆ４」、「０１」は「９２」、「０２」は「３Ｅ」、「０３」は「Ａ８」、「ＦＥ」は「２１」、「ＦＦ」は「８９」といったぐあいにバイト単位で置換すべき情報を格納したデータテーブルに基づいて、置換が実行される。したがって、「０００１０２０３」なる文字列に対して、置換演算を行うと、「Ｆ４９２３ＥＡ８」となる。これを、Ｓ（０ｘ０００１０２０３）＝０ｘＦ４９２３ＥＡ８と表記する。
【００２７】
バイト攪拌部３０は、文字列Ａに対し、バイト単位での全単射の攪拌を行う演算を行う。以下、この演算をＭ（Ａ）と略記する。具体的には、文字列を「８２Ｆ３１ＣＢ７」とし、これをバイト単位に「８２」をＡ、「Ｆ３」をＢ、「１Ｃ」をＣ、「Ｂ７」をＤとしたときに、Ｍ（Ａ‖Ｂ‖Ｃ‖Ｄ）＝Ｂ‖Ａ‖Ｄ‖Ｃなる攪拌を実行すると、その文字列は、「Ｆ３８２Ｂ７１Ｃ」となる。これを、Ｍ（０ｘ８２Ｆ３１ＣＢ７）＝Ｆ３８２Ｂ７１Ｃと表記する。
【００２８】
一方、関数２に対応するプログラム内データの保護装置の構成は、図２に示すように、演算ビット回転部１０と、バイト置換部２０と、バイト攪拌部３０と、バイト攪拌逆演算部３１と、バイト置換逆演算部３２と、演算ビット回転逆演算部３３とから構成されている。なお、演算ビット回転部１０、バイト置換部２０、バイト攪拌部３０については、すでに説明したものと同様であることから、その詳細な説明は省略する。
【００２９】
バイト攪拌逆演算部３１は、バイト攪拌演算の逆演算であり、以下、この演算をＩＭ（Ａ）と略記する。具体的には、「Ｆ３８２Ｂ７１Ｃ」なる文字列に、バイト攪拌逆演算を行うと、その文字列は、「８２Ｆ３１ＣＢ７」となる。これを、ＩＭ（０ｘＦ３８２Ｂ７１Ｃ）＝０ｘ８２Ｆ３１ＣＢ７と表記する。
【００３０】
バイト置換逆演算部３２は、バイト置換演算の逆演算であり、以下、この演算をＩＳ（Ａ）と略記する。具体的には、「Ｆ４９２３ＥＡ８」なる文字列に、バイト置換逆演算を行うと、その文字列は、「０００１０２０３」となる。これを、ＩＳ（０ｘＦ４９２３ＥＡ８）＝０ｘ０００１０２０３と表記する。
【００３１】
演算ビット回転逆演算部３３は、演算ビット回転演算の逆演算であり、以下、この演算をＲ（Ａ、−ｎ）と略記する。具体的には、「０１１０１１０１」なる文字列に対して、右に３ビット回転させる逆演算を行うと、その文字列は、「１０１０１１０１」となる。これを、Ｒ（０ｂ０１１０１１０１、−３）＝１０１０１１０１と表記する。
【００３２】
次に、図３の関数１に対応するプログラム内データの保護装置における処理動作について、図４を用いて説明する。
まず、プログラム内データの保護装置は、図示しない入力部からデータとして、例えば、「１０１０１１０１」の文字列からなるデータを入力する（ステップＳ１０１）。入力したデータは、演算ビット回転部１０に送信され、例えば、入力した文字列に対して、左に３ビット回転させる演算が施され、Ｒ（０ｂ１０１０１１０１、３）＝０１１０１１０１なる文字列を得る（ステップＳ１０２）。
【００３３】
演算ビット回転部１０において演算処理された文字列「０１１０１１０１」は、バイト置換部２０に送信され、例えば、バイト置換処理により、Ｓ（０ｘ０１１０１１０１）＝Ｆ４２９Ｆ９９２なる文字列を得る（ステップＳ１０３）。
【００３４】
バイト置換部２０において演算処理された文字列「Ｆ４２９Ｆ９９２」は、バイト攪拌部３０に送信され、例えば、バイト攪拌処理により、Ｍ（０ｘＦ４２９Ｆ９９２）＝２９Ｆ４９２Ｆ９なる文字列を得る（ステップＳ１０４）。こうして得られた文字列は、関数２に対して出力される（ステップＳ１０５）。すなわち、これらの処理により、ｄａｔａ＝Ｒ（Ｍ（Ｓ（ｏｕｔｐｕｔ）、ｎ））を得る。
【００３５】
次に、図３の関数２に対応するプログラム内データの保護装置における処理動作について、図５を用いて説明する。
まず、プログラム内データの保護装置は、図示しない入力部からデータとして、例えば、「２９Ｆ４９２Ｆ９」の文字列からなるデータを入力する（ステップＳ２０１）。入力したデータは、バイト攪拌逆演算部３１に送信され、バイト攪拌逆演算処理により、ＩＭ（０ｘ２９Ｆ４９２Ｆ９）＝Ｆ４２９Ｆ９９２なる文字列を得る（ステップＳ２０２）。
【００３６】
バイト攪拌逆演算部３１において逆演算処理された文字列「Ｆ４２９Ｆ９９２」は、バイト置換逆演算部３２に送信され、バイト置換逆演算処理により、ＩＳ（０ｘＦ４２９Ｆ９９２）＝０１１０１１０１なる文字列を得る（ステップＳ２０３）。
【００３７】
バイト置換逆演算部３２において逆演算処理された文字列「０１１０１１０１」は、演算ビット回転逆演算部３３に送信され、演算ビット回転逆演算により、Ｒ（０ｂ０１１０１１０１、−３）＝１０１０１１０１なる文字列を得る（ステップＳ２０４）。ここまでの処理により元の入力値を得ることができる。
【００３８】
次に、演算ビット回転逆演算部３３において逆演算処理された文字列「１０１０１１０１」は、演算ビット回転部１０に送信され、例えば、入力した文字列に対して、左に３ビット回転させる演算が施され、Ｒ（０ｂ１０１０１１０１、３）＝０１１０１１０１なる文字列を得る（ステップＳ２０５）。
【００３９】
演算ビット回転部１０において演算処理された文字列「０１１０１１０１」は、バイト置換部２０に送信され、例えば、バイト置換処理により、Ｓ（０ｘ０１１０１１０１）＝Ｆ４２９Ｆ９９２なる文字列を得る（ステップＳ２０６）。
【００４０】
バイト置換部２０において演算処理された文字列「Ｆ４２９Ｆ９９２」は、バイト攪拌部３０に送信され、例えば、バイト攪拌処理により、Ｍ（０ｘＦ４２９Ｆ９９２）＝２９Ｆ４９２Ｆ９なる文字列を得る（ステップＳ２０７）。こうして得られた文字列は、関数２に対して出力される。すなわち、これらの処理により、ｏｕｔｐｕｔ＝ＩＳ（ＩＭ（Ｒ（ｄａｔａ、−ｎ）））を得る。
【００４１】
したがって、本実施形態においては、プログラムの関数間で受け渡しされるデータを保護するために、演算ビット回転処理、バイト置換処理、バイト攪拌処理の３つの処理を行うため、プログラム中のデータ保護に関して、従来の方法よりも、実行効率の低下を小さくし、安全性を向上させることができる。特に、安全性を必要とするデータに関しては、本実施形態における方法は有効であり、ビット単位の攪拌とバイト単位の攪拌の双方を適用することにより、従来にない高い安全性を実現することができる。
【００４２】
また、本実施形態における変換を用いることにより、関数間でやり取りされるデータの値が撹乱され、さらに、入力として与えられる即値の値も隠蔽することができるという効果を生ずる。
【００４３】
なお、本実施形態においては、演算ビット回転処理、バイト置換処理、バイト攪拌処理の３つの処理を行う例について説明したが、実行効率を優先する場合には、バイト単位の処理、すなわち、バイト置換処理とバイト攪拌処理だけを実行してもよい。この場合、これらの演算はバイト単位での演算のみで実現できるため、非常に高い効率性を得ることができる。
【００４４】
また、本実施形態においては、演算ビット回転処理、バイト置換処理、バイト攪拌処理の順で、処理を行う方法を例示したが、これはあくまでも例示であって、３つの処理を別の手順で行ってもよい。
【００４５】
なお、上記の処理内容を記述したプログラムをコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを実行することによって本発明のハッシュ関数処理装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００４６】
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００４７】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００４８】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【００４９】
【図１】本実施形態に係るプログラム内データの保護装置の構成図である。
【図２】本実施形態に係るプログラム内データの保護装置の構成図である。
【図３】プログラムへの適用に関して、従来例と本実施形態との処理の違いを例示した図である。
【図４】本実施形態に係るプログラム内データの保護装置の処理フロー図である。
【図５】本実施形態に係るプログラム内データの保護装置の処理フロー図である。
【符号の説明】
【００５０】
１０・・・演算ビット回転部、２０・・・バイト置換部、３０・・・バイト攪拌部、３１・・・バイト攪拌逆演算部、３２・・・バイト置換逆演算部、３３・・・演算ビット回転逆演算部
【図１】
2007298847.tif 000003
【図２】
2007298847.tif 000004
【図３】
2007298847.tif 000005
【図４】
2007298847.tif 000006
【図５】
2007298847.tif 000007