2017-09-26 11 views
1

私はDataProtectorに関する.netにはかなり新しく、質問がありました。.NetのDataProtection暗号化の長さを短縮しますか?

設定なしでDataProtector.Protectを使用すると、結果として得られる暗号化がAPIに渡すには時間がかかりすぎるため、設定方法(here)を使用すると役立つのではないかと疑問に思っていましたか?私は、データを保護するために必要なクラスで、次を試してみました:

var serviceCollection = new ServiceCollection(); 
      serviceCollection.AddDataProtection() 
       .UseCustomCryptographicAlgorithms(new ManagedAuthenticatedEncryptionSettings() 
       { 
        // a type that subclasses SymmetricAlgorithm 
        EncryptionAlgorithmType = typeof(Aes), 

        // specified in bits 
        EncryptionAlgorithmKeySize = 128, 

        // a type that subclasses KeyedHashAlgorithm 
        ValidationAlgorithmType = typeof(HMACSHA256) 
       }); 

      var services = serviceCollection.BuildServiceProvider(); 
      _protector = services.GetDataProtector("MyClass.v1"); 

var protect = _protector.Protect(JsonConvert.SerializeObject(myData)); 

はしかしさえ最小128にデフォルトの256からEncryptionAlgorithmKeySizeを変更した後、「保護」も同じ長さの暗号化が得られました。構成が機能していないとか、構成が暗号化の長さに影響しないと思うようになります。

これが正しい方法で行われているか、暗号化の長さを減らすためのより良い方法があるかどうかは誰にも分かりますか?

たとえば、単純な9文字の文字列は134文字に暗号化されます。

ご協力いただきありがとうございます!

+0

これは本当に悪い考えです。なぜ暗号化されたデータをマシンから転送したいのですが、そのAPIを限られた長さに送信するのはなぜですか? – CodeCaster

+0

@CodeCasterデータには偽造防止トークンが含まれていますが、APIでは500文字しか送受信できないため、暗号化の長さを制限する設定方法があるかどうかは不思議です。 –

答えて

0

DPAPIは、データを送信するためのデータではなく、データで保護することを意味します。

Ryan Dobbsは正しいですか?以下では、StackOverflowが受け入れられない回答をどのように並べ替えるかを理解できません...)、暗号化を弱めてペイロードを小さくすることは非常に悪い考えです。これに対処する正しい方法は、接続(TLSスタイルのSSL)を確保することです。次に、プレーンテキストを送信するか、送信者と受信者の両方がアクセスできる適切に暗号化されたペイロードをドロップします(Ryanが示唆するように)。

しかし、より直接質問に答えるために、ペイロードサイズはハッシュ関数によって制御されます。暗号化キーのサイズは、暗号化アルゴリズムの暗号の複雑さ、つまり暗号化がどれほど難しいかだけを示します。 HMACSHA256という部分は、256ビットの出力を生成するSHA-256ハッシュです。

MD5は128ビットですが、一般的には安全ではありません(チェックサムにのみ有効です)。

ドキュメントには、キーサイズとハッシュサイズが同じでなければならないと記載されているため、SHAで128ビットには移動できません。使用可能な最短SHAは160ビットである古いSHA1アルゴリズム(HMACSHA1)ですが、256ビット未満のものは比較的早く安全でないことが予想されます。 SHA2アルゴリズムは、HMACSHA256HMACSHA512を生成します。

関連する問題