◆ データの暗号化方式
データの暗号化方式には、共通鍵暗号と公開鍵暗号の大きく2つがあります。共通鍵暗号においては
データの暗号化と復号に同じ鍵を使用しますが、公開鍵暗号では暗号化に公開鍵を使用して、復号に
秘密鍵という別の鍵を使用します。公開鍵暗号では、受信者は公開鍵を公開しておき、送信者はその
公開鍵で暗号化し送信します。データは受信者のみ持つ秘密鍵でしか復号できないので盗聴されにくい。
◆ SSH(Secure SHell)とは
SSHはネットワークに接続した機器を遠隔操作するために使用するアプリケーション層のプロトコル
です。telnetの場合はパスワード情報を含め全てのデータが暗号化されずに送信されますが、SSHの
場合は、パスワード情報を含めて全てのデータが公開鍵で暗号化されて送信されます。安全な通信を
実現するための手段として、現在ではよく利用されています。SSHコマンドの書式は以下の通りです。
◆ 構文 : ssh オプション 接続ホスト
オプション |
説明 |
-1 |
SSHプロトコルバージョン 1 を使用 |
-2 |
SSHプロトコルバージョン 2 を使用 |
-l ユーザ名 |
ログインユーザー名を指定 |
-p ポート番号 |
リモートホスト接続時に使用するポート番号を指定 |
◆ 実行例 : ユーザー「mike」として、srv1.infraexpert.com にSSH接続する実行コマンド ( IPアドレスで指定してもOK
)
# ssh -l mike srv1.infraexpert.com |
ユーザーがログインしてシェルあるいはコマンドを実行する直前に、SSHは、/etc/sshrcファイルに
記述されているコマンドを実行します。SSHでの接続時にはログイン時と同様、全ユーザー共通の設定
ファイル(/etc/sshrc)とユーザー毎に読み込まれる設定ファイル(~/.ssh/.config)が読み込まれます。
SSHプロトコルを使用したネットワーク接続ツールの代表例としてOpenSSHというツールがあります。
OpenSSHのデーモンsshdの設定ファイルは、/etc/ssh/sshd_configファイルとなります。sshd_config
の主な設定項目は以下の通りです。
設定項目 |
説明 |
Port |
SSHで使用するポート番号 (デフォルトで 22 を使用) |
Protocol |
SSHのバージョン( 1 または 2 ) |
HostKey |
ホストの秘密鍵ファイル |
PermitRootLogin |
rootユーザーのログインを許可するかどうか |
RSAAuthentication |
SSHバージョン 1 での公開鍵を使用するかどうか |
PubkeyAuthentication |
SSHバージョン 2 での公開鍵を使用するかどうか |
AuthorizedKeysFile |
公開鍵が格納されるファイル名 |
PermitEmptyPasswords |
空のパスワードを許可するかどうか |
PasswordAuthentication |
パスワード認証を許可するかどうか |
X11Forwarding |
X11転送を許可するかどうか |
◆ 例えば root ユーザのログインを拒否するためには/etc/ssh/sshd_configの「 #PermitRootLogin yes 」を以下のように変更
# vi /etc/ssh/sshd_config
PermitRootLogin no
# service sshd restart
|
なお、OpenSSHをインストールすると、以下のホストの公開鍵と秘密鍵が生成されます。
ファイル名 |
説明 |
ssh_host_key |
秘密鍵 ( バージョン 1 で使用 ) |
ssh_host_dsa_key |
秘密鍵 ( バージョン 2 DSAで使用 ) |
ssh_host_rsa_key |
秘密鍵 ( バージョン 2 RSAで使用 ) |
ssh_host_key.pub |
公開鍵 ( バージョン 1 で使用 ) |
ssh_host_dsa_key.pub |
公開鍵 ( バージョン 2 DSAで使用 ) |
ssh_host_rsa_key.pub |
公開鍵 ( バージョン 2 RSAで使用 ) |
◆ SSH - 鍵の生成
SSHで公開鍵と秘密鍵のペアを作成するためにはssh-keygenコマンドを使用します。書式は以下の通り。
◆ 構文 : ssh-keygen オプション
オプション |
説明 |
-p |
既存の秘密鍵ファイルのパスフレーズを変更 |
-t |
生成する鍵の種類( rsa1 または rsa または dsa )を指定。一般的に"rsa1"は使用しない。
rsa1 - SSHv1のRSA rsa - SSHv2のRSA dsa - SSHv2のDSA |
特徴 |
説明 |
RSA |
電子署名と通信暗号化に利用できる。電子署名のサイズが長く暗号化強度が強い。 |
DSA |
電子署名にのみ利用できる。電子署名のサイズが短く暗号化強度が弱い。 |
◇ RSA暗号化の場合 ( 推奨 )
◆ 実行例 : RSA暗号方式の鍵を作成
RSA暗号方式の鍵を生成した場合、秘密鍵と公開鍵は次のファイルパスに生成されます。
鍵 |
説明 |
秘密鍵 |
ユーザーのホームディレクトリ/.ssh/id_rsa |
公開鍵 |
ユーザーのホームディレクトリ/.ssh/id_rsa.pub |
ssh-keygenコマンドで生成した公開鍵は、以下のパスで公開鍵リストとして追加されます。
鍵 |
説明 |
公開鍵リストのパス |
ユーザーのホームディレクトリ/.ssh/authorized_keys |
◇ DSA暗号化の場合
◆ 実行例 : DSA暗号方式の鍵を作成
DSA暗号方式の鍵を生成した場合、秘密鍵と公開鍵は次のファイルパスに生成されます。
鍵 |
説明 |
秘密鍵 |
ユーザーのホームディレクトリ/.ssh/id_dsa |
公開鍵 |
ユーザーのホームディレクトリ/.ssh/id_dsa.pub |
ssh-keygenコマンドで生成した公開鍵は、以下のパスで公開鍵リストとして追加されます。
鍵 |
説明 |
公開鍵リストのパス |
ユーザーのホームディレクトリ/.ssh/authorized_keys |
◆ SSHのホストベース認証
ホストベース認証では、SSHサーバに登録済みのホストからSSH通信があった場合、そのユーザーを
信用して接続を許可します。この場合、SSHサーバとクライアントはユーザー認証を行わずホストの
認証のみを行います。SSHバージョン2のホストベース認証の鍵のファイルパスは、以下のとおりです。
暗号化方式 |
鍵 |
鍵のファイルパス |
RSA |
秘密鍵 |
/etc/ssh_host_rsa_key |
公開鍵 |
/etc/ssh_host_rsa_key.pub |
DSA |
秘密鍵 |
/etc/ssh_host_dsa_key |
公開鍵 |
/etc/ssh_host_dsa_key.pub |
◆ SSHエージェント
秘密鍵ファイルを使用する際はパスフレーズが聞かれるがssh-agentを利用することでこのパスフレーズを
入力することなく、つまりパスワード認証なしにログインすることができます。ssh-agentはクライアント側
で稼働するデーモンです。秘密鍵をメモリ上に保存しておいて必要時に利用されるため、都度パスフレーズを
入力する必要はありません。ssh-agentを利用するためにはssh-agentの子プロセスとしてbashシェルを起動。
次にssh-addコマンドを使用して秘密鍵を登録します。この際にパスフレーズを入力しておきます。以降は
このbashシェルと子プロセスでは、パスフレーズの入力は不要となります。なお、ssh-agent が保持して
いる秘密鍵の一覧は ssh-add -l コマンドを実行することで分かります。
$ ssh-add
Enter passphrase for /home/mike/.ssh/id_rsa:
Identity added: /home/mike/.ssh/id_rsa (/home/student/.ssh/id_rsa)
|
◆ GnuPGによるファイル暗号化 - 鍵ペアの作成、失効証明書の作成
SSHでは通信の暗号化が行われますが、GPG(GnuPG)はファイルの暗号化と復号が行えるオープン
ソフトウェアです。GnuPGでは、公開鍵暗号を使用してファイルの暗号化と復号、電子署名をしたり
することができます。GnuPGを使用するためにはgpgコマンドを使用します。先ず、公開鍵と暗号鍵
の鍵ペアを作成する必要があり、以下のコマンドで生成します。
このコマンドの実行過程で、~/.gnupgというディレクトリが生成されます。そして、その中に公開鍵の
キーリング(pubring.gpg)秘密鍵のキーリング(secring.gpg)が作成されます。キーリングとは公開鍵
や秘密鍵を保管しておく鍵用のファイルのことです。GnuPGキーリングは、次のファイルに格納されます。
キーリング |
ファイルパス |
公開鍵キーリング |
ユーザーのホームディレクトリ/.gnupg/pubring.gpg |
秘密鍵キーリング |
ユーザーのホームディレクトリ/.gnupg/secring.gpg |
次に、パスフレーズ紛失時や忘れた時のために鍵を無効化できる鍵の失効証明書を作成します。
◆ 構文 : gpg -o 失効証明書ファイル名 --gen-revoke メールアドレス
◆ 実行例 : myrevoke.ascという名前の失効証明書の作成
$ gpg -o myrevoke.asc --gen-revoke mike@infraexpert.com |
パスフレーズの紛失時、パスフレーズを忘れた場合は以下のコマンドで無効化できます。
$ gpg --import myrevoke.asc |
◆ GnuPGによるファイル暗号化 - 公開鍵を使用したファイルの暗号化
通信相手に公開鍵を送るため、公開鍵をファイルにエクスポートしてこのファイルを通信相手に送ります。
◇ 公開鍵のエクスポート
先ず、自分のメールアドレスでファイルを受け取り、以下の例では「pubkey」ファイルを相手に送ります。
◆ 構文 : gpg -o 出力ファイル名 -a --export 自分のメールアドレス
$ gpg -o pubkey -a --export mike@infraexpert.com |
◇ 公開鍵のインポート
次に、通信相手から公開鍵を受け取ったら、それをインポートします。
◆ 構文 : gpg -import 公開鍵のファイル
次に、鍵に署名を行います。これにより警告メッセージが出力されないようになります。
$ gpg --sign-key mike@infraexpert.com |
◆ GnuPGによるファイル暗号化 - ファイルの暗号化と復号
◇ ファイルの暗号化
◆ 構文 : gpg -e -a -r 送信先のメールアドレス 暗号化するファイル名
◆ 実行例 : mike@infraexpert.comの受信者だけが復号できるよう、test.txtを暗号化 ( test.txt.asc
が生成される )
$ gpg -e -a -r mike@infraexpert.com test.txt |
◇ ファイルの復号
◆ 構文 : gpg 暗号化されたファイル
◆ 実行例 : 送信されてきたtest.txt.ascファイルを、秘密鍵を使用して復号 ( パスフレーズを入力 )
|