■RSA (及びSSH) について □SSHで平文パスワード認証を不可能にする方法(?) /etc/sshd_config の PasswordAuthentication yes を PasswordAuthentication no とすればよいはず. 危険なのでくれぐれもリモートからやらないように □SSH & RSA 認証の環境構築 ここでは必要なことだけを記す. 詳細は下記に譲る. ◆ リモートの ssh の設定確認 リモートホストの /etc/ssh/sshd_config において 以下のようになっていることを確認. RSAAuthentication yes ◆ 秘密鍵, 公開鍵作り 以下のコマンドで鍵を作る $ ssh-keygen -t dsa Generating public/private dsa key pair. (鍵生成中...) Enter file in which to save the key (鍵の保存場所) (/home/hero/.ssh/id_dsa): [デフォルト] Enter passphrase (empty for no passphrase): [長めのパスフレーズを] (鍵が生成された) Your identification has been saved in /home/hero/.ssh/id_dsa. Your public key has been saved in /home/hero/.ssh/id_dsa.pub. The key fingerprint is: 71:f0:fb:f9:34:ae:70:0c:ab:66:8f:52:ee:3a:cc:0d hero@hoge ◆ 公開鍵をリモートホストに置く リモートホストに公開鍵を置く. scp ならば暗号化されているので, とりあえず OK とする. $ scp /home/hero/.ssh/id_dsa.pub foo.ne.jp:~/.ssh/authorized_keys ◆ ssh-agent を起動 ssh-agent の後ろにターミナル起動のコマンドをくっつけて, ssh-agent なターミナルを起動する $ ssh-agent krxvt -fg white -bg black & ◆ ssh-add そのターミナル上で ssh-add コマンドを用いると 先ほどのパスフレーズを聞かれるので, 入力する. Enter passphrase for /home/hero/.ssh/id_dsa: [先ほどのパスフレーズ] (認証されたら) Identity added: /home/hero/.ssh/id_dsa (/home/hero/.ssh/id_dsa) ◆ 認証 認証後は, そのウィンドウ上でなら, ノンパスでログインが可能である. □SSH & RSA 認証 環境構築後, パスフレーズ入力を一回で済ませる方法 これは, ssh や scp を何度も行う際に, 始めに一回パスフレーズを 入力するだけですむ方法である. ssh-agent , ssh-add を使用する. ◆ ssh-agent について ssh-agentは認証秘密鍵を保有するプログラムで, これを使用することにより, パスフレーズの入力を一回で済ますこと ができる ・ 使用方法 大抵は, ssh-agent command として, このコマンドに ターミナル(krxvtなど)起動 や X(startx)起動 コマンドを いれる. その後の作業は ssh-add の方で. コマンドプロンプト画面から使用する場合 $ ssh-agent startx すでに X が立ち上がっている状態から使用する場合, $ ssh-agent krxvt & ssh-agent を使用する場合, まずはこの作業が必要となるため, Xを飛ばしてこれない環境では パスフレーズの入力を一回で済ますのは無理なようである. ◆ ssh-add について ssh-add は ssh-agent で立ち上げられた X, またはターミナルで 使用されることによって, $HOME/.ssh/identity を記憶し, パスフレーズ入力を一回で済ませ, それ以降はノーパスで ログインするためのものである. ・ 使用方法 立ち上げた X 画面, または ターミナルで $ ssh-add とすると, パスフレーズを聞かれるので入力する. そして,「Identity added: /home/morikawa/.ssh/identity」 と返事が返って来たらOK. これ以降は X 画面 , または そのターミナルでは パスフレーズやパスワードを聞かれずにログインすることができる. このログイン方法はパスワードを使用していないので一見危険なようだが 通信経路はちゃんと暗号化されており, なおかつパスフレーズ もネットワークに流れないので安全である. ※注意!!※ つまりこれは ssh-agent の子プロセスからはノーパスで リモートにログインできるということなので, 使用しない時には, 必ずこのプロセスを殺しておくように!! --以下思い込みによるウソ-- ただし, この方法は, ローカルPCが物理的に乗っ取られたり, ネットワークから侵入されて,ユーザ権限を奪われてしまった 場合はノーパスでサーバへの進入を許してしまうことになるため, 非常に危険な方法とも言える. 総合的に考えると, 平文パスワード認証とどっちがセキュアかなぁ… □gateのノーパスログインについて これは, RhostsRSA を使用して行っていたものらしい ・ 原理 1. クライアントはサーバに通信を要求する. 2. サーバはホスト鍵, サーバ鍵(両方とも公開鍵)をクライアントに送る. 3. クライアントは $HOME/.ssh/known_hosts にある, サーバの公開鍵 とホスト鍵が一致することを確認し, サーバが本物であることを確認する. (初めての通信の場合は, このホスト鍵を known_hosts に加える.) 4. クライアントは乱数により共通鍵を作成する. この元になるのが $HOME/.ssh/randam_seed である. 5. この共通鍵を ホスト鍵, サーバ鍵で暗号化し, サーバ側に送る. 6. サーバ側はこの暗号化された共通鍵を復号化し, これによって クライアントとサーバの両者が共通鍵を手に入れ, 通信の安全性が確保された. 問題はクライアントの認証である. 7. サーバは, このクライントのホスト名, 及び通信要求を出している ユーザ名 が $HOME/.shosts に書き込まれているかを確認する 8. .shosts に書き込まれていることが確認された時点で クライアントとサーバが通信するのを許可する. 9. 認証されてからの通信はクライアントから送られてきた共通鍵で 行うことになる. なお, Rhosts のみの認証の場合は 1, 7, 8 のみが行われるため, セキュリティが甘い. しかし, RhostsRSA もホスト名を偽装してアクセスをかけてきた場合は あっさり突破されてしまうため, できれば まっとうなRSA認証が望ましい. また, パスワードの設定がないため, クライアントに進入し, サーバの $HOME/.shost に登録されているユーザ権限が乗っ取られれば サーバへもノーパスでログインできてしまうため, 被害は拡大する. ・ まっとうなRSA認証 1 〜 5 まではRhostsRSA と同じ 6. この段階で, 両者は共通鍵を所有しているため暗号化はOKである. 問題はどうやってクライアントが本物であるかを確認することである. 7. これは通信を行う前の段階の話だが, クライアントはあらかじめ 自身の秘密鍵, 及びそれに対応する公開鍵を作っておき, (鍵を作る際には, ssh-keygen コマンドを使用する. また, 鍵生成のためのパスフレーズを考える必要がある.) 秘密鍵をクライアントの $HOME/.ssh/identify に, 公開鍵をサーバの $HOME/.ssh/authorized_keys に置いておく. 8. クライアントは何か(これは何でも良いと思うのだが詳細は不明)を を秘密鍵で暗号化し, サーバに送る. この際には, ssh-add, ssh-agent などでの設定を行わない限りは鍵を 作った際のパスフレーズを聞かれる. ただし, このパスフレーズ自体はネットワークには流れないことに注目 9. サーバはこの何かを手元の $HOME/.ssh/authorized_keys にある 公開鍵で復号化できることを確認する. 復号化できた場合, このクライアントは本物であることが 確認され, 接続が認証される. なお, authorized_keys の設定によっては, 特定のホスト名 からのアクセスしか許可しない方法もとることができ, セキュリティをさらに高めることができる. この方法ならば, 1. クライアントの秘密鍵を盗み, (ネットワークには流れない) 2. パスフレーズを解読し, (ネットワークには流れないので困難) 3. ホスト名を偽装する.(そう設定した時のみ) この3つの作業を行う必要があるため, ネットワークの盗聴から RSA認証を破ることは非常に難しい. ちなみに, 物理的にPCが乗っ取られた場合のことを考えると, RSA認証はSSHの平文パスワード認証とほとんど変わらない. むしろ, ssh-add , ssh-agent などといった便利なコマンドがある分, セキュリティは甘いといえるかもしれない. □参考書籍 DOS/Vマガジン 11/1 「PC UNIX 登竜門」(巻末) □参考HP SSH , RSA , 3DES などについて(まあまあ詳しい) http://www.csis.u-tokyo.ac.jp/~sagara/solaris_admin/ssh.html OTPやSSHを使ってパスワード盗聴から身を守る http://www.araki.net/linux/ssh/lj.html 興風館.山鳥の間.セキュアシェル (SSH) 入門 http://kofukan.nmn.jp/jp/Yamadori/ssh.shtml 清野 裕司さん(神戸大学 国際文化学部 情報論講座 1999年度卒業)の卒論 http://www.cla.kobe-u.ac.jp/Jouhou/96/kiyono/sotsugyouronbun.htm SSHの解説(ssh の man の日本語訳もある) http://ruby.ntn.org/secure/ssh.html sshでの RSA認証によるログイン http://www.nn.info.kanagawa-u.ac.jp/~noa/summer/remote/ttssh/ssh-RSA.html ネットワークにつながったコンピュータのセキュリティについて (オススメ) http://stingray.sfc.keio.ac.jp/security/index.html ssh-agent を使用すると, パスフレーズを毎回入力する必要が無いそうです. http://www.debian.or.jp/devel/www/WebMasters.htm ssh (Secure Shell) FAQ - Frequently asked questionsl http://www.vacia.is.tohoku.ac.jp/~s-yamane/FAQ/ssh/ssh-faq.html