公開鍵を使った認証

このページでは、公開鍵認証の仕組みについて説明しています。公開鍵認証の設定については、公開鍵認証の設定で解説しています。

はじめに

公開鍵認証とは、サーバーへのログイン時に認証を行う仕組みであり、ユーザー名とパスワードを使用した認証と比べ、よりセキュリティや柔軟性が高いのが特徴です。いっぽうで、若干設定が難しいという欠点もあります。

パスワードを使った認証では、ユーザー名とパスワードという2つの情報だけで認証を行います。このとき、パスワードは暗号化されずに直接サーバーに送信されるため、たとえばサーバーがハッキングされていたり、別のサーバーによって成りすまされていたりといった場合、パスワードは簡単に盗まれてしまいます。

公開鍵認証を利用することで、このような問題を解決することができます。

公開鍵認証の仕組み

公開鍵認証では、「公開鍵(public key)」と「秘密鍵(private key)」という、2種類の鍵情報を利用して認証を行います。

  • 「秘密鍵」は、その名の通りユーザーのPCや端末等に格納され、秘密(非公開)にしておく認証情報です。
  • 「公開鍵」は認証を行うサーバー側にあらかじめ何らかの方法で渡しておく認証情報です。
  • 公開鍵を利用することで、データを暗号化することができます。公開鍵は暗号化のみが可能で、公開鍵だけでは複合はできません。
  • 秘密鍵(とパスフレーズ)を利用することで、公開鍵で暗号化したデータを複合することができます。

公開鍵認証の手順

  1. サーバー側の公開鍵を使って、ランダムなデータを暗号化する
  2. 暗号化したデータをサーバーからクライアント側に送信する
  3. クライアントは受け取ったデータを秘密鍵とパスフレーズを使って複合する
  4. 複合したデータをサーバーに送信する。サーバーは受け取ったデータと暗号化前のデータが一致しているかチェックする。一致していれば成功、異なれば失敗

公開鍵認証では、秘密鍵やパスフレーズといった情報は一切やり取りされません。そのため、もしサーバーがハッキングされていたり、なりすましされていても重要な情報が盗まれることはありません。ただし、クライアント側のPCからなんらかの手段で秘密鍵が盗まれてしまい、さらにパスフレーズが推測されてしまった場合は、それらの情報を利用してサーバーにログインすることは可能です。そのため、パスフレーズは必ず設定しておくべきです。

ちなみに、WinSCPでは「Pageant」というツールを利用することで、公開鍵認証の際にパスフレーズを入力する手間を抑えることができます。Pageantは常駐型のユーティリティで、起動時に秘密鍵をロードしてパスフレーズを入力します。入力したパスフレーズは記憶されるため、一度パスフレーズを入力してしまえば、Pageantを終了しない限りはパスフレーズを入力せず自動的に認証を行わせることができます。パスフレーズはメモリ内に保存され、ディスクには記録されないため、セキュリティ面での危険性も低いです。これは多くのユーザーにとって便利な解決法といえるでしょう。

なお、公開鍵暗号のアルゴリズムにはいくつかの種類があります。もっとも有名なのがRSAですが、そのほかにもDSA(DSS)と呼ばれるものもあります。

鍵の生成

公開鍵/秘密鍵の作成は、PuTTYgenを使って行えます。

秘密鍵の形式

SSH-1とSSH-2では、秘密鍵のファイルフォーマットが異なります。さらに、SSH-1の秘密鍵ファイル形式は1つしかありませんが、SSH-2の秘密鍵ファイル形式は複数があります。WinSCPではPuTTYなどで利用されるフォーマットを利用しています。そのほか、たとえばOpenSSHやssh.comといったSSH-2クライアントは異なるファイルフォーマットの秘密鍵を使用します。これらのファイルフォーマットの秘密鍵を利用する場合は、PuTTYgenを利用してファイルフォーマットを変換する必要があります。