機能・要件
 構成・方式
    組み合わせ
    公開鍵認証
    ログイン
    ホスト認証
    ユーザ認証
    DH鍵交換
    使用ファイル
    プログラム
 タスク
 導入 

 基本的組み合わせ
 ・サーバデーモン(sshd プログラム)とクライアント(ssh コマンド)
暗号化されるのは、sshdとsshの間のトンネル部分
 ・使われる sshdデーモン
管理者がインストールや設定を行い、クライアントのログインを待ち受ける。
 ・使うクライアント
一般ユーザが sshコマンド をつかってログインしする。
シェル、ファイル転送、ポート転送、VPN などの機能を利用する。

 公開鍵認証
 ・ホスト認証における公開鍵認証
ホストの公開鍵と秘密鍵はシステムのインストール時に生成
ホストの公開鍵と秘密鍵は生成しなおすことができる。
 ・ホスト認証で使用される鍵の暗号化方式は、次の順序で適用
ECDSA
Ed25519
RSA
 ・ユーザ認証における公開鍵認証
デフォルトではパスワード認証も公開鍵認証も有効
ユーザ毎に公開鍵と秘密鍵のペアを生成し、ホストに公開鍵を登録で、
公開鍵認証が使用できる。
公開鍵認証を設定した後、パスワード認証を無効にすると、
公開鍵認証だけでユーザ認証を行う。

 ユーザのログイン
 ・一般ユーザがクライアントを用いてサーバにログインを試みる。
 ・クライアントとホスト(サーバー)の間で2種類の認証が交わされる。

 ホスト認証(サーバ認証)の流れ
 ・ホスト認証は通常(最初の1回目を除き)クライアントによって自動的に行われる。
 ・ホスト認証の流れ
①クライアントは、ホスト(サーバ)へリクエスト
②ホストは、クライアントへホストの公開鍵を送付
③クライアントは、②の鍵と、既に登録してある、同じホストの公開鍵を比較する。
④正常な場合、パスワード入力フェーズを表示
ホスト鍵が変えられている場合、警告を表示、パスワードの入力は禁止される。
 ・最初の1回目
①クライアントは、ホスト(サーバ)へリクエスト
②ホストは、クライアントへホストの公開鍵を送付
③クライアントは、サーバからのホスト公開鍵の指紋(fingerprint)をユーザに提示
④事前に受領しているフィンガープリントと一致すれば「yes」入力し、公開鍵を登録
※「事前に受領」を諦めることが多い。
※fingerprint、データの特徴を表すように作られた、短い文字列や数値
※OpenSSHで鍵の指紋といえば、公開鍵の指紋
 ・ホスト認証の完了で、クライアントとホストが同じ共通鍵を所持している状態になる。
共通鍵暗号方式を確立できる状態になる。

 ユーザ認証
 ・秘密鍵と公開鍵ペアを使ったユーザ認証の流れ
 ※クライアントが別途作成したペア鍵の内、公開鍵をサーバに予め登録しておく。
①クライアントがサーバに接続する。
②クライアントは、自分が公開鍵に対応する秘密鍵を持っていることを宣言する。
③サーバは公開鍵が、予めそのユーザに対して登録されたものであるかを確認
もしそうならば、対応する秘密鍵の証明を求める。(チャレンジ)
④クライアントは、秘密鍵の所有を数学的に証明する。(レスポンス)
このとき、クライアントは、秘密鍵を使用するためにパスフレーズを入力する。
※このパスフレーズはネットワーク上に流れない。
 ・公開鍵認証の他に、認証エージェントを使った認証がある。

 Diffie-Hellman 鍵交換アルゴリズム  (DH鍵交換)
 ・離散対数(discrete logarithm)問題という数学的なトリックを使用
 ・中で使用される一見ランダムな2個の数値は、通信毎に1度使われ、
  暗号鍵が得られ次第破棄される性質(前進的セキュリティ)を持つ。
 ・DH鍵交換は第三者が間に入ると暗号鍵をすりかえられる危険性がある。
 ※鍵交換をした後、相手が正しい通信相手であると確かめるにはホスト認証が必要

 OpenSSHで使用するファイル
       設置場所     ファイルの種類    公開鍵
 暗号方式
    ファイル
サーバ   ホスト認証の秘密鍵   ECDSA   /etc/ssh/ssh_host_ecdsa_key
  Ed25519   /etc/ssh/ssh_host_ed25519_key
  RSA   /etc/ssh/ssh_host_rsa_key
  ホスト認証の公開鍵   ECDSA   /etc/ssh/ssh_host_ecdsa_key.pub
  Ed25519   /etc/ssh/ssh_host_ed25519_key.pub
  RSA   /etc/ssh/ssh_host_rsa_key.pub
  ユーザ公開鍵登録用   ~/.ssh/authorized_keys
クライアント   公開鍵認証の秘密鍵   RSA   ~/.ssh/id_rsa
  公開鍵認証の公開鍵   RSA   ~/.ssh/id_rsa.pub
  ホスト公開鍵登録用   ~/.ssh/known_hosts

 プログラム
 ・サーバプログラム
sshd
 ・クライアントプログラム
ssh
 ・OpenSSHはOpenSSLのライブラリを使用
暗号化の部分を使用
SSH通信に関わる部分は全て独自の実装