Hatena::ブログ(Diary)

西尾泰和のはてなダイアリー

2014-08-09

妻に公開鍵暗号を教えてみた

何気なく放送大学をつけていたら公開鍵暗号の話をしていた。

妻「この話、何度聞いてもわかんないのよね」

僕「え、どこがわからない?どこまではわかってる?」

妻「平文はわかるけど、鍵を共有するとか秘密にするとか、署名するとかがよくわからない」

僕「あー、鍵に例えているのが逆効果なのか」

「鍵」をNGワードに指定

僕「じゃあ『鍵』という言葉を使わずに説明してみよう。暗号って『平文を暗号文に変換する方法』で伝えたい文章を暗号文に変えて送り、受け取った人はそれに『暗号文を平文に戻す方法』を使って元の文章を得るわけだ。その目的は、途中の通信文が敵に取られたりしても通信の内容がバレないようにするため。」

妻「うん」

僕「昔の暗号化の方法は、片方の方法がわかるともう片方の方法も分かった。例えば『アルファベットを後ろに1個ずつずらすと平文に戻せます』って教えてもらったら、『なるほど、前に1個ずつずらせば暗号文にできるんだな』ってわかるよね。ところがある時、片方がわかってももう片方がわからない素晴らしい暗号化の方法が発明された」

妻「ほう」

僕「つまり、『平文を暗号文にする方法』を不特定多数に公開しても平気になった。それをやっても『暗号文を平文に戻す方法』は自分しか知らないままに保てる。そうすると、僕に秘密の文章を送りたい人は、公開されている暗号化の方法で暗号を作ることができて、それを読むことができるのは僕だけってことになる。」

妻「なるほど、便利。」

僕「逆に、公開していない方法を使って僕が暗号文を作ると、みんなは公開されている方法で平文に戻して読むことができる。みんな『この暗号文を作るためには、西尾泰和だけの知ってる暗号化方法を使う必要がある=書いたのは西尾泰和』とわかるので署名として使うこともできる」

妻「それで暗号の話の中に署名の話が出てくるのね。ところで暗号文にする方法を公開するの?平文に戻す方法を公開するの?」

僕「あー、今まで便宜上『暗号文に変換する方法』と『平文に戻す方法』って呼んできたけど、これを方法Aと方法Bって呼ぶことにすると、方法Aで暗号文を作って方法Bで平文に戻すこともできるし、方法Bで暗号文を作って方法Aで平文に戻すこともできるんだ。ただ、Aで作ったらBで、Bで作ったらAで、と両方が必ず必要になる」*1

妻「なるほど、じゃあ片方の方法Aを公開しておけば、暗号文を受け付けるのにも、署名付きで情報公開するのにも使えるのね」

「鍵」

僕「で、その公開した側の方法を『公開鍵』、公開していない方の方法を『秘密鍵』って言うんだけど…正直『鍵』って言葉の一般的なイメージとはだいぶかけ離れているね。例えば普通の鍵で金庫を開けたら、入れるのも出すのも両方できるよね。だけどこの発明のキモは『金庫に入れることはできるが出すことはできない』という方法ができたところにあるんだ。」

妻「よくわかりやすくしようとして、金色の鍵と銀色の鍵のイラストを描いてたりするけど、全然ピンとこないのよね」

僕「『入れられるけど出せない』という一方通行な特徴を持ったものって何があるかなぁ。例えばポストはだれでもハガキを入れられるけど、郵送されたあと郵便箱を開けられるのは僕だけ、とか。もちろん通信経路の郵便職員は情報をリークしないって前提で。逆方向の例だとこのブログはだれでも読めて書き換えられるのは僕だけなので、ここに書いてあることは僕が書いたとみんな信用するよね、とかかな。」

追記

