• ベストアンサー

逆ハッシュ関数(逆一方向関数)?

ハッシュ関数では、原文xからハッシュyを求める事 y=f(x) は容易ですが、その逆関数、yからxを求める事 x=f'(y) が困難と言われています。 逆に、原文xからyを求めることは困難だが、yからxを求める事が容易である関数というのはありませんか? 秘密鍵kを使用し、y=f(x,k) で変換(kを知らなければ困難)、x=f'(y) で逆変換(kを知らずとも復号可能)ということになると思いますが…。

質問者が選んだベストアンサー

  • ベストアンサー
  • betagamma
  • ベストアンサー率34% (195/558)
回答No.4

No.1です。 mod関連の四則演算は、普通にできます。つまり・・・ a = b(mod n) a*c = b*c (mod n) a+c = b+c (mod n) a-c = b-c (mod n) c=bとおけば、 a-b = b-b = 0 (mod n) ですので、以降できます。 自分で、あまりを確かめながらやると、楽しかったりします。 それでですね、ハッシュ関数の逆関数の演算が困難ということについて、ちょっと細くします。逆関数の演算が困難なのはおっしゃる通りなんですが、実は、y=f(x)の逆関数f'(y)の結果は、一つだけじゃなくて、何通りもあるんですよ。関数というのは、結果が一つに定まるものの事をいいますから、厳密には、f'(y)は関数ですらありません。 このことは、次のように考えればわかります。ハッシュ関数の文字数(今、一番使われているSHA1で、確か、160bit=日本語の文字80文字分)は、決まっています。 世の中には、色んな長さの文章があるのに、どんなに長い文章 xを入力しても、ハッシュ関数fを通してf(x)を計算すると、20文字分の長さしか出てこない。 ということは、あるハッシュ関数の値yをとってきたときに、原文に対応するxは、複数あるはずなんです。(もっとも、そのうち、意味のあるものは、一つに絞れるでしょうが) で、f(x)を求めるのが困難な場合について話しましょうか。No.2さんやNo.3さんのおっしゃった方法でも、作れますね。 基本的に、暗号にできるようないい性質をもった困難な問題というのは限られているので・・・よく知られている中では、No.1で述べた離散対数問題か、RSAで使われている素因数分解の困難性の問題か、どっちかですね。 で、使い道ですが・・・時限暗号というのがあります。これは、指定された時刻になるまで、誰も解けない暗号です。そっちに、ちょっと使えるかもしれませんね。 日本で、研究している有名な人がいて、一般向けのPDFとかもあるので、書いておきます http://homepage1.nifty.com/herumi/mtt/tc.html

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

前処理のハッシュ関数を除いたRSAデジタル署名で実現できますね。 # DSA等は元の値を計算することはできないのでダメ RSAの秘密鍵・公開鍵のペアを(k,p)として、xを秘密鍵kで演算した結果をz、y=(z,p)とすれば、zを公開鍵pで演算する処理をf'とすればxが計算できます。 使い道はなさそうですけど。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

公開鍵暗号系を使ったデジタル署名?

ryn5iep
質問者

お礼

正にこれかもしれません! デジタル署名について、もう少し調べてみます。ありがとうございました! しかし、No.1さんの考え方にも興味があります。

全文を見る
すると、全ての回答が全文表示されます。
  • betagamma
  • ベストアンサー率34% (195/558)
回答No.1

構成できなくはありませんが、ちょっと考えたところ、使い道が見当たりません。 一応、一つ考えてみました。 離散対数問題というのがあります。これは、自然数nで割ったあまりしか考えない世界で、n,aがわかっているとき、a^kからkを求めることがとても難しくなるという問題です。 例えば、n=7,a=5,k=3としましょうか。 5^3 mod 7=125 mod 7 = 55 mod 7 =13 mod 7 = 6 mod 7 (mod 7は、7で割ったあまり。9 mod 7 = 2) で、a=5 mod 7 = 5ですから、この問題は、n=7,a=6がわかっているとき、5を与えられて、k=3を求める問題です。 この問題は、困難で、実際に、Diffie-Helman鍵交換という、共通鍵をやりとりする方法に用いられています。最初に、nとaをばれてもいい方法でやりとりしておいて、kに共通鍵を入れておけば、a^kを計算してやりとりすれば、たとえa^kが盗聴されても大丈夫、というものです。 なので・・・ a^kからkを求めることを一般化して、y=log(a,x) mod nとおけば、yを求めることはとても困難になるはずです。

ryn5iep
質問者

補足

