アカウント名:
パスワード:
>今日私はパブリック/プライベートキーによる暗号化の基本的なプロセス
これって、日本なら、確か基本情報処理技術者のカリキュラムに含まれているよね。 送りたいファイルを、自分の秘密鍵で暗号化し、さらに送付先の公開鍵で暗号化すれば、受取人しか読めないし、送付者が本当に送ったか確認できる。 直接、そこの業務に関係しないとしても、体系的に基礎知識を身につけさせる必要はあると思うので、日本でなら情報処理技術者試験を活用すればいいかと。アメリカでも、体系的な知識を問う認定試験かなんかあるんじゃないかな。
/* セキュリティ確保のため暗号化メールを使うときに、同じメールアドレスにメール本体と、別メールでカギを送ってくる人がいるけど意味が無い・・(組織のセキュリティ・ポリシーで決められていたりして)。*/
送りたいファイルを、自分の秘密鍵で暗号化し、さらに送付先の公開鍵で暗号化すれば、受取人しか読めないし、送付者が本当に送ったか確認できる。
自分の秘密鍵で暗号化したら、受取人は読めませんよね。
署名と言いたいのだろうけど。
>> 送りたいファイルを、自分の秘密鍵で暗号化し、さらに送付先の公開鍵で暗号化すれば、受取人しか読めないし、送付者が本当に送ったか確認できる。> 自分の秘密鍵で暗号化したら、受取人は読めませんよね。
いや、受取人は読めるでしょう。自分の公開鍵が公開されているなら。てか、自分の秘密鍵で暗号化されているなら、誰でも復号化出来るでしょう。
内容を秘匿する為なら、相手の公開鍵での暗号化で十分ですね。じゃあ自分の秘密鍵での暗号化は難の為かと言えば、「送付者が本当に送ったか確認できる」なんでしょう。署名の代わりですね。
別のスレッドでも書かれていますが、RSAの様な秘密鍵と公開鍵を入れ換えても同じように振る舞う方式ならそうですが、一般に公開鍵暗号についていうならば、秘密鍵で暗号化したものを公開鍵で復号できるかは(そのアルゴリズムに依存し)できるとは限りません。
> 秘密鍵で暗号化したものを公開鍵で復号できるかは(そのアルゴリズムに依存し)できるとは限りません。
いや、暗号化アルゴリズムの問題ではなく、暗号化および復号の変換そのもの数学的特性から、秘密鍵で暗号化したものは公開鍵で復号できることは保証できますよ。
公開鍵による変換を関数 f、秘密鍵による変換を関数 g とすると、これで暗号化・復号ができるというのは、g(f(x)) = x が成り立つ(公開鍵で変換したものを秘密鍵で変換すると元に戻る)ということなわけですが、これを
f(x) = yg(y) = x
とわけて考えれば、そこからf(g(y)) = f(x) = y が導けますから、
「f(g(y)) = y が成り立つ」つまり「秘密鍵で変換したものを公開鍵で変換すると元に戻る」ことになります。
数学的な説明としてはでたらめです。
二つの写像のfとgの合成が恒等写像だからといって、gとfの合成が恒等写像とは限りません。
任意のyに対して、f(x)=yとなるxが存在することはなぜですか?
すみません、よくよく考えてみればその通りですね。不勉強でした。
・暗号化アルゴリズムの定義域と値域が等しい場合(100ビットの平文を暗号化すると同じ100ビットの暗号文が得られるようなアルゴリズムの場合)→暗号化アルゴリズムと復号アルゴリズムの適用順番を逆にしても使える。署名に利用可能。
・暗号化アルゴリズムの定義域より値域が大きい場合(100ビットの平文を暗号化すると101ビットの暗号文が得られるようなアルゴリズムの場合)→暗号化と復号の順番を逆にすることはできない。そのまま署名アルゴリズムには使えない。
ってことで。自分の知識としてずっと「暗号化アルゴリズムは定義域と値域は等しいのが当たり前」(←たぶん共通鍵暗号の一般的な特性に染まってるだけ)と思い込んでました…orz。
ちょっと違う...
RSAも、秘密鍵と公開鍵は対称なのではないし、たいていの暗号文では100bitの平文は、だいたいそれぐらいオーダの暗号文になる。
RSAに限っていえば、秘密鍵から作ったrと、公開鍵sの積で暗号文aのr*s乗をd(dも公開する)割ったあまりを計算するから、秘密鍵と公開鍵が交換可能だと言っているが、厳密に言えば、秘密鍵はp, q(p*q=r)となる2つの素数の組であって、1つのの整数である公開鍵sと対称に扱えるrではない。
まず、a^{R*s} = a^R * a^s (mod d)は納得していただけるだろう? (指数法則、有限体)
ここで、公開しているのは、sとdだけだとする。(a : 暗号文)そして、どんな、aや、dに対しても、a^{r*s}= a (mod d) となるrを自分だけが知っていたらどうだろう?秘密にしておきたいだろう?
暗号化は、a^s (mod d)を計算する。その暗号文を復号するには、その暗号文(a^s (mod d))をr乗して、dで割ったあまりを求めるだけでいい。# (a^s (mod d))^s(mod d) = a(^{r*s} (mod d))だから。
二つの秘密の素数p, qから公開しているs=r*sと、非公開のr(ここに、rは、どんなaに対してもa^{rs} = a(mod d)となるようなr}の作成は簡単(前者は、かけ算するだけ、後者はユークリッドの互除法を実行するだけ)なのだが、dと、sを知っていても、rを知ることが困難というところがミソ。(いや、dを素因数分解素ればp, qは分かるので、きわめて簡単にsからrは計算できるのだが...)
だから、rを秘密鍵というなら、暗号文の作り方から秘密鍵と公開鍵はRSAでは対称といえるが、秘密鍵は、p, q なので云々...
今日は酔っぱらってるのと、時間がないので、詳しく知りたいならこれにレプして。明日以降、一回だけみる。
いや、RSAの細かいアルゴリズムは、どーでもいいです。(理解しているかどうかという問題ではなく、アルゴリズムは今回の問題の本質ではありません。)暗号化関数f、復号関数gに対して、f(g(y))≡y になるかどうかは、
> 任意のyに対して、f(x)=yとなるxが存在する
かどうかという問題になるわけですが、・暗号化関数f は単射ですので、xの元の数と、f(x)の元の数は同じです。また、fの定義域のすべての元に対して、f(x)が定義されますから、「fの定義域と値域が等しい」のであれば、値域の任意のyに対し、f(x)=yとなるxが存在することになります。
元のコメントの例であれば、100ビットの平文を暗号化する場合、平文は2100種類あり、それに対応する暗号文も2100種類あるので、暗号文のビット数が100ビットであれば、「2100通りある100ビットの任意のビット列に対し、対応する平文は必ず存在する」ことになります(f(g(y))≡yが成立する)が、暗号文のビット数が101ビットあると、「2101通りある101ビットの任意のビット列に対し、2100個のの元については対応する平文が存在するが、残りの2101-2100(=2100)個ののビット列には、対応する平文が存在しない」(f(g(y))≡yが成立しない)ことになります。
RSAの場合は、暗号化も復号も最終的に mod d しているので、、定義域と値域が等しいのは明白。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond
専門分野というより、情報技術の基礎知識の欠如では (スコア:4, 参考になる)
>今日私はパブリック/プライベートキーによる暗号化の基本的なプロセス
これって、日本なら、確か基本情報処理技術者のカリキュラムに含まれているよね。
送りたいファイルを、自分の秘密鍵で暗号化し、さらに送付先の公開鍵で暗号化すれば、受取人しか読めないし、送付者が本当に送ったか確認できる。
直接、そこの業務に関係しないとしても、体系的に基礎知識を身につけさせる必要はあると思うので、日本でなら情報処理技術者試験を活用すればいいかと。アメリカでも、体系的な知識を問う認定試験かなんかあるんじゃないかな。
/*
セキュリティ確保のため暗号化メールを使うときに、同じメールアドレスにメール本体と、別メールでカギを送ってくる人がいるけど意味が無い・・(組織のセキュリティ・ポリシーで決められていたりして)。
*/
Re: (スコア:0)
送りたいファイルを、自分の秘密鍵で暗号化し、さらに送付先の公開鍵で暗号化すれば、受取人しか読めないし、送付者が本当に送ったか確認できる。
自分の秘密鍵で暗号化したら、受取人は読めませんよね。
署名と言いたいのだろうけど。
Re: (スコア:2)
>> 送りたいファイルを、自分の秘密鍵で暗号化し、さらに送付先の公開鍵で暗号化すれば、受取人しか読めないし、送付者が本当に送ったか確認できる。
> 自分の秘密鍵で暗号化したら、受取人は読めませんよね。
いや、受取人は読めるでしょう。自分の公開鍵が公開されているなら。てか、自分の秘密鍵で暗号化されているなら、誰でも復号化出来るでしょう。
内容を秘匿する為なら、相手の公開鍵での暗号化で十分ですね。じゃあ自分の秘密鍵での暗号化は難の為かと言えば、「送付者が本当に送ったか確認できる」なんでしょう。署名の代わりですね。
Re: (スコア:0)
別のスレッドでも書かれていますが、RSAの様な秘密鍵と公開鍵を入れ換えても
同じように振る舞う方式ならそうですが、一般に公開鍵暗号についていうならば、
秘密鍵で暗号化したものを公開鍵で復号できるかは(そのアルゴリズムに依存し)
できるとは限りません。
Re: (スコア:1)
> 秘密鍵で暗号化したものを公開鍵で復号できるかは(そのアルゴリズムに依存し)できるとは限りません。
いや、暗号化アルゴリズムの問題ではなく、暗号化および復号の変換そのもの数学的特性から、
秘密鍵で暗号化したものは公開鍵で復号できることは保証できますよ。
公開鍵による変換を関数 f、秘密鍵による変換を関数 g とすると、これで暗号化・復号ができるというのは、
g(f(x)) = x が成り立つ(公開鍵で変換したものを秘密鍵で変換すると元に戻る)ということなわけですが、これを
f(x) = y
g(y) = x
とわけて考えれば、そこから
f(g(y)) = f(x) = y が導けますから、
「f(g(y)) = y が成り立つ」つまり「秘密鍵で変換したものを公開鍵で変換すると元に戻る」ことになります。
Re: (スコア:0)
数学的な説明としてはでたらめです。
二つの写像のfとgの合成が恒等写像だからといって、gとfの合成が恒等写像とは限りません。
任意のyに対して、f(x)=yとなるxが存在することはなぜですか?
Re: (スコア:1)
すみません、よくよく考えてみればその通りですね。不勉強でした。
・暗号化アルゴリズムの定義域と値域が等しい場合(100ビットの平文を暗号化すると同じ100ビットの暗号文が得られるようなアルゴリズムの場合)
→暗号化アルゴリズムと復号アルゴリズムの適用順番を逆にしても使える。署名に利用可能。
・暗号化アルゴリズムの定義域より値域が大きい場合(100ビットの平文を暗号化すると101ビットの暗号文が得られるようなアルゴリズムの場合)
→暗号化と復号の順番を逆にすることはできない。そのまま署名アルゴリズムには使えない。
ってことで。
自分の知識としてずっと「暗号化アルゴリズムは定義域と値域は等しいのが当たり前」(←たぶん共通鍵暗号の一般的な特性に染まってるだけ)と思い込んでました…orz。
Re:専門分野というより、情報技術の基礎知識の欠如では (スコア:0)
ちょっと違う...
RSAも、秘密鍵と公開鍵は対称なのではないし、
たいていの暗号文では100bitの平文は、だいたいそれぐらいオーダの暗号文になる。
RSAに限っていえば、秘密鍵から作ったrと、公開鍵sの積で
暗号文aのr*s乗をd(dも公開する)割ったあまりを計算するから、
秘密鍵と公開鍵が交換可能だと言っているが、
厳密に言えば、秘密鍵はp, q(p*q=r)となる2つの素数の組であって、
1つのの整数である公開鍵sと対称に扱えるrではない。
まず、
a^{R*s} = a^R * a^s (mod d)
は納得していただけるだろう? (指数法則、有限体)
ここで、公開しているのは、sとdだけだとする。(a : 暗号文)
そして、どんな、aや、dに対しても、a^{r*s}= a (mod d) となるrを
自分だけが知っていたらどうだろう?
秘密にしておきたいだろう?
暗号化は、a^s (mod d)を計算する。
その暗号文を復号するには、その暗号文(a^s (mod d))をr乗して、
dで割ったあまりを求めるだけでいい。
# (a^s (mod d))^s(mod d) = a(^{r*s} (mod d))だから。
二つの秘密の素数p, qから公開しているs=r*sと、
非公開のr(ここに、rは、どんなaに対してもa^{rs} = a(mod d)となるようなr}の
作成は簡単(前者は、かけ算するだけ、後者はユークリッドの互除法を実行するだけ)
なのだが、dと、sを知っていても、rを知ることが困難というところがミソ。
(いや、dを素因数分解素ればp, qは分かるので、きわめて簡単にsからrは計算できるのだが...)
だから、rを秘密鍵というなら、暗号文の作り方から秘密鍵と公開鍵はRSAでは対称と
いえるが、秘密鍵は、p, q なので云々...
今日は酔っぱらってるのと、時間がないので、詳しく知りたいならこれにレプして。
明日以降、一回だけみる。
Re:専門分野というより、情報技術の基礎知識の欠如では (スコア:1)
いや、RSAの細かいアルゴリズムは、どーでもいいです。
(理解しているかどうかという問題ではなく、アルゴリズムは今回の問題の本質ではありません。)
暗号化関数f、復号関数gに対して、f(g(y))≡y になるかどうかは、
> 任意のyに対して、f(x)=yとなるxが存在する
かどうかという問題になるわけですが、
・暗号化関数f は単射ですので、xの元の数と、f(x)の元の数は同じです。
また、fの定義域のすべての元に対して、f(x)が定義されますから、
「fの定義域と値域が等しい」のであれば、値域の任意のyに対し、f(x)=yとなるxが存在することになります。
元のコメントの例であれば、100ビットの平文を暗号化する場合、
平文は2100種類あり、それに対応する暗号文も2100種類あるので、暗号文のビット数が100ビットであれば、「2100通りある100ビットの任意のビット列に対し、対応する平文は必ず存在する」ことになります(f(g(y))≡yが成立する)が、
暗号文のビット数が101ビットあると、「2101通りある101ビットの任意のビット列に対し、2100個のの元については対応する平文が存在するが、残りの2101-2100(=2100)個ののビット列には、対応する平文が存在しない」(f(g(y))≡yが成立しない)ことになります。
RSAの場合は、暗号化も復号も最終的に mod d しているので、、定義域と値域が等しいのは明白。