デジタル署名とは何ですか? 公開鍵と秘密鍵とは何ですか

デジタル署名とは何ですか? 公開鍵と秘密鍵とは何ですか


デジタル署名

ここでは、Ruan Yifeng のデジタル署名の説明を参照してください。詳細については、「デジタル署名とは何ですか?」を参照してください。- Ruan Yifeng のウェブログ

1. ボブは 2 つの鍵を持っています。1 つは公開鍵で、もう 1 つは秘密鍵です。

2. ボブは公開鍵を友人のパティ、ダグ、スーザンにそれぞれ渡します。

3. スーザンはボブに秘密の手紙を書いています。彼女は書き終えた後、秘密保持の効果を得るためにボブの公開鍵を使用してそれを暗号化しました。

4. ボブは手紙を受け取った後、秘密キーを使用してそれを復号化し、手紙の内容を確認します。ここで強調したいのは、ボブの秘密鍵が漏洩しない限り、手紙は安全であり、たとえ他人の手に渡っても解読できないということです。

5. ボブはスーザンに返事を書き、「デジタル署名」を使用することにしました。書き終えた後、彼はまずハッシュ関数を使用して手紙のダイジェストを生成しました。

6. 次に、ボブは秘密鍵を使用してこのダイジェストを暗号化し、「デジタル署名」(署名) を生成します。

7. ボブはこの署名を手紙に添付し、一緒にスーザンに送ります。

8. 手紙を受け取った後、スーザンはデジタル署名を削除し、ボブの公開鍵で復号し、手紙の概要を取得します。これは、その手紙が確かにボブによって送信されたことを証明します。

9. 次に、スーザンはレター自体にハッシュ関数を使用し、その結果を前のステップで取得した概要と比較します。2 つが一致すれば、文字が改ざんされていないことが証明されます。

10. 複雑な問題が発生します。ダグは、スーザンのコンピュータを密かに使用し、自分の公開鍵をボブの公開鍵と交換することで、スーザンをだまそうとしました。この時点で、スーザンは実際にはダグの公開鍵を持っていますが、それがボブのものだと考えています。したがって、ダグはボブのふりをして、自分の秘密鍵を使用して「デジタル署名」を作成し、スーザンに手紙を書き、偽のボブの公開鍵で復号化するようスーザンに依頼することができます。

11. その後、スーザンは何かがおかしいと感じ、公開鍵が本当にボブのものかどうか判断できないことに気づきました。彼女は方法を思いつき、公開鍵を認証するために「認証局」(略して CA)に行くようにボブに依頼しました。証明書センターは、独自の秘密キーを使用してボブの公開キーといくつかの関連情報を暗号化し、「デジタル証明書」を生成します。

12. ボブはデジタル証明書を取得したら、安心できます。将来スーザンに手紙を書く場合は、手紙に署名するときにデジタル証明書を添付するだけで済みます。

13. スーザンは手紙を受け取った後、CA の公開キーを使用してデジタル証明書のロックを解除し、ボブの実際の公開キーを取得して、「デジタル署名」が本当にボブによって署名されたかどうかを証明できます。

14. 次に、「デジタル証明書」の適用例: https プロトコルを見てみましょう。このプロトコルは主に Web 暗号化に使用されます。

15. まず、クライアントは暗号化されたリクエストをサーバーに送信します。

16. サーバーは、Web ページを独自の秘密キーで暗号化した後、独自のデジタル証明書とともにクライアントに送信します。

17. クライアント (ブラウザ) の「証明書マネージャー」には、「信頼されたルート証明機関」のリストがあります。クライアントは、このリストに従って、デジタル証明書のロックを解除するための公開鍵がリストにあるかどうかを確認します。

18. 電子証明書に記録されている URL が閲覧中の URL と一致しない場合、この証明書が不正に使用されている可能性があり、ブラウザから警告が表示されます。

19. デジタル証明書が信頼できる機関によって発行されたものでない場合、ブラウザは別の警告を発行します。

20. デジタル証明書が信頼できる場合、クライアントは証明書内のサーバーの公開キーを使用して情報を暗号化し、暗号化された情報をサーバーと交換できます。


公開鍵と秘密鍵

デジタル証明書

