関数DECRYPTBYPASSPHRASEを使用するときに、SQL Serverが暗号化されたデータを復号化するために使用したハッシュアルゴリズムをどのようにして知ることができますか?


12

私の質問は、2つのインスタンスを使用した次の実験に関連しています。

SQL Server 2017 Expressインスタンス(Microsoft SQL Server 2017(RTM-CU16))
SQL Server 2014 Expressインスタンス(Microsoft SQL Server 2014(SP2-CU18))

関数ENCRYPTBYPASSPHRASEを使用してテキストを暗号化し、その結果をDECRYPTBYPASSPHRASEの@ciphertextとして使用しました。私のテストの結果はこれらでした:

結果の表

このMicrosoftの修正によると、

[...] SQL Server 2017は、SHA2ハッシュアルゴリズムを使用してパスフレーズをハッシュします。SQL Server 2016およびそれ以前のバージョンのSQL Serverは、安全と見なされなくなったSHA1アルゴリズムを使用します。

しかし、関数DECRYPTBYPASSPHRASEに関連する引数がない場合、データの暗号化に使用されたアルゴリズムはどのようにしてわかりますか?暗号化されたデータの一部ですか?

私のテストの結果から、SQL Serverは常にインスタンスで使用可能な新しいバージョンのアルゴリズムを使用してデータを暗号化すると思いますが、対応するアルゴリズムが見つからない場合、すべてのアルゴリズムがデータを復号化して、適合するアルゴリズムまたはNULLを返すまでデータを復号化します。暗号化されたデータを復号化するためにSQL Serverがどのハッシュアルゴリズムを使用したかを確認する方法が見つからなかったので、それは単なる推測です。

回答:


14

しかし、関数DECRYPTBYPASSPHRASEに関連する引数がない場合、データの暗号化に使用されたアルゴリズムはどのようにしてわかりますか?暗号化されたデータの一部ですか?

はい、そのとおりです。

出力には以下を使用します。

DECLARE @Data VARBINARY(MAX)
DECLARE @Text NVARCHAR(MAX) = N'I''ll get you, and your little dog too!'
DECLARE @Phrase NVARCHAR(100) = N'Fly My Pretties!'

SELECT @Data = ENCRYPTBYPASSPHRASE(@Phrase, @Text)

SELECT @Data AS [Encrypted_Data]

SELECT CAST(DECRYPTBYPASSPHRASE(@Phrase, @Data) AS NVARCHAR(MAX))

これを2014年のインスタンスで実行すると、Encrypted_Dataに対して次のようになります。 0x01000000E565142762F62...

これを2017年のインスタンスで実行すると、Encrypted_Dataに対して次のようになります。 0x020000004D261C666204F...

表示されるはずのプリアンブルは、2014インスタンスがで始まり0x01、2017インスタンスがで始まることがわかります0x02。これは、使用される暗号化タイプのバージョン管理です。これ以外にもありますが、この回答の目的のためにその詳細に入る必要はなく、公開知識である必要もないことに注意してください。

SQL Server 2017は0x010x02それが新しいことを理解し、新しいものを知っているからです。SQL Server 2014 0x01は、新しいものがバックポートされなかったため、それが古く、新しいことを認識していないという理由だけで理解します。

[...] SQL Server 2017は、SHA2ハッシュアルゴリズムを使用してパスフレーズをハッシュします。SQL Server 2016およびそれ以前のバージョンのSQL Serverは、安全と見なされなくなったSHA1アルゴリズムを使用します。

これは同じことではありませんが、通常、両方のバージョンで同じ初期化ベクトルを使用して作成された対称キーに関係しています。2017が出たときに私はこれについてブログを書いており、トレースフラグを使用して少し後で修正されましたが、質問では、2017が2014データを読み取るために必要なトレースフラグはありません。


こんにちは、ショーン。回答からトレースフラグに関する詳細情報を提供できますか?
Konstantin Taranov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.