こんにちはこのトピックに関する私の経験を共有したいと思います。
Rutoken は、認証、情報セキュリティ、電子署名の分野におけるハードウェアおよびソフトウェア ソリューションです。 基本的に、これはユーザーがシステムにログインするために使用する認証データを保存できるフラッシュ ドライブです。
この例では、Rutoken EDS 2.0 が使用されています。
この Rutoken を使用するには、次のものが必要です
Windows の場合、ドライバーを XNUMX つインストールするだけで、必要なものがすべてインストールされ、OS が Rutoken を認識して操作できるようになります。
アプリケーションのクライアント部分は、rutoken プラグインを通じて rutoken と対話します。 これは、各ブラウザに個別にインストールされるプログラムです。 Windows の場合は、プラグインをダウンロードしてインストールするだけです。
これで、アプリケーションのクライアント側から Rutoken と対話できるようになりました。
この例では、チャレンジ/レスポンス方式を使用してシステムにユーザー認証アルゴリズムを実装するというアイデアについて説明します。
アイデアの本質は次のとおりです。
- クライアントは認証リクエストをサーバーに送信します。
- サーバーは、ランダムな文字列を送信することでクライアントからのリクエストに応答します。
- クライアントはこの文字列にランダムな 32 ビットを埋め込みます。
- クライアントは、受信した文字列に証明書を使用して署名します。
- クライアントは受信した暗号化メッセージをサーバーに送信します。
- サーバーは、暗号化されていない元のメッセージを受信して署名を検証します。
- サーバーは、受信した暗号化されていないメッセージから最後の 32 ビットを削除します。
- サーバーは、受信した結果を、承認を要求するときに送信されたメッセージと比較します。
- メッセージが同じであれば、認可は成功したとみなされます。
上記のアルゴリズムには証明書のようなものが存在します。 この例では、暗号理論を理解する必要があります。 ハブレには、
この例では、非対称暗号化アルゴリズムを使用します。 非対称アルゴリズムを実装するには、キー ペアと証明書が必要です。
キー ペアは、秘密キーと公開キーの XNUMX つの部分で構成されます。 秘密キーは、その名前が示すように、秘密である必要があります。 情報を復号化するためにそれを使用します。 公開キーは誰にでも配布できます。 このキーはデータの暗号化に使用されます。 したがって、どのユーザーも公開キーを使用してデータを暗号化できますが、この情報を復号化できるのは秘密キーの所有者だけです。
証明書は、証明書を所有するユーザーに関する情報と公開キーが含まれる電子文書です。 証明書を使用すると、ユーザーは任意のデータに署名してサーバーに送信でき、サーバーは署名を検証してデータを復号化できます。
証明書を使用してメッセージに正しく署名するには、メッセージを正しく作成する必要があります。 これを行うには、最初にキー ペアが Rutoken 上に作成され、次に証明書がこのキー ペアの公開キーにリンクされる必要があります。 証明書には Rutoken にある公開キーが正確に含まれている必要があります。これは重要です。 アプリケーションのクライアント側でキー ペアと証明書をただちに作成した場合、サーバーはどのようにしてこの暗号化されたメッセージを復号化できるでしょうか? 結局のところ、彼はキー ペアも証明書についてもまったく知りません。
このトピックをさらに深く掘り下げると、インターネット上で興味深い情報を見つけることができます。 私たちが明らかに信頼している特定の認証局が存在します。 これらの証明機関はユーザーに証明書を発行でき、これらの証明書をサーバーにインストールします。 この後、クライアントがこのサーバーにアクセスすると、まさにこの証明書が表示され、それが認証局によって発行されたことがわかります。これは、このサーバーが信頼できることを意味します。 すべてを正しく設定する方法については、インターネット上にもたくさんの情報があります。
問題に立ち返れば、解決策は明らかです。 何らかの方法で独自の認証センターを作成する必要があります。 ただし、その前に、認証センターがユーザーに証明書を発行する根拠を理解する必要があります。ユーザーは証明書について何も知らないからです。 (たとえば、彼の名、姓など) 証明書リクエストと呼ばれるものがあります。 この規格の詳細については、Wikipedia などを参照してください。
バージョン 1.7 - PKCS#10 を使用します。
Rutoken で証明書を生成するアルゴリズムを説明しましょう (オリジナルのソース:
- クライアント上でキーペアを作成し、それを Rutoken に保存します。 (保存は自動的に行われます)
- クライアント上で証明書リクエストを作成します。
- クライアントからこのリクエストをサーバーに送信します。
- サーバー上で証明書の要求を受信すると、認証局から証明書を発行します。
- この証明書をクライアントに送信します。
- Rutoken 証明書をクライアントに保存します。
- 証明書は、最初の手順で作成したキー ペアにバインドする必要があります。
これで、サーバー自体がクライアントに証明書を発行したため、サーバーがクライアントの署名をどのように復号化できるかが明らかになりました。
次のパートでは、本格的なオープンソース暗号ライブラリ openSSL に基づいて認証局を設定する方法を詳しく見ていきます。
出所: habr.com