ブクマコメントでよいアナロジーが書かれていたので転載。南京錠は、閉めることはだれでもできるが、開けることは鍵を持っている人しかできない。なので南京錠をだれでも手に入るところにおいておけば、その南京錠で鍵をかけて僕に送りつけることで僕だけが箱を開けられる。一方通行の説明にはこれでよいと思う。

*1:注釈:厳密にはこの「逆向きにも使える」という特徴を持っている暗号化の方法と持ってない暗号化の方法があって…と細かい話はここでは割愛している。

dotdot 2014/08/09 15:25 奥さんの理解が良すぎて困る。

senecaseneca 2014/08/09 20:00 公開鍵は「鍵」自分の持っている秘密鍵でしかあけられない「錠前」として、イメージを説明します。錠前だからみんなに公開してもだいじょうぶだと。

E.E. 2014/08/09 22:24 南京錠で暗号化はイメージできるけど、署名がイメージできない、、

guichoguicho 2014/08/10 02:46 面白く読ませていただきましたが、視界が赤くなりました。(緑の補色)

testes 2014/08/10 05:48 よくわかってないんですけど、公開鍵は素数の積、秘密鍵はいずれかの素数?
3*7=21のとき、公開鍵は21で秘密鍵は3か7?
このとき方法Aは21で方法Bは3か7ってこと?

RemiRemi 2014/08/10 09:50 この10年で一番わかりやすい説明だと思った。

nishiohirokazunishiohirokazu 2014/08/10 18:01 tesさん
ここで説明したことは公開鍵暗号がなぜ広く使われるようになったのか(どういうメリットがあったのか)つまりwhyです。
一方tesさんの質問の内容は具体的な実現方法、つまりhowです。レイヤーが全く異なります。

次に質問の内容についてですが、詳しいことはコメント欄で解説しきれないのでWikipediaのRSA暗号のページを読んでください。
端的に言えば、公開鍵には素数の積21の情報が含まれていて、秘密鍵は(3 - 1) * (7 - 1)を使って作られます。
素数が十分大きければ公開鍵に含まれている素数の積pqの情報を得ても、そこから(p - 1) * (q - 1)を求めることが現実的な時間ではできない、ということを利用して「片方の鍵を公開してももう片方の鍵がわからない」を実現しているわけです。

bleu-bleutbleu-bleut 2014/09/25 10:05 公開鍵を公開している以上、秘密鍵で暗号化したのを誰でも復号化できるならそもそも暗号じゃないんじゃないか、という疑問が…他人に漏れないように通信をするには話に続きがある?

yuuyuu 2015/07/14 21:22 > bleu-bleutさん

本文中では二通りの使い方について触れられてます。
まずAとBの鍵は等価です。
Aで暗号化したらBで復号出来る。
Bで暗号化したらAで復号出来る。
Aで暗号化したらAで復号出来ない。
Bで暗号化したらBで復号出来ない。

この事を念頭においてですね。
Aを秘密鍵として自分だけが持つ。
Bを公開鍵として配布します。

まず一つ目の通常の使い方。
自分に暗号通信したい時はBで暗号化して送信してね。
その暗号文はAでしか復号出来ないから盗聴されても安心だね!
という仕組みです。
また相手側も暗号化した通信を受け取りたいなら、
相手は相手で公開鍵を配布しておいて、
その公開鍵で暗号化しないといけません。
もちろん復号するのは相手だけが持つ秘密鍵になります。

次に二つ目の認証としての使い方。
Aが秘密鍵でBが公開鍵なのは同じです。
自分だけが持つAで暗号化した暗号文をBで復号出来れば、
間違い無くA鍵を持った自分から送られたと保証出来る。
なので誰もが復号出来ても構わないんです。

torisugaritorisugari 2016/03/29 21:39 多分「鍵」という表現が混乱の元になっていると思うんだよね
情報の話だから、物理的に「鍵」みたいなのが存在するわけじゃ無い
情報を暗号化、複合化するための手法が鍵と比喩されているだけで

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/nishiohirokazu/20140809/1407556873