何をもってして復号完了と判断できるんでしょうか。
南京錠ならU字が外れますし、ダイヤル金庫ならカチャ!っとイイ音がするw
と思うんですが、
暗号を破る場合、何を答えとして目指すんでしょうか。
特定の暗号化アルゴリズム限定ででも構いませんし、
クラック復号のアルゴリズムについてというのがあれば(こっちのがいい)そ
れでも構いません。
暗号屋見習いが, 勝手に補足と回答に参りました.
と三部構成です.
長いです.
4. makotonyaさんの説明が不正確なので, 補足しておきます.
google:RSA暗号で調べれば一発ですが.
まずmakotonyaさんの説明では, 共通鍵暗号と公開鍵暗号が同じものとして扱われています.
しかし, 共通鍵暗号と公開鍵暗号は, 違うものです.
素因数分解が出てくることから, 公開鍵暗号の中でも特にRSA暗号のことを話されていると思われます.
正しく書き直すと以下の通りです.
RSA方式この方式では公開鍵共通鍵と秘密鍵を使います.
公開鍵共通鍵は公開し, 秘密鍵は自分だけの秘密です.
公開鍵を使って暗号化すると, 秘密鍵でしか復号できません.
作り方.
(本当は, 素数p,qや秘密鍵にも条件があるのですが, 省略します)
参考リンク先として, http://www.faireal.net/articles/8/01/を挙げておきます.
JavaScriptでの実装例があります.
この方式では, 公開鍵共通鍵の解析に成功すれば, 秘密鍵を作れます.
nを素因数分解できる→p,qが分かるのでφ(n)が計算できる→eとφ(n)からdを計算できる.
公開鍵共通鍵を構成する巨大な数値の素因数分解(数学の用語)に成功することが,
クラックの成功を意味します.
(嘘です. 「RSAを解読できるならばnの素因数分解ができる」ということはRSA発祥以来, 未だに示されていません.
暗号学上の重要な未解決問題です.)
公開鍵の一部共通鍵には, 二つの素数を掛けた値が含まれています. (n=pq)
公開鍵共通鍵の解析とは, 二つの素数を特定することです (先に挙げたようにこの行は嘘です).
この素因数分解に成功すれば, 秘密鍵を作れます (これは正しい).
秘密鍵の作り方は, 長くなるので, ここでは触れませんが,
共通鍵暗号方式をネットで検索すれば, 分かり易いホームページが見つかります.
共通鍵で検索して, RSAが引っかかるんですかね?
公開鍵暗号の暗号化関数をEと, 復号関数をDと書きます.
また, 公開鍵暗号の公開鍵をpkと, 秘密鍵をskと書きます.
nekotenさんがコメントに書かれているのは,
「共通鍵Kを公開鍵暗号pkで暗号化したC=E(K,pk)を貰って,
共通鍵K'を求めた場合に, K'=Kかどうかを確かめる手段はあるのか?」
という話です.
Sampoさんが言われているのは, 公開鍵pkから秘密鍵(らしきもの)sk'を求めた場合,
適当な平文mを持ってきてm=D(E(m,pk),sk')かどうかを確かめるという話です.
これを何回か行っても大丈夫ならば, sk'=skということになり,
正しい秘密鍵が求められたことになるでしょう.
従って, D(C,sk)=Kとして, K'=Kかどうかを確かめればよいということになります.
逆にすぐ入手できる公開鍵を使って秘密鍵も求められる
ということはそうそうありません.
勿論, ダメな暗号ならそういうこともありますが(;´Д`)
理論では, 目標を大きく四つに分けます.
安全性を定義するときに, このような目標を使うんですが, これには勿論I/O
が必要です. 定義を挙げてから, 何故それが必要か述べます.
3に関する定義の例を挙げます.
敵A=(A1,A2)は以下の動作をする.
Aが解読(正確には識別)に成功するとは, ]である確率が高いと定義する. (Output2で出てきたβ'がβと等しいならば, 敵Aは二つの暗号文を見分けている)
さて, A2へのInput2を作る際に, βを選ばなくてはならず,
暗号化も行う必要があります. これはI/O
を必要としています.
どうしてこんなことをするかというと,
仮定なしには, 安全な公開鍵暗号が存在しないからです (おそらくP!=NP問題が解決するまで).
一般的に公開鍵暗号の安全性を示す場合には,
なんらかの数学的な仮定(例:素因数分解は難しい)を置いて,
「暗号が解読できる→数学的な問題が解ける」という帰着を使います.
(対偶を取れば「数学的な問題が解けない→暗号が解読できない」になります).
この帰着では,
コンピュータが, 先ほど挙げた敵Aを使いながら数学的な問題を解きます.
このコンピュータは大抵の場合, 敵Aが成功したかどうかを判断したり, 先ほどの暗号文Cに数学的な問題を埋め込みます. 敵Aが自分ひとりで何から何までしてしまった場合には, 帰着も何もコンピュータは手出しできません.
従って, 敵Aの定義にはI/O
が存在するわけです.
最近のスタンダードはIND-CCA2という安全性です.
これは, 先ほどの敵Aがいつでも復号オラクルを使えます (復号オラクルは暗号文を質問すると平文を教えてくれる. ただしInput2中のCは質問できない). 実際, 「素因数分解が出来ない」や「離散対数問題が解けない」といった仮定から, IND-CCA2安全な公開鍵暗号が構成できます.
こういった安全性の関係が知りたい場合には,
M. Bellare, A. Desai, D. Pointcheval, and P. Rogaway.
"Relations among notions of security for publickey encryption schemes."
In CRYPTO '98
を参照してください.
定義もすっきりしています.
Full PaperはBellareのサイトにあります.
http://www-cse.ucsd.edu/~mihir/papers/relations.html
日本語の専門書だと
辺りに専門的な話が載っていたと思います.
長文ですいません(;´Д`)
パスワードを総当りアタックします。
以上
携帯電話の暗号解読にはよく使われますが。
古典的クラッキング方法です。(現在のある程度しっかりした監視網では通用しません。パスワードミスが規定回数を超えるとブロックされる為)
ITmedia News:ナチスのEnigma暗号、分散型コンピ...
ヒトゲノム計画、UDプロジェクトも総当り解読です。
全く回答になっていません。
意図が伝わりにくかったでしょうか。
ブルートフォースはインターフェースが有るんですから、合ってたら合ってると返ってくるんです。
UDのとかは、答えが有って、その導き方が総当たりなんですよ。
http://www.sys.cs.meiji.ac.jp/~masao/Board/infosys2000/secur...
いろいろな暗号方式がありますが、私の知っているものを。
一番ローカルな暗号化であり、ぶっちゃけ小学生でもとけるアルゴリズムが文字列を一定数上や下にもっていくものです(a->c,b->dのように全部の文字を動かし、それをお互いで覚えておく)。これの場合ある程度意味を取れる文字列を取得できたらおわりとしています(forやyouなどある程度長さのある複数の文字列)。
これは比較的簡単に作成でき、意味の解読も簡単です。
つぎに一般的で暗号化は簡単だが破りにくい暗号化としてWEP暗号があります。
無線LANの暗号などでも使われているものです。bit数が多いほどときにくくなります(普通総当りでないと解けないため)。このばあい解けない場合はでたらめな記号になるのですぐにわかります。
暗号化は上のサイトで上げたように大量にありますが、クラックしやすい暗号は使われていません。しかし、いろいろがんばってみてください。
既知のコードが引っかかればってことですか。
文書の類はそれでいいですね。ふむふむ。
PKIみたいな鍵を暗号化している場合、その鍵などはどうしたら復号完了に出来るんでしょうか。
あの鍵はバイナリじゃないんでしたっけ?
どうするのかな。
あ、私はトライする気はないですよ・・・w
ブルートフォースはインターフェースが有るんですから、合ってたら合ってると返ってくるんです。
UDのとかは、答えが有って、その導き方が総当たりなんですよ。
もう一つの有名な分散コンピューティングSETI@HOMEなぞ宇宙人探しやっとんがな。
つまり、暗号化
インターフェースって、GUIのこと言ったわけではないですよさすがに。
判断基準(答えを知りうるということ)を持ったI/Oのことです。
UDをやったことありますか?宿題は暗号を解かされているんではないんですよ。
それと、「通過」って言ってますけど、誰が「通過」と判断するんですか?fuk00346jpさんが言っているのはインターフェース有ってのことです。
申し訳ありませんがちょっとずれてます。
丁度最近、共通鍵暗号方式について調べてました。
この方式では共通鍵と秘密鍵を使います。
共通鍵は公開し、秘密鍵は自分だけの秘密です。
公開鍵を使って暗号化すると、秘密鍵でしか復号できません。
この方式では、共通鍵の解析に成功すれば、秘密鍵を作れます。
共通鍵を構成する巨大な数値の素因数分解(数学の用語)に
成功することが、クラックの成功を意味します。
共通鍵には、二つの素数を掛けた値が含まれています。
共通鍵の解析とは、二つの素数を特定することです。
この素因数分解に成功すれば、秘密鍵を作れます。
秘密鍵の作り方は、長くなるので、ここでは触れませんが、
共通鍵暗号方式をネットで検索すれば、
分かり易いホームページが見つかります。
おお!
共通鍵暗号方式の場合は 鍵の素因数分解が出来ればいい、と。なるほどー。
既知平文攻撃という解読法があります。
暗号化されたデータとそのものデータを手に入れて、暗号化パスワードを求める攻撃です。
こうしてパスワードさえ求めれば、以降その相手の行う暗号通信は読み放題になりますね。
AESなど最近の共通鍵暗号は、既知平文攻撃に対する耐久性を考慮して設計してあります(できるだけ多くの暗号平文セットでもパスワードが求まりにくいようになっています)。
>>PKIみたいな鍵を暗号化している場合、その鍵などはどうしたら復号完了に出来るんでしょうか。
公開鍵暗号で共通鍵を暗号化している場合ですね。
公開鍵暗号を使っている場合、秘密鍵を求めれば解読完了です。その秘密鍵が正しいことは、ある平文を公開鍵で暗号化して、求めた秘密鍵でもとの平文に戻せるかどうかで検証できます。
平文入手って考えが至りませんでしたw
確かに一度出来ればいいんですもんね。
逆にすぐ入手できる公開鍵を使って秘密鍵も求められる・・・ほ、ほんとっすか!?(@_@;)
トライトライトライ!なんだろうけども、どういう処理(計算)方法なんだろう・・・
暗号屋見習いが, 勝手に補足と回答に参りました.
と三部構成です.
長いです.
4. makotonyaさんの説明が不正確なので, 補足しておきます.
google:RSA暗号で調べれば一発ですが.
まずmakotonyaさんの説明では, 共通鍵暗号と公開鍵暗号が同じものとして扱われています.
しかし, 共通鍵暗号と公開鍵暗号は, 違うものです.
素因数分解が出てくることから, 公開鍵暗号の中でも特にRSA暗号のことを話されていると思われます.
正しく書き直すと以下の通りです.
RSA方式この方式では公開鍵共通鍵と秘密鍵を使います.
公開鍵共通鍵は公開し, 秘密鍵は自分だけの秘密です.
公開鍵を使って暗号化すると, 秘密鍵でしか復号できません.
作り方.
(本当は, 素数p,qや秘密鍵にも条件があるのですが, 省略します)
参考リンク先として, http://www.faireal.net/articles/8/01/を挙げておきます.
JavaScriptでの実装例があります.
この方式では, 公開鍵共通鍵の解析に成功すれば, 秘密鍵を作れます.
nを素因数分解できる→p,qが分かるのでφ(n)が計算できる→eとφ(n)からdを計算できる.
公開鍵共通鍵を構成する巨大な数値の素因数分解(数学の用語)に成功することが,
クラックの成功を意味します.
(嘘です. 「RSAを解読できるならばnの素因数分解ができる」ということはRSA発祥以来, 未だに示されていません.
暗号学上の重要な未解決問題です.)
公開鍵の一部共通鍵には, 二つの素数を掛けた値が含まれています. (n=pq)
公開鍵共通鍵の解析とは, 二つの素数を特定することです (先に挙げたようにこの行は嘘です).
この素因数分解に成功すれば, 秘密鍵を作れます (これは正しい).
秘密鍵の作り方は, 長くなるので, ここでは触れませんが,
共通鍵暗号方式をネットで検索すれば, 分かり易いホームページが見つかります.
共通鍵で検索して, RSAが引っかかるんですかね?
公開鍵暗号の暗号化関数をEと, 復号関数をDと書きます.
また, 公開鍵暗号の公開鍵をpkと, 秘密鍵をskと書きます.
nekotenさんがコメントに書かれているのは,
「共通鍵Kを公開鍵暗号pkで暗号化したC=E(K,pk)を貰って,
共通鍵K'を求めた場合に, K'=Kかどうかを確かめる手段はあるのか?」
という話です.
Sampoさんが言われているのは, 公開鍵pkから秘密鍵(らしきもの)sk'を求めた場合,
適当な平文mを持ってきてm=D(E(m,pk),sk')かどうかを確かめるという話です.
これを何回か行っても大丈夫ならば, sk'=skということになり,
正しい秘密鍵が求められたことになるでしょう.
従って, D(C,sk)=Kとして, K'=Kかどうかを確かめればよいということになります.
逆にすぐ入手できる公開鍵を使って秘密鍵も求められる
ということはそうそうありません.
勿論, ダメな暗号ならそういうこともありますが(;´Д`)
理論では, 目標を大きく四つに分けます.
安全性を定義するときに, このような目標を使うんですが, これには勿論I/O
が必要です. 定義を挙げてから, 何故それが必要か述べます.
3に関する定義の例を挙げます.
敵A=(A1,A2)は以下の動作をする.
Aが解読(正確には識別)に成功するとは, ]である確率が高いと定義する. (Output2で出てきたβ'がβと等しいならば, 敵Aは二つの暗号文を見分けている)
さて, A2へのInput2を作る際に, βを選ばなくてはならず,
暗号化も行う必要があります. これはI/O
を必要としています.
どうしてこんなことをするかというと,
仮定なしには, 安全な公開鍵暗号が存在しないからです (おそらくP!=NP問題が解決するまで).
一般的に公開鍵暗号の安全性を示す場合には,
なんらかの数学的な仮定(例:素因数分解は難しい)を置いて,
「暗号が解読できる→数学的な問題が解ける」という帰着を使います.
(対偶を取れば「数学的な問題が解けない→暗号が解読できない」になります).
この帰着では,
コンピュータが, 先ほど挙げた敵Aを使いながら数学的な問題を解きます.
このコンピュータは大抵の場合, 敵Aが成功したかどうかを判断したり, 先ほどの暗号文Cに数学的な問題を埋め込みます. 敵Aが自分ひとりで何から何までしてしまった場合には, 帰着も何もコンピュータは手出しできません.
従って, 敵Aの定義にはI/O
が存在するわけです.
最近のスタンダードはIND-CCA2という安全性です.
これは, 先ほどの敵Aがいつでも復号オラクルを使えます (復号オラクルは暗号文を質問すると平文を教えてくれる. ただしInput2中のCは質問できない). 実際, 「素因数分解が出来ない」や「離散対数問題が解けない」といった仮定から, IND-CCA2安全な公開鍵暗号が構成できます.
こういった安全性の関係が知りたい場合には,
M. Bellare, A. Desai, D. Pointcheval, and P. Rogaway.
"Relations among notions of security for publickey encryption schemes."
In CRYPTO '98
を参照してください.
定義もすっきりしています.
Full PaperはBellareのサイトにあります.
http://www-cse.ucsd.edu/~mihir/papers/relations.html
日本語の専門書だと
辺りに専門的な話が載っていたと思います.
長文ですいません(;´Д`)
うおお!!Σ゚~(口゚~)
凄い!量も凄いけど中も濃い!
途中まで理解しながら読んだんですが、かなり時間がかかりそうなのでゆっくり読みます!
そしてとりあえずしまめます、ありがとうございました!
うおお!!Σ゚~(口゚~)
凄い!量も凄いけど中も濃い!
途中まで理解しながら読んだんですが、かなり時間がかかりそうなのでゆっくり読みます!
そしてとりあえずしまめます、ありがとうございました!