秘密鍵の管理
(2018/8/30)
公開鍵暗号という暗号通信方式がインターネットで広く利用されている。データの暗号化や復号には何らかの秘密が必要であり、暗号化や復号を行なうための秘密が鍵と呼ばれるが、暗号化と復号に異なる鍵を使うことができて相互変換が不可能だというところが公開鍵暗号のキモである。秘密の情報をネット上の銀行に送るとき、ユーザは銀行サイトが発行する公開鍵を使って情報を暗号化してからWeb上に送信する。送信されたデータは銀行が持っている秘密鍵でしか復号できず、公開鍵から秘密鍵を計算することは不可能なので安全だというわけである。銀行に限らず、
https://
ではじまるサイトとの通信はすべてこの方式で暗号化されるのでいくら盗聴されても大丈夫である。これは大変ありがたい仕組みであり、公開鍵暗号を発明した人物はチューリング賞を受賞した。これが無ければインターネットは使い物にならなかっただろう。 公開鍵暗号は誰でも利用することができる。
openssh
コマンドなどを利用して自分の秘密鍵と公開鍵を生成してから通信相手に公開鍵を配っておき、自分に対するあらゆる通信は公開鍵で暗号化するよう頼んでおけば、相手からの通信は自分しか読めないので安全である。逆に、自分の秘密鍵で暗号化したメッセージを他人に送って公開鍵で復号してもらうようにすれば、秘密鍵を持ってる人しかそのメッセージを暗号化できないわけだから、確実に自分からのメールであると信用してもらうことができる。 メールの送受信で公開鍵暗号は現在あまり利用されていないようだが、リモートマシンへの接続には広く使われている。リモートマシンへの接続はパスワードを使うこともできるが、リモートマシンに公開鍵を登録しておいて秘密鍵を持つユーザからの接続だけ許すことにすればパスワード入力が不要になるので接続が楽になる。
さて、個人で公開鍵暗号を利用するのは便利なのだが、秘密鍵をどう管理するのかが問題になる。秘密鍵はパスワードと同じように重要な秘密情報であるが、一般に利用されている秘密鍵は暗号的なデータであり、ファイルとしてパソコンなどに保存されているのが普通である。パスワードをファイルに書いておくことは現在全く推奨されていないが、パスワードと同じぐらい重要な秘密鍵が普通のファイルとして置かれているのは考えてみると危険な話である。秘密情報をファイルに書くと、うっかりどこかにコピーしたりバックアップしたりしてしまうかもしれないし、TimeMachineやDropboxなどに自動的にコピーされてしまう可能性もある。うっかりGitHubなどにアップロードしてしまう可能性すらある。
こういう問題を解決するための鍵管理システムというものもあるそうだが、これはパスワード管理システムと同じような面倒さがあるだろう。秘密鍵を管理するためのハードウェアトークンというものがあるようだが、これだと家の鍵を持ち歩くのと変わらないから邪魔くさい。
この問題の解決方法として 、EpisoPassで秘密鍵を生成するようにすれば良いのではないかと考えている。秘密鍵をファイルとして置いておくことをせず、必要になるたびに生成するわけである。それはそれで面倒であるが、流出を恐れるよりはマシかもしれない。この方法を少し実験してみたいと思っている。