• ベストアンサー

公開鍵暗号方式が理解出来ません。

公開鍵暗号方式では、公開鍵で暗号化したものは秘密鍵で複合化出来るし、秘密鍵で暗号化したものは公開鍵で複合化出来ると言われています。ということは、特定の公開鍵に対応する秘密鍵は、本人が勝手に決められるものではなくて、公開鍵との間になんらかの関連性があるものでなければならないと思うのですが、違いますでしょうか?でももしそうだとすると誰でも公開鍵に対応する秘密鍵が作れてしまって、全然秘密ではなくなってしまうような気がするのですが。。。ご存知の方ご教授お願いします。

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.6

> >個人の公開鍵はいつ公開されるのか > #1でちゃんと説明していますよ。 間違っています。ANo.1の状況では「サーバ証明書」だけが使われており「ユーザ証明書」は使われていません。言い換えれば「楽天の公開鍵」だけが使われており「ユーザの公開鍵」はまったく使用していません。 ---------------- > 秘密鍵から公開鍵は生成できますが、逆はできません。(ANo.4) 誤解を生じやすい表現だと思います。 具体的に,定番のopensslの解説を見ていただきましょうか。 http://x68000.q-e-d.net/~68user/net/ssl-setup-1.html openssl genrsa コマンドを実行することで「RSA秘密鍵を生成する」と,確かに一般的にはそのように表現します。でもその直後で確認している openssl rsa コマンドの実行結果から分かるとおり,server.keyファイルの中身には, ・modules(公開鍵/秘密鍵の共通要素): RSA 構造体の n に相当 (p*q) ・publicExponent(公開鍵となる指数): RSA 構造体の e に相当 ・privateExponent(秘密鍵となる指数): RSA 構造体の d に相当 など,すべてのデータが格納されているのですよね。 であるなら,openssl genrsa コマンドは正しくは,  > 鍵生成ソフトウェアを実行することで,  > 公開鍵と秘密鍵のペアを生成します。  > public keyだけ/private keyだけが  > 生成されることはありません。 というANo.2で述べた動作をしているのであり,秘密鍵要素だけを生成しているのではないです。 そして以降では,秘密鍵ファイル server.key から公開鍵要素を抽出しているだけなのに,それを「秘密鍵から公開鍵を【生成できます】」といかにも計算で生み出しているかのように表現するのには違和感を持ちます。 ---------------- > 1) まず本人が適当に秘密鍵を考える 上記で示したとおり,秘密鍵とはユーザが考えて決めた文字列ではありません。 ---------------- > 本人の公開鍵はどうやって公開するのでしょうか? http://okwave.jp/qa/q6226770.html の私の過去の回答ANo.2

selfy
質問者

お礼

なるほどです。ご親切なご回答有難うございました。再度読み返してみて、 > 鍵生成ソフトウェアを実行することで, > 公開鍵と秘密鍵のペアを生成します。 > public keyだけ/private keyだけが > 生成されることはありません。 の部分がキモだったように思います。片方からもう片方を作り出すことはそもそも無理なんですね(「n を素因数分解して、素数 p とq を求めることが非常に困難」 という点がポイントみたいですね)。そして公開鍵は必要になった時点で取りに行くというNo.1様の内容を考えれば、公開鍵が意味不明な文字列であっても問題はないというのも理解できます。 あと、過去のご回答にあった、 https://www.verisign.co.jp/basic/pki/index_practice.html#practice はとてもわかりやすくて良いですね。こちらも有難うございました。 これで疑問は解決しました。恐らく来週の試験は乗りきれると思います:) 皆様ご回答有難うございました!

その他の回答 (5)

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.5

>個人の公開鍵はいつ公開されるのか #1でちゃんと説明していますよ。貴方がクレジットカードのボタンを押した瞬間に公開鍵を無意識のうちに使っているのですよ。

selfy
質問者

お礼

了解です!すみません、ちゃんと読んでいませんでした。。。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.4

