2011年10月16日

公開鍵方式の鍵ファイルと秘密鍵のパスフレーズの扱い方

公開鍵方式は、共通鍵方式と同じようにパスワード(=パスフレーズ)の管理が必要です。 ただ、鍵ファイルのバックアップや、サーバーに鍵の登録や更新登録が必要になる分、セキュリティ強度が高まります。

鍵ファイルの扱い方や、何が安全で何に気をつけなければならないか知られていないために、公開鍵方式はあまり普及していません。 ネットにあるのは公開鍵の技術的な内容ばかりで、これでは使えないと思い、調べました。

セキュリティの基本は、パスワードです。 自分が覚えているパスワードと、サーバーに暗号化されて記録されているパスワードが一致すれば、本人であると認証する共通鍵方式が主流でしょう。

多くの人は、いろいろなサイトに同じパスワードを付けていることでしょう。 アカウント名も、同じIDにしていることでしょう。 もし、サイトの中に、パスワードを暗号化せずにそのままネットに流してしまう「基本認証」を使っているサイトがあれば、簡単にパスワードが傍受されてしまいます。 そうして入手したパスワードを使えば、セキュリティが強いサイトでも簡単にログインして本人になりすますことができてしまいます。

しかし、それができてしまうのは、共通鍵方式を使っている場合です。 公開鍵方式を使えば、ID とパスワードを入手しても、ログインできません。 なぜなら、ID とパスワードの他に、秘密鍵(私有鍵)の入手が必要になるからです。 最も有名な公開鍵方式は、ssh や OpenSSH です。

公開鍵方式では、秘密鍵と公開鍵のペアを使い、ネットにパスワードを流さないで認証を行います。 暗号化されたパスワードでさえネットに流しません。 乱数(さいころを振るように決められた数千桁の数値)をサーバーが生成し、その乱数をサーバー持っているその人(ID)の公開鍵を使って暗号化します。 これをネットに流して、本人のPCに届きます。 暗号化された乱数は、秘密鍵でしか解読(復号)できません。 これは数学的にほぼ証明されています。 こうして得られた乱数を、ネットに流してサーバーに戻し、元の乱数であれば認証します。(これは1つの方式です)

Linux では、OpenSSH という公開鍵方式のプログラムが入っています。

ssh-keygen -t rsa

とシェルから入力すると、OpenSSH2プロトコルの RSA 暗号方式の強度 2048bitの秘密鍵($HOME/.ssh/id_rsa)と公開鍵($HOME/.ssh/id_rsa.pub)のペアが作られます。 その際、秘密鍵を暗号化するための『パスフレーズ』という耳慣れないものの入力を求められますが、これはパスワードと同じです。 フレーズ=複数のワードを入力してほしいから、パスフレーズと言っているだけです。 ややこしいですね。 ただ、ssh-agent を使えば、認証するたびにパスフレーズを入力する必要は無くなるので、長くても気にならなくなるでしょう。

2回鍵を作ると、警告されますがそれを無視してファイルを上書きすると、前の鍵は失われますので、鍵を使い始めたら注意してください。

この2つの鍵ファイルのバックアップをとっておくことを勧めます。★

このファイルは、パスフレーズによって暗号化されているので、パスフレーズを知らない人は使うことができません。 なので、改めて暗号化する必要はありません。 2つの鍵ファイルが入ったフォルダーを圧縮して、圧縮ファイルの名前を適当に変え、普段接続しない USB メモリの中の多くのファイルの中に、紛れこませればいいでしょう。

最も重要なのは、暗号鍵のパスワード(パスフレーズ)の管理です。★
本人しか分からないヒントを紙かファイルに書いて、隠しておくことをお勧めします。

サーバーに接続する前に、公開鍵をサーバーに送ります。 たとえばブラウザのフォームを使って公開鍵を入力します。 正規のサーバーであるかどうかは、URL によって確認できます。 このとき公開鍵を送る経路は暗号化されている必要はありません。 なぜなら、後で説明する1回目の接続をする際に、最初に説明した公開鍵の認証方法にある乱数を持っているサーバーは1つしか存在しないからです。

1回目の接続では、サーバー自体が偽者である可能性があるため、サーバーのドメイン名と公開鍵のフィンガープリント(ハッシュ値)が表示されます。どちらかを使って正規のサーバーであることを確認することができます。 接続(認証)に成功すれば、このサーバーと自分のPCしか知りえない情報のやりとりを行って、2回目の接続ではサーバーの確認が不要になります。

セキュリティを高めるために、定期的にパスワードの変更をするように言われますが、公開鍵方式では、パスワードを変更しても、盗難にあった秘密鍵+パスフレーズを無効にすることはできません。 サーバーに登録した公開鍵を更新する再登録も必要になります。★
秘密鍵ファイルにアクセスできる身内が犯人である可能性があるため、パスワードの変更もしておくとよいでしょう。


参考:

共通テーマ OpenSSH キー (鍵) の管理 第 1 回。
http://www.ibm.com/developerworks/jp/linux/library/l-keyc/

SSHアクセスのためのキー - SourceForge.JP。
http://sourceforge.jp/docs/SSH%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%AD%E3%83%BC

SSH通信でサーバ公開鍵のfingerprintは信頼できますか?
http://ap.atmarkit.co.jp/bbs/core/fsecurity/20647

sage_p at 22:44│Comments(0)TrackBack(0)プログラミング 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