公開鍵は暗号よりも電子署名

こちらはSSHではRSA公開鍵は電子署名に使っているのであって、暗号化をしているのではないという記事。

qiita.com

実はRSAを暗号として用いるシーンは減ってきている。

現在、我々に最も馴染みのあるRSAの用途はSSL/TLSだろう。TLSでは本文の暗号化は共通鍵暗号で行われており、RSAで本文を暗号化していない。ではRSAの用途は何かというと2つあって、1つは共通鍵をサーバクライアントの間で安全に共有(鍵交換)するための暗号化。もう1つはサーバ証明書を検証するための電子署名である。

ところが、TLS v1.3では鍵交換からRSAが外され、 RSAの用途はサーバ証明書の検証のみとなった。

削除されたきっかけはあのスノーデン事件らしい。共通鍵をRSAで暗号化して共有した場合、仮に暗号通信を全て記録している者がいたとして、その者にサーバの秘密鍵が奪われると通信内容が全て解読されてしまう。当初、暗号通信を全て記録するなど非現実的だと考えられていたが、スノーデンによってアメリカ政府がインターネットの通信を記録していると暴露されると、その懸念は現実にあり得るものとなった。

ではRSAの代わりに何で鍵交換するのかというと、ディフィー・ヘルマン鍵共有である。SSHもこれを使って鍵交換している。ディフィー・ヘルマンプロトコルでは共通鍵がネットワーク上を流れないので誰かに記録される心配はなく、セッション終了後に共通鍵を破棄できるので、後から第三者に暗号通信を解読されることもない。このように将来に渡って秘密を保持できる特性を前方秘匿性という。

というわけで現在では公開鍵はほとんどが電子署名用だと考えても差し支えない。なおSSHではRSAの代わりにECDSA(楕円曲線デジタル署名アルゴリズム)やEd25519(エドワーズ曲線デジタル署名アルゴリズム)といったより強固な電子署名アルゴリズムも使える。ssh-keygenコマンドでは tオプションでアルゴリズムを指定できる。ECDSAの場合はbit数の指定も必要だ。

ssh-keygen -t ed25519 
ssh-keygen -t ecdsa -b 521

この場合は~/.ssh以下に id_ecdsa や id_ed25519 というちょっと見慣れないファイルが作られる。これらのより強い鍵をGithubに登録してイケてるエンジニアアピールしてみてはいかがだろうか? 誰も見ないと思うけど。というのは冗談にしても、業務でGithubを使う機会も増えているし、鍵は強固なほうがいい。特にまだRSAやDSAの1024bit鍵を使っているならば今すぐにでも変えた方がいいだろう。