title

Top  >> Vine Linux Menu  >> SSH サーバ  >> 鍵交換方式による認証

鍵交換方式による認証

 鍵交換方式による認証とは・・・

 OpenSSH では、数種類の認証方法が用意されていて、パスワード認証の他に鍵交換方式の認証があります。 パスワード認証は、クライアントからサーバへユーザ名とパスワードを送信して認証するものであり、これらの情報はネットワーク上を流れます。 一方、鍵交換方式の認証は公開鍵暗号方式を利用した認証であり、パスワードがネットワーク上を流れる事はありません。 よって、鍵が外部に漏れなければパスワード認証よりもセキュリティを高める事が可能になります。

 公開鍵認証の仕組みを以下に示します。

CHAP
1.
鍵交換方式認証の準備をする。 公開鍵と秘密鍵のペアを作成し、公開鍵はサーバ側に、秘密鍵はクライアント側に暗号化して保管する。 サーバ、クライアントのどちらで鍵を生成しても、他方へ鍵を渡す際には十分に注意する(ここで鍵が漏れては意味が無いため)。 秘密鍵を生成する際には、暗号化して保管さえる秘密鍵を復号して使用可能にするためのパスフレーズを設定する(パスワード認証方式のパスワードとは関係ないので注意)。
2.
クライアントがサーバにユーザ名を送信する。
3.
サーバが乱数を生成し、公開鍵で暗号化してクライアントへ返す。 サーバは生成した乱数を使用して、サーバ側でハッシュ値を計算する。
4.
クライアントが、サーバから受け取った暗号化乱数を保管していた秘密鍵で復号化する。 秘密鍵を使用する前に、パスフレーズによって暗号化して保管されている秘密鍵を復号化する。
5.
クライアントが復号化された乱数からハッシュ値を計算する。
6.
クライアントが計算して得られたハッシュ値をサーバへ送信する。
7.
サーバは自分で計算したハッシュ値と、クライアントから受信したハッシュ値を比較して、一致していたら認証する。

このページのTop へ

 鍵の生成/登録

 鍵交換方式の認証には、公開鍵と秘密鍵のペアが必要ですが、これらの生成はクライアントかサーバのどちらかでまとめて行います。 一方で鍵のペアを生成した後、他方へ片方の鍵を渡します。 注意しなければならないのは、他方へ鍵を渡す際の方法です。 暗号化されていないネットワーク上をFTP やメールなどで渡すのは最も危険であり、暗号化されているSCP やSFTP の利用も望ましいものではありません。 鍵を渡す際には、ネットワークを一切経由しないメディア経由が最も安全です。 但し、鍵を渡した後にメディア(FD など)を紛失したならば意味はありませんので、メディア内の鍵を厳重に保管するなどの対策が必要です。

 ここでは、鍵のペアをWindows のPutty で生成する場合とVine Linux で生成する場合の手順を説明します。 SSH バージョン1ではRSA暗号方式を、SSH バージョン2ではRSA 暗号方式とDSA 暗号方式を利用することが可能ですが、ここではバージョン2のRSA 暗号方式のみを扱います。


・ Windows(Putty)で鍵を生成する

 Putty で鍵を生成するには、Putty 本体に付属しているputtyegen.exe というアプリケーションを使用します。 puttyegen.exe を起動したならば、メニューからSSH のバージョンと鍵の種類を選択します(ここではSSH2-RSA key を選択)。

鍵交換方式認証

Generate をクリックすると、鍵の生成が始まります。 マウスを適当に動かして鍵を生成します。

鍵交換方式認証

鍵を生成したならば、パスフレーズを決定します。 Key passphrase のフォームにパスフレーズを入力し、確認のためにConfirm passphrase にも同じパスフレーズを入力します。

鍵交換方式認証

パスフレーズを入力後、公開鍵と秘密鍵をそれぞれ保存します。 それぞれのファイル名は任意ですが、公開鍵は「.pub」、秘密鍵は「.ppk」の拡張子にする必要があります。 例では、公開鍵を「putty_public.pub」、秘密鍵を「putty_private.ppk」として保存して話を進めます。

鍵交換方式認証 鍵交換方式認証

保存した鍵のうち、秘密鍵はクライアントで保管、公開鍵はサーバへ登録します。 公開鍵をサーバへ移動する際には、FD などのメディアを使用するのが得策です。 公開鍵をサーバへ移動したならば、Putty で生成した公開鍵をOpenSSH 用に変換する作業が必要です。 変換は、以下のコマンドで行います。 尚、例ではすべての作業をホームディレクトリで行います。

$ ssh-keygen -i -f putty_public.pub > putty_public.pub

