公開鍵暗号化方式での鍵の配置について

このQ&Aのポイント
  • 公開鍵方式における鍵の配置方法について説明します。
  • 公開鍵をサーバに配置し、暗号化、復元用に秘密鍵をクライアントに配置する方法が一般的です。
  • VB.NETで公開鍵方式を実現する方法について、参考サイトが少ないことが課題です。
回答を見る
  • ベストアンサー

公開鍵暗号化方式での鍵の配置について

上長より、ファイルのやり取りはGPGにて公開鍵方式で実施するとの事で、 技術検証を任されたのですが、そこでいくつか不明な点がある為、 ご教示頂きたく何卒宜しくお願い申し上げます。 公開鍵方式では受信側にて公開鍵、秘密鍵を保持し、送信側が受信側にアクセスして公開鍵を使用して暗号化を実施し、受信側へ送信する・・・とあります。 受信(取得する)側がクライアント、送信(取得される)側がサーバを想定しており、 サーバ側にはある検査結果を検査が終わる度に決まったディレクトリに配置するのですが、 クライアント側から取得するのは1日1回と考えております。 その際、サーバ側においてあるファイルを暗号化した状態で配置しておきたいのですが、 よくある図解では、受信側に公開鍵と秘密鍵を保持しているイメージですが、 作成した公開鍵をサーバに配置して暗号化、復元用に秘密鍵はクライアントに配置と考えておりますが、この考えで正しいでしょうか? ちなみに環境は以下を想定しております。 クライアント = Win7 サーバは = Linux系 言語 = VB.NET また、VB.NETで実現しようと考えているのですが、サンプルプログラムが英語用サイトでもあまり見つける事が出来ませんでしたので、参考サイトもご存知でしたらご教示頂けると非常に助かります。 クライアント(取得側)、サーバ(取得される側)での公開鍵方式をしようしたファイルのやり取りについて、どのような手段が常套手段なのかぜひご教示頂きたく、何卒宜しくお願い申し上げます。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

公開鍵暗号には二通りのやり方がある。 ●パターン1:受信側が秘密鍵 ・電文を受信したい人Bがキーペア(公開鍵と秘密鍵)を作る。 ・Bが全世界にBの公開鍵を公開する。 ・Bに電文を送信したい人AがBの公開鍵をゲット。 ・AはBの公開鍵で電文を暗号化してBに送信。 ・BはBの秘密鍵で暗号化電文を復号化。 ・正しく復号化されたらOK。電文は暗号化された状態でAからBに渡された。 →暗号化電文を復号化できるのはBのみ。 ●パターン2:送信側が秘密鍵 ・電文を送信したい人Qがキーペアを作る。 ・Qが全世界にQの公開鍵を公開する。 ・Qから電文を受け取りたい人RがQの公開鍵をゲット。 ・QはQの秘密鍵で電文を暗号化してRに送信。 ・RはQの公開鍵で暗号化電文を復号化。 ・正しく復号化されたらOK。電文は暗号化された状態でQからRに渡された「、かつ確実にQからの電文である事が確認された」。 →暗号化電文を複合できるのは全世界の全ての人間。 ついでにSSLの暗号化方式について軽く説明しておくと、 ・サーバーがキーペアを作る。 ・公開鍵も秘密鍵もサーバーが持っている。 ・クライアントが接続する。 ・サーバーが公開鍵をクライアントに平文で送りつける。 ・クライアントは共通鍵の元ネタを作ってそれをサーバーの公開鍵で暗号化しサーバーに送信する。 ・クライアントとサーバーはそれぞれ共通鍵の元ネタから共通鍵を作る。 ・クライアントは今までのやり取りのハッシュ値を共通鍵を使って暗号化しサーバーに送信する。 ・サーバーは今までのやり取りのハッシュ値を計算し、クライアントから受け取った暗号化ハッシュ値を共通鍵で復号化して一致したら通信開始OK。 ・ ~~~暗号化通信中~~~ という流れで、実はSSLはキーペアを使い捨て共通鍵の交換にのみ使い、以後の通信は使い捨て共通鍵で行っている。 > クライアント(取得側)、サーバ(取得される側)での公開鍵方式をしようしたファイルのやり取りについて、 > どのような手段が常套手段なのかぜひご教示頂きたく、何卒宜しくお願い申し上げます。 何を、いつ、どこで、暗号化して、それを、いつ、どこで復号化するのか、するべきなのか、しなきゃ脅威があるのか、そこをもう一度練り直してみてはどうかな。 以下はあくまで一例だが、 暗号化のタイミングは既に分かっている。VB.NETが検査結果をサーバーに上げるタイミングだ。 では、検査結果を復号化するのは、いつで、誰? これもクライアント側から1日1回取得するタイミングだろうな。 それが決まったら次は送信側と受信側のどちらが秘密鍵を持つべきかだ。まぁこれも受信側が秘密鍵でないとおかしいよね。