デジタル証明書は、インターネット上で個人の身元を確認する手段を提供する信頼できる電子文書です。自動車の運転免許証や日常生活証明書と同じような役割を果たします。これは権威ある組織である CA Certificate Authority (認証局) センターによって発行され、人々はインターネット通信においてお互いの身元を識別するためにそれを使用できます。つまり、デジタル証明書を核とした暗号化技術は、ネットワーク上で送信される情報の暗号化と復号化、デジタル署名と署名検証を行うことができ、オンラインで送信される情報の機密性と完全性、取引主体の身元の信頼性、署名された情報の否認の防止を保証します。もちろん、デジタル証明書の認証プロセスでは、権威があり、公平で信頼できる第三者としてのデジタル証明書認証センター (CA) の役割が重要です。デジタル証明書も一意で信頼できるものでなければなりません。

ブラウザで証明書を使用する

私たちが訪問するほとんどの Web サイトには、対応する証明書があります。


ここに画像の説明を挿入

この証明書はブラウザの設定で見つけることができます (ここでは Chrome)

信頼できないものとして設定すると、対応する Web サイトにアクセスしたときに、上記の理由によりその Web サイトが安全ではないことを示す警告が表示されます。

ここに画像の説明を挿入
ここに画像の説明を挿入

証明書をインポートして、安全だと思われるが証明書がインポートされていない特定の Web サイトにアクセスすることもできます。

ここに画像の説明を挿入

秘密鍵アルゴリズム:

秘密キー暗号化アルゴリズムこのアルゴリズムの復号化キーと暗号化キーは同じであるため、対称暗号化アルゴリズムとも呼ばれます。また、暗号化と復号化には同じ鍵が使用されるため、この鍵を公開することはできません。
秘密鍵は、鍵がある限りロックを解除できるというものです。

公開鍵アルゴリズム:

  • 公開鍵と秘密鍵はペアで提供されます
  • 公開鍵を公開鍵、自分だけが知っている鍵を秘密鍵といいます。
  • 公開キーで暗号化されたデータは、対応する秘密キーでのみ復号化できます
  • 秘密キーで暗号化されたデータは、対応する公開キーでのみ復号化できます
  • 公開キーで復号化できる場合は、対応する秘密キーで暗号化する必要があります。
  • 秘密キーで復号化できる場合は、対応する公開キーで暗号化する必要があります。

公開キーは、キーを持っていてもロックを解除できない可能性があることを意味し、ロックを解除するには対応するロック解除キーを使用する必要があるため、難易度が高くなります。

秘密鍵と公開鍵の違い:

S.NO 秘密鍵 公開鍵
1 秘密鍵は公開鍵よりも高速です 公開鍵は秘密鍵より遅い
2 メッセージの暗号化と復号化には同じキーとアルゴリズムが使用されます 公開キー暗号化では、暗号化用と復号化用の 2 つのキーが使用されます。
3 秘密キー暗号化では、キーは秘密に保たれます。 公開キー暗号化では、2 つのキーのうち 1 つが秘密にされます。
4 秘密鍵と呼ばれる鍵は 1 つだけであるため、秘密鍵は対称的です。 公開キーには秘密キーと公開キーの 2 種類があるため、非対称です。
5 このタイプの暗号化では、送信者と受信者が同じ秘密鍵を共有する必要があります。 このタイプの暗号化では、送信者と受信者が同じ秘密キーを共有する必要はありません。
6 この暗号化では、キーは秘密です このタイプの暗号化では、公開キーを公開し、秘密キーを秘密にすることができます。

電子証明書の形式

サーバーやサーバーのバージョンに応じて、異なる証明書形式を使用する必要があります。市場で主流のサーバーの場合、おそらく次の形式があります。

  • .DER .CER、ファイルはバイナリ形式であり、秘密キーではなく証明書のみを保存します。
  • .PEM は通常テキスト形式で、証明書と秘密キーを保存できます。
  • .CRT は、.DER 形式と同様にバイナリ形式またはテキスト形式にすることができ、秘密キーは保存されません。
  • .PFX .P12 はバイナリ形式で、証明書と秘密キーの両方が含まれており、通常はパスワードで保護されています。
  • .JKS はバイナリ形式で、証明書と秘密キーの両方が含まれており、通常はパスワードで保護されています。

この形式はバイナリ ファイル コンテンツであり、Java サーバーと Windows サーバーはこのエンコード形式を好みます。

OpenSSL ビュー

openssl x509 -in certificate.der -inform der -text -noout

PEM に変換します。

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

PEM

