3

私は暗号化が初めてです。対称アルゴリズムと非対称アルゴリズムはそれぞれ 1 つと 2 つの暗号化キーを使用することを読みました。これらの鍵は安全な場所に保管する必要があります。しかし、web を検索して asp.net で暗号化を行う方法についてのチュートリアルを見つけたところ、何か奇妙なことがわかりました。たとえば、このチュートリアル

データを暗号化または復号化するときに、公開鍵または秘密鍵が保存または提供されることはありません。理解できません 。

私が抱えているもう1つの問題は、これまでに見つけたすべてのチュートリアルが、これらのコードとは何か、なぜ使用されるのかについての説明のないコードであることです. 提案された優れたチュートリアルに感謝します。

4

1 に答える 1

6

RSACryptoServiceProvider コンストラクターから:

デフォルトのキーが見つからない場合は、新しいキーが作成されます。

このコンストラクターは、セッション キーを暗号化するのに適した Exchange キー ペアを作成し、セッション キーを安全に格納して他のユーザーと交換できるようにします。生成されたキーは、アンマネージ Microsoft Cryptographic API (CAPI) で使用される AT_KEYEXCHANGE 値を使用して生成されたキーに対応します。

したがって、既に作成されたキー ペアが見つからない場合は、新しいキー ペアを生成するだけです。セッションベースのデータ以外には使用しないでください。

 

少し背景 (Windows を使用していると仮定します)、非対称キー ペアは証明書に関連付けられています。これらの証明書は、非対称キーを信頼するために使用するものです。すべての証明書は、認証局 (非対称鍵を発行する認証局) によって署名できます。認証局を信頼する場合は、その認証局によって署名された証明書に属する非対称鍵を信頼します。これらの証明書はすべて、「証明書ストア」、別名「キー ストア」(Java)、「キー リング」(Mac) に保存されます。

を実行すると、証明書を表示できますStart > Run > certmgr.msc。証明書は [個人] > [証明書] の下にあります。開いてCertificate Pathタブに移動すると、認証局までの証明書チェーンが表示されます。認証局に属するその「ルート」証明書がTrusted Root Certification Authorities > Certificatesストアで見つかった場合、その証明書は有効で信頼できると見なされます。

ユーザーのために何かを暗号化したい場合は、そのユーザーの証明書ストアに移動し、暗号化証明書を引き出す必要があります。これを行うには、「現在のユーザー」のキー ストアを開き、そこにあるすべての証明書を繰り返し処理し、「キーの暗号化」のキー使用法を持つものを選択します。彼は使いたい。

サービス アカウントを使用して何かを暗号化する場合 (たとえば、Web サーバーの場合)、「ローカル マシン」キー ストアにある証明書を使用し、証明書に関連付けられた秘密鍵への読み取りアクセスのみをサービス アカウントに許可する必要があります。使用したい。

これは、 X509Store Classを使用して実行できます。次に例を示します。

X509Store certificateStore = new X509Store("MY", StoreLocation.CurrentUser);
X509Certificate2Collection allCertificates = certificateStore.Certificates;
//Iterate through all certificates

「MY」は個人証明書を表し、残りはここで見つけることができます。CurrentUser はユーザー キーを表し、もう 1 つのオプションは LocalMachine です。

使用する証明書を取得したら、対称キーと組み合わせて、暗号化に公開キーを使用し、復号化に秘密キーを使用する必要があります。したがって、暗号化したい大量のデータがある場合は、次のようにします。

  1. 証明書を取得する
  2. 証明書から公開鍵を引き出す
  3. 対称キー (AES) を生成する
  4. 対称鍵でデータを暗号化する
  5. 対称鍵を公開鍵で暗号化する
  6. 暗号化に使用した証明書の識別子 (シリアル番号) と共に、暗号化された対称キーを暗号化されたデータと共に保存します。

復号化するときは、次のことを行う必要があります。

  1. 暗号化されたデータからシリアル番号を読み取る
  2. そのシリアル番号を使用して、キー ストアから証明書をプルします。
  3. その証明書から秘密鍵を引き出す
  4. その秘密鍵で対称鍵を復号化する
  5. その対称鍵でデータを復号化する
  6. データを使用する

これを実現するコード サンプルがたくさんありますので、ご覧になりたい場合は、どのセクションでサポートが必要かお知らせください。

それはおそらく少し紛らわしいので、明確にしたいことを教えてください。

于 2012-06-01T15:07:02.953 に答える