bows_0307
質問者

お礼

ご丁寧にご教示頂きまして、情報有難う御座います。 頂きました情報を参考に作成してみます。

その他の回答 (2)

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

http://www.ietf.org/rfc/rfc4880.txt 上の資料が役立つかも。

bows_0307
質問者

お礼

情報有難うございます。 しかし、英語の苦手は私でも多少の英語は翻訳しながら見てきましたが、これはすごいボリュームですね

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

実際に、困ることが少しあります。 1.クライアント側で、RSAの公開鍵と秘密鍵を作成するときに、時間がかかることです。   乱数を普通に作ると鍵作成には2時間くらいかかります。 2.次に、公開鍵、秘密鍵の作成には乱数を使うのですが、   NISTが警告を出していますので、そのことも検討する必要があります。 警告は、 http://www.businessnewsline.com/biztech/201309162152550000.html です。 3.送信するデータサイズが大きい場合は、RSAでの暗号化は、少し時間がかかります。   接続中に暗号化や復号化をしないで、暗号化してから接続して送信。   受信が終わってから復号化する。    ようにしたほうが良いと思います。または、SSLのように混合型にする。 4.公開鍵暗号としては、楕円曲線暗号もありますが、鍵作成には大量のメモリーとRSAのとき以上の時間が   かかります。 鍵作成と乱数についてはよく確認したほうが良いと思います。

bows_0307
質問者

お礼

情報誠に有難うございます。 鍵作成に2時間ほどかかるとの事ですが、下記の方法で実施した結果、ユーザーIDや鍵長の選択等、必要情報の入力を除いた時間はほんの数秒で完了しました。 2時間というのは、鍵作成だけでなく、公開サーバへの登録等、諸作業を含めての時間でしょうか?

