.NET 4.5は多くの改善をもたらし、新しいProtectとUnprotect APIでASP.NETで暗号化を処理することができるようになり、さまざまな内部の変更が行われた。Levi Broderick氏は、連載の記事で、モチベーション、変更と互換性について説明する。
ASP.NETは、暗号化に2つの秘密ハッシュキーが必要になる–複合化キーとバリデーションキー–このペアを合わせてマシンキーと呼ぶ。マシンキーは、異なるコンポーネント間で再利用される。 Levi氏の最初の記事は、この.NET 4.0の設計が、ひとつのコンポーネントのセキュリティの問題が、システムの他のコンポーネントにはるかに大きな問題を引き起こすことを提示している。
同じようにMachineKey.EncodeとDecode APIは、開発者が暗号化に同じマシンキーを使うことができるようになっている。したがって開発者はさらにセキュリティ問題のカスケード効果を引き起こす可能性がある。
これらの懸念(とその他)は、Duong氏とRizo氏のIEEEの論文でハイライトされている主な問題の一部が残されている。
解決策として.NET 4.5は以下の変更を提供している -
- マシンキーへの変換は、現在まったく違っている –何ビットか変更されたマシンキーは、アプリケーションが実際に使用してキーを生成するキー定義関数で、キーから派生したキーとして使用される
- MACingと暗号化を組み合わせて、“protecting”というひとつのステップ呼び出しにまとめた新しいProtectとUnprotect API。EncodeとDecode APIは提供されているが、廃止予定である。
- さらに強い暗号化を使う他の利用者から暗号化APIの特定の利用者を分離することができる“目的(purpose)”パラメータを導入し、– 他のエリアで見つかったセキュリティ問題の影響を受けにくくなっている
これらの変更は、デフォルトのビヘイビアとして有効化されておらず、Web.configで明示的に有効にする必要がある(これはすべての新しいASP.NETプロジェクトで実施する)。これらすべての変更は、2つめの記事で詳細が説明されている。3つめの記事では、高度なシナリオと気にとめるべきいくつかの注意事項が書かれている。
注意点として、メンバーシッププロバイダのパスワードのハッシュではこの変更が処理されず別に処理される。