What is SSH
SSH (Secure Shell)は、インターネット上でリモートサーバを制御したり、変更したりすることができるリモート管理プロトコルです。 このサービスは、暗号化されていない Telnet に代わる安全なサービスとして作られたもので、リモートサーバーとの間のすべての通信が暗号化された方法で行われることを保証するために、暗号技術を使用しています。
下の図は、典型的なSSHウィンドウです。 LinuxやmacOSのユーザーは、ターミナルウィンドウから直接リモートサーバーにSSH接続することができます。 Windowsユーザーは、PuttyのようなSSHクライアントを利用することができます。
このSSHチュートリアルでは、sshがどのように機能するかという基本的なことと、安全なリモートアクセス方法を提供するためにプロトコルが使用している基礎的な技術について説明します。
HostingerでLinux VPSのホスティングを取得しましょう。 最大77%のディスカウント!
Get Started Here
SSHの仕組み
LinuxやMacをお使いの方は、SSHを使うのはとても簡単です。 Windowsを使用している場合は、SSH接続を開くためにSSHクライアントを利用する必要があります。
MacやLinuxをお使いの方は、ターミナルプログラムにアクセスして、以下の手順に従ってください。
SSHコマンドは3つの異なる部分から構成されています:
ssh {user}@{host}
SSH keyコマンドは、暗号化されたSecure Shell Connectionを開きたいことをシステムに指示します。 {user}は、アクセスしたいアカウントを表します。 例えば、rootユーザーにアクセスしたい場合、これは基本的にシステム管理者と同義で、システム上のあらゆるものを変更する完全な権限を持っています。 host}は、アクセスしたいコンピュータを表します。 これはIPアドレス(例:244.235.23.19)またはドメイン名(例:www.xyzdomain.com)となります。
エンターキーを押すと、要求されたアカウントのパスワードを入力するよう促されます。 パスワードを入力すると、画面には何も表示されませんが、実際にはパスワードが送信されています。 入力が終わったら、もう一度エンターキーを押してください。
他にもSSHのコマンドを知りたい方はこちらをご覧ください。
Understanding Different Encryption Techniques
SSHの大きな利点は、ホストとクライアント間の情報の安全な転送を保証するために暗号化を使用することです。 ホストとは、あなたがアクセスしようとしているリモートサーバーのことで、クライアントとは、あなたがホストにアクセスするために使用しているコンピュータのことです。
- 対称型暗号化
- 非対称型暗号化
- ハッシュ化
対称型暗号化
対称型暗号化とは、クライアントとホストの両方でメッセージの暗号化と復号化に秘密鍵を使用する暗号化方式です。
対称性のある暗号化は、しばしば共有鍵または共有秘密暗号と呼ばれます。
対称的な暗号化は、共有鍵または共有秘密暗号と呼ばれることもあります。通常、使用される鍵は1つだけですが、一方の鍵が他方の鍵を使って簡単に計算できるようなペアの鍵が使われることもあります。 クライアントとサーバーの双方が、合意した方法で秘密鍵を導き出し、その結果を第三者に開示することはありません。 対称鍵の作成は、鍵交換アルゴリズムによって行われます。 このアルゴリズムが特に安全なのは、クライアントとホストの間で鍵が転送されないという点です。 クライアントとホストの間では、公開データを共有し、それを操作して秘密鍵を独自に計算します。
ただし、シークレットトークンは各SSHセッションに固有のものであり、クライアントの認証に先立って生成されることに注意が必要です。 鍵が生成されると、2台のマシン間を移動するすべてのパケットは、秘密鍵によって暗号化されなければなりません。
AES (Advanced Encryption Standard)、CAST128、Blowfishなど、さまざまな対称型暗号が存在しますが、これらに限定されるものではありません。 セキュリティで保護された接続を確立する前に、クライアントとホストは、サポートされているサイファーのリストを優先順に公開することで、どの暗号を使用するかを決定します。
例えば、2台のUbuntu 14.04 LTSマシンがSSHで通信する場合、デフォルトの暗号としてaes128-ctrが使用されます。
非対称暗号
対称暗号とは異なり、非対称暗号は暗号化と復号化に2つの別々の鍵を使用します。 この2つの鍵を公開鍵と秘密鍵と呼びます。
公開鍵は、その名のとおり、すべての関係者に公開され、共有されます。
公開鍵は、その名の通り公開されており、すべての人に共有されています。機能的には秘密鍵と密接な関係にありますが、公開鍵から秘密鍵を数学的に計算することはできません。 2つの鍵の関係は非常に複雑で、あるマシンの公開鍵で暗号化されたメッセージは、同じマシンの秘密鍵でしか復号化できません。
秘密鍵は秘密のままでなければなりません。つまり、接続を安全にするためには、第三者に知られてはならないのです。
秘密鍵は秘密のままでなければなりません。つまり、接続を保護するためには、第三者に秘密鍵を知られてはならないのです。
一般的な認識とは異なり、非対称暗号化は SSH セッション全体の暗号化には使用されません。
一般的な認識とは異なり、非対称暗号化は SSH セッション全体の暗号化には使用されず、対称暗号化の鍵交換アルゴリズムでのみ使用されます。
安全な対称性通信が確立されると、サーバーはクライアントの公開鍵を使ってチャレンジを生成し、それをクライアントに送信して認証を行います。 クライアントがメッセージの解読に成功すれば、そのクライアントが接続に必要な秘密鍵を持っていることになります。 その後、SSH セッションが開始されます。
ハッシュ
一方向ハッシュは、Secure Shell 接続で使用されるもうひとつの暗号の形式です。 一方向ハッシュ関数は、決して復号化されることがないという意味で、上記の2つの暗号化方式とは異なります。 ハッシュ関数は、入力ごとに一定の長さの一意の値を生成します。
与えられた入力から暗号ハッシュを生成するのは簡単ですが、ハッシュから入力を生成するのは不可能です。
SSHはメッセージの真正性を検証するためにハッシュを使います。 これには HMAC (Hash-based Message Authentication Codes) を使います。
対称的な暗号化アルゴリズムを選択している間に、適切なメッセージ認証アルゴリズムも選択します。
送信される各メッセージにはMACが含まれていなければなりません。MACは、対称鍵、パケットのシーケンス番号、およびメッセージの内容を使って計算されます。
これらの暗号化技術を用いたSSHの仕組み
SSHの仕組みは、クライアント・サーバーモデルを利用して、遠隔地にある2つのシステムの認証と、それらの間でやり取りされるデータの暗号化を可能にします。 ホスト(サーバー)は、ポート22(またはSSHに割り当てられた他のポート)で、入ってくる接続を待ちます。
クライアントは SSH 接続を開始するために、サーバとの TCP ハンドシェイクを開始し、安全な対称接続を確保し、サーバが表示する ID が以前の記録 (通常は RSA キーストアファイルに記録されている) と一致するかどうかを検証し、接続を認証するために必要なユーザ資格を提示しなければなりません。
接続を確立するには2つの段階があります。まず、両方のシステムが今後の通信を保護するための暗号化規格に合意する必要があり、次に、ユーザーが自分自身を認証する必要があります。
セッション 暗号化交渉
クライアントがTCP経由でサーバーに接続しようとすると、サーバーはサポートしている暗号化プロトコルとそれぞれのバージョンを提示します。 クライアントがプロトコルとバージョンの類似した組み合わせを持っている場合は、合意に達し、受け入れられたプロトコルで接続が開始されます。 サーバはまた、クライアントがホストの信頼性を確認するために使用できる非対称公開鍵を使用します。
これが確立されると、2つの当事者はDiffie-Hellman Key Exchange Algorithmと呼ばれるアルゴリズムを使用して対称鍵を作成します。
このアルゴリズムは、非常に基本的なレベルでどのように機能するかを説明します。
- クライアントとサーバーの両方が非常に大きな素数に同意しますが、この素数にはもちろん共通の要素はありません。
- 次に、2 つの当事者は共通の暗号化メカニズムに合意し、特定のアルゴリズム方法でシード値を操作して別の値のセットを生成します。 これらのメカニズムは、暗号化ジェネレーターとも呼ばれ、シードに対して大きな操作を行います。
- 双方の当事者が独立して別の素数を生成します。
- 双方が独立して別の素数を生成し、これを相互作用のための秘密のプライベート キーとして使用します。
- この新しく生成されたプライベート キーと、共有番号および暗号化アルゴリズム (AES など) を使用して公開キーを計算し、相手のコンピュータに配布します。
- その後、当事者は個人のプライベート キー、相手のマシンの共有公開キー、および元の素数を使用して、最終的な共有キーを作成します。 この鍵は双方のコンピュータで独立して計算されますが、双方で同じ暗号鍵を作成します。
- これで双方が共有鍵を持つことになり、SSHセッション全体を対称的に暗号化することができます。
安全な対称暗号化セッションが確立されたら、ユーザーを認証する必要があります。
ユーザーの認証
ユーザーがサーバーへのアクセスを許可される前の最終段階は、ユーザーの認証です。 このために、ほとんどの SSH ユーザーはパスワードを使用します。 ユーザーは、ユーザー名とパスワードの入力を求められます。
パスワードは暗号化されていますが、安全な接続のためにパスワードを使用することはお勧めできません。 これは、多くのボットが、簡単なパスワードやデフォルトのパスワードを単純にブルートフォースして、あなたのアカウントへのアクセスを可能にするからです。
これは、パスワードを入力することなくユーザーを認証するために使用される非対称鍵のセットです。
結論
SSHの仕組みを深く理解することは、ユーザーがこの技術のセキュリティ面を理解するのに役立ちます。 ほとんどの人は、このプロセスを非常に複雑で理解できないものだと考えていますが、多くの人が考えているよりもずっとシンプルです。 コンピュータがハッシュを計算してユーザを認証するのにどれくらいの時間がかかるのかというと、それは1秒もかからないのです。
願わくば、この SSH チュートリアルによって、異なる技術を組み合わせて、それぞれのメカニズムが非常に重要な役割を果たす強固なシステムを構築する方法を理解していただきたいと思います。
その他の Linux チュートリアルについては、VPS チュートリアル セクションをご覧ください。
この投稿の最終更新日: 2020年6月16日 4:37 am