2008年0415

CAB暗号化方式はたぶんこういう暗号化方式と妄想してみる

以下素人の妄想なのでそれは念頭に

「解読不能は数学的に証明済み」、RSAを超える新暗号方式とは - @IT

関数は基本的に、級数展開できるよね
Sin(x) などな Σn(An*X^Nn)に展開できる。
Σn(An*X^Nn)とはたとえば、 A2*X^N2+A1*X^N1+・・・という数列
従ってAn Nnに小数など実数全てを許容するのであれば、ほとんど全ての関数Sin(x)+Cos(x)など、一般的な関数の全ては級数 任意表現のΣn(An*X^Nn)で表せる。AnやXn nを無限の組み合わせのなから1つ選べばよい

ここで、たとえば、n=2の時を考えてみる。また、説明の省略のため、自然数のみについて記述するが、実際はnバイトを実数に見立てれば、ちゃんと実数になる。

で、この理論を使って


前提

 論文では、40Mのキーとか書いてあるが、本当に40Mのキーだとして、全部のバイトが全てのバイトに依存関係を与えるような方式だとすると、そんなもの計算がおわるわけないので。40Mx40Mで1ケタつまり、本当に完全相関関係だとすると・・・・40Mx40Mx40Mバイトの演算だよねぇ。単純なかけ算としても。そんなわきゃない。ので
 
 全てのバイトが全てのバイトに相関関係は持たないとする。つまり、実質、鍵をnバイトに切って、nバイトx数M回のブロックの演算が行われているのだと仮定する。

 これなら実際の演算に使うキー長は高々nバイトなので演算はすぐに終わる可能性がある。

 まぁ、これをキー長が40Mと表してはいけないと思うけど。nバイトの鍵がM個連なったキーチェーンとでも言うのが正しいとか思う。。

n=1のとき 数列から数式を作れるという例

たとえば、鍵にするためのバイト列を B=[1 2 3 4 5 6 7 ・・・]とする。

数列からn=1として式を作る。
数式はA1*X+A0という単純式を仮定する

1バイト目をA2 2バイト目を A1とすると

1*x+2 という式になる=x+2

1バイトずらして2バイト目をA2とすると

2*x+3 という式になる=2x+3

これにより、数式から任意の2次式が生成できることがわかる。

F1(x)=x+2
F2(x)=2x+3
F3(x)=3x+4
F4(x)=4x+5

これに、暗号化したい数列を入れる
A=[10 20 30 40]とすると、

暗号化語の数列は

Q=[12 43 94 165]

複合したいときは逆関数を使うだけ
F1(y)=y-2
F2(y)=(y-3)/2
F3(y)=(y-4)/3
F4(y)=(y-5)/4

A=[10 20 30 40]が複合できる。

これで、n=1 高々1次式であれば任意の鍵数列から 暗号用の数式を生成できることがわかる。

ある数式の逆関数はかならず存在するので(よね?) なので必ず複合できる。

nが少なければ逆関数を見つけるのも簡単

もっと高次式の場合

上記の場合は高々1時式であったけど、式をNnに拡張することで、高次式も作れる。

たとえば、2項の数式n=2で次数を固定しない場合
奇数バイトを係数 偶数バイトを次数として計算すると
鍵数列 B=[1 2 3 4 5 6 7 8 9]

からは、数式列

F1(x)=1x^2+3x^4
F2(x)=2x^3+4x^5
F3(x)=3x^4+5x^6
F4(x)=4x^5+6x^7
という高次式の数列が取得できる。上記のようにコレを用いて対象を暗号化・逆関数で複合化すればよい。


最後の展開

上記例では n=2が固定であったがこれも、鍵数列から拾えばよい

最初の1バイト目をnとすとすると

鍵数列 B=[1 2 3 4 5 6 7 8 9]
の1バイト目は1なので、 F1(x)はn=1 2x^3 という式になる
F2(x)はn=2 3x^4+4x^5という式になる
F3(x)はn=3 4x^5+5x^6+6x^7という式になる

もし、数列B=[2 3 4 5 6 7 8 9 10]
ならば、 F1(x)はn=2なので、3x^4+4x^5という式



たぶん、元の学者様の元の研究

たぶん、元の学者様の元の研究は任意のランダム数列から、その写像である任意の関数列がつくれるという研究

