【セキュリティ】認証方式を理解する
はじめに
SSHでの接続設定などでよく目にする「公開鍵認証」ですが、「なんとなく使っているけど仕組みはよくわからない…」という方も多いのではないでしょうか?
この記事では、初心者の方でも理解できるように、難しい数式や理論は使わず、図解を交えて公開鍵認証の基本をわかりやすく解説します。
なお、この記事では、概念的理解の補助を目的としています。
クライアント認証方式
サーバにログインしたり、通信したりする際には、「あなたが本当に本人かどうか」を確認する必要があります。
この確認の仕組みを「認証方式」と呼びます。
特にSSH接続などでは、クライアント(ユーザー側)が「自分はこのユーザー本人です」と証明する必要があります。
そのときによく使われるのが、以下の2つのクライアント認証方式です。
- パスワード認証
- 公開鍵認証
パスワード認証とは
最も一般的な認証方法で、ユーザー名とパスワードを使って本人確認を行なう方法です。
私たちがWebサービスにログインするときと同じ仕組みです。
仕組み
- ユーザーがSSHなどでサーバに接続
- サーバ側が「パスワードを入力してください」と要求
- 正しいパスワードが入力されると、ログインが許可される
しかし、このパスワード認証には、悪意のある第三者がユーザ名とパスワードを総当たり的に試す「ブルートフォース攻撃」のリスクがあります。
セキュリティの観点から、運用環境ではパスワード認証は無効化し、公開鍵認証に切り替えることが推奨されているようです。
公開鍵認証とは
公開鍵認証方式とは、鍵を使ってログインする仕組みのことです。
公開鍵認証は、公開鍵と秘密鍵のペアを使って本人確認を行なう認証方式です。
パスワードのように「何かを知っている」ではなく、「何かを持っている(秘密鍵)」ことを証明することで、安全な接続を実現します。
## 鍵は2つでセット
- 公開鍵(public key):他人に渡してもOK。サーバに登録しておく。
- 秘密鍵(private key):絶対に他人に渡してはいけない。自分のPCに保管しておく。
この2つの鍵は、暗号化と復号のためのペアになっていて、どちらか一方で暗号化した情報は、もう一方でしか復号できないようになっています。
まとめ
今回は、一般的な認証方式である「パスワード認証」「公開鍵認証」について簡単にまとめてみました。
最後までお読みいただき、ありがとうございました。
※元の記事では、「公開鍵認証の流れ」についてまとめていましたが、理解不十分と判断し、削除しております。
参考・画像引用元URL
Discussion
幾つか問題があります。
これはよく言われる話ではあるのですが、「十分長いパスワードを設定すれば防げる話だよね」「それ言ったら公開鍵認証で使う秘密鍵も有限パターンしかないんだけど」というツッコミへの説明がつきません。説明をちゃんと考える必要があるところです。
折角後段でデジタル署名の話 ( これは正しい ) をしてるのに、鍵の説明で暗号化・復号の話を出すのではチグハグです。( 暗号化と署名は別物です )
送りません。「署名が本人にしか作れないことを認証に利用する」までは簡単に言える話ですが「なんのデータに署名するか」は少し難しい話です。調べがつかないなら言及しない方がよいです。
※ちなみに、「ランダムな文字列を送って署名させる」は方式として脆弱なので、その点でもN.G.です。( 例外はパスキーで、それ用の対処がされています )
angel_p_57 様
貴重なご指摘をいただき、誠にありがとうございます。
特に、パスワードと秘密鍵の強度の考え方の違いや、公開鍵認証における「署名」の役割の厳密な定義など、自分の理解が曖昧だった部分が浮き彫りになり、大変勉強になりました。
ラズパイでの設定経験から、わかったつもりになっていた点があり、理論的な裏付けが不足していたと痛感しております。 ご指摘いただいた「暗号化と署名の違い」や「署名対象のデータの扱い」についても、改めて調べ直したいと思います。
今後は一つひとつ理解を確かめながら学習を続けてまいります。ありがとうございました。