TL; DR:
暗号文は、各暗号化に異なるようにするためにそれは他のすべてのものが等しい場合、正常です。パスワードの推測を簡単にしないために、これは出力の意図的な「ランダム化」と考えています。ただし、署名は常に同じです。
DMKバックアップファイルの内容を並べて見ると、最初の40〜60バイトがほぼ同じ構造(同じ量の例えば、同じ場所のスペース)。いくつかのデータだけが異なります。これは、とりわけ塩が存在するヘッダーです。塩は隠される必要はありません。それはランダムである必要があります。
ここで、何らかの理由で、知られていない復元中に表示されるエラーについて教えてください。私はテスト環境と2つのDMKバックアップを作成しました。また、物事はもう少し現実的にするために、私は、暗号化パスワードを指定せずに証明書を作成しました:
create certificate [TestCert] authorization [dbo]
with subject = 'DMK Restore Test certificate';
これは、証明書の秘密鍵がDMKを使用して暗号化されることを意味し、今我々はいくつかの暗号化を持っていますデータ。私はその最初のバックアップからDMKを復元しようとした場合:
restore master key from file = 'D:\Tests\Key1.dmk'
decryption by password = 'asdfdgkjh98hvio'
encryption by password = 'nmbneknfownoih';
SSMS(あなたがいないエラー、心の)次のメッセージを出力します
古いものと新しいマスターキーが同じです。データの再暗号化は不要です。
デフォルトの動作で、違いは検出されないため、キーは現在開いています。私達の証明書を使って署名を作成しようとすると、DMK(証明書の秘密鍵)で暗号化されたデータがアクセス可能であることを証明している:
select signbycert(cert_id('TestCert'), 'ASDfgh');
(あなたが上記のためのいくつかのvarbinary(128)
出力が表示されます)。私はあなたがデータベースのバックアップを復元するときの一般的なシナリオである、master
からそのコピーを削除することで、キーの自動開放をオフにした場合 しかし、:その後、
alter master key drop encryption by service master key;
と同じrestore master key
ステートメントを使用して復元しよう上記、確かに、エラーが発生します。
メッセージ15329、レベル16、状態30、行1
現在のマスターキーを解読することはできません。これがデータベース マスターキーの場合は、この操作を実行する前にセッションで開こうとしてください。 FORCEオプションを使用すると、この エラーを無視して操作を続行できますが、古い マスターキーで暗号化されたデータは失われます。
キー(既存のものと復元されているもの)は同じですが、今回はSQL Serverはそれを見ることができません - DMKは閉じています。証明書を使用して署名しようとすると、同じ理由でNULL
が返されます。 FORCE
オプションの説明に注意してください。私はそれを追加した場合:現在のマスターキーが解読することはできません
:
restore master key from file = 'D:\Tests\Key1.dmk'
decryption by password = 'asdfdgkjh98hvio'
encryption by password = 'nmbneknfownoih'
force;
結果は、単なる情報メッセージ、再び、です。 FORCEオプションが指定されているため、エラーは無視されました 。
唯一のものは戻ってデータを取得するために左に明示的DMKを開く、または上の自動開放を引き返すことです:、証明書署名が再び機能し始めその後
open master key decryption by password = 'nmbneknfownoih';
go
-- And if you need it to be always available in the future
alter master key add encryption by service master key;
go
(と最初と同じバイナリデータを返します)。
DMK復元中にエラーが発生しました... –
復元していません。キーが機能しない場合、NULLを取得します。私はそれが元の質問であるキーと内容が変更されていないときでも、バックアップデータが異なるためだと思います。バックアップの奇妙さを説明できるようになるまで、復元をデバッグできません。何か案が? –
私は確認できませんが、ほとんどの暗号化アルゴリズムでは、虹のテーブル型攻撃から保護するために塩を使用しています。あなたはここにそれを実行している可能性があります。 –