2017-01-02 3 views
1

、マイクロソフトは次のリンクで説明しMachineKey.Protect「は、それに署名を暗号化することにより、指定されたデータを保護します」ということ:https://msdn.microsoft.com/en-us/library/system.web.security.machinekey.protect(v=vs.110).aspxMachineKey.Protectの仕組みは?この方法の公式の説明では

それが何を意味するのでしょうか?暗号化、署名、またはその両方をどのように決定するのですか?

答えて

1

MSDN documentationまたは.NET Web Development and Tools Blogのどちらも、この動作の仕方を正確には説明していませんが、this articleはMachineKey APIが両方の操作(より安全です)を行っていると言います。

.NET参照ソースで少し深くなりましたが、明らかにこれは真です。コードのこの部分チェックアウト:

using (ICryptoTransform encryptor = encryptionAlgorithm.CreateEncryptor()) { 
    using (CryptoStream cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write)) { 
     cryptoStream.Write(clearData, 0, clearData.Length); 
     cryptoStream.FlushFinalBlock(); 

     // At this point: 
     // memStream := IV || Enc(Kenc, IV, clearData) 

     // These KeyedHashAlgorithm instances are single-use; we wrap it in a 'using' block. 
     using (KeyedHashAlgorithm signingAlgorithm = _cryptoAlgorithmFactory.GetValidationAlgorithm()) { 
      // Initialize the algorithm with the specified key 
      signingAlgorithm.Key = _validationKey.GetKeyMaterial(); 

      // Compute the signature 
      byte[] signature = signingAlgorithm.ComputeHash(memStream.GetBuffer(), 0, (int)memStream.Length); 

      // At this point: 
      // memStream := IV || Enc(Kenc, IV, clearData) 
      // signature := Sign(Kval, IV || Enc(Kenc, IV, clearData)) 

      // Append the signature to the encrypted payload 
      memStream.Write(signature, 0, signature.Length); 

      // At this point: 
      // memStream := IV || Enc(Kenc, IV, clearData) || Sign(Kval, IV || Enc(Kenc, IV, clearData)) 

      // Algorithm complete 
      byte[] protectedData = memStream.ToArray(); 
      return protectedData; 
     } 
    } 
} 

をこれは、あなたがDataProtector

を設定しなかった場合のデフォルトの暗号化プロバイダであるNetFXCryptoService、からです
0

同じページの備考セクション

の最初の段落から、この方法では、エンコード平文データを暗号化する必要があるかどうかを指定するために、発信者を必要とする方法、署名、またはその両方を優先します。 Protectメソッドは適切な操作を実行し、データを安全に保護します。言おうとしている何

は、あなたがそれをProtectが何をするかの動作変更されますpurposesパラメータに渡されたものに応じています。どの目的がどのような行動をするのかを調べるには、さらにドキュメンテーションを調べる必要があります。どの文字列があなたのサイトに使用しているProtected Configuration Providerに依存しているか

関連する問題