DECRYPTBYPASSPHRASE işlevini kullanırken SQL Server'ın şifrelenmiş verilerin şifresini çözmek için kullanılan karma algoritmasını nasıl bilebilirim?


12

Sorum şu iki örnekle yapılan deneme ile ilgilidir:

SQL Server 2017 Express örneği (Microsoft SQL Server 2017 (RTM-CU16))
SQL Server 2014 Express örneği (Microsoft SQL Server 2014 (SP2-CU18))

Bir metni şifrelemek için ENCRYPTBYPASSPHRASE işlevini kullandım ve sonucu DECRYPTBYPASSPHRASE için @ciphertext olarak kullandım . Testlerimin sonucu şuydu:

Sonuç tablosu

Bu Microsoft düzeltmesine göre ,

[...] SQL Server 2017, parolayı özetlemek için SHA2 karma algoritmasını kullanır. SQL Server 2016 ve SQL Server'ın önceki sürümleri, artık güvenli kabul edilmeyen SHA1 algoritmasını kullanır.

Ancak DECRYPTBYPASSPHRASE işlevinde bununla ilgili bir argüman yoksa, verileri şifrelemek için kullanılan algoritmanın ne olduğunu nasıl bilebilir? Şifrelenmiş verilerin bir parçası mı?

Testlerimin sonuçlarıyla, SQL Server'ın verileri şifrelemek için her zaman örnekte bulunan yeni algoritma sürümünü kullandığını, ancak karşılık gelen hiçbir algoritma bulunmadığında NULL'a uyan veya NULL döndüren bir veri bulana kadar tüm algoritmaları denemek için tüm algoritmaları dener . SQL Server şifreli verilerin şifresini çözmek için kullanılan karma algoritma kontrol etmek için herhangi bir yol bulamadım çünkü bu sadece bir tahmin olsa.

Yanıtlar:


14

Ancak DECRYPTBYPASSPHRASE işlevinde bununla ilgili bir argüman yoksa, verileri şifrelemek için kullanılan algoritmanın ne olduğunu nasıl bilebilir? Şifrelenmiş verilerin bir parçası mı?

Evet, doğru noktada.

Çıktı için aşağıdakileri kullanacağım:

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))

Bunu 2014 örneğimde çalıştırırsam, Encrypted_Data için aşağıdakileri alırım: 0x01000000E565142762F62...

Bunu 2017 örneğimde çalıştırırsam, Encrypted_Data için aşağıdakileri alırım: 0x020000004D261C666204F...

Çıkması gereken, 2014 vakasının başladığı 0x01ve 2017 vakasının başladığı görebileceğiniz önsözdür 0x02. Bu, kullanılan şifreleme türünün sürümüdür. Bundan daha fazlası olduğunu, ancak bu cevabın amaçları için bu ayrıntıya girmeye gerek olmadığını ve bunun da kamunun bilgisi olması gerekmediğini unutmayın.

SQL Server 2017 anlıyor 0x01ve 0x02yeni olduğu için yeni şeyleri biliyor. SQL Server 2014, yalnızca 0x01daha eski olduğu ve yeni şeyler desteklenmediği için yeni şeyleri bilmediği için anlar.

[...] SQL Server 2017, parolayı özetlemek için SHA2 karma algoritmasını kullanır. SQL Server 2016 ve SQL Server'ın önceki sürümleri, artık güvenli kabul edilmeyen SHA1 algoritmasını kullanır.

Bu aynı şey değildir, ancak genellikle her iki versiyonda da aynı başlatma vektörü ile oluşturulan Simetrik tuşlarla ilgilidir. 2017 çıktığında bunun hakkında blog yazdım ve biraz sonra kullanılması gereken izleme bayrağı ile düzeltildi, ancak sorunuzda 2017'nin 2014 verilerini gösterildiği gibi okuması için hiçbir izleme bayrağı gerekmiyor.


Selam Sean. Cevabınızdaki izleme bayrağı hakkında daha ayrıntılı bilgi verebilir misiniz?
Konstantin Taranov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.