集中力が10分しか持たないハチワレ先生

集中力が10分しか持たないハチワレ先生

技術メインの雑記ブログ

10 分で入門する SSH(概念編)

AWS などを使う上で利用する機会の多い SSH の概要を暗号技術の基礎を踏まえて紹介します

この記事を読んで分かること

前提条件

対象者

  • SSH を使った事がなく、これから使おうと思っている方
  • SSH を使っているけど、最低限の仕組みは抑えておきたい方

この記事で紹介しないこと

  • 具体的な SSH のコマンドや設定
  • SSH を使う上で最低限必要なものではないと筆者が判断したもの

SSH についての基礎知識

以下の 2 点についてこの章で紹介します

  • SSH とは何か?
  • SSH を使うと何が嬉しいの?

SSH とは何か?

ざっくり言うとリモートマシンに安全にアクセスする仕組みです
暗号技術を活用して通信を暗号化し、安全に通信を行うために利用できます

SSH を使うと何が嬉しいの?

そのままですがリモートマシンに安全に接続できることが利点です
ただ、分かりにくいので具体例を挙げて説明してみます

SSH している場合としていない場合の比較

A さんは自宅のノート PC から大学の研究室にあるサーバにアクセスしたいと考えています
しかし、大事な研究情報を悪意のある人に盗聴されてしまう可能性があります
そこで SSH を利用する事で盗聴の心配なく、安全に通信ができました

(最近の研究室はサーバじゃなくてクラウドインスタンスとかなのかな...?)

どうやって安全に通信するの?

安全に通信を行うには暗号化通信を行います

  • 暗号化: 通信内容を他人にわからないように加工します
  • 復号: 暗号化された通信内容を元の状態に戻します
    • ※復号であり、復号ではないので注意

具体例としてシーザー暗号を挙げてみます
シーザ暗号とは「文字を辞書順で N 文字分ずらす」暗号です

N = 2 の時 A → C, B → D になります
事前に N の値を通信相手と合意しておけば暗号化通信が可能です
「N」を暗号における、暗号化される前のデータを平文(ひらぶん)と呼ぶ

N = 2のシーザー暗号
N = 2のシーザー暗号

※シーザ暗号は簡単な暗号の一例として挙げましたが
SSH に使われている訳ではないのでご注意ください

認証ってどうするの?

暗号化通信によって盗聴を防ぐことは分かりましたが
どうやって正規の通信相手かを見分けるのでしょうか → この答えが認証です

通信相手が誰であるかを確認することを認証と言います
(ちなみによく混同されますが、認証認可は異なります)

参考: よくわかる認証と認可

SSH にはどんな認証の種類があるの?

SSH では主に以下の 2 つの認証があります

  • パスワード認証方式
  • 公開鍵認証方式

パスワード認証方式は、リモートマシンのユーザ名とパスワードによる認証です
ただし後述の公開鍵認証方式と比べるとセキュリティが低いので注意が必要です

公開鍵暗号電子署名

この章では公開鍵暗号電子署名について紹介します
どちらも後述の公開鍵・秘密鍵を用いますが、暗号と署名は別物なので注意してください

参考: 「電子署名=『秘密鍵で暗号化』」という良くある誤解の話

公開鍵暗号

公開鍵暗号とは公開鍵・秘密鍵を用いた暗号方式のことです
公開鍵と秘密鍵は対になっており、二つ合わせてキーペアと呼ばれます

  • 公開鍵
    • 他人に公開して良い
    • GitHub 等を利用する際にも登録することがあります
    • 暗号化に用いる
  • 秘密鍵
    • 絶対に公開してはいけない鍵です
    • 盗まれると「なりすまし」されてしまう危険があります
    • 復号に用いる
  • 暗号化&復号
    • 送り主は受け取り主の公開鍵で暗号化し、受け取り主は自分の秘密鍵で復号する
    • 公開鍵を使って誰でも暗号化できる
    • 復号できるのは秘密鍵を持つ本人だけ

公開鍵暗号
公開鍵暗号

電子署名

データに署名する事で、本人確認やデータの改竄検出を行う事が出来ます
署名には秘密鍵を、署名の検証には公開鍵を使います

ポイントは以下の通りです

  • 秘密鍵を持つ本人しか署名が出来ない
  • 署名の検証は公開鍵を使うため誰でも出来る
  • 署名対象のデータをハッシュ化した値(ハッシュ値)から電子署名を作成する
  • ※署名と共に元のデータが送られるため、ハッシュ化の方法が合意されていればハッシュ値は計算できる(検証できる)

電子署名を用いた認証を公開鍵認証と呼びます

参考: 暗号学的ハッシュ関数(Cryptographic Hash Function)

電子署名
電子署名

共通鍵暗号との違い

前述のシーザ暗号のように暗号化・復号に同じ鍵を使う暗号方式のことを共通鍵暗号と呼びます
(これに対して公開鍵暗号のことを非対称鍵暗号とも呼んだりします)

共通鍵暗号公開鍵暗号の違いは以下の通りです

共通鍵暗号 公開鍵暗号
認証範囲 真正性 真正性・否認防止
鍵管理 大変 容易
暗号化速度 早い 遅い

認証範囲

公開鍵認証は前述の通り電子署名を利用します 共通鍵暗号でもメッセージ認証コード(MAC)などの認証方式がありますが
公開鍵認証と異なり署名と検証の鍵が一緒なので否認の防止や第三者証明が出来ません

鍵管理

鍵の管理ですが共通鍵暗号では 2 つの不便さがあります

  1. 鍵の交換方法がない
    • 公開鍵暗号であれば公開鍵を渡す際に盗まれたとしても問題ありません
    • 共通鍵は盗まれないように渡す必要があります
  2. 管理する鍵の数が増える
    • 鍵は通信したい相手の数だけ持つ必要があります
    • n 人の間で各々通信したい場合は n(n-1)/2 個の鍵が必要になります

暗号化速度

一般に共通鍵暗号の方が公開鍵暗号よりも高速です
そのため SSH では 2 つを組み合わせたハイブリッド暗号を用います

  • 公開鍵暗号: 鍵交換・認証に使う
  • 共有鍵: 暗号化&復号・メッセージ認証に使う

公開鍵認証を活用した暗号化通信

公開鍵認証では通常以下のステップで暗号化が行われます

  1. 鍵交換
  2. 認証
  3. 暗号化通信

鍵交換

キーペアを使い、2者間で秘密裏に情報を共有できる方式です
これを利用して暗号化通信に使う共有鍵を交換します

※以下の参考記事が非常に分かりやすいので参照することをオススメします

認証

アクセス元は「接続先が本当に意図している相手か」を公開鍵認証で確認します
(具体的には接続先の署名を、接続先の公開鍵を用いて検証します)

暗号化通信

鍵交換した共有鍵を用いて暗号化通信を行います
鍵交換〜認証に用いたキーペアは原則使い回しますが
暗号化通信に用いた共有鍵は使い捨てで問題ありません

まとめ

この記事では以下の 4 つについて確認しました

SSH を使うだけであれば以下の点だけ意識しておけば良いでしょう

  • 秘密鍵絶対に誰にも渡さない
  • 公開鍵は他の場所に置いても問題はない

参考書籍