説明

暗号化装置

【課題】安全性の高い暗号化装置、暗号解読装置、暗号化プログラム、および暗号解読プログラムを提供する。
【解決手段】暗号化装置は、入力された数値Dおよび数値Xに所定の関数処理を施して数値を出力する(S49〜S63)。暗号化装置は、所定回数だけ数値を入力し、初回の入力の際には、暗号化の対象となる数値Aと、ランダムキーを構成する少なくとも一部の数字Xとを入力し(S43およびS45)、以降の回の入力の際には、前回出力された数値Dと、数値Xとを入力する(S45、S57、およびS75)。暗号化装置は、関数に入力した数値Dが負数の場合に、現在のループの回数Rにしるしを付ける(S59)。暗号化装置は、最終回に出力された数値Dに基づいて暗号#1を作成し(S91)、記憶させた回数Rに基づいて暗号#2を作成し(S93)、ランダムキーに基づいてプロトコルキーを作成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号化装置、暗号解読装置、暗号化プログラム、および暗号解読プログラムに関し、より特定的には、安全性の高い暗号化装置、暗号解読装置、暗号化プログラム、および暗号解読プログラムに関する。
【背景技術】
【0002】
銀行の口座番号や、クレジットカードのカード番号、または各種暗証番号などの数値データは、特別の処理が施されていない限り、それらの数値データを入手した者は誰でも使用することができる。そのため、これらの数値データを取り扱う際には、不正使用を防ぐため、暗号化処理を行う必要がある。特に近年、インターネット上で機密性の高いこれらの数値データをやり取りする機会が増加しており、暗号化技術および暗号解読技術(復号化技術)の重要性は増加している。
【0003】
従来の暗号化技術および暗号解読技術では、ある数値A1を暗号化する場合、暗号化プログラムに従って数値A1を演算することにより、1つの暗号化した数値A2が出力されていた。また数値A2を解読する場合、暗号解読プログラムに従って数値A2を演算することにより、数値A1が出力されていた。
【0004】
なお、出願人の記憶する範囲において、出願前までに先行技術文献情報として開示すべき情報を出願人は有していない。
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記従来の暗号化技術および暗号解読技術では、1つの数値A1には1つの決まった数値A2が対応するため、数値A1と数値A2との関係から暗号化方法および暗号解読方法が解明されやすく、安全性が低かった。また、暗号化方法および暗号解読方法が解明されると、その暗号化方法および暗号解読方法を使用することはもはやできなかった。
【0006】
本発明は、上記課題を解決するものであり、その目的は、安全性の高い暗号化装置、暗号解読装置、暗号化プログラム、および暗号解読プログラムを提供することである。
【課題を解決するための手段】
【0007】
本発明の一の局面に従う暗号化装置は、暗号化の対象となる数値Aの入力を受け付ける受付手段と、任意の値よりなるランダムキーを決定するランダムキー決定手段と、入力された第1および第2の数値に所定の関数処理を施して数値を出力する関数処理手段と、所定回数だけ関数処理手段に数値を入力する関数入力手段であって、初回の入力の際には、第1の数値として数値Aと、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、第1の数値として関数処理手段にて前回出力された数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力する関数入力手段と、関数処理手段にて数値を出力した出力回数をカウントするカウント手段と、関数入力手段にて入力した第1の数値に付いている符号が所定の符号である場合に、カウント手段にてカウントした出力回数を記憶させる記憶手段と、関数処理手段にて最終回に出力された数値に基づいて第1の暗号を作成する第1の暗号作成手段と、記憶手段にて記憶させた出力回数に基づいて第2の暗号を作成する第2の暗号作成手段と、ランダムキーに基づいて第3の暗号を作成する第3の暗号作成手段とを備える。
【0008】
上記暗号化装置において好ましくは、受付手段は外キーの入力をさらに受け付け、外キーと、暗号化装置内に記憶された内内キーとに基づいて内キーを作成する内キー作成手段をさらに備え、第3の暗号作成手段は、外キーと内キーとにさらに基づいて第3の暗号を作成する。
【0009】
上記暗号化装置において好ましくは、関数処理手段は、第1の数値である数値Dと、第2の数値である数値Xとが入力された場合に、関数F(x)に数値Dを入力して得られた数値に対して、関数G(x)に数値Xを入力して得られた数値を作用させることで得られた数値を出力する。
【0010】
上記暗号化装置において好ましくは、関数入力手段にて一の回に入力する第2の数値と、関数入力手段にて他の回に入力する第2の数値とは互いに異なる。
【0011】
本発明の他の局面に従う暗号解読装置は、第1、第2、および第3の暗号の入力を受け付ける暗号受付手段と、第2の暗号に基づいて出力回数を解読する出力回数解読手段と、第3の暗号に基づいてランダムキーを解読するランダムキー解読手段と、入力された第1および第2の数値に所定の逆関数処理を施して数値を出力する逆関数処理手段と、出力回数解読手段にて解読した出力回数に基づいて決定された回数だけ逆関数処理手段に数値を入力する逆関数入力手段であって、初回の入力の際には、第1の数値として第1の暗号に基づく数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、第1の数値として逆関数処理手段にて前回出力された数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力する逆関数入力手段と、逆関数処理手段にて数値を出力した出力回数をカウントする逆関数カウント手段と、逆関数処理手段にて最終回に出力された数値に基づいて暗号化の対象となった数値Aを解読する数値A解読手段とを備える。
【0012】
本発明のさらに他の局面に従う暗号化プログラムは、暗号化の対象となる数値Aの入力を受け付ける受付ステップと、任意の値よりなるランダムキーを決定するランダムキー決定ステップと、入力された第1および第2の数値に所定の関数処理を施して数値を出力する関数処理ステップと、所定回数だけ関数処理ステップに数値を入力する関数入力ステップであって、初回の入力の際には、第1の数値として数値Aと、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、第1の数値として関数処理ステップにて前回出力された数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力する関数入力ステップと、関数処理ステップにて数値を出力した出力回数をカウントするカウントステップと、関数入力ステップにて入力した第1の数値に付いている符号が所定の符号である場合に、カウントステップにてカウントした出力回数を記憶させる記憶ステップと、関数処理ステップにて最終回に出力された数値に基づいて第1の暗号を作成する第1の暗号作成ステップと、記憶ステップにて記憶させた出力回数に基づいて第2の暗号を作成する第2の暗号作成ステップと、ランダムキーに基づいて第3の暗号を作成する第3の暗号作成ステップとをコンピュータに実行させる。
【0013】
本発明のさらに他の局面に従う暗号解読プログラムは、第1、第2、および第3の暗号の入力を受け付ける暗号受付ステップと、第2の暗号に基づいて出力回数を解読する出力回数解読ステップと、第3の暗号に基づいてランダムキーを解読するランダムキー解読ステップと、入力された第1および第2の数値に所定の逆関数処理を施して数値を出力する逆関数処理ステップと、出力回数解読ステップにて解読した出力回数に基づいて決定された回数だけ逆関数処理ステップに数値を入力する逆関数入力ステップであって、初回の入力の際には、第1の数値として第1の暗号に基づく数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、第1の数値として逆関数処理ステップにて前回出力された数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力する逆関数入力ステップと、逆関数処理ステップにて数値を出力した回数をカウントする逆関数カウントステップと、逆関数処理ステップにて最終回に出力された数値に基づいて暗号化の対象となった数値Aを解読する数値A解読ステップとをコンピュータに実行させる。
【発明の効果】
【0014】
本発明によれば、安全性の高い暗号化装置、暗号解読装置、暗号化プログラム、および暗号解読プログラムを提供することができる。
【図面の簡単な説明】
【0015】
【図1】本発明の一実施の形態における暗号化および暗号解読装置の構成を模式的に示すブロック図である。
【図2】本発明の一実施の形態における暗号化処理を概略的に示す図である。
【図3】暗号化処理の際のプロトコルキー、暗号#1、および暗号#2の作成方法を概略的に示す図である。
【図4】本発明の一実施の形態における暗号解読処理を概略的に示す図である。
【図5】暗号解読処理の際の数値Aの解読方法を概略的に示す図である。
【図6】計算機のCPUが実行する暗号化処理のフローチャートである。
【図7】図6の各ステップにおいて得られる数値を模式的に示す図である。
【図8】図6のステップS9の詳細を示すサブルーチンである。
【図9】暗号ループ1号および解読ループ1号として用いられる表の一例を示す図である。
【図10】図6のステップS11の詳細を示すサブルーチンである。
【図11】図10における数値Dの変化の一例を示す図である。
【図12】計算機のCPUが実行する暗号解読処理のフローチャートである。
【図13】図12のステップS215の詳細を示すサブルーチンである。
【発明を実施するための形態】
【0016】
以下、本発明の実施の形態について、図面を用いて説明する。
【0017】
[暗号化および暗号解読装置の構成]
図1は、本発明の一実施の形態における暗号化および暗号解読装置の構成を模式的に示すブロック図である。なお、本実施の形態においては、暗号化および暗号解読装置が計算機である場合に付いて示すが、暗号化および暗号解読装置は関数電卓やPC(Personal Computer)などであってもよい。
【0018】
図1を参照して、本実施の形態における暗号化および暗号解読装置としての計算機10は、CPU1と、RAM2と、ROM3と、HDD4と、モニタなどの表示部5と、キーボードやマウスなどの操作部6とを含む。
【0019】
CPU1は、所定の処理を行なうことにより、RAM2、ROM3のデータの読み込みや、RAM2、ROM3へのデータの書き込みを行なう。
【0020】
RAM2は、CPU1のメインメモリである。RAM2は、CPU1が制御プログラムを実行するときに必要なデータを記憶するためなどに用いられる。
【0021】
ROM3は、たとえばフラッシュROMである。ROM3には、暗号化プログラムや暗号解読プログラムなどの計算機10の動作を行なうための各種プログラムと、各種固定データとが格納されている。ROM3は、書換え不可能なものであってもよい。
【0022】
HDD4は、各種データを記憶する記憶装置である。
【0023】
表示部5は、ユーザが視認可能な表示画面を表示する。
【0024】
操作部6はユーザからの各種入力を受け付ける。特に操作部6は、暗号化処理および暗号解読処理の実行や、暗号化処理および暗号解読処理に用いられる数値の入力などをユーザから受け付ける。
【0025】
[暗号化処理および暗号解読処理の概要]
図2は、本発明の一実施の形態における暗号化処理を概略的に示す図である。
【0026】
図2を参照して、本実施の形態における暗号化処理においては、計算機10は、ユーザから暗号化の対象となる数値(以降、「数値A」と記す)と、外キーとの入力を受け付ける。そしてCPU1は、入力された数値Aおよび外キーに基づいて演算を行い、プロトコルキーと、暗号#1と、暗号#2とを出力する。この暗号化処理には、外キーおよび数値Aの他、ランダムキーと内内キーとが用いられる。
【0027】
外キーは、暗号化処理および暗号解読処理の際にユーザによって入力されるキーである。
【0028】
ランダムキーは、暗号化処理を実行する度に計算機10によって決定される、任意の数字よりなるキーである。
【0029】
内内キーは、暗号化プログラムおよび暗号解読プログラム内(ROM3内)に定数として設定されているキーである。なお、内内キーの代わりに内内キーの土台が暗号化プログラム内に設定されており、暗号化処理および暗号解読処理の際に外キーと内内キーの土台とに基づいて内内キーが演算されてもよい。
【0030】
図3は、暗号化処理の際のプロトコルキー、暗号#1、および暗号#2の作成方法を概略的に示す図である。(a)はプロトコルキーの作成方法を示す図であり、(b)は暗号#1および暗号#2の作成方法を示す図である。
【0031】
図3(a)を参照して、計算機10のCPU1は、外キーと内内キーとに基づいて内キーを作成し、続いてCPU1は、作成した内キーと、外キーと、ランダムキーとに基づいてプロトコルキーを作成する。プロトコルキーは暗号解読処理の際に用いられる情報(ランダムキーなどの情報)を示すキーである。
【0032】
図3(b)を参照して、CPU1は、数値Aとランダムキーとに基づいて前暗号#1(以降、暗号#1の土台と称することがある)および前暗号#2(以降、暗号#2の土台と称することがある)を演算し、続いてCPU1は、作成した前暗号#1および#2と、内キーとに基づいて暗号#1および#2を演算する。暗号#1および#2とは数値Aを暗号化したキーである。
【0033】
図4は、本発明の一実施の形態における暗号解読処理を概略的に示す図である。
【0034】
図4を参照して、本実施の形態における暗号解読処理において、計算機10は、プロトコルキーと、暗号#1および#2と、外キーとの入力を受け付ける。そしてCPU1は、入力されたプロトコルキー、暗号#1および#2、および外キーに基づいて演算を行い、数値Aを出力する。この暗号化処理には内内キーがさらに用いられる。
【0035】
図5は、暗号解読処理の際の数値Aの解読方法を概略的に示す図である。(a)はランダムキーの解読方法を示す図であり、(b)は解読したランダムキーを用いた数値Aの解読方法を示す図である。
【0036】
図5(a)を参照して、計算機10のCPU1は、外キーと内内キーとに基づいて内キーを解読し、続いてCPU1は、作成した内キーと、外キーと、プロトコルキーとに基づいてランダムキーを解読する。図5(b)を参照して、続いてCPU1は、暗号#1および#2と、内キーとに基づいて前暗号#1および#2を解読し、解読した前暗号#1および#2と、解読したランダムキーとに基づいて数値Aを解読する。
【0037】
[暗号化処理]
図6は、計算機のCPUが実行する暗号化処理のフローチャートである。本実施の形態においては、数値A、外キー、内内キー、および内キー(以下、処理に用いられる数値と記す場合がある)の各々は、特に断りがない限り、小数第1位から小数第10位まで10桁の数値として取り扱われる。具体的には、たとえば処理に用いられる数値が10桁の9の数字のみからなる場合には、「0.9999999999」という数値として取り扱われる。なお、処理に用いられる数値の桁数および小数点の位置は任意であり、処理に用いられる数値は整数として(つまり「9999999999」という数値として)取り扱われてもよい。各処理で実行される演算においては、端数に対して四捨五入、切捨て、または切上げなどの処理が適宜なされてもよい。
【0038】
図6を参照して、始めに計算機10のCPU1は、10桁の外キーと、暗号化の対象となる10桁の数値Aとの入力を促すメッセージを表示部5の画面に表示させ、操作部6を通じて外キーおよび数値Aの入力をユーザから受け付ける(S1)。次にCPU1は、しるしをつける個数Zを決定する(S3)。個数Zは、後述する暗号ループ2号(図10)において用いられる数値である。個数Zとしてはたとえば2〜15の中から任意の値が決定される。決定された個数Zの値はたとえばRAM2などに記憶される。
【0039】
次にCPU1は、10桁のランダムキーの土台を決定する(S5)。ランダムキーの土台の値としては、たとえば0.0000000000〜0.9999999999の中から任意の値が決定され、暗号化処理の実行の度に異なる値が決定される。続いてCPU1は、外キーと、暗号化プログラム内に予め登録(設定)されている10桁の内内キーの土台とに基づいて、10桁の内内キーを作成する(S7)。なお、内内キーの土台の代わりに内内キーが暗号化プログラム内に設定されている場合には、ステップS7の処理は省略される。
【0040】
次にCPU1は、後述する暗号ループ1号(図9)を用いて、外キーと内内キーとに基づいて10桁の内キーを作成する(S9)。続いてCPU1は、後述する暗号ループ2号(図10)を用いて、数値Aとランダムキーの土台とに基づいて、暗号#1および#2の土台と、正式なランダムキーとを作成する(S11)。
【0041】
その後CPU1は、正式なランダムキーと、外キーと、内キーとに基づいてプロトコルキーを作成し(S13)、暗号#1の土台に基づいて暗号#1を作成し(S15)、暗号#2の土台と内キーとに基づいて暗号#2を作成し(S17)、処理を終了する。
【0042】
なお、ステップS7、S9、S11、S13、S15、およびS17の処理としては、四則演算、平方根、対数、累乗など各種の演算を単独でまたは組み合わせたものを採用することができる。
【0043】
図7は、図6の各ステップにおいて得られる数値を模式的に示す図である。なお、図7に示された数値には、その一部がアスタリスクを用いて省略されているものがある。
【0044】
図7を参照して、内内キーおよび内キーは、外キーおよび数値Aに基づいて生成されるものであるため、ランダムキーに依存せず、外キーおよび数値Aの組合せが同じであれば常に同じ数値となる。一方、暗号として出力されるプロトコルキー、暗号#1および暗号#2の各々は、外キーおよび数値Aに加えてランダムキーの土台(またはランダムキー)を用いて生成されるため、暗号化処理を実行する度に異なる数値となる。
【0045】
図8は、図6のステップS9の詳細を示すサブルーチンである。
【0046】
図8を参照して、図6のステップS9においてCPU1は、10桁の外キーを10個の数字に分け(S31)、10桁の内内キーを10個の数字に分ける(S33)。次にCPU1は、外キーの10個の数字の各々と、内内キーの10個の数字の各々とに基づいて、演算の基となる10個の数値を作成する(S35)。続いてCPU1は、ステップS35にて得られた10個の数値を、暗号ループ1号を用いて相互に演算することにより、10桁の数字よりなる内キーの土台を作成する(S37)。そしてCPU1は、ステップS37にて得られた内キーの土台に基づいて、10桁の内キーを作成し(S39)、リターンする。
【0047】
図9は、暗号ループ1号および解読ループ1号として用いられる表の一例を示す図である。暗号ループ1号および解読ループ1号では同じ処理が行われる。なお図9の表においては、M51〜M55の欄にのみ数値が示されているが、実際にはM01〜M55の全ての欄に数値が記入される。
【0048】
図9を参照して、たとえば外キーが「0.9988776655」であり、かつ内内キーが「0.65******54」(一部省略)である場合、CPU1は、外キーにおける最上桁の数字「9」と、内キーにおける最上桁の数字「6」とを所定の演算方法にて演算することによって、演算の基となる10個の数値のうち1つ目の数字を作成し、その数字を表中M01の欄に記入する。次にCPU1は、外キーにおける上から2番目の桁の数字「9」と、内キーにおける上から2番目の桁の数字「5」とを所定の演算方法にて演算することによって、演算の基となる10個の数値のうち2つ目の数値を作成し、その数値を表中M02の欄に記入する。同様の方法でCPU1は、外キーの各桁の数字と内キーの各桁の数字とを用いて残り8個の数値を作成し、それぞれの数値を表中M03〜M10の各々の欄に記入する。
【0049】
次に暗号ループ1号を用いた演算が開始される。CPU1は、M11の欄の表中左上にあるM01の欄の数値と、M11の欄の表中左下にあるM02の欄の数値とを所定の演算方法(たとえば2つの数値の差を求める方法)にて演算し、演算結果の数値をM11の欄に記入する。同様の方法でCPU1は、M12〜M19の各欄に関して、各欄から見て表中左上の数値と表中左下の数値とを演算し、演算結果の数値をM12〜M19の各欄に記入する。これにより、暗号ループ1号を用いた1回の演算が終了する。
【0050】
続いてCPU1は、M11〜M19の欄の演算方法と同様の方法で、M11〜M19の各欄の数値を用いてM20〜M27の各欄に数値を記入し、M20〜M27の各欄の数値を用いてM28〜M34の各欄に数値を記入し、M28〜M34の各欄の数値を用いてM35〜M40の各欄に数値を記入し、M35〜M40の各欄の数値を用いてM41〜M45の各欄を記入する。続いてCPU1は、M41〜M45の各欄の数値を用いてM46〜M49の各欄を記入し、M46〜M49の各欄の数値を用いてM50〜M52の各欄を記入し、M50〜M52の各欄の数値を用いてM53およびM54の各欄を記入し、M53およびM54の各欄の数値を用いてM55の欄を記入する。このようにして暗号ループ1号を用いた演算を、記入する欄が1つになるまで繰り返す結果、図9に示すM01〜M55の各欄に数値が記入される。
【0051】
次にCPU1は、図9の表において、最後に得られた5つの数値であるM51〜M55の各々の欄の数値から下2桁の数字を抜き出し、抜き出した計10個の数字を組み合わせたものを内キーの土台とする。たとえばM51〜M55の各々の欄の数値が、「M55:−8802」、「M54:4853」、「M53:−3949」、「M52:−2427」、および「M51:2426」であった場合、それぞれ「02」、「53」、「49」、「27」、「26」という数値が抜き出され、「0.0253492726」という内キーの土台が形成される。
【0052】
なお、図9に示す暗号ループ1号を用いた内キーの土台の作成方法はあくまでも一例であり、内キーの土台および内キーは別の方法で作成されてもよい。また図9においては、M52〜M55の欄の数字に基づいて内キーの土台が作成される場合に付いて示したが、内キーの土台は図9における別の欄の数字に基づいて作成されてもよい。
【0053】
図10は、図6のステップS11の詳細を示すサブルーチンである。
【0054】
図10を参照して、図6のステップS11においてCPU1は、暗号ループ2号の現在の実行回数を示す回数Rの値と、しるしを付けた個数Tの値との各々を0に設定する。そしてCPU1は、ステップS5にて得られた10桁のランダムキーの土台を、10の位から小数第8位までの数値(つまり、「ab.cdefghij」(a〜jは数字)という形の数値)に変形し、これを現在のランダムキーとして設定する(S41)。
【0055】
次に暗号ループ2号を用いた演算が開始される。暗号ループ2号は、入力された数値に所定の関数処理を施して数値を出力するものである。CPU1は、暗号化の対象となる10桁の数値Aを、暗号ループ2号において演算の基となる数値Dとして設定し(S43)、現在のランダムキーの中から整数部分を構成する数値Xを選ぶ(S45)。数値Dおよび数値Xは、暗号ループ2号に入力される2つの数値となる。
【0056】
続いてCPU1は、現在のランダムキーにおいて、数値Xとして使用した2つの数字を現在のランダムキーの末桁に移動し、かつ小数第1位および第2位であった数字が整数部分を構成する数値となるよう(整数部分以外の各桁の数字が2桁繰り上がるよう)、ランダムキーを更新する(S47)。たとえば、数値Xを選択する前のランダムキーが「ab.cdefghij」であった場合には、更新後のランダムキーは「cd.efghijab」となる。これにより、次回ステップS45において選ばれる数値Xは、今回選ばれた数値Xとは別の数値となる。つまり、「ab」→「cd」→「ef」→「gh」→「ij」→「ab」→・・・という順で数値Xが選ばれる。なお、ステップS45およびS47においては、ランダムキーを更新せずにランダムキーから同じ数字を選択し続けてもよいし、2桁以上の数値を選択してもよい。
【0057】
なお、ステップS47を省略して(ランダムキーを更新せずに)、ランダムキーから特定の同じ数値(たとえば「ab」)を選択し続けてもよいし、数値Xとして1つあるいは3つ以上の数字よりなる数値を選択してもよい。
【0058】
続いてCPU1は、数値Dが負数であるか否かを判別する(S49)。ステップS49において数値Dが正数であると判別した場合には(S49でNO)、CPU1は、数値Dの対数値を求め(S71)、ステップS45にて選ばれた数値Xを関数G(x)に入力して得られる数値G(X)を、この対数値に対して作用させる(S73)。なお、関数G(x)は四則演算、平方根、自然対数、累乗などどのような演算を含んでいてもよく、数値G(X)の作用のさせ方も、たとえば対数値と数値G(X)との四則演算を行うなど、どのようなものであってもよい。
【0059】
次にCPU1は、ステップS73において得られた演算結果(対数値に数値G(X)を作用させることによって得られた数値)が数値Dとなるように、数値Dを更新し(S75)、現在のループの回数Rに1を加える(S77)。これにより、暗号ループ2号を用いた1回の演算が終了する。更新後の数値Dは、暗号ループ2号から出力された数値であり、暗号ループ2号を用いた次回の演算において入力される数値となる。その後CPU1はステップS45の処理へ進み、暗号ループ2号を用いた演算を繰り返す。
【0060】
ステップS49において数値Dが負数であると判別した場合には(S49でYES)、CPU1は、数値Dからマイナスを取って正数とし(S51)、正数にした数値Dの対数値を求め(S53)、ステップS55の処理へ進む。
【0061】
ここで、上記のステップS71の処理、ならびにステップS51およびS53の処理は、関数F(x)=|logx|に数値Dを入力して数値F(D)を得る処理である。「logx」の底はどのような数字でもよく、「logx」はたとえば自然対数や常用対数であってもよい。また、関数F(x)はどのような関数であってもよい。
【0062】
続いてCPU1は、ステップS45にて選ばれた数値Xを関数G(x)に入力して得られた数値G(X)を、この対数値に対して作用させる(S55)。次にCPU1は、ステップS55において得られた演算結果(対数値に数値G(X)を作用させることによって得られた数値)が数値Dとなるように、数値Dを更新し(S57)、現在のループの回数Rにしるしを付け(つまり、現在のループの回数Rを記憶させ)(S59)、現在のループの回数R、および現在のしるしを付けた個数Tに1を加える(S61)。更新後の数値Dは、暗号ループ2号から出力された数値であり、暗号ループ2号を用いた次回の演算が行われる場合には、暗号ループ2号を用いた次回の演算において入力される数値となる。
【0063】
次にCPU1は、しるしを付けた個数Tが個数Zに達したか否かを判別する(S63)。これにより、暗号ループ2号を用いた1回の演算が終了する。ステップS63において、しるしを付けた個数Tが個数Zに未だ達していないと判別した場合(S63でNO)、CPU1はステップS45の処理へ進み、暗号ループ2号を用いた演算を繰り返す。
【0064】
ステップS63において、しるしを付けた個数Tが個数Zに達したと判別した場合(S63でYES)、CPU1は、最後に得られた数値D(最終回に暗号ループ2号から出力された数値D)を暗号#1の土台とし(S91)、しるしを付けたZ個のループの回数Rと、内キーとに基づいて、暗号#2の土台を作成する(S93)。続いてCPU1は、現在のランダムキーを正式なランダムキーとし(S95)、処理を終了する。なお、上述の暗号ループ2号においては、数値Dが負数である場合にしるしを付ける代わりに、数値Dが正数である場合に現在のループの回数Rにしるしを付けてもよい。
【0065】
図11は、図10における数値Dの変化の一例を示す図である。なお、図11では、しるしをつける個数Zが5である場合の数値Dの変化を示しており、図11に示された数値Dには、その一部がアスタリスクを用いて省略されているものがある。
【0066】
図11を参照して、暗号ループ2号の現在の実行回数である回数Rが0である場合には、正数である「0.4433221100」という数値Dが暗号ループ2号に入力され、「−0.80********」に更新された数値Dが暗号ループ2号から出力される。回数Rが1である場合には、負数である「−0.80********」という数値Dが入力され、「−0.21********」に更新された数値Dが出力される。この場合、回数R=1にしるしが付けられ、個数Tが1とされる。回数Rが2である場合には、負数である「−0.21********」という数値Dが入力され、「−1.44********」に更新された数値Dが出力される。この場合、回数R=2にしるしが付けられ、個数Tが2とされる。その後、暗号ループ2号の処理が繰り返され、回数Rが6である場合には、負数である「−0.01********」という数値Dが入力され、「−4.31790552141」に更新された数値Dが出力される。この場合、回数R=6にしるしが付けられ、個数Tが5とされる。その結果個数Tが個数Zに達すると、最終回に出力された数値Dである「−4.31790552141」が暗号#1の土台とされ、しるしが付けられた回数Rである「1」、「2」、「3」、「5」、および「6」という数値に基づいて、暗号#2の土台が作成される。
【0067】
[暗号解読処理]
図12は、計算機のCPUが実行する暗号解読処理のフローチャートである。
【0068】
図12を参照して、始めに計算機10のCPU1は、暗号#1、暗号#2、およびプロトコルキーの入力を促すメッセージを表示部5の画面に表示させ、暗号#1、暗号#2、およびプロトコルキーの入力をユーザから受け付ける(S201)。次にCPU1は、外キーの入力を促すメッセージを表示部5の画面に表示させ、外キーの入力をユーザから受け付ける(S203)。続いてCPU1は、暗号化処理におけるステップS7(図6)と同様の方法で、外キーと、暗号化プログラム内に事前に登録(設定)されている10桁の内内キーの土台とに基づいて、10桁の内内キーを作成する(S205)。なお、内内キーが暗号解読プログラム内に設定されている場合には、ステップS205の処理は省略される。
【0069】
次にCPU1は、暗号化処理におけるステップS9(図6)と同様の方法で、解読ループ1号を用いて、外キーと内内キーとに基づいて10桁の内キーを作成する(S207)。
【0070】
続いてCPU1は、プロトコルキーと、外キーと、内キーとに基づいてランダムキーを作成し(S209)、暗号#1に基づいて暗号#1の土台を作成し(S211)、暗号#2と内キーとに基づいて暗号#2の土台を作成する(S213)。ステップS209、S211およびS213の各々においては、暗号化処理におけるステップS13、S15およびS17の各々において実行される演算とは逆の演算が行われる。たとえばステップS15において暗号#1の土台に関数H(x)を作用させることで暗号#1を作成した場合には、ステップS211においては暗号#1に逆関数H-1(x)を作用させることで暗号#1の土台が作成される。
【0071】
その後CPU1は、後述する解読ループ2号(図13)を用いて、暗号#1および#2の土台と、正式なランダムキーとに基づいて、暗号化の対象となった数値Aを作成し(S215)、処理を終了する。
【0072】
図13は、図12のステップS215の詳細を示すサブルーチンである。
【0073】
図13を参照して、図12のステップS215においてCPU1は、暗号#2の土台と内キーとに基づいて、しるしを付けたZ個のループの回数Rを抽出する(S221)。ステップS221においては、図10のステップS93において実行される演算とは逆の演算が行われる。
【0074】
続いてCPU1は、ステップS221で抽出されたZ個のループの回数Rに基づいて決定され、たとえば最も大きい回数Rに回数Uを設定する(S223)。回数Uは、解読ループ2号における現在の実行回数を示すものである。たとえばステップS221において「1」、「2」、「3」、「5」、および「6」という回数Rの値が抽出された場合には、これらの回数Rのうち最も大きい回数であえる「6」に回数Uが設定される。
【0075】
次に解読ループ2号を用いた演算が開始される。解読ループ2号は、入力された数値に所定の逆関数処理を施して数値を出力するものである。CPU1は、暗号#1の土台を、解読ループ2号において演算の基となる数値Eとして設定する(S225)。続いてCPU1は、現在のランダムキーにおいて、ランダムキーの末桁の2つの数字が整数部分を構成し、かつ整数部分であった2つの数字が小数第1位および第2位である数値となるよう(末2桁以外の各桁の数字が2桁繰り下がるよう)、ランダムキーを更新する(S227)。たとえば、現在のランダムキーが「ab.cdefghij」であった場合には、更新後のランダムキーは「ij.abcdefgh」となる。続いてCPU1は、現在のランダムキー(つまり更新後のランダムキー)の中から、整数部分を構成する数値Xを選ぶ(S229)。数値Eおよび数値Xは、解読ループ2号に入力される2つの数値となる。
【0076】
次にCPU1は、現在のループの回数Uにしるしが付けられているか否かを判別する(S231)。たとえばステップS221において「1」、「2」、「3」、「5」、および「6」という回数Rの値が抽出された場合において、現在のループの回数Uが「6」であるときは、現在のループの回数Uにしるしが付けられていると判別される。
【0077】
ステップS231において、現在のループの回数Uにしるしが付けられていると判別した場合(S231でYES)、ステップS229にて選ばれた数値Xを逆関数G-1(x)に入力して得られる数値G-1(X)を、数値Eに対して作用させる(S233)。逆関数G-1(x)は、図10のステップS55およびS73にて使用された関数G(x)の逆関数である。続いてCPU1は、ステップS233において得られた演算結果(数値Eに数値G-1(X)を作用させることによって得られた数値)を指数部分とし、かつステップS53およびS73において使用された対数の底を整数部分とする数値を求める(S235)。
【0078】
次にCPU1は、ステップS235にて得られた数値にマイナスを付けてこの数値を負数にし(S237)、ステップS237において得られた数値が数値Eとなるように、数値Eを更新する(S239)。更新後の数値Eは、解読ループ2号を用いた次回の演算が行われる場合には、解読ループ2号を用いた次回の演算において入力される数値となる。その後CPU1は、現在のループの回数Uから1を引き(S241)、ステップS261の処理へ進む。
【0079】
ステップS231において、現在のループの回数Uにしるしが付けられていないと判別した場合(S231でNO)、ステップS229にて選ばれた数値Xを逆関数G-1(x)に入力して得られる数値G-1(X)を、数値Eに対して作用させる(S251)。続いてCPU1は、ステップS251において得られた演算結果(数値Eに数値G-1(X)を作用させることによって得られた数値)を指数部分とし、かつステップS53およびS73において使用された対数の底を整数部分とする数値を求める(S253)。
【0080】
次にCPU1は、ステップS253にて得られた数値が数値Eとなるように、数値Eを更新する(S255)。更新後の数値Eは、解読ループ2号を用いた次回の演算が行われる場合には、解読ループ2号を用いた次回の演算において入力される数値となる。その後CPU1は、現在のループの回数Uから1を引き(S257)、ステップS261の処理へ進む。
【0081】
ステップS261においてCPU1は、現在のループの回数Uが0になったか否かを判別する(S261)。これにより、解読ループ2号を用いた1回の演算が終了する。ステップS261において、現在のループ回数が未だ0になっていないと判別した場合(S261でNO)、CPU1はステップS227の処理へ進み、解読ループ2号を用いた演算を繰り返す。現在のループ回数が0になったと判別した場合(S261でYES)、CPU1は、最後に得られた数値D(最終回に解読ループ2号から出力された数値D)を数値Aとして決定し(S263)、処理を終了する。
【0082】
[実施の形態の効果]
本実施の形態によれば、暗号化処理にランダムキーを用いることで、暗号化の対象となる1つの数値から互いに異なる第1の暗号(暗号#1)、第2の暗号(暗号#2)、および第3の暗号(プロトコルキー)が出力される。また、暗号化の対象となる数値が同じであっても、暗号化処理を施す度に、毎回異なった第1〜第3の暗号の組が出力される。これにより、暗号化方法および暗号解読方法が解明されにくくなり、安全性を向上することができる。
【0083】
また、入力された外キーと、暗号化装置内に記憶された内内キーとに基づいて内キーを作成し、外キーと内キーとにさらに基づいて第3の暗号を作成することにより、万が一第1〜第3の暗号が第三者に盗まれた場合であっても、その第三者による解読を防ぐことができる。すなわち、第1〜第3の暗号とともに外キーおよび内内キーを入手しなければ、第三者は暗号を解読することができない。加えて、万が一暗号化プログラムまたは暗号解読プログラムが露見しても、内内キーを変更することで、暗号化プログラムまたは暗号解読プログラムを再び安全に使用することができる。
【0084】
[その他]
上述の実施の形態においては、暗号化処理および暗号解読処理の両方を行う暗号化および暗号解読装置について示したが、本発明の装置は、暗号化処理および暗号解読処理のうちいずれか一方のみの処理を行うものであってもよい。
【0085】
上述の実施の形態における暗号化処理および暗号解読処理においては、外キー、内内キー、および内キーが用いられなくてもよく、暗号化処理および暗号解読処理は、暗号化の対象となる数値Aの入力を受け付け、第1〜第3の暗号を出力するもの、または第1〜第3の暗号の入力を受け付け、暗号化の対象となる数値Aを出力するものであればよい。
【0086】
上述の実施の形態における暗号化装置および暗号解読装置は、たとえば以下の形態などで利用可能である。PCと計算機との通信の際には、PCは、PCが搭載する暗号化装置を用いてデータの暗号化処理を行い、暗号化したデータを計算機へ送信する。計算機は、計算機が搭載する暗号解読装置を用いて、受信したデータの暗号解読処理を行い、元のデータを得る。また、買い手であるユーザがインターネットショッピングにおいて商品を購入する場合において、買い手側PCからインターネットを通じて売り手側PCへクレジットカードに関する情報を送信するときに、買い手側PCは、買い手側PCが搭載する暗号化装置を用いてクレジットカードに関する情報の暗号化処理を行い、暗号化した情報を売り手側PCへ送信する。売り手側PCは、売り手側PCが搭載する暗号解読装置を用いて、受信した情報の暗号解読処理を行い、元のクレジットカードに関する情報を得る。
【0087】
上述の実施の形態における処理は、ソフトウェアにより行なっても、ハードウェア回路を用いて行なってもよい。また、上述の実施の形態における処理を実行するプログラムを提供することもできるし、そのプログラムをCD−ROM、フレキシブルディスク、ハードディスク、ROM、RAM、メモリカードなどの記録媒体に記録してユーザに提供することにしてもよい。プログラムは、CPUなどのコンピュータにより実行される。また、プログラムはインターネットなどの通信回線を介して、装置にダウンロードするようにしてもよい。
【0088】
上述の実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0089】
1 CPU
2 RAM
3 ROM
4 HDD
5 表示部
6 操作部
10 計算機

【特許請求の範囲】
【請求項1】
暗号化の対象となる数値Aの入力を受け付ける受付手段と、
任意の値よりなるランダムキーを決定するランダムキー決定手段と、
入力された第1および第2の数値に所定の関数処理を施して数値を出力する関数処理手段と、
所定回数だけ前記関数処理手段に数値を入力する関数入力手段であって、初回の入力の際には、前記第1の数値として前記数値Aと、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、前記第1の数値として前記関数処理手段にて前回出力された数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力する関数入力手段と、
前記関数処理手段にて数値を出力した出力回数をカウントするカウント手段と、
前記関数入力手段にて入力した第1の数値に付いている符号が所定の符号である場合に、前記カウント手段にてカウントした出力回数を記憶させる記憶手段と、
前記関数処理手段にて最終回に出力された数値に基づいて第1の暗号を作成する第1の暗号作成手段と、
前記記憶手段にて記憶させた出力回数に基づいて第2の暗号を作成する第2の暗号作成手段と、
前記ランダムキーに基づいて第3の暗号を作成する第3の暗号作成手段とを備えた、暗号化装置。
【請求項2】
前記受付手段は外キーの入力をさらに受け付け、
前記外キーと、暗号化装置内に記憶された内内キーとに基づいて内キーを作成する内キー作成手段をさらに備え、
前記第3の暗号作成手段は、前記外キーと前記内キーとにさらに基づいて第3の暗号を作成する、請求項1に記載の暗号化装置。
【請求項3】
前記関数処理手段は、前記第1の数値である数値Dと、前記第2の数値である数値Xとが入力された場合に、関数F(x)に前記数値Dを入力して得られた数値に対して、関数G(x)に前記数値Xを入力して得られた数値を作用させることで得られた数値を出力する、請求項1または2に記載の暗号化装置。
【請求項4】
前記関数入力手段にて一の回に入力する前記第2の数値と、前記関数入力手段にて他の回に入力する前記第2の数値とは互いに異なる、請求項1〜3のいずれかに記載の暗号化装置。
【請求項5】
第1、第2、および第3の暗号の入力を受け付ける暗号受付手段と、
前記第2の暗号に基づいて出力回数を解読する出力回数解読手段と、
前記第3の暗号に基づいてランダムキーを解読するランダムキー解読手段と、
入力された第1および第2の数値に所定の逆関数処理を施して数値を出力する逆関数処理手段と、
前記出力回数解読手段にて解読した出力回数に基づいて決定された回数だけ前記逆関数処理手段に数値を入力する逆関数入力手段であって、初回の入力の際には、前記第1の数値として前記第1の暗号に基づく数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、前記第1の数値として前記逆関数処理手段にて前回出力された数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力する逆関数入力手段と、
前記逆関数処理手段にて数値を出力した出力回数をカウントする逆関数カウント手段と、
前記逆関数処理手段にて最終回に出力された数値に基づいて暗号化の対象となった数値Aを解読する数値A解読手段とを備えた、暗号解読装置。
【請求項6】
暗号化の対象となる数値Aの入力を受け付ける受付ステップと、
任意の値よりなるランダムキーを決定するランダムキー決定ステップと、
入力された第1および第2の数値に所定の関数処理を施して数値を出力する関数処理ステップと、
所定回数だけ前記関数処理ステップに数値を入力する関数入力ステップであって、初回の入力の際には、前記第1の数値として前記数値Aと、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、前記第1の数値として前記関数処理ステップにて前回出力された数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力する関数入力ステップと、
前記関数処理ステップにて数値を出力した出力回数をカウントするカウントステップと、
前記関数入力ステップにて入力した第1の数値に付いている符号が所定の符号である場合に、前記カウントステップにてカウントした出力回数を記憶させる記憶ステップと、
前記関数処理ステップにて最終回に出力された数値に基づいて第1の暗号を作成する第1の暗号作成ステップと、
前記記憶ステップにて記憶させた出力回数に基づいて第2の暗号を作成する第2の暗号作成ステップと、
前記ランダムキーに基づいて第3の暗号を作成する第3の暗号作成ステップとをコンピュータに実行させる、暗号化プログラム。
【請求項7】
第1、第2、および第3の暗号の入力を受け付ける暗号受付ステップと、
前記第2の暗号に基づいて出力回数を解読する出力回数解読ステップと、
前記第3の暗号に基づいてランダムキーを解読するランダムキー解読ステップと、
入力された第1および第2の数値に所定の逆関数処理を施して数値を出力する逆関数処理ステップと、
前記出力回数解読ステップにて解読した出力回数に基づいて決定された回数だけ前記逆関数処理ステップに数値を入力する逆関数入力ステップであって、初回の入力の際には、前記第1の数値として前記第1の暗号に基づく数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、前記第1の数値として前記逆関数処理ステップにて前回出力された数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力する逆関数入力ステップと、
前記逆関数処理ステップにて数値を出力した回数をカウントする逆関数カウントステップと、
前記逆関数処理ステップにて最終回に出力された数値に基づいて暗号化の対象となった数値Aを解読する数値A解読ステップとをコンピュータに実行させる、暗号解読プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2012−124761(P2012−124761A)
【公開日】平成24年6月28日(2012.6.28)
【国際特許分類】
【出願番号】特願2010−274741(P2010−274741)
【出願日】平成22年12月9日(2010.12.9)
【特許番号】特許第4796658号(P4796658)
【特許公報発行日】平成23年10月19日(2011.10.19)
【出願人】(510325710)
【氏名又は名称原語表記】Ghirardelli Sergio
【住所又は居所原語表記】Via Valeriana 4 23100 SONDRIO Italy
【Fターム(参考)】