☆注意
本トピックは掘り下げると本が何冊も書けます。
よってほんとに初歩というか、実務上最低限知っておいていただきたい部分のみに絞ってご紹介します。
公開鍵認証はさまざまなところで使われています。
今回はその中でSSHを例にとって説明をしていこうと思います。
まずSSH以前の世界はもっと「やさしいせかい」でありましたのでクライアントからサーバへの接続はRSH(リモートシェル)というプロトコルを使ってサーバにログインしていました。
まず作業者の手元にWindowsPCがあるとしましょう。
RSHが使用できるアプリケーションをインストールしてあります。
サーバ側のOSのはLinuxとしましょう。
RSHのサービスが動作し、ファイヤーウォールは「やさしいせかい」なのでかけていません。
「サーバ上で○○のファイルを削除しておいてください」
などと依頼されて作業者はアプリケーションを起動し、接続先サーバのホスト名あるいはIPアドレスを入力して接続します。
ユーザ名とパスワードを入れたら接続が完了します。
そのプロンプトで打ったコマンドはローカルの作業PCではなく接続先のサーバ上で実行されます。
平和ですね。
ところが、一部の学者さんや米軍しか使っていなかったインターネットに非常に沢山の人々が繋がるようになりました。
その中には敵国であるソ連のひともいるでしょう。
「すべての人々が平等なパラダイスみたいな国」を目指した共産主義、社会主義の人たちですね。
そうでなくても敵対する企業の人もいるでしょうし、とにかくインターネットは一気にリアル北斗の拳状態と化しました。
そんななか、従来の接続方式では問題があることがわかりました。
そこで暗号化という技術が発達します。
人類の歴史は戦争の歴史といいうくらいです。
人類が産まれてから、今に至るまで戦争をしないときは1秒もなかったといわれます。
世界はいつまでたっても平和になりません。
敵国に通信を知られるのはたいへん不利です。
昔の通信はスニーカーネットワークです。
伝令が手紙を持って走るわけですね。
ここで世界で初めての暗号が考案されました。
かのローマ皇帝カエサル・シーザーの考案したシーザー暗号などというものもあります。
戦争の歴史は暗号の歴史でした。
第2次世界大戦で旧日本軍の暗号はことごとく米国に破られていたというのはあまりにも有名な話ですね。
そこで通信の世界においても暗号化はたいへん重要な技術となります。
それまで様々な暗号化がありました。がことごとく破られてきたのです。
もちろんrshにも暗号化する機能はありました。
この暗号化の歴史に大きな楔を打ち込んだのがこの公開鍵暗号方式と言えます。
公開鍵認証では、2つの鍵を作成します。
ひとつは、秘密鍵といいます。
もうひとつが、公開鍵です。
RSHは廃れ、代わりにSSHが登場しました。
このSSHでは公開鍵認証を使うことが出来ます。
まず、作業者PCで秘密鍵と公開鍵を作成します。
そして、公開鍵をサーバへコピーします。
その後、やっていることはユーザ名とパスワードを入力して接続。
接続されたらそこでコマンドを入力。
あれ?
やっていることってRSHのときとあんまり変わらないですよね?
でもこのときのやり取りで行われる仕草がちがうんです。
細かく説明すると最初に述べたようにかなり長くなりますのでバッサリ割愛しましょう。
どうやって暗号化しているか、のメカニズムがほんとにざっくり理解できていればここではまずOKです。
それは、
通信において暗号化を施す場合は
「相手の公開鍵を使用して暗号化する」
「受け取った側は自身の秘密鍵を使って復号する」
「秘密鍵が破られると暗号は破られる」
の3つだけを覚えてください。
インターネット黎明期には平和だった通信も暗号化を施さないと安心できないようになりました。
SSHに取って代わられたRSHのように、いまではあまり使われなくなった/今後そうなるであろうプロトコルがたくさんあります。
例えばHTTP
いまではURLがhttpで記述されていると身構えてしまうようになりました。
httpsを使用してください。
ファイルの交換にはrcpの代わりにscpを使います。
ほかにもFTPがありますね。
FTPの代替としては、ftps、またsftpというのもあります
もちろんscpを使っても構いません。
このように、プロトコル名の前か後ろにsがついているものはだいたいが「Secure」のsです。
ただし、公開鍵認証を使用しているからすべてが大丈夫、などということはありません。
公開鍵認証や公開鍵暗号と言われるものを使用することがスタートラインだということです。
ちょっと書き足りないものがいっぱいあるのですけど、できるだけシンプルに書きたかったのでゴッソリ消しました。
後日続きがあるかも知れませんが燃え尽きて無いかも知れません。