前述の通り、この方式であれば無限級数までの任意の式の和を数列から写像出来る。

数列から関数列が写像出来るのである。

で、この関数列を暗号化に使うことで任意の関数列暗号化という方式ができあがる。

前述の通り、任意の関数列にはsin cos log eなどが含まれるのでRSAも含まれる

いちおう発表から読み取れたのはこのぐらい

とりあえず、任意数列から任意関数列をつくり出し、任意関数列で暗号化することで、関数列の特定を不可能にしている。写像関数そのものが不特定なので逆演算は非常に難しいし、最初のnをMod関数かけてしまって値域を決めてしまえば、高々n項のXの式になるので、計算量は限られる。AnとNnに実数を許容する(多倍長を許容する)ればルートなども含まれるようになるし、AxかNnが特殊な値(値域)を越えた場合はSinとするなどの関数マップを組み合わせれば容易にRSAなどに近い暗号化も出来るようになる。

といったところか。

いちおう、ブロック暗号化だし。1文字というか1数を何バイトにするかでブロック暗号化になるはず。効率的なのは当然1バイト2バイト4バイト8バイト

何度も書くが、たぶん、ベースとなる研究は 数列から数式列の写像の研究だと思う。(予測)

なぜ特許が『とれないか』

 上記の理論だけでは特許にならないから(単なる数学だから)
 
 これを特許にするためには、上記の1バイト目をnにして2バイト目をA2としてなどの具体的な数列から数式列の写像関数を決める必要がある。この写像関数とその方式には場合によっては特許がとれるかもしれない(とれないかもしれない)
 

現段階で特許を取らずに、発表だけのわけ

 たぶん、有効な写像関数がない。高速といわれているのは、多分、nの次数が低い数列から数式列の写像関数を使っているから

 で、取材を求められて応じたか、写像関数を研究するための資金調達のためのPRがそんなところではないかと思う。


推測される脆弱性

 全ての数列に対して安全な数式列が作れるとは限らない。たとえばB=[1 1 1 1 1 1 1 1]という数式からは上記の写像アルゴリズムでは写像されない数式しか生まれないので超危険w

 なので、実用するためには、写像関数が鍵に対して安全なことを証明しない限り、時と場合によっては危険な暗号化になっていることを否定できない。

順方向の総当たりに弱い

 暗号化につかった写像関数がわかってしまうと、順方向の総当たり。任意数を暗号化して、対象の文字列になるかを1バイトづつ確認していく方式。量子コンピュータを使われたら弱くないか?
 どうやって、写像関数を守るのか?でも写像関数を公開しないと、実装して配布はできないよねぇ(w暗号化装置が
 

そもそも論

   デコード用の鍵が脆弱かどうが。
 
 たいがいの場合、RSAが破られたりするよりも前に、複合用の機材。たとえばDVDプレイヤーなどに含まれる複合用の鍵が狙われる。プログラムをリバースエンジニアリングしたりして。
 
 その複合用のプログラムをさらに暗号化しても、それを複合化するための複合化複合化鍵が狙われる。

 というDRMに対する安全性は、総当たりとは別なところにあるので、

さて

  ブロック暗号化で、任意の鍵から無限の暗号化数式列を持つ暗号化方式というのは上記のような事だと思うけど

この方式だと、実装した場合に、暗号化装置と、複合化装置が配布されているはずなので、その装置をリバースエンジニアリングすることで、写像関数そのものは判別されてしまうので、順方向に量子コンピューターで総当たりすることで判別可能になってしまう。

あと1味 量子コンピューターで解読不能にするための 理論が必要になるんだけど・・・

まさか、暗号化装置を配布しないとか、暗号化装置はリバースされないではないだろうし・・・どうなんでしょう。

偏差値50近辺の僕にはこのぐらいが限界。だれかーーーコメントーーー

関連するエントリ一覧

関連するタグ

その他






トラックバック

このエントリーのトラックバックURL:



コメント

コメント一覧

心は萌え(管理人)(--)『

お気軽にコメント下さい。ただし、基本的に読んではいますが、お返事はほとんどしません。お返事が必要な方はTOPページにあるメールアドレスへメールを送って下さい。

 



コメントしてください




保存しますか?






このエントリーを含むはてなブックマーク

* 人気blogランキングこのサイトを投票
http://revilog.com/ TOPへ