関連するQ&A

  • 公開鍵暗号について

    失礼します。 公開鍵暗号についてです。 Linux系OSカテゴリで質問することではないかもしれませんが、 sshサーバーの設定の際に疑問になったことなのでここで質問させてください。 公開鍵暗号方式について無勉強だったので調べていると、 Wikipediaより、 1.通信を受ける者(受信者)は自分の公開鍵(暗号化のための鍵)P を全世界に公開する。 2.受信者に対して暗号通信をしたい者(送信者)は、公開鍵 P を使ってメッセージを暗号化してから送信する。 3.受信者は、公開鍵 P と対になる秘密鍵(復号のための鍵)S を密かに持っている。この S を使って受信内容を復号し、送信者からのメッセージを読む。 4.暗号通信を不正に傍受しようとする者(傍受者)が、送信者が送信した暗号化されたメッセージを傍受したとする。傍受者は、公開鍵 P は知っているが、秘密鍵 S は受信者だけが知っている情報であるので分からない。P から S を割り出すことは(計算時間的に)極めて難しい。そのため、暗号文を復号することはおよそできない。 とありました。 sshを使ってサーバーにアクセスする場合、秘密鍵はクライアント側が持つことになりますが、 そのとき、サーバーからクライアントへのデータは秘密鍵があるので解読できるのは理解できます。 しかし、その反対はサーバー側に秘密鍵がないので無理なのでは? 不勉強でここで悩んでいます。 どなたかご教授いただけないでしょうか? また、ssh用に作成した秘密鍵は「厳重に保管しておく」とよく書かれていますが、 具体的にどうするのかはっきりしません。 パスワード保護でもすればよいのでしょうか? これについても宜しくお願い致します。

  • 公開鍵暗号方式について

    公開鍵暗号方式について調べてるのですがわからないことがいくつかありますので教えてください。詳細なところまでは必要ありません(というか理解できません。。)ので素人向けに概観をご教授いただければ大変助かります。 共通鍵を使った方式は鍵自体の受け渡しに問題があるので、公開鍵と秘密鍵という一対の鍵を用意し、公開された公開鍵で暗号化し、秘密鍵で複合化する。このとき、例えばRSAなら素因数分解を利用した、「秘密鍵から公開鍵の生成は容易だが公開鍵から秘密鍵を割り出すことは困難」という特性が公開鍵を公開しても安全であるという根拠になっている、と理解してます。 ここまでは納得できるのですが、「公開鍵で暗号化したものは秘密鍵でしか複合できない」という仕組みがまったくイメージできません。 送信側だけを考えると、単に与えられたある値(公開鍵)を使ってそれを暗号化してるだけですよね??それでは第3者に暗号分を盗聴されたら公開鍵とともに解析されて(暗号化のアルゴリズムが同じであれば)いずれバレてしまうような気がするのですが・・ もちろん送信者側が秘密鍵まで知っているのなら、「公開鍵で暗号化して秘密鍵でしか複合できない」ような暗号文を作ることは可能でしょうけど、公開鍵から秘密鍵を知ることはできませんもんね・・?? 以上、お暇なときでけっこうですのでよろしくお願いいたします。

  • 公開鍵暗号方式のしくみ

    公開鍵暗号方式について、ある解説で、 暗号化鍵と暗号化アルゴリズムは公開するが、復号鍵は秘密にしなければならない。とあります。 送る側の暗号化においては、受信側の公開鍵を使うわけですが、暗号化鍵の内容と暗号化アルゴリズムが分かれば、復号の仕方は推測できたりしないのでしょうか。

  • 公開鍵方式とは

    公開鍵による暗号化についてメチャクチャ分かりやすく教えてください。 普通は鍵を公開しては意味が無いし、秘密鍵とセットなら秘密の鍵が1つあれば良い様に思えるのです。 ** 公開鍵方式  **** 対になる2つの鍵を使ってデータの暗号化・復号化を行なう暗号方式。  片方は他人に広く公開するため公開鍵と呼ばれ、もう片方は本人だけがわかるように厳重に管理されるため秘密鍵と呼ばれる。秘密鍵で暗号化されたデータは対応する公開鍵でしか復号できず、公開鍵で暗号化されたデータは対応する秘密鍵でしか復号できない。

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

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

  • 公開かぎ暗号方式

    送信者側の暗号化は送信者の秘密かぎまたは公開かぎですか? また、受信者の複合は受信者の秘密かぎ? 正しくはどうなるのですか?

  • 公開鍵暗号方式について、お尋ねします。

    公開鍵暗号方式について、お尋ねします。 以下の理解でいいか確認よろしくお願いします。 公開鍵暗号方式で認証局に申請する場合、申請に必要なものすべてと公開鍵 と理解していますが、よくわからないのが秘密鍵をソフトで作成して公開鍵と 一緒に提出するのか、認証局が発行するのか、それ以外の方法なのか理解していません。 秘密鍵についてどの時点でどうしたらいいのか解答お願いします。

  • 公開鍵暗号について

    暗号について勉強しています。 公開鍵暗号で公開鍵と秘密鍵を決められた方式で生成するとあるのですが、鍵を生成するための式はあるのでしょうか?

  • 公開鍵方式の安全性が全く分からない

    公開鍵方式が暗号化方式として優れていたと30年も言われてきた理屈が分からないので教えてください。 下記のNTT PC COMMUNICATIONSのサイトを見ていると以下のように説明されていました。 <引用元URL> http://www.nttpc.co.jp/yougo/%E5%85%AC%E9%96%8B%E9%8D%B5.html ~~~~~~~~~<説明抜粋>~~~~~~~~~~~~~~~ 秘密鍵暗号化方式は、鍵を盗まれると解読されてしまうとか、 連絡を取り合う相手の数だけ鍵を持たないといけないといった管理上の問題がある。 そこで、公開鍵と秘密鍵を組み合わせた公開鍵暗号化方式という方法が考え出された。       <中略> 秘密鍵は、あなただけが持っていて誰にも渡さない。それに対して、あなたの公開鍵は、たくさんの人に配布しておく。 あるいは、誰でも簡単に入手できるようにしておく。 秘密鍵は、あなただけが持っていて誰にも渡さない。それに対して、あなたの公開鍵は、たくさんの人に配布しておく。 あるいは、誰でも簡単に入手できるようにしておく。 そして、あなたが秘密鍵で暗号化したデータは、あなたの公開鍵でのみ復元できる。 あなたの公開鍵で暗号化されたデータは、あなたの秘密鍵でのみ復元できる。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 他にもいろいろ記事を読んだのですがだいたい似たような説明になっています。 しかしこの説明から考えると下記のリスクが発生するから全く安全な方法とは思えず、 何を以て30年近くも安全な暗号方式として使われ続けてきたのかが さっぱり分かりません。 ~~~~~~~上URLの記事から私が思う公開鍵方式のリスク~~~~~~~ 例えばAさんからBさんにデータを送ったとする。 データはAさんの秘密鍵で暗号化されている。 しかしそのデータ通信が発生したことにCさん(Aさん、Bさんの敵)が気付いた。 Bさんの公開鍵は誰でも簡単に入手できるのだから当然Cさんも入手している。 そのためBさんに送られたデータはCさんにも解読されてしまう。 何らかの方法でAさんに送られたデータをCさんも入手してしまえば 公開鍵でCさんも解読することが可能になってしまう。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ すみませんが上記の私が思うリスクが発生しにくい理由を教えてください。

  • 公開鍵暗号方式を利用した下りデータの安全性について

    公開鍵暗号方式については、  ・公開鍵で暗号化したものは秘密鍵で復号できる  ・秘密鍵で暗号化したものは公開鍵で復号できる  ・秘密鍵は(もちろん)秘密だが、公開鍵は不特定多数に配布可能 が前提にあると理解しています。 SSLも公開鍵暗号方式を利用した通信プロトコルということですが、ここで、一つの疑問が湧きました。 信頼できるルートから署名された証明書を持つサイトで、SSLによって通信が暗号化される会員登録画面があったとします。 利用者は、氏名や住所などを登録画面に入力し、登録ボタンを押します。 この時、入力した情報は、サイトの証明書から入手した公開鍵で暗号化され、サイトに送信されるのだと思います。 ここで暗号化された情報は、サイトが持つ秘密鍵のみで復号可能ですので、鍵を持たない第三者が盗聴すること自体が無意味であり、安全であると言えます。 では、登録された情報を、利用者が確認のために表示する場合はどうなのでしょう? 今度は、サイトが持つ秘密鍵で利用者の情報を暗号化し、サイトの公開鍵によって利用者側で復号することになると思います。 しかし、前述したように、そのサイトの公開鍵は不特定多数の人が持っている可能性があります。 ということは、下りデータの通信を盗聴することで、同じ公開鍵を持つ第三者に復号されてしまうのではないかと考えたのですが、実際はどうなのでしょうか? 利用者が個人で秘密鍵を持っていない状況での通信というのがポイントです。 インターネットなどで調べてみたのですが、秘密鍵の所有者向きの通信を公開鍵によって安全に暗号化することを例とした説明が多く、先の疑問に対する明確な解答を見つけることが出来ませんでした。 また、ランダムに生成した共通鍵を公開鍵で暗号化するハイブリッド方式というものがあり、何か関連があるかと思ったのですが、公開鍵暗号方式のデメリットである処理速度の問題を補う手法という内容で、解決には結び付きませんでした。 ご存知の方がいらっしゃいましたらお教え下い。 宜しくお願いします。