近日中にGDPRの規制に照らして、私が働く会社は、暗号アルゴリズムをアップグレードし、以前よりも大幅に多くのデータを暗号化することを検討しています。これを世話するように任命された人物として、私はAES-256で古いCAST-128暗号化(私は暗号化と言いますが、ハッシュ化、塩分化されずに毎回同じ暗号化の結果になった)を置き換え、データを移行します。ただし、暗号化キーはアプリケーションではまだハードコードされており、逆アセンブラで数分以内に抽出可能です。DPAPI鍵の格納と復元
当社の製品はデスクトップアプリケーションであり、ほとんどのお客様が社内にインストールしています。彼らのほとんどは、独自のDBもホストしています。彼らは製品の全体をローカルに持っているので、鍵を確保することはかなり難しい作業のようです。
いくつかの調査の末、私は次のアプローチを採用することに決めました。インストール中に、すべての顧客に対してランダムな256ビットの鍵が生成され、AES暗号化を使用してデータを暗号化するために使用されます。キーは、ユーザーモードでDPAPIで暗号化されます。このモードでは、データにアクセスできる唯一のユーザーは、制限された権限を持つ新しく作成されたロックダウンされたドメインサービスアカウントで、マシンに実際にログインできません。暗号化された鍵は、レジストリのACLで編集された部分に格納されます。暗号化モジュールはそのユーザーを偽装してその機能を実行します。
問題は、キーがインストール時にランダムに生成され、すぐに暗号化されるため、私たちはそれを持っていなくても問題ではないということです。お客様がこのアカウントを削除したり、サーバーOSを再インストールしたり、他の方法でキーを紛失したりすると、データは回復不能になります。したがって、実際の質問は次のようになります。
私は、顧客がキーが格納されているレジストリをバックアップし、再インストールまたはユーザーの削除後でも同じユーザーアカウントが存在する限り、同じマシン上に同じパスワードで作成された場合、同じDPAPIの秘密が作成され、その鍵を解読できるようになります。しかし、私はこれらの秘密が最初にどのように生成されるのか分からないので、それが本当であるかどうかはわかりません。これが実際に起こっているかどうかは誰でも確認できますか?私は、あなたがより良いものを考えることができるならば、まったく異なるキーストレージアプローチの提案にもオープンしています。