>誰でも公開鍵に対応する秘密鍵が作れて 秘密鍵から公開鍵は生成できますが、逆はできません。 故に、公開鍵を公開しているからといって、公開鍵から秘密鍵を生成できませんのでセキュリティ上は問題うりません。 # 秘密鍵の管理が甘くて漏れる。とかいうのはこの場合は考慮外でしょう。 現状のコンピュータの性能では総当たりなどでも公開鍵から秘密鍵を生成するのは「現実的ではない」というのが担保ですかね。 で、公開鍵で暗号化したものは秘密鍵でしか複合できない。 秘密鍵で暗号化したものは公開鍵でしか複合できない。 ということで公開鍵で複合できれば、そのデータは秘密鍵を持つ人にしか暗号化できない。という証明になる。ということです。 暗号化・複合にはそれなりに手順があるので使用される場面が限定されることもままありますが。 # httpsなどのSSL通信とか。

selfy
質問者

お礼

ご回答有難うございました。貴重なご意見でした!

selfy
質問者

補足

ご回答有難うございました。なんとなーく見えてきたのですが、まだ少しわからない点があります。 1. 個人の公開鍵はいつ公開されるのか ご教授頂いた内容だと、鍵を作るサイクルは 1) まず本人が適当に秘密鍵を考える(これは秘密にしておく、当然ですが。。。) 2) 上記で考えた秘密鍵から公開鍵を作る(No.1様,No.2様からのご教授の内容から考えて、それ用のソフトを使うかそれなりの会社にお願いして。あるいは個人の場合はOSが勝手にやってくれるとか??) という流れになるかと思うのですが、本人の公開鍵はどうやって公開するのでしょうか?というか、ひょっとしてNo.1様の書き込みのように、個人の場合でも公開鍵は最初から公開されているのではなくて、必要になった時点で必要とするマシンがその人のマシン勝手にアクセスして取りに行くのでしょうか?最初、公開鍵にはメールアドレスとかを使っているのかと思っていましたが、どうやら違ったようですね。。。汗 2. なぜ秘密鍵が作れないのか ちょっと難しい話になってしまいそうですが、「公開鍵から秘密鍵は生成出来ない」というのはなぜでしょうか?逆のロジックを使えば出来るような気がするのですが。。。ひょっとしてランダム関数とかを使っているのかもとか考えましたが、そうだとすると一個の秘密鍵からいろんな種類の公開鍵が出来てしまうことになるし、それもおかしいかと思うのですよね。。。 すみませんが、補足お願いします。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

>複合化 暗号化の反対語は復号です。「複」の字は間違いですし「化」は付きません。

selfy
質問者

お礼

ご指摘有難うございました!了解でございます!

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>特定の公開鍵に対応する秘密鍵は、 >本人が勝手に決められるものではなくて、 >公開鍵との間になんらかの関連性がある >ものでなければならないと思う そのとおりです。 鍵生成ソフトウェアを実行することで,公開鍵と秘密鍵のペアを生成します。 public keyだけ/private keyだけが生成されることはありません。

selfy
質問者

お礼

ご回答有難うございました。この部分がとても重要でしたね!

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.1

貴方が楽天に貴方のクレジットカード番号を送る場合を例に取りましょう。貴方は送るときには公開されているキーを使って貴方のクレジットカードを暗号し、それを楽天へ送ります。楽天はそれを解読するときには密かに持っているキーを使うのです。つまり公開キーは暗号化できるけれども解読することができないのです。ですから貴方が送った暗号化された番号をハッカーが盗聴して盗み取ってもそれを解読するスベがないのです。その公開鍵とペアになった秘密鍵を作る会社があり、それを楽天に売るのです。楽天は公開鍵だけをユーザーに提供して暗号化できるようにするのです。提供すると言っても貴方が『送る』というボタンを押したときには楽天が用意した公開ルーチンがその鍵を使って暗号化するので、貴方はその鍵を知っている必要は全くありません。

selfy
質問者

お礼

ご回答有難うございました。「提供すると言っても貴方が『送る』というボタンを押したときには楽天が用意した公開ルーチンがその鍵を使って暗号化する」という点がキモでしたね。貴重なご教授有難うございました。

関連するQ&A