プライバシー強化メールは通常テキスト形式で、-----BEGIN...で始まり で-----END...終わります。中央のコンテンツは BASE64 でエンコードされています。この形式では証明書と秘密キーを保存できますが、証明書と秘密キーを区別するために、PEM 形式の秘密キーのサフィックスを .key に変更することもあります。詳細については、ファイルの内容を確認できます。

この形式は、Apache および Nginx サーバーで一般的に使用されます。

OpenSSL ビュー:

openssl x509 -in certificate.pem -text -noout

DER に変換:

openssl x509 -in cert.crt -outform der -out cert.der

ブラウン管

証明書の略称は、PEM エンコード形式または DER エンコード形式の場合があります。視聴方法は最初の2つの形式を参照してください。

PFX

PKCS#12 の前身であるこの形式はバイナリ形式であり、証明書と秘密キーは PFX ファイルに保存されます。通常、Windows 上の IIS サーバーに使用されます。フォーマットされたファイルには通常、秘密キーのセキュリティを確保するためのパスワードが付いています。

OpenSSL ビュー:

openssl pkcs12 -in for-iis.pfx

PEM に変換します。

openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes

JKS

Java Key Storage は、JAVA の独自形式であることが容易にわかり、keytoolJAVA で呼ばれるツールを使用して形式を変換できます。通常、Tomcat サーバーに使用されます。

keytool -import -noprompt -keystore cacerts -storepasschangeit -keypasschangeit -alias elasticsearch -file ca.crt;


ローカルで証明書ケースを作成する

証明書を生成する

#!/bin/bash
read -p "请输入服务器ip地址:" serverIp
echo '服务器ip为: $serverIp'

echo '------------------------------------'
echo '创建根证书RSA私钥:'
echo '此处需要两次输入密码,请务必记住该密码,在后面步骤会用到'
bash -c "openssl genrsa -aes256 -out ca-key.pem 4096"

echo '------------------------------------'
echo '创建CA证书:'
echo '该步骤以上一步生成的密钥创建证书,也就是自签证书,也可从第三方CA机构签发'
bash -c "openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem"

echo '------------------------------------'
echo '创建服务器私钥:'
bash -c "openssl genrsa -out server-key.pem 4096"

echo '------------------------------------'
echo '创建服务器签名请求证书文件:'
bash -c "openssl req -subj '/CN=$serverIp' -sha256 -new -key server-key.pem -out server.csr"

echo '------------------------------------'
echo '创建extfile.cnf的配置文件'
echo subjectAltName = IP:$serverIp,IP:0.0.0.0 >> extfile.cnf \
echo extendedKeyUsage = serverAuth >> extfile.cnf

echo '------------------------------------'
echo '创建签名生效的服务器端证书文件:'
bash -c "openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf"

echo '------------------------------------'
echo '创建客户端私钥:'
bash -c "openssl genrsa -out key.pem 4096"

echo '------------------------------------'
echo '创建客户端签名请求证书文件:'
bash -c "openssl req -subj '/CN=client' -new -key key.pem -out client.csr"

echo '------------------------------------'
echo 'extfile.cnf文件中增加配置:'
echo extendedKeyUsage = clientAuth >> extfile.cnf

echo '------------------------------------'
echo '创建签名生效的客户端证书文件:'
bash -c "openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf"

echo '------------------------------------'
echo '删除无用文件:'
bash -c "rm -v client.csr server.csr"

echo '------------------------------------'
echo '为证书授权:'
bash -c "chmod -v 0400 ca-key.pem key.pem server-key.pem"
bash -c "chmod -v 0444 ca.pem server-cert.pem cert.pem"


echo '------------------------------------'
echo '证书有效期:'
bash -c "openssl x509 -in ca.pem -noout -dates"

Javaインポート証明書

Java証明書ストアはJavaルート ディレクトリ内のディレクトリにありますlib/security
以下のコマンドの 、 は、ca.crtそれぞれcacertsインポートする証明書と証明書ストアのパスに対応します。以下のコマンドは相対パスで記述されているため、ディレクトリca.crt内に存在し、ファイル自体が存在する必要があります。securitycacerts

keytool -import -noprompt -keystore cacerts -storepass changeit -keypass changeit -alias elasticsearch -file ca.crt;

HTTPS、SSL、TSL の簡単な説明

HTTPS(ハイパーテキスト転送プロトコルセキュア)