回答ありがとうございます。しかし、のっけから理解力不足で申し訳ありません。 xを元の値、yを変換値として、変換式(困難)と復元式(容易)を教えて頂けませんでしょうか? また、その他のどの要素(n,a,kなど?)が既知・未知であるので困難・容易という簡単な根拠もあれば嬉しいです。 y = x^k mod n (nは既知だがkが未知なので困難) x = log(x,y) mod n (難易不明…) mod演算子が絡んだ時の移項について知らない(知識は高校数学レベルです…)ので、復元が理解できませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ハッシュ関数について

    原文をハッシュ関数で暗号化した場合,そのハッシュ値から逆に複合化することは不可能というふうによく書かれていますが,それは何故でしょうか?「不可能」とは「非常に時間がかかる」ということなのでしょうか?

  • 逆関数の導関数

    dy/dx=1/dx/dy ↑より、y=f(x)の逆関数x=g(y)の微分可能性については、逆関数を具体的に求めなくても判定できる。 すなわち  x0⇔f(x0) (→がf,←がg) (適した記号が見つからなかったので、同値記号で勘弁してください。) 「f'(x0)≠0ならばfの逆関数gはf(x0)で微分可能で g'(f(x0))=1/f'(x0) であることを示してる。」 と書いてあったのですが、よくわかりません。 なぜ、そのようなことがいえるのでしょうか? 全体的にわかりません、解説よろしくお願いします。

  • 逆関数について

    題名の通りなんですが逆関数というものが教科書を読んでも理解できません。例えばy=3x-4の逆関数はこの式をx=○○の式に書き換えてから、xとy入れ替えるというのは分かります。ですが、 y=tanxの逆関数をy=g(x)とするとき、g'(1)の値を求めよ。 という問題で解答に y=tanxの逆関数y=g(x)ではx=tanyであるから... という説明があり何をやっているのかさっぱり分かりません。y=tanxをx=○○の式に変換するのは不可能ですよね?逆関数の意味を間違って捉えてるからかもしれませんが、先へ進めません。アドバイスお願いします。

  • この逆関数の求め方は間違っていますか?

    「y=sinhx={e^x-e^(-x)}/2の逆関数を求めよ」 という問題が分かりません. 与式を変形して2y=e^x-e^(-x) e^2x-2ye^x-1=0 e^x>0を考慮して,解の公式よりe^x=y+√(1+y^2) 両辺の対数をとって(表現が間違っているかもしれません) x=log{y+√(1+y^2)} yを変数xについての関数とするために入れ替えて y=log|x+√(1+x^2)| (与式の値域より右辺の真数>0となるよう,絶対値記号を用いています.) とすれば解答と一致します. ですが,次の方法で解こうとすると答えが変わってしまいます. y=f(x)=sinhx={e^x-e^(-x)}/2 f'(x)={e^x+e^(-x)}/2>0より,f(x)は増加関数 逆関数をy=f^{-1}(x)とおきます. 逆関数の導関数[f^{-1}(x)]'=2/{e^x+e^(-x)}=2e^x/(e^2x+1)=2(e^x)'/(e^2x+1) この導関数を積分してf^{-1}(x)=2tan^{-1}(e^x)+C 関数y=f(x)は(0,0)を通るから,逆関数も(0,0)を通る.このことからC=-π/2を得る. よってf^{-1}(x)=2tan^{-1}(e^x)-π/2 ですが,これは先ほどの解答とは異なる気がします. 後半の解法はどこが間違えているのですか?

  • 逆関数について

    逆関数は関数y=f(x)が一対一対応(全単射)のときに存在する、と習いました(高3数学)。 なら、y=x^2の場合、逆関数がy=±√xと考えるのは間違いでしょうか?定義域x>=0のとき、またはx<=0と定めたときでしかy=x^2の逆関数は存在しないのですか? それと同じように、三角関数でも定義域を定めなければその逆関数は存在しないことになりますよね。しかし物理小事典では、逆関数が多価関数でもOKみたいなことを書いてありました。 必ず一対一対応にしなくてはいけないのか、疑問に思ったので、質問致します。回答お願いします。

  • 逆関数についてなど・・・

    y=f(x)はy=g(x)はお互いに逆関数であるとします。そうするとf(g(a))=aと書いてありましたどうしてでしょうか。logと指数で実際に確かめてみたところ成り立ちはしましたが、理由がいまいちわかりません。 またすべての関数でg(f(c))=cも成り立ちますよね。 証明とかではなく日本語的な説明とかで教えてください。逆関数とはxとyを入れ替えたものなのでわかった起臥したりもしますが、明確にはわかりません。 よろしくお願いします。

  • 数学:逆関数について。

    (1)y=x/2-1/x(x>0)の逆関数を求めよ。 x^2-2yx-2=0 (x>0) ここからなんで、x=y+√y^2+2になったのかわかりません。 解説お願いします。 (2)関数f(x)=bx+1/x+aが、その逆関数f(x)^-1と一致するための条件を求めよ。 どうやって解けばいいのでしょうか?

  • 逆関数の問題について

    関数y=(x-1)/(2x+k)の逆関数が、またy=(x-1)/(2x+k)となるように定数kの値を求めよ。 どう頑張っても答えが0にしかなりません。 ちなみに答えは-1です。 おおよその解き方でいいので、解き方がわかった方は教えてください。

  • 逆関数の微分 (数III)

    (x^3)'=3x^2 dy/dx=1 dx/dyを用いてy=x^3の逆関数y=f(x)の導関数を求めよ。 dx/dyを使わなくていいなら・・・ x=y^(1/3)として x'=1/3x^(2/3) という風にすぐもとまるのですが・・・。 模範解答は y=f(x)についてはx=y^3であり、・・・(1) y=x^(1/3) df(x)/dx =1/(dx/dy)・・・(2) =1/3y^2 = 1/3x^(2/3)・・・ (3) 疑問点があるところに○で番号を振りました。 (1)について、 逆関数とはy=~ という関数x=~という風に書き換えてからx,yを入れ替えるものですよね? (2)f(x)はy=x^3の逆関数なんですよね?  ってことはf(x)の逆関数は1/f(x)でありf(x)ってのはyの逆数であるから1/yがf(x)? なんか混乱してしまいました・・・(すみません汗 (3)y=x^(1/3) を代入したのでしょうか・・・?これってy=x^3の逆関数ですよね・・・? 模範解答の作業中にいつのまに逆関数y=x^(1/3)を求めたのでしょうか・・・? 回答よろしくおねがいします!

  • 逆関数の微分可能性

    逆関数の微分可能性についての質問なのですが 1変数において y=f(x)が何回でも微分可能であれば 逆関数x=g(y)は何回でも微分可能である理由を述べよ という問題なのですが この『何回でも』という言葉がよくわからないのですが これは、y=f(x)が何回でも微分可能だから逆関数でも何回でも成り立つという考えなのでしょうか。