📑

【セキュリティ】認証方式を理解する

に公開
2

はじめに

SSHでの接続設定などでよく目にする「公開鍵認証」ですが、「なんとなく使っているけど仕組みはよくわからない…」という方も多いのではないでしょうか?

この記事では、初心者の方でも理解できるように、難しい数式や理論は使わず、図解を交えて公開鍵認証の基本をわかりやすく解説します。

なお、この記事では、概念的理解の補助を目的としています。

クライアント認証方式

サーバにログインしたり、通信したりする際には、「あなたが本当に本人かどうか」を確認する必要があります。
この確認の仕組みを「認証方式」と呼びます。

特にSSH接続などでは、クライアント(ユーザー側)が「自分はこのユーザー本人です」と証明する必要があります。
そのときによく使われるのが、以下の2つのクライアント認証方式です。

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

パスワード認証とは

最も一般的な認証方法で、ユーザー名とパスワードを使って本人確認を行なう方法です。
私たちがWebサービスにログインするときと同じ仕組みです。

仕組み

  • ユーザーがSSHなどでサーバに接続
  • サーバ側が「パスワードを入力してください」と要求
  • 正しいパスワードが入力されると、ログインが許可される

しかし、このパスワード認証には、悪意のある第三者がユーザ名とパスワードを総当たり的に試す「ブルートフォース攻撃」のリスクがあります。

セキュリティの観点から、運用環境ではパスワード認証は無効化し、公開鍵認証に切り替えることが推奨されているようです。

公開鍵認証とは

公開鍵認証方式とは、鍵を使ってログインする仕組みのことです。
公開鍵認証は、公開鍵と秘密鍵のペアを使って本人確認を行なう認証方式です。

パスワードのように「何かを知っている」ではなく、「何かを持っている(秘密鍵)」ことを証明することで、安全な接続を実現します。

## 鍵は2つでセット

  • 公開鍵(public key):他人に渡してもOK。サーバに登録しておく。
  • 秘密鍵(private key):絶対に他人に渡してはいけない。自分のPCに保管しておく。

この2つの鍵は、暗号化と復号のためのペアになっていて、どちらか一方で暗号化した情報は、もう一方でしか復号できないようになっています。

まとめ

今回は、一般的な認証方式である「パスワード認証」「公開鍵認証」について簡単にまとめてみました。

最後までお読みいただき、ありがとうございました。

※元の記事では、「公開鍵認証の流れ」についてまとめていましたが、理解不十分と判断し、削除しております。

参考・画像引用元URL

https://knowledge.sakura.ad.jp/3543/

https://milestone-of-se.nesuke.com/sv-advanced/digicert/public-private-key/

https://server-setting.info/blog/public-key-auth.html

Discussion

angel_p_57angel_p_57

幾つか問題があります。

この認証方法は、悪意のある第三者がユーザ名とパスワードを総当たり的に試して不正ログインできてしまう余地があります(ブルートフォース攻撃)

これはよく言われる話ではあるのですが、「十分長いパスワードを設定すれば防げる話だよね」「それ言ったら公開鍵認証で使う秘密鍵も有限パターンしかないんだけど」というツッコミへの説明がつきません。説明をちゃんと考える必要があるところです。

この2つの鍵は、暗号化と復号のためのペアになっていて、どちらか一方で暗号化した情報は、もう一方でしか復号できないようになっています。

折角後段でデジタル署名の話 ( これは正しい ) をしてるのに、鍵の説明で暗号化・復号の話を出すのではチグハグです。( 暗号化と署名は別物です )

サーバはまず「この人が本当に正しい秘密鍵を持っているのか?」を確認するために、**ランダムな文字列(チャレンジ)**をクライアントに送ります。

送りません。「署名が本人にしか作れないことを認証に利用する」までは簡単に言える話ですが「なんのデータに署名するか」は少し難しい話です。調べがつかないなら言及しない方がよいです。
※ちなみに、「ランダムな文字列を送って署名させる」は方式として脆弱なので、その点でもN.G.です。( 例外はパスキーで、それ用の対処がされています )

mabomabo

angel_p_57 様

貴重なご指摘をいただき、誠にありがとうございます。

特に、パスワードと秘密鍵の強度の考え方の違いや、公開鍵認証における「署名」の役割の厳密な定義など、自分の理解が曖昧だった部分が浮き彫りになり、大変勉強になりました。

ラズパイでの設定経験から、わかったつもりになっていた点があり、理論的な裏付けが不足していたと痛感しております。 ご指摘いただいた「暗号化と署名の違い」や「署名対象のデータの扱い」についても、改めて調べ直したいと思います。

今後は一つひとつ理解を確かめながら学習を続けてまいります。ありがとうございました。