- ベストアンサー
共通鍵、暗号鍵の具体的な使い方と鍵の作り方について
- 共通鍵、暗号鍵の具体的な使い方についての疑問について解説します。メモ帳やWordで文章を暗号化して友達に送る方法や、仕事で顧客に暗号化メールを送る方法なども具体的に説明します。
- 鍵の作り方についても詳しく解説します。個人利用ならソフトをインストールして鍵を生成する方法や、企業が独自に鍵を生成するサーバを持っている場合についても触れます。
- 実際に暗号化を行う手順や鍵の指定方法、複合の方法なども具体的に説明します。暗号化ソフトを使用してテキストファイルを暗号化し、鍵を指定する方法についても詳細に解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず、疑問にすべて答えて、それからもう少し説明します。 1、メモ帳やWordを使って文章を書いた、これを友達に送りたいが公開鍵で暗号化して送りたい!どうすればいいのか? メール暗号化ソフトを使って暗号化します。 有料のものだと、シマンテックが販売しているPGPを使います。 無料のものだと、gpg4win (内部でGnuPGを使っている) が有名でしょう。 気を付けないといけないことは、暗号化に使用したソフトと同じソフトがないと復号できないということです。 2、仕事で顧客にメールを送りたいが、暗号化したい。どうすれば? メールの本文を暗号化したい場合は、S/MIMEやOpenPGPというプロトコルを使います。 S/MIMEはWindowsに標準装備されているOutlook Expressやその光景のWindows Live Mailで扱えます。OpenPGPはThunderbirdで使えます。 (ちなみに、Thunderbirdは両方共対応しています。) S/MIMEは認証局から自分の公開鍵が正しいということを証明する証明書を貰わないと使えないのに対し、OpenPGPは何らかの方法で自分の公開鍵を受け取り手に渡しておけば使えます。 自分の個人的な印象では、暗号化メールはOpenPGPを使うことが多く、企業の公式メールなどは平文で送ってS/MIMEで電子署名をつけることが多いように思います。 さて、S/MIMEを使う場合も、OpenPGPを使う場合も鍵の生成や登録という面倒な作業があるので、暗号化したデータを送るだけならもっと簡単な方法があります。例えば、zipファイルを作成するとき、パスワード付きのzipファイルを作れますが、これはzipファイルの中身が暗号化されるのでパスワードを知らないと復号できません。 ファイルを暗号化するだけならそれこそVectorなどで探すとゴマンとソフトが見つかると思います。 3、そもそも鍵の作り方ってどうすればいいのか? 個人利用であれば何かソフトをインストールして作るのか。 PGPやgpg4winで使う鍵を作るには、PGPやgpg4winのメニューにある鍵ペアの作成というものを使います。 (検索するといい感じの説明があるので詳細は割愛します。) 先に述べた電子メールに署名したり、暗号化したりする規格であるS/MIMEで使う鍵は次のサイトで紹介されている方法で作れます。 http://www.atmarkit.co.jp/fwin2k/win2ktips/647freeca/freeca01.html このステップを進んでいった時に出てくるRSA交換キーというのが暗号化のための鍵で、Thawte がそれに正しい鍵であるという電子署名をしたものが証明書となります。 4、企業などでは自社独自に鍵を生成するサーバみたいなのがあるのでしょうか? 鍵の生成サーバーは不要ですね。 普通、自分のマシンで暗号強度のある擬似乱数を発生させ、そこから鍵を作ります。 必要なのは、鍵を生成するサーバーではなく、公開鍵に署名をするサーバーか、あるいは、本人のものだと確認されている公開鍵を登録しておくサーバーだと思います。 5,複合の仕方も具体的に知りたいです。 復号は暗号化されたファイルを複合するソフトに渡すことで行います。 なぜこれだけで十分かというと、暗号化されたファイルの中にどの暗号鍵を使ったかやどの暗号化方法を使ったかが記録されているからです。どの暗号鍵を使ったかは、公開鍵のハッシュ値 (これをシグニチャといいます) で教えます。 ちなみに、公開鍵暗号は非常に効率が悪いので、普通、公開鍵暗号だけで暗号化することはありません。本文を共通鍵暗号で暗号化して、その暗号化に使った鍵を公開鍵暗号で暗号化するということを行うと思います。このときの共通鍵暗号の暗号鍵は暗号的な強度がある乱数から作られます。 この、乱数の作成方法は数学的なアルゴリズムで作ると周期性があり、すぐに次の鍵が見破られてしまいます。よって、暗号強度のある乱数にするために大抵、キーボード入力のタイミングなど、動きにブレがあるものの情報を集めて、それをハッシュなどしたものを使うか、それを乱数のseedとして、yarrowアルゴリズムやarc4randomなどを使って作っていると思います。 あと、質問者の例には一切登場していませんが、公開鍵暗号が使われている一番多いケースはSSLですね。電子ショッピングサイトを利用するとき、クレジットカード番号等を入力するところでhttps://...で始まるサイトにつないでいたりすると思います。ここでも、先ほどと同じようなことをして安全な通信ができるようにしています。 https://...のページにつなぐと、サーバーが公開鍵とそのCAによる電子署名を送ってきます。CAによる電子署名が正しいことを確認した後、ブラウザ側で乱数を作って、公開鍵で暗号化した上でサーバーに送ります。そして、その乱数を鍵とした共通鍵暗号を使って通信を行います。(かなり端折ったので詳しくはhttp://tools.ietf.org/html/rfc2660でも見てください。) ついでに、各プログラミング言語に暗号化のためのライブラリーは普通にあるので、そういうのも使ってみるとよいでしょう。Javaでは標準で暗号化ライブラリーが入っていますし、CならOpenSSL、libgcrypt、nssなど多数の実装がありますからね。もちろん、Ruby、PHP、pythonなどの言語にもそういうライブラリーはあります。
その他の回答 (3)
- kadusaya2
- ベストアンサー率48% (114/235)
1.の回答 公開鍵で暗号化を行うソフトはほとんどありません。 公開鍵暗号は時間がかかるので、実用的では無いからです。 一般的には共通鍵暗号で暗号化し、その時の共通鍵を公開鍵暗号で暗号化します。 暗号化して送りたいだけならば、文書を暗号化するのではなく、メールに添付して メールごと暗号化するのが簡単です。 2.の回答 まず、顧客から電子署名されたメールを送ってもらいます。 このとき、あなた自身も顧客も OutlookExpress、Shuriken などの電子署名に対応したメールソフトで送受信する必要があります。 顧客から受け取った電子署名メールには顧客の公開鍵が含まれているので、その公開鍵は自動的にWindows上に取り込まれます。現状では、電子署名メール以外に本物の公開鍵を受け取る方法がありません。 キチンと受け取れていれば、InternetExplorerで ツール→インターネットオプション→コンテンツ→証明書→ほかの人 に顧客の証明書が入っており、その証明書の中に公開鍵が含まれています。 以後は、その顧客宛てのメールを作成したときに〔暗号化〕ボタンをクリックすればメールソフトが自動的に暗号化して送ってくれます。 3.の回答 簡単なのは k9pca です。 http://www.vector.co.jp/soft/winnt/util/se479199.html 4.の回答 PKIを構築する場合、セキュリティの観点から認証局は必ずオフラインにします。 サーバ+クライアント形式ではなく、スタンドアロン形式で単独のマシンをネットワークに一切接続しない状態にします。 補足ですが、公開鍵を単独で使用することはありません。 電子証明書の中に含まれていなければ、現実的には意味が無いからです。 公開鍵と電子証明書はセットで覚えてください。
お礼
回答ありがとうございます >InternetExplorerで ツール→インターネットオプション→コンテンツ→証明書→ほかの人 に顧客の証明書が入っており、その証明書の中に公開鍵が含まれています。 これは知らなかったです、ためになりました。
- semikuma
- ベストアンサー率62% (156/251)
1~3 私も詳しくは知りませんが、PGPなどの暗号化ソフトがよく用いられるようです。 具体的な使い方は、例えばここ↓を見ればよく分かるでしょう。 http://allabout.co.jp/gm/gc/296748/ 4 公開鍵方式では公開鍵を1個生成すれば事足りるので、鍵を生成するためだけのサーバがあるとは思えません。 ちょっと違いますが(これも勉強したとは思いますが)、ネットショッピングなどでよく使われるSSL(https://で始まる相手との通信)も、公開鍵方式を用いています。 http://thinkit.co.jp/free/article/0706/3/6/
お礼
回答ありがとうございます SSLの例は分かりやすくていいですね
- manmanfrosch
- ベストアンサー率30% (9/30)
1のみに回答します。 AからBに文章を送るとします。まずBはペアになっている公開鍵と秘密鍵を作り公開鍵を何らかの方法で公開します。(公開鍵は誰かに見られても問題ありません。)そしてAは公開されている公開鍵を使って暗号化してメールをおくります。そして、受け取ったBは秘密鍵を使ってファいルを復号します。そうすればもし、第三者にメールを傍受されても内容を見ることができずに安全に通信ができます。
お礼
回答ありがとうございます。 公開鍵暗号方式の説明ですね。 そこまではテキストなどで理解できたのですが それを具体的にどうやって使えばいいのかが分かりませんでした。
お礼
回答ありがとうございます これです!こういった一つ一つ手順を追って説明されている サイトが欲しかったのです!