handouts:sshの公開鍵認証について考えてみよう

~~SLIDESHOW thesis~~

sshの公開鍵認証について考えてみよう

↑タイトル横右端のスライドっぽい絵をクリックしたらスライド表示になります.JavaScript有効にしてくださいね. <div style="line-height: 1.2em; font-weight: bold; font-size: 1.2em;"><a href="http://www.ten-forward.ws/">加藤泰文 / TenForward</a></div> <script language="javascript"> var foodiv; if (document.getElementById) { foodiv = document.getElementById('footer'); } else { foodiv = document.footer; } foodiv.innerHTML = '<h1>sshの公開鍵認証について考えてみよう</h1><h2>第2回関西アンカンファレンス 2011.01.08</h2>'; </script>

  • 加藤泰文
  • Twitter: <a href="http://twitter.com/ten_forward/">@ten_forward</a>
  • Wassr: <a href="http://wassr.jp/tenforward/">@tenforward</a>
  • Plamo Linux メンテナ
  • Jetspeed2 ドキュメント翻訳
  • Asterisk ユーザ会

ssh の公開鍵認証が意外に理解されていない事件に何度か遭遇しました.

  • SSH = Secure Shell (セキュアシェル)
  • 暗号や認証の技術を利用して,安全にリモートコンピュータと通信するためのプロトコル (Wikipediaより)
  • 主に UNIX 系サーバにアクセスするのに使われます

暗号で防ぐモノ.

  • 秘密が漏れる(盗聴)こと
  • 改ざん
  • なりすまし
  • 否認
  • 暗号化と復号に別個の鍵(手順)を使い,暗号化の為の鍵を公開できるようにした暗号方式
  • 誰にでも公開可能な「公開鍵」と密かに持っておく「秘密鍵」の鍵ペア
  • 公開鍵から秘密鍵を得ることは非常に難しい (現実的な時間内で無理)
  • 共通鍵暗号 … 鍵の配送問題
  • RSA暗号 … 電子署名にも使える

暗号通信で大事な事.

  • 誰と通信するか?
  • 盗聴の危険
  • 通信相手が確認できない

  • とりあえず ssh で通信を暗号化する.
    • ホスト認証 (通信相手が確認可能)
    • パスワード認証 (ユーザ認証)

  • 公開鍵認証によりユーザ認証
  1. 公開鍵をサーバに登録
  2. アクセス時に秘密鍵を持っている事を宣言
  3. サーバは秘密鍵に対応する公開鍵があるかどうか確認し,本当に秘密鍵を持っているかどうかの証明を求める
  4. 秘密鍵の所有を証明する
  5. サーバでその証明を確認

ここで ssh の公開鍵認証に関する勘違いの事例を見て何が間違っているか考えてみましょう.

サーバ管理者とアプリケーションの管理者が分かれているサーバ環境で管理を行うケースでのエンジニア同士の会話…

<color blue>サーバ管理者</color> : 「アプリケーションやコンテンツの管理は ssh 経由で行います.セキュリティを考えて ssh は公開鍵認証のみ許可します.公開鍵を root ユーザに登録しますので,アクセスして管理を行って下さいね」

<color green>アプリ管理者</color> :「秘密鍵と公開鍵を作成しましたので送りますね! 秘密鍵のパスワードは xxxxx です! 登録お願いします」

メールで公開鍵と<color red>秘密鍵が</color>送られてきました.:-(

公開鍵認証のみ有効の ssh サーバでアプリを管理しているサーバで,アプリ管理者がサーバにアクセスできなくなってサーバ管理者に相談… アプリ管理者の公開鍵は root ユーザに登録されています.

<color green>アプリ管理者</color>: 「サーバにアクセスできなくなりました.調べてもらえますか? 私のパスワードは xxxxx です」

  • それぞれ何が間違っていたでしょう?
  • それぞれの管理者は何を勘違いしていたのでしょう?

仕組みをちゃんと理解して,その意味を考えて使いましょう.(sshに限らず)

  • 秘密鍵は文字通り「秘密」にしているから秘密鍵であって,人に渡したら秘密鍵でなくなります.
  • サーバ上の 1 ユーザに対して複数の公開鍵が登録出来るので共用の鍵ペアという運用はやめて個人ごとのものにしましょう.
  • 事例(1)の <color green>アプリ管理者</color> は,公開鍵だけ渡せば問題はないことを理解していなかったのでしょう.
    • サーバに登録するのは公開鍵だけです
  • 鍵ペアを作成するときにパスフレーズを入力しますが,これは秘密鍵を使うときのための認証です.
  • つまりローカルに保存されている秘密鍵を使うためのパスフレーズですから,ネットワーク上には一切流れません.
  • 秘密鍵がもれてもパスフレーズがもれなければ,最悪の自体は回避可能です.しかし,事例(1)の<color green>アプリ管理者</color>のように秘密鍵とパスフレーズを同時に外部に出してしまっては,本人以外が秘密鍵を使用可能になるので秘密鍵になりません.:(
  • 事例(2)の<color green>アプリ管理者</color>は,秘密鍵は自分の所だけにあって,パスフレーズだけ教えているので,秘密鍵は「秘密」のままなので,とりあえずは問題はありません.
  • しかし,パスフレーズだけ <color red>サーバ管理者</color> に教えても,秘密鍵をサーバ管理者が持っていないのですから,まったく意味のない行為をしている事になります.
    • おそらく秘密鍵のパスフレーズはネットワーク上を流れないという事を理解していなかったのでしょう.
  • ssh の公開鍵認証を使うと,認証情報がネットワーク上を流れないので,さらに安全になります.
  • 秘密鍵は絶対に秘密にしておきましょう.
  • 何事もよく仕組みを理解して使うようにしましょう.
  • handouts/sshの公開鍵認証について考えてみよう.txt
  • 最終更新: 2019/10/03 06:35
  • by tenforward