公開鍵認証と SSH
公開鍵認証とは、暗号化やデジタル署名に使われる技術の一つで、公開鍵と秘密鍵という二つの鍵を使って通信相手の本人確認や暗号化を行う方法です。 SSH とは、Secure Shell の略で、ネットワーク上で安全にコマンドやファイルをやり取りするためのプロトコルです。SSH では公開鍵認証を使って、サーバーにログインすることができます。 具体的にどのように動作するかを説明します。
この記事では、数学についての言及はありません。
公開鍵と秘密鍵について
公開鍵認証では、公開鍵と秘密鍵という二つの鍵を使います。 公開鍵は名前の通り、誰でも知っていても構わない鍵で、通信相手に送ったり、インターネット上に公開したりします。 秘密鍵は自分だけが持っている鍵で、絶対に他人に知られてはいけない鍵です。 秘密鍵は公開鍵から導くことは数学的に非常に困難なものとなっています。 この性質を利用することで、暗号化やデジタル署名を実現できています。
デジタル署名
デジタル署名とは、データの送信者が本人であることを証明するための技術です。 以下の手順でデジタル署名を行います。
送信者
- 文章をハッシュ化 (ハッシュ)
- ハッシュを秘密鍵で暗号化 (電子署名)
- 文章と電子署名を送信
受信者
- 文章と電子署名を受信
- 公開鍵で署名を復号しハッシュを取得
- 文章をハッシュ化し、電子署名により得られたハッシュと比較 (ハッシュが同じであれば相手の送信した文章)
デジタル署名は署名を秘密鍵、検証を公開鍵で行っています。
SSH について
SSH とは、Secure Shell の略で、ネットワーク上で安全にコマンドやファイルをやり取りするためのプロトコルです。 SSH では公開鍵認証を使って、サーバーにログインすることができます。SSH の利点は以下の通りです。
- パスワードなしでログインできるため、パスワード漏洩や総当たり攻撃などのリスクが低減 (ただし、パスワードを使用することも可能)
- データが暗号化されるため、通信内容が盗聴されたり、改ざんを防止
- ポートフォワーディングやトンネリングなどの機能を使って、ネットワークのセキュリティやアクセス制御を強化
SSH では、以下のように公開鍵認証を行います。
- クライアントは、公開鍵と秘密鍵を生成 (
ssh-keygen -t ed25519
) - クライアントは、クライアントの公開鍵 (
~/.ssh/id_ed25519.pub
) を事前にサーバーに登録 (~/.ssh/authorized_keys
) - クライアントはサーバーに接続する際に、自分の秘密鍵 (
~/.ssh/id_ed25519
) でデジタル署名 - サーバーはクライアントの公開鍵 (
~/.ssh/authorized_keys
)でデジタル署名を検証し、正しい場合はログインを許可
以上が、公開鍵認証と SSH についてのまとめです。 公開鍵認証と SSH を使うことで、ネットワーク上で安全にコマンドやファイルをやり取りすることができます。