OpenSSH 用の公開鍵ができたならば、鍵を ~/.ssh/authorized_keys というファイルに登録します。 .ssh ディレクトリが無い場合には、新たにディレクトリを作成し、自分のみアクセスできるようにパーミッションを700にします。 また、authorized_keys というファイルが存在しない場合には、自動で新しく作成されます。

$ cat putty_public.pub >> /.ssh/authorized_keys

鍵を登録後、自分のみアクセスできるようにパーミッションを変更します。

$ chmod 600 ~/.ssh/authorized_keys

これでLinux サーバにSSH で使用する公開鍵が登録されます。



・ Linux で鍵を生成する

 Linux で鍵を生成するには、ssh-keygen コマンドを使用します。 以下のコマンドで、秘密鍵と公開鍵の両方を生成する事ができます。 鍵の生成の際、パスフレーズを入力します。 また、作業はホームディレクトリで行う場合の例です。

$ ssh-keygen -t rsa   <--- RSA 鍵の生成コマンド
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ユーザ名/.ssh/id_rsa):   <--- Enterを押して鍵を保存
Enter passphrase (empty for no passphrase):   <--- パスフレーズを2回入力
Enter same passphrase again:
Your identification has been saved in /home/ユーザ名/.ssh/id_rsa.   <--- 秘密鍵
Your public key has been saved in /home/ユーザ名/.ssh/id_rsa.pub.   <--- 公開鍵
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ユーザ名@localhost.localdomain

鍵のファイルができているかどうかは、ls コマンドで確認できます(ls ~/.ssh/)。 id_rsa.pubが公開鍵、id_rsaが秘密鍵です。

次に、 .ssh/authorized_keys へ鍵を登録します。

$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys

鍵を登録後、自分のみアクセスできるようにパーミッションを変更します。

$ chmod 600 ~/.ssh/authorized_keys

これでLinux サーバにSSH で使用する公開鍵が登録されます。 Linux で生成した秘密鍵(ここでは id_rsa)をWindows クライアントで使用したい場合には、このファイルをWindows へ移動します。 Windows へファイルを移動した後、SSH クライアントソフトで鍵を読み込みます。 ここでは、Putty に秘密鍵を登録する手順について説明します。

Putty のputtygen.exe を起動し、Linux で生成した秘密鍵を読み込みます。 読み込む際には、拡張子を「Allすべてのファイル」にしないと表示されないので注意して下さい。 読み込む際には、パスフレーズを尋ねられます。

鍵交換方式認証 鍵交換方式認証

ファイルが読み込まれると、鍵とパスフレーズが表示されます。 Praivate key の保存を選択し、Putty 用に秘密鍵を保存します。 保存場所は任意ですが、秘密鍵の管理は厳重に行う必要があります。

鍵交換方式認証

このページのTop へ

 鍵交換方式による認証手順

 公開鍵と秘密鍵の登録が完了したならば、クライアントからサーバへ接続し、鍵交換方式による認証を試みます。 ここでは、SSH サーバにWindows クライアント(Putty)及びLinux クライアントで接続する場合に分けて鍵交換方式の認証手順を説明します。


・ Windows (Putty)から接続する

 Putty を起動して接続先ホストを設定したならば、サイドメニューのデータと認証の項を開きます。 認証の項では秘密鍵のパスを指定し、データの項では鍵交換方式の自動ログインユーザ名を指定します。

鍵交換方式認証 鍵交換方式認証

設定を終えたらサーバへ接続します。 接続時にはパスフレーズの入力を求められます。

鍵交換方式認証

ここではPutty による接続例を示しましたが、TTSSH やWinSCP でも、Putty と同様に鍵交換方式の認証が行えます。


・ Linux から接続する

 Linux クライアントから鍵交換方式でサーバへ接続するには秘密鍵をLinux クライアントに登録する必要があります。 秘密鍵はWindows とLinux のどちらで生成されたものでも大丈夫ですが、Windows 上で生成した場合には公開鍵と同様にOpenSSH 用に変換する必要があります。 秘密鍵をLinux クライアントに登録するには、公開鍵の登録手順と同様で.ssh/authorized_keys へ登録し、パーミッションの変更も行います。 登録の際には、公開鍵と秘密鍵を間違えないように注意が必要です。

秘密鍵を登録した後は、SSH コマンドに-i オプションを加えてサーバへ接続します。 秘密鍵のファイル名が id_rsa の場合には、次のように指定します。

$ ssh -i ~/.ssh/id_rsa ユーザ名@接続先ホスト

いずれの場合も、サーバ側で鍵交換方式の認証を許可していなければ接続できません。


このページのTop へ