機械翻訳について

公開キー暗号化とは

公開キー暗号化は、セキュアでないパブリック・ネットワーク上でセキュアな通信を可能にし、ネットワーク接続の相手側のエンティティのアイデンティティを検証するために使用される暗号化技術です。 公開キー暗号化は、非対称鍵ペアを確立することによって機能します。 一方のキーで暗号化されたデータは、もう一方のキーで復号化されます。 一方のキーは秘密のまま保たれ、もう一方のキーは公開されます。 公開キーを使用してデータを復号化するユーザーは、秘密キーにアクセスできるユーザーがデータを暗号化したことを確認できます。 同様に、公開キーを使用してデータを暗号化するユーザーは、秘密キーにアクセスできるユーザーのみがデータを復号化できることを確認できます。

どちらのキーも、それ自体ではデータの送信者のアイデンティティを確立できません。 これを実現するために、通常、公開キーは、対応する秘密キーの所有者に属していることを証明するために署名されます。 この署名プロセスは、多くの場合、認証局(CA)と呼ばれる信頼できるサードパーティによって実行されます。 公開キーと秘密キーのペアの作成者は、関連する識別情報とともに公開キーを証明書署名リクエストの形式でCAに送信します。 CAは独自の秘密キーを使用してデジタル証明書に署名します。これには、サブジェクトの公開キーのエンコードされたバージョン、サブジェクトと発行者に関する情報、有効期間、および使用中の暗号化アルゴリズムの詳細が含まれます。 この証明書は、公開することも、サブジェクトと公開キーの間の関連付けを検証する必要がある任意のパーティに提供することもできます。

CAを信頼するクライアントは、証明書に格納されている公開キーも信頼できます。 CA証明書を使用して証明書シグネチャを検証すると、公開キーが生成され、この公開キーを使用して、データを機密に保ち、チャネルを通過するデータの発信者のアイデンティティを確立するために使用できるセキュアな通信チャネルを作成できます。

インターネットでは、エンティティの代理で証明書を発行するために、ルートCAに信頼されている多くの最上位レベルまたはルートの公開CAおよび中間CAが存在します。 中間CAは、証明書チェーンを返します。証明書チェーンでは、ルートCAに至るまでのチェーンの各証明書がチェーンの前にある証明書の署名者の公開キーを認証します。

CA証明書は、公開キーのアイデンティティおよび公開キーが有効とみなされる期間を確立するためにのみ使用されます。 証明書の有効期限が切れても、公開キーを使用して暗号化されたデータは、秘密キーによって復号化できます。 これは、通信が常にセキュアとみなされるためには、秘密キーを永久に安全な状態に保つ必要があることを意味します。 公開キー暗号化には、秘密キーの安全性維持を支援するために使用できるメカニズムも存在します。 このメカニズムは、Perfect Forward Secrecy (PFS)と呼ばれ、キー交換アルゴリズムを使用して、データを暗号化するために対称暗号で使用できるランダムな使い捨てのセッション・キーを安全に認識します。 この方法の利点は、セッション・キーの安全性が損なわれた場合、その特定の通信セッションの通信のみが公開されることです。 また、秘密キーの安全性が損なわれた場合、実際の通信セッションのすべてが自動的に公開されることもありません。

PFSのもう1つの利点は、非対称キー・ペアとCA証明書を使用して各情報を復号化および検証する計算コストが高く低速なプロセスを簡素化することです。 実際には、公開キーを復号化してCA証明書に照らして検証し、それを使用して通信セッション内のデータを復号化するプロセスは、PFSが確立されるまでのセッションの開始時にのみ実行されます。 ランダム・セッション・キーを作成して共有するアルゴリズムは、通常、Diffie-Hellmanキー交換です。 その後、セッション・キーは対称暗号化を使用して、セッションの残りを通じてデータの暗号化と復号化をより高速に実行します。 この目的のために最もよく使用される暗号はAESで、ハードウェアを利用して、暗号文での暗号化と通信を平文との通信とほぼ同じ速さで実行できます。

通信チャネルの処理、およびクライアント側とサーバー側が非対称暗号化から対称暗号化に切り替わるこのネゴシエーションは、すべてTransport Layer Security (TLS)またはSecure Sockets Layer (SSL)暗号化プロトコルを使用して実現されます。

OpenSSL、GnuTLSおよびネットワーク・セキュリティ・サービス(NSS)は、TLSおよびSSLプロトコルのオープン・ソース実装を提供します。 OpenJDKパッケージに付属するkeytoolコマンドを使用して、Javaキーストアを管理することもできます。これは、多くの場合、Javaベースのアプリケーションで使用されます。 信頼の階層が組織のイントラネットに限定されている場合は、これらの実装を使用してルート証明書を生成し、そのドメインのCAを設定できます。 ただし、組織、ブラウザ、LDAP、またはIPA認証の各システムにこの自己署名ルート証明書をインストールしないかぎり、証明書を使用するその他のソフトウェアでは、信頼できない潜在的な関係がユーザーに求められます。

ノート:

ルートCAまたは中間レベルのCAによって検証されたドメインの証明書を使用する場合は、適切なルート証明書が各システムにすでに存在するため、ルート証明書を配布する必要はありません。

一般に、TLS/SSL証明書は1年後に期限が切れます。 ルート証明書など、Webブラウザで配布され、ルートCAおよび中間CAによって発行されるその他の証明書は、5から10年後に期限が切れます。 アプリケーションで証明書の期限切れ警告が表示されないようにするには、期限切れになる前にTLS/SSL証明書を交換するよう計画を立ててください。 ルート証明書の場合は、通常、証明書が期限切れになる前にソフトウェアを更新します。

CAに署名証明書をリクエストする際、そのCAの公開キーを認証するルート証明書または証明書チェーンがシステムに存在しない場合、CAから信頼できるルート証明書を取得します。 中間者攻撃を防ぐには、ルート証明書をインポートする前にその信憑性を検証します。 証明書のフィンガープリントとCAによって発行されているフィンガープリントが一致することを確認します。

SSLとTLSについて

Secure Sockets Layer (SSL)とTransport Layer Security (TLS)はどちらも、サーバー・システムとクライアント・システム間のセキュアな接続と交換を保証する通信プロトコルです。 どちらのプロトコルも、ネットワーク通信を保護するための暗号化と認証を提供します。 ただし、SSLは古いテクノロジであり、TLSに置き換えられています。 TLSで使用される暗号化は、より複雑で、高度で、堅牢で、安全です。 TLSを使用した認証は高速で、アラート・メッセージングが改善されます。

基礎となるプロトコルにこの変更を加えても、OpenSSLプロジェクトは名前を維持しており、多くの場合、SSL用語はTLS機能を記述するために同じ意味で使用されます。 セキュアな通信のコンテキストでは、SSLはTLSプロトコルおよびTLS証明書を参照していると理解されるようになりました。 このドキュメントでのSSLの参照は、TLSのコンテキストで理解されることを意図しています。