SSHの公開鍵認証とは?「仕組み」や「パスワード認証との違い」などを解説!

サーバーにリモートで接続するために使われる「SSH」。エンジニアやインフラ担当者にとってはおなじみの技術ですが、「なぜ安全なのか?」「公開鍵認証ってどういう仕組み?」と聞かれると、うまく説明できない方も多いのではないでしょうか。

この記事では『公開鍵認証』について、以下の内容を図を用いてわかりやすく解説しています。

  • そもそもSSHとは?
  • SSHの認証方式
  • 公開鍵認証とは?
    • 公開鍵と秘密鍵とは?
    • 公開鍵認証の仕組み
    • パスフレーズとは?
  • 「公開鍵認証」と「パスワード認証」の違い

そもそもSSHとは?

SSHは、暗号化技術を使ってセキュアな通信を可能にするプロトコルです。主に、自分のパソコンからサーバーやルーターなどのネットワーク機器にリモートで接続するときに使います。

たとえば、

  • クラウド上のサーバー(例:AWS上のEC2)
  • 遠くのデータセンターにあるサーバー
  • 会社のサーバールームにある機器

などを、自分のPCから操作したいときに、SSHを使えばリモートログインファイル転送が可能になります。

昔は、サーバーへのリモートログインには「Telnet」や「rlogin」、ファイルの転送には「FTP」といったプロトコルが利用されてきました。しかしこれらのプロトコルは通信内容が暗号化されていないので、パスワードなどの機密情報を含むデータが、平文でネットワーク上に流れてしまう危険がありました。

こうした危険を防ぐため、今では通信を暗号化できるSSHが広く使われるようになりました。

SSHの認証方式

SSHを使えば、離れた場所にあるサーバーやクラウド上のサーバーにリモートログインして、手元のPCから操作することが可能になります。ただし、誰でも接続できてしまうと大問題なので、「この人は信頼できるユーザーか?」を確認する認証(Authentication)が必要です。

SSHには、以下のような認証方式があります。

認証方式概要
パスワード認証ユーザー名とパスワードで認証する方法。
公開鍵認証鍵ペア(公開鍵と秘密鍵)を使って認証する方法。
パスワード認証より安全性が高いため、現在では広く推奨されている認証方式です。
ホストベース認証信頼できるホスト(端末)からの接続のみ許可する方法。
ワンタイムパスワード(OTP)毎回異なるパスワードで認証する方法(例:Google Authenticatorなど)。

なお、SSHでは、これらの認証方式を組み合わせて使うことで、さらにセキュリティを高めることができます。以下に一例を示します。

  • 公開鍵認証 + パスワード
    • 鍵を持っているだけではログインできず、パスワードの入力も必要になります。
  • 公開鍵認証 + ワンタイムパスワード(OTP)
    • 通常の認証に加えて、毎回違うコードを入力する2段階認証になります。

また、SSHでログインに成功すると、サーバーのシェル上で任意のコマンドが実行可能になるため、あらゆる操作が可能になります。そのため、もし不正なユーザーに侵入されてしまうと、以下のような深刻な被害が起こる可能性があります。

  • 機密情報の流出
  • サーバーの破壊・乗っ取り
  • 他のサーバーへの攻撃拠点に使われる

そのため、SSHは普段使っているWebサービスのパスワード認証以上にセキュリティに気を配る必要があるのです。

公開鍵認証とは?

公開鍵認証とは?

公開鍵認証は、「公開鍵」と「秘密鍵」という2つの鍵ペア(キーペア)を使って行う認証方法です。特にSSH(Secure Shell)でサーバーにログインする場面でよく使われており、秘密鍵を持つ本人だけがログイン可能になります。

公開鍵と秘密鍵とは?

公開鍵認証の中心となるのが鍵ペア(公開鍵と秘密鍵)です。

鍵の種類特徴誰が持つ?
公開鍵誰でも見られてOKサーバーに登録
秘密鍵絶対に外に出さない鍵ユーザーが保管

この2つはペアになっていて、片方で暗号化したものはもう片方でしか復号できないという性質を持っています。

公開鍵認証の仕組み

では実際のログイン時にどんなことが起きているか、順を追って解説します。

  • あなた(クライアント)は、事前に鍵ペア(公開鍵と秘密鍵)を作成する(事前準備)。
  • サーバーにクライアントの公開鍵を登録する(事前準備)。
  • サーバーにログイン要求をする。
  • サーバーがランダムなデータ(チャレンジ)を平文でクライアントに送る。
  • クライアントはサーバーから送られてきたデータを秘密鍵で署名し、その署名をサーバーに返す。
  • サーバーはクライアントから返された署名を、登録されている公開鍵で検証する。
  • 検証に成功すれば、認証成功でログインできる。

このように、ネットワーク上でパスワードを送らずに本人確認ができるのが最大の特徴です。

パスフレーズとは?

パスフレーズは、秘密鍵に対してさらに“もう一段階の鍵”をかけるための文字列(パスワードのようなもの)です。

秘密鍵は盗まれると第三者に不正ログインされる恐れがあります。しかし、パスフレーズを設定しておけば、仮に秘密鍵ファイルが漏洩しても、そのままでは使えないようにできます。

ただし、パスフレーズがあると、実行のたびに手動入力が必要になってしまいます。そのため、次のような自動処理では、パスフレーズは使わないこともあります。

  • サーバーの定期バックアップ など
  • バッチ処理
  • 自動デプロイ

「公開鍵認証」と「パスワード認証」の違い

「公開鍵認証」と「パスワード認証」の違いを以下に示します。

比較項目公開鍵認証パスワード認証
安全性秘密鍵は送られないため安全パスワードが盗まれると危険
自動化スクリプトでの自動接続が可能人手でパスワード入力が必要
設定の手間事前に鍵の作成と登録が必要すぐに使える
認証情報の扱い鍵ペア(公開鍵と秘密鍵)パスワード(単一の秘密情報)
セキュリティ強度暗号技術に基づいた高いセキュリティパスワードの強度に依存

本記事のまとめ

この記事では『公開鍵認証』について、以下の内容を説明しました。

  • そもそもSSHとは?
    • 暗号化技術を使ってセキュアな通信を可能にするプロトコル
    • 主に自分のパソコンからサーバーやルーターなどのネットワーク機器にリモートで接続するときに使う
  • SSHの認証方式
    • 公開鍵認証が現在では広く推奨されている認証方式
  • 公開鍵認証とは?
    • 「公開鍵」と「秘密鍵」という2つの鍵ペア(キーペア)を使って行う認証方法
    • 公開鍵はサーバーに登録し、秘密鍵はユーザーが保管する。
    • 秘密鍵を持っているユーザーだけがログイン可能になる。
  • 「公開鍵認証」と「パスワード認証」の違い
    • パスワード認証よりも公開鍵認証の方がセキュリティが高い

お読み頂きありがとうございました。

スポンサーリンク