SSHの仕組みと暗号化通信|安全なリモート接続を支える技術

SSHの仕組みと暗号化通信

SSHの暗号化通信はどのように実現されているのか

SSH(Secure Shell)は、Linuxサーバやネットワーク機器を安全に管理するために利用されるリモート接続プロトコルです。

現在ではLinuxサーバ管理における標準技術となっており、オンプレミス環境だけでなくAWSやAzureなどのクラウド環境でも広く利用されています。

SSHの最大の特徴は「通信が暗号化されること」です。

Telnetなどの古いプロトコルでは通信内容がそのままネットワーク上を流れていましたが、SSHでは強力な暗号技術を利用して通信を保護しています。

本記事ではSSHがどのような仕組みで安全な通信を実現しているのかを詳しく解説します。

なぜ暗号化が必要なのか

まずは暗号化が必要な理由を考えてみましょう。

例えば管理者がサーバへログインする際、以下のような情報が送受信されます。

  • ユーザー名
  • パスワード
  • 実行コマンド
  • サーバからの応答
  • 設定ファイルの内容

もしこれらの情報が暗号化されていなければ、ネットワーク上でパケットを盗聴するだけで情報を取得できてしまいます。

実際にTelnetではパスワードが平文で送信されるため、現在ではほとんど利用されていません。

SSHはこの問題を解決するために開発されました。

SSHが実現する3つのセキュリティ機能

SSHでは単純に通信を暗号化しているだけではありません。

以下の3つのセキュリティ機能を提供しています。

  • 機密性(Confidentiality)
  • 完全性(Integrity)
  • 認証(Authentication)

機密性

機密性とは、第三者に通信内容を読まれないようにすることです。

SSHでは暗号化アルゴリズムを利用して通信内容を保護します。

そのため、パケットを盗聴されても内容を簡単に解読することはできません。

完全性

完全性とは通信途中でデータが改ざんされていないことを保証する仕組みです。

攻撃者が通信内容を書き換えた場合、SSHはそれを検知できます。

これにより安全なコマンド実行が可能になります。

認証

認証とは接続先が本物であること、そして接続するユーザーが正当であることを確認する仕組みです。

サーバ認証とユーザー認証の両方が実施されます。

SSH接続時の流れ

SSH接続では以下のような手順が実行されます。

  1. TCP接続の確立
  2. サーバ公開鍵の確認
  3. 鍵交換
  4. 暗号化方式の決定
  5. ユーザー認証
  6. シェル利用開始

管理者から見ると一瞬で接続が完了しますが、内部では複数のセキュリティ処理が実行されています。

サーバ認証の仕組み

SSHではまず接続先サーバが本物かどうかを確認します。

初回接続時には以下のようなメッセージが表示されます。

The authenticity of host can't be established.
Are you sure you want to continue connecting?

これは接続先サーバのホスト鍵を確認している状態です。

承認すると公開鍵情報が保存されます。

Linuxでは通常以下のファイルへ記録されます。

~/.ssh/known_hosts

次回以降の接続時には、この情報を利用して接続先サーバの正当性を確認します。

鍵交換とは何か

暗号化通信を行うためには共通鍵が必要です。

しかし、共通鍵をそのままネットワークへ流してしまうと盗聴される可能性があります。

そこでSSHでは鍵交換アルゴリズムを利用します。

代表的な方式は以下の通りです。

  • Diffie-Hellman
  • ECDH
  • Curve25519

これらの技術により、実際の暗号鍵を送信せずに共通鍵を生成できます。

これがSSHの安全性を支える重要な技術です。

共通鍵暗号と公開鍵暗号

SSHでは共通鍵暗号と公開鍵暗号の両方が利用されています。

公開鍵暗号

公開鍵暗号は主に認証と鍵交換に利用されます。

公開鍵と秘密鍵のペアを使用します。

  • 公開鍵(Public Key)
  • 秘密鍵(Private Key)

公開鍵は他人へ公開しても問題ありませんが、秘密鍵は厳重に保管する必要があります。

共通鍵暗号

実際の通信では共通鍵暗号が利用されます。

公開鍵暗号は計算コストが高いため、大量の通信には向いていません。

そのためSSHでは鍵交換後に共通鍵を生成し、その鍵を使って通信を暗号化します。

SSHで利用される暗号アルゴリズム

SSHではさまざまな暗号アルゴリズムが利用されています。

AES

現在最も一般的に利用されている暗号方式です。

高速で安全性が高く、多くのサーバで標準利用されています。

ChaCha20

Googleが推進している高速な暗号方式です。

モバイル端末やCPU支援機能が少ない環境でも高性能です。

AES-GCM

暗号化と改ざん検知を同時に実現できる方式です。

現在のOpenSSHでも広く採用されています。

改ざん検知の仕組み

通信が暗号化されていても、途中でデータを書き換えられる可能性があります。

SSHではメッセージ認証コード(MAC)を利用して改ざんを検知します。

代表的な方式として以下があります。

  • HMAC-SHA256
  • HMAC-SHA512

これにより通信途中で内容が変更された場合に検出できます。

ユーザー認証の仕組み

暗号化通信が確立された後はユーザー認証が行われます。

代表的な認証方式は以下の通りです。

  • パスワード認証
  • 公開鍵認証
  • 多要素認証

企業環境では公開鍵認証が一般的です。

パスワード認証のみの場合、総当たり攻撃の対象になる可能性があります。

OpenSSHで確認できる暗号方式

現在利用可能な暗号方式は以下のコマンドで確認できます。

$ ssh -Q cipher

鍵交換方式の確認は以下です。

$ ssh -Q kex

利用可能なMACアルゴリズムは以下で確認できます。

$ ssh -Q mac

セキュリティ監査や運用管理の際に役立つコマンドです。

実務で意識すべきポイント

実務ではSSHが安全だからといって放置してはいけません。

以下の対策を実施することが推奨されます。

  • 公開鍵認証を利用する
  • rootログインを禁止する
  • 不要な暗号方式を無効化する
  • OpenSSHを定期的に更新する
  • 接続元IPを制限する
  • 監査ログを定期確認する

特にインターネットへ公開されているサーバでは重要な対策となります。

まとめ

SSHは単なるリモートログインツールではなく、複数の暗号技術を組み合わせて安全な通信を実現しています。

サーバ認証、鍵交換、暗号化通信、改ざん検知、ユーザー認証という複数の仕組みが連携することで、安全なリモート管理が可能になっています。

SSHの仕組みを理解することで、公開鍵認証やホスト鍵管理、暗号アルゴリズムの設定など、より実践的なサーバ運用に役立てることができるでしょう。