説明

全単射写像拡大による擬似乱数生成法

【課題】現在の暗号化の安全性は数学的な問題解決のための計算の膨大さによっているが、一方向性で保証されていたハッシュ関数の脆弱性が指摘されており、計算の容易さと一方向性を両立させる理想的な擬似乱数を生成する。
【解決手段】ビット情報を拡大し元の情報の全単射写像を作り疑似乱数化する。例えば、一つの2ビット値をもう一つの2ビット値をもとに換字と並べ替えで置換したものはこれらの組み合わせをEXOR演算した値と共にベクトルとも云えるパターンを持つ。このベクトルを選択して並べることで原像よりも拡大された全単射写像を作ることが出来る。また、変換することなく原像の情報を取り出し二重に連結することでも、原像よりも拡大された全単射写像を作ることが出来る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は擬似乱数を生成するものであり、その一方向性から暗号化技術に関連する。
【背景技術】
【0002】
本発明のようにビット情報を換字と並べ替えで置換することはシャノンのSTN構造と呼ばれ、古くはDESのSボックスを作成することに用いられているものであって
【特許文献1】国際出願番号 PCT/JP2005/008646と
【特許文献2】特願2009−265286には会員のパスワードをネットワーク運営者に対して秘密にしたまま会員本人と認証申請者の個人的同定できることが示されており
【特許文献2】には擬似乱数発生器についての言及がされていて、その説明に本明細書と同様の図表が用いられているものの、本発明は擬似乱数生成法であって
【特許文献1】や
【特許文献2】と異なる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
現在の暗号化の安全性は素因数分解や楕円関数など効率的な解法が見つかっていない数学的な問題解答のために費やされるコンピュータ的時間量の膨大さによる一方向性で保証される。
一方、一方向性ではないかと予想されていたハッシュ関数の多くはその脆弱さが指摘され、その安全性は数学の進歩と反比例すると言える。
計算の容易さと一方向性を両立させるには理想的な擬似乱数を作ることが必要である。
【課題を解決するための手段】
【0004】
本発明は、ビット情報を拡大し元の情報の全単射写像を作り疑似乱数化するものである。
まず最も簡単なものとして、6ビット情報を変換することなしに8ビットの全単射写像に拡大して下に示す。
2ビットを1単位として4つの変数A、B、C、Dのそれぞれが1ビットの情報を持つこととしてAB、CDの2つのブロックとする。
それぞれ1ビットの情報を持つ変数YとZを追加して6ビット情報とし、AB、CDのブロックに付け加えられる。
ABYZの値の4ビットとCDYZの4ビットの計8ビットをABYZCDYZの順に並べたものが表1である。
Y、Z、AとB、C、Dの組み合わせは64通りあって、行見出しにYZAの値を、列見出しにBCDの値を示す。
表1の各値はYZABCDの値と一対一対応していてYZABCDの全単射写像といえる。
表2は表1の各値を16進数で表現したものである。
【表1】


【表2】


因みにYZABCDに加えて変数W、Xがそれぞれ1ビットの情報を持つこととして計8ビットの情報を変換することなしに16ビットの全単射写像に拡大するには先のABYZCDYZを2ビットずつに区切ってABWXYZWXCDWXYZWXというように並べればよい。
つまり写像を2ビットずつに分割し分割1単位毎に2ビットを付け加えて連結することであり元の情報のビット数が増えるごとにこれをを繰り返す。
【0005】
下の表3は変数a、b、c、dのそれぞれが1ビットの情報を持つこととして、それらの組み合わせをEXOR演算したものである。
【表3】


a、b、c、dの各ビットを取り出し、並べ替えてEXOR演算することによって、異なるパターンでa、b、c、d各値に対応する11の変換がある。
それらをベクトルということにして1から11の添え字をつけてベクトルV(1)のように表現するのだが、後でこれらを組み合わせ何度か計算するので、解りやすくするためにa^bを mといい、a^cを oと、a^dを pと、b^cを qと、b^dを rと、c^dを nということにする。
それ以外にa^b^cは iと、a^b^dは jと、a^c^dは hと、b^c^dは gといい、そしてa^b^c^dを sということにする。
そしてこれ以降m、o、p、q、rなどはそれぞれ独自のパターンについての名前とし、オペランドを変化させたときの各ベクトルの状態についてはベクトルV(1)からベクトルV(11)などと表現することとする。
【0006】
次にa、b、c、dを換字と並べ替えで置換する手順について下の表4を用いて説明する。
表4の右半分は表3と同じである。
【表4】


