GitHubは現在、SSH公開鍵認証にて認証を行っている。
クライアントで秘密鍵と公開鍵を作成して、GitHubに公開鍵を登録するという流れで設定することができる。
設定方法はググれば山程出てくるが、このSSH公開鍵認証がどのような流れで認証しているのかが気になったため、簡単な流れを残しておく。
【気になりポイント】
- GitHub側ではなく、クライアント側が秘密鍵を持っているのはなんでだっけ?
- よくある公開鍵暗号方式の説明としては、自身で秘密鍵と公開鍵を作成してファイルを暗号化し、公開鍵と暗号化ファイルを相手に渡してファイルを復元してもらうというもの。
- GitHubに公開鍵を渡してどんなことをしているのだろう?
【認証の流れ】
Git側が確認したいのは、相手がGitに接続許可のあるユーザーであるということ。
そのため、Git側で秘密鍵と公開鍵を作成して公開鍵を渡してしまうと、作成して公開鍵を持っているユーザーが誰でもアクセス可能となってしまう。
- ユーザー側で秘密鍵と公開鍵を作成する。
- GitHubに公開鍵を登録する。
- 認証時、まずGitHubは接続してきたユーザー名に紐づく公開鍵があるか確認する。
- ユーザー名に紐づく公開鍵がある場合、その公開鍵を使用してランダムな文字列を暗号化する。
- 暗号化したメッセージをユーザーに送信する。
- ユーザーは受信した暗号化メッセージと秘密鍵を使用して文字列を生成する。
(これがいわゆるデジタル署名) - 生成した文字列(デジタル署名)をGitHubに返す。
- GitHubはユーザーから受信したデジタル署名と公開鍵を使用してメッセージを生成する。
- 生成したメッセージが暗号化前のメッセージと同じであれば、ユーザーが秘密鍵を持った登録されたユーザーであることを認証する。
【セキュリティの利点】
- 秘密鍵の保持
- 秘密鍵はクライアント側でのみ保持され、ネットワーク越しに送信されることはない。
これにより、秘密鍵の漏洩リスクが低減される。
- 秘密鍵はクライアント側でのみ保持され、ネットワーク越しに送信されることはない。
- 公開鍵暗号方式
- SSHは公開鍵暗号方式を使用しているため、公開鍵を持っていても秘密鍵を知ることはできない。
つまり公開鍵が漏洩してもセキュリティ上のリスクは低くなる。
- SSHは公開鍵暗号方式を使用しているため、公開鍵を持っていても秘密鍵を知ることはできない。
このように、SSH公開鍵認証は、安全にサーバーへのアクセスを制御するための効果的な手段となっている。