HTTPS (正式名称: Hypertext Transfer Protocol Secure [5] ) は、HTTP [1] に基づく通信暗号化と本人認証により通信プロセスの安全性を確保する、セキュリティを目的とした HTTP チャネルです。HTTPSはHTTPをベースにSSLを追加したもので、HTTPSのセキュリティ基盤はSSLであるため、暗号化の詳細な内容にはSSLが必要となります。HTTPS には、HTTP とは異なるデフォルト ポートと暗号化/認証層 (HTTP と TCP の間) があります。このシステムは、認証と暗号化された通信方法を提供します。これは、トランザクションの支払いなど、World Wide Web 上のセキュリティが重要な通信で広く使用されています。

SSL(トランスポート層セキュリティ)

SSL (Secure Socket Layer) は、Netscape によって初めて採用されたネットワーク セキュリティ プロトコルです。伝送通信プロトコル(TCP/IP)上に公開鍵技術を利用して実装されたセキュリティプロトコルです。SSL はさまざまなタイプのネットワークを幅広くサポートし、公開キー技術を使用する 3 つの基本的なセキュリティ サービスを提供します。

SSLハンドシェイクのプロセス

SSL ハンドシェイクには次のイベントが発生します。

  • クライアントとサーバーは X を交換します。509 証明書を使用して、双方が相互に確認できるようにします。このプロセス中に、プルーフ チェーン全体を交換することも、基になる一部のプルーフのみを交換することもできます。証明書の検証には、有効期限の確認と証明書の署名機関の検証が含まれます。
  • クライアント コンピュータは、情報の暗号化と MAC 計算に使用されるキーのセットをランダムに生成します。これらのキーは、サーバーに送信される前にサーバーの公開キーで暗号化されます。サーバーからクライアントおよびクライアントからサーバーの通信には、合計 4 つのキーがあります。
  • 情報暗号化アルゴリズム(暗号化)とハッシュ関数(情報の完全性確保)を併用します。Netscape の SSL 実装は次のとおりです。クライアントはサポートするすべてのアルゴリズムのリストを提供し、サーバーは最も効果的であると思われる暗号を選択します。サーバー管理者は、特定のパスワードを使用または禁止できます。

TLS(トランスポート層セキュリティ)

Transport Layer Security (TLS) は、2 つの通信アプリケーション間の機密性とデータの整合性を提供するために使用されます。
このプロトコルは、TLS レコード プロトコル (TLS レコード) と TLS ハンドシェイク プロトコル (TLS ハンドシェイク) の 2 つの層で構成されます。

TLSハンドシェイクプロセス

クライアントとサーバーが TLS プロトコルの使用に同意すると、ハンドシェイク プロセスを使用してステートフル接続をネゴシエートし、データを転送します。ハンドシェイクを通じて、クライアントとサーバーは安全な接続を作成するためのさまざまなパラメーターをネゴシエートします。

  • クライアントが TLS プロトコルをサポートし、安全な接続の作成を要求し、サポートされている暗号の組み合わせ (暗号化暗号アルゴリズムとハッシュ アルゴリズム) をリストするサーバーに接続すると、ハンドシェイクが開始されます。

  • サーバーはこのリストから暗号化アルゴリズムとハッシュ アルゴリズムを決定し、クライアントに通知します。

  • サーバーはデジタル証明書を送り返します。デジタル証明書には通常、サーバーの名前、信頼された認証局 (CA)、およびサーバーの公開キーが含まれます。

  • クライアントは、受け取ったサーバー証明書の有効性を検証します。

  • 安全な接続のためのセッション キーを生成するために、クライアントはランダムに生成されたキーをサーバーの公開キーで暗号化し、サーバーに送信します。サーバーだけが独自の秘密キーでそれを復号化できます。

  • 乱数を使用して、2 者が暗号化と復号化用の対称キーを生成します。これは TLS プロトコルのハンドシェイクであり、ハンドシェイク後の接続は、接続が閉じられるまで安全です。上記の手順のいずれかが失敗すると、TLS ハンドシェイク プロセスが失敗し、すべての接続がドロップされます。


参考

  1. 秘密鍵と公開鍵の違い | Geek チュートリアル

  2. 公開鍵と秘密鍵を理解する

  3. デジタル署名とは何ですか? - Ruan Yifeng のウェブログ

  4. 一般的な SSL 証明書形式、PEM、CER、JKS、PKCS12

  5. /source/index.html

  6. セキュア ソケット レイヤー - ウィキペディア

  7. TLS_百度百科事典

おすすめ

転載: blog.csdn.net/HHoao/article/details/128497596