各2ビットのレジスタ1とレジスタ2、そして作業レジスタを用意する。
その変換規則は
1.レジスタ1とレジスタ2の値をEXOR演算してその値を作業レジスタにストアする。
2.もしレジスタ2の各ビットの値が等しければ作業レジスタの値をそのまま、もしそうでなければ作業レジスタの値を上下入れ替える。
3.レジスタ2の値をレジスタ1に移動し、作業レジスタの値をレジスタ2に移動する。
4.作業レジスタの値を出力するか、又は繰り返し実行する。
というものである。
以下、レジスタ1の値をレジスタ2でEXOR演算しレジスタ2の各ビットの比較演算値で並べ替えを選択するという一連の操作をXOR−P(permutation)演算と言い、情報abの値をレジスタ1にストアし、情報cdの値をレジスタ2にストアしてXOR−P演算することを、レジスタ1情報abをレジスタ2情報cdでXOR−P演算すると言うことにする。
表4は00から11までの2ビット情報を持つレジスタ1情報abを同じく00から11までの2ビット情報を持つレジスタ2情報cdでXOR−P演算を繰り返した途中経過を遷移表で表したものである。
表4の1列目はレジスタ1の初期状態abの値であり、2列目はレジスタ2の情報cdである。
以下で説明する遷移表についても1列目はレジスタ1の初期状態のビット値であり、2列目はレジスタ2のビット値である。
表4の3列目はefと名付けられていて、レジスタ1情報abをレジスタ2情報cdでXOR−P演算した作業レジスタの値の状態である。
それ以降はレジスタ1とレジスタ2の情報を入れ替えてXOR−P演算を実行する度の、作業レジスタの値の状態ごとにgh、ij、klと名前を付けた。
gは表3で説明したb^c^dと、hはa^c^dと、iはa^b^cと、jはa^b^d と同じである。
しかしe、f、k、lはa、b、c、dをEXOR演算するだけでは生成されない。
そして、これらのベクトルもe、f、k、lはab、cdをオペランドとした時のそれぞれのパターン名であり、オペランドを変化させたときの各ベクトルの状態についてはベクトルU(1)からベクトルU(8)などと表現することとする。
下の表5はe、f、k、lの各ベクトルを順に並べたものが abと cdの2ビット値に対応する様子を示すもので、行見出しは abの値であり列見出しは cdの値である。
表5ではefklがabcdと一対一対応せず2対1対応していて、efklの値からabcdを求められないのは後述の表10を見れば解る。
【表5】


この変換は最大でも6回で循環するため7列目は省略する。
XOR−P演算の順序を違えてレジスタを入れ替えてからEXOR演算した場合、3列目と6列目の値の状態が交換されるだけであって大きな差異はない。
そこで、このP−XOR演算ともいうべき方法についてこれ以降、言及することはしない。
【0007】
さきのY、Z、A、B、C、DについてXOR−P演算をして6ビット情報を8ビットの全単射写像に拡大する。
ここでもAB、CDにYZが付け加えられたものとして考える。
下の表6はi、j、k、lの各ベクトルを順に並べたものが abと cdの2ビット値に対応する様子を示すもので、行見出しは abの値であり列見出しは cdの値である。
ijklがabcdと一対一対応していて、ijklがabcdの全単射写像であるのが解る。
【表6】


ABを第1オペランドとし、CDを第2オペランドとしてXOR−P演算をしてベクトルU(5)とベクトルU(6)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
即ちこれらはabcdの全単射写像ijklであってこれらをIJKLということにする。
表1、表2で全単射写像拡大したときABYZとCDYZを取り出して示したが、今回の全単射写像拡大にはABCDの全単射写像IJKLを2ビットずつに分割してYZを作用させIJYZとKLYZをXOR−P演算する。
IJを第1オペランドとし、YZを第2オペランドとしてXOR−P演算をしてベクトルU(1)とベクトルU(2)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
これらは表5で2対1対応すると説明したe、f、k、lのことである。
つぎにKLを第1オペランドとし、やはりYZを第2オペランドとしてXOR−P演算をしてベクトルU(5)とベクトルU(6)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
これらは表6で一対一対応すると説明したi、j、k、lのことである。
これら8ビットを16進数で表したのが表7である。
表7の各値はYZABCDの値に一対一対応していてYZABCDの全単射写像といえる。
【表7】

【0008】
つぎに変数W、Xがそれぞれ1ビットの情報を持つこととしてW、X、Y、Z、A、B、C、DについてXOR−P演算をして8ビット情報を16ビットの全単射写像に拡大して、この全単射写像拡大手続きが有用であることを示す。
さきのY、Z、A、B、C、Dについての8ビットの全単射写像をMNOPQRSTとする時、
MN、OP、QR、STのそれぞれにWXを作用させる。
つまり写像を2ビットずつに分割し分割1単位毎にWXを作用させて連結するのは変換しない表1と表2のときと同じであり、元の情報のビット数が増えるごとにこれをを繰り返すことも同じである。
MNを第1オペランドとし、WXを第2オペランドとしてXOR−P演算をしてベクトルU(1)とベクトルU(2)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
OPを第1オペランドとし、WXを第2オペランドとしてXOR−P演算をしてベクトルU(1)とベクトルU(2)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
QRを第1オペランドとし、WXを第2オペランドとしてXOR−P演算をしてベクトルU(1)とベクトルU(2)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
これらは表5で2対1対応すると説明したe、f、k、lのことである。
最後にSTを第1オペランドとし、やはりWXを第2オペランドとしてXOR−P演算をしてベクトルU(5)とベクトルU(6)そしてベクトルU(7)とベクトルU(8)の4ビットを求める。
これらは表6で一対一対応すると説明したi、j、k、lのことである。
これら16ビットを16進数で表したのが表8である。
表の各値はWXYZABCDの値に一対一対応していてWXYZABCDの全単射写像といえる。
【表8】

【0009】
さきに作った全単射写像を利用すれば、上記と同じように2ビットの変数を増やして2倍のビット数の全単射写像を出力できるのは当然でこれ以上の説明はしない。
つまり上記の全単射写像拡大の手続きはNビットの変数について2の(N÷2)乗ビットの全単射写像を出力する。
また、最後の1ビットが出力されるまでY、Z、A、B、C、Dの値を決定することが出来ない。
しかし、最後の1ビットが出力されたとき変数全体の値が解ることになり次のビットの値を予測することができる。
さきのY、Z、A、B、C、Dの全単射写像についての原像復元手続きは以下の通りである。
Y、Z、A、B、C、Dについての8ビットの全単射写像をMNOPQRSTとする時、
QRSTはKLを第1オペランドとしYZを第2オペランドとしてXOR−P演算をしたベクトルU(5)、ベクトルU(6)、ベクトルU(7)、ベクトルU(8)であって
ベクトルU(5)、ベクトルU(6)即ちベクトルijを第1オペランドとしベクトルU(7)、ベクトルU(8)即ちベクトルklを第2オペランドとしてXOR−P演算をした遷移表が下の表9であることから
【表9】


QRを第1オペランドとしSTを第2オペランドとしてXOR−P演算をしたベクトルU(1)、ベクトルU(2)、ベクトルU(3)、ベクトルU(4)がKLYZである。
つぎにMNOPはIJを第1オペランドとし、YZを第2オペランドとしてXOR−P演算をしてベクトルU(1)とベクトルU(2)そしてベクトルU(7)とベクトルU(8)であるけれども、
ベクトルU(1)、ベクトルU(2)即ちベクトルefを第1オペランドとし、ベクトルU(7)とベクトルU(8)即ちベクトルklを第2オペランドとしてXOR−P演算をした遷移表が下の表10であるのでMNOPだけからIJを求めることは出来ない。
【表10】


そこでPOを第1オペランドとし、先に求めたZYを第2オペランドとしてXOR−P演算をする。
これはベクトルlkを第1オペランドとし、dcを第2オペランドとしてXOR−P演算をしたものと同じでありベクトルU(2)、ベクトルU(1)がIJであることは表11の遷移表で解る。
【表11】


こうして求められたIJKLを表9のとおりXOR−P演算をしたベクトルU(1)、ベクトルU(2)、ベクトルU(3)、ベクトルU(4)がA、B、C、Dである。
こうして直線的に元のY、Z、A、B、C、Dが求まる。
【0010】
さて最初に述べた表2の全単射拡大写像とさきの表7の全単射拡大写像の各値をそれぞれEXOR演算したものが表12である。
表の各値はYZABCDの値に一対一対応していてYZABCDの全単射写像といえる。
【表12】


表2の全単射拡大写像はABYZCDYZであり、表7の全単射拡大写像MNOPQRSTはYZABCDを変換したものであって、どちらもYZABCDの全単射拡大写像である。
ABYZCDYZの値か又はMNOPQRSTの値をもとにYZABCDの値を求めようとしても、表12の値からABYZCDYZの値とMNOPQRSTの値に分離することは出来ないのは当然である。
YZABCDの値を知らなければABYZCDYZの値か又はMNOPQRSTの値を生成できない。
ABYZCDYZとMNOPQRSTをEXOR演算した表12の各値は原像復元手続きの無いYZABCDの全単射拡大写像である。
写像と原像との対応を知るためには表12が必要で、これは表12の各値からYZABCDの値を知るには全鍵検索をしなければならないということである。
悪意のある解読者がいたとしても、解読者が予め表12を準備することができないなら、YZABCDの値を増分するなどと予告されていて上記と同じ手続きで新しい8ビットが出力されても、その最初のビットが0か1かさえ予測することは出来ない。
YZABCDのビット数を充分大きくすることで全鍵検索が必要な表12の大きさが増大して秘密であるべき原像の値を知るためのコンピュータ的時間量が膨大であれば、たとえアルゴリズムが全て公開されていて悪意のある解読者が全く同じ擬似乱数生成器を持っていたとしても解読者は秘密であるべき原像の値を知ることなしに同じ擬似乱数を再現することも出来ないし原像の値の変更とその増分数が分かっても未来の出力を予測することはできない。
全鍵検索をしなくては原像の値を知ることの出来ないこの全単射拡大写像は擬似乱数である。
【0011】
表4で示される各ベクトルを使用して表12と同じような全単射拡大写像を作ることが出来る。
例えばijklの代わりにmnogを用いて、
mnを第1オペランドとし、YZを第2オペランドとしてXOR−P演算をしてベクトルV(1)とベクトルV(6)そしてベクトルV(2)とベクトルU(1)の4ビットを求める。
これらは表4でm、n、o、eのことである。
つぎにogを第1オペランドとし、やはりYZを第2オペランドとしてXOR−P演算をしてベクトルV(1)とベクトルV(6)そしてベクトルV(2)とベクトルU(3)の4ビットを求める。
これらは表4でm、n、o、gのことである。
これら4ビットを連結して8ビットとする。。
このように作られる全単射拡大写像を下の表13に示す。
【表13】


表13の各値と最初に述べた表2の各値をそれぞれEXOR演算したものが表14である。
表の各値はYZABCDの値に一対一対応していてYZABCDの全単射写像といえる。
【表14】

【発明を実施するための最良の形態】
【0012】
本発明は通信の安全と重要情報保全に資するコンピューティングシステム全てに適応する。
【産業上の利用可能性】
【0013】
本発明はよりコンピュータ的時間量の少ない一方向性関数を構成することができ重要情報の安全を図ることが出来る。
【実施例】
【0014】
実施例はまだ無い。




【特許請求の範囲】
【請求項1】
アルゴリズムと過去の出力が既知であれば、未来の出力を予測することが可能な古典的擬似乱数化技術に対し:
全単射写像拡大による擬似乱数生成法 では
特徴づけられることとして
原像情報の内の4ビットを取り出して最初の写像とすること、
そのあと原像情報に2ビットが残れば写像を2ビットずつに分割し分割1単位毎に原像情報から取り出した2ビットを付け加えて連結するということを繰り返すことで拡大された全単射写像を作ること、
もう一つの全単射写像を作るために原像情報の内の4ビットを取り出してEXORと並べ替えで置換した全単射写像を最初の写像とすること、
そのあと原像情報に2ビットが残れば写像を2ビットずつに分割し分割1単位毎に分割された2ビットと原像情報から取り出した2ビットで置換した写像を付け加えて連結するということを繰り返すことでもう一つの拡大された全単射写像を作ること、
こうして作られた2つの全単射写像の各ビットをEXOR演算して1つの拡大された全単射写像を作ること、
その拡大された全単射写像から直線的に原像を復元する方法が無いこと
がある。