ฉันจะรู้ได้อย่างไรว่าอัลกอริธึมการแฮ็กข้อมูล SQL Server ที่ใช้ในการถอดรหัสข้อมูลที่เข้ารหัสเมื่อใช้ฟังก์ชัน DECRYPTBYPASSPHRASE


12

คำถามของฉันเกี่ยวข้องกับการทดสอบต่อไปนี้สองอินสแตนซ์:

อินสแตนซ์ของ SQL Server 2017 Express (Microsoft SQL Server 2017 (RTM-CU16))
อินสแตนซ์ของ SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18))

ผมใช้ฟังก์ชั่นENCRYPTBYPASSPHRASEการเข้ารหัสข้อความและใช้ผลตามที่ @ciphertext สำหรับDECRYPTBYPASSPHRASE ผลการทดสอบของฉันคือ:

ตารางผลลัพธ์

ตามนี้แก้ไขไมโครซอฟท์ ,

[... ] 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 เข้าใจ0x01และ0x02เพราะมันใหม่และรู้สิ่งใหม่ SQL Server 2014 เข้าใจเพียง0x01เพราะมันเก่ากว่าและไม่รู้จักสิ่งใหม่ใด ๆ เนื่องจากสิ่งใหม่ไม่ได้ถูกย้อนกลับ

[... ] SQL Server 2017 ใช้อัลกอริทึมการแฮช SHA2 เพื่อแฮชรหัสผ่าน SQL Server 2016 และ SQL Server เวอร์ชันก่อนหน้าใช้อัลกอริทึม SHA1 ที่ไม่ถือว่าปลอดภัยอีกต่อไป

นี่ไม่ใช่สิ่งเดียวกัน แต่โดยทั่วไปแล้วเกี่ยวกับคีย์ Symmetric ที่ถูกสร้างขึ้นด้วยเวกเตอร์เริ่มต้นเดียวกันในทั้งสองเวอร์ชัน ฉัน blogged เกี่ยวกับเรื่องนี้เมื่อ 2017 ออกมาและได้รับการแก้ไขเล็กน้อยในภายหลังด้วยการตั้งค่าสถานะการสืบค้นกลับที่จะต้องใช้ในขณะที่ในคำถามของคุณไม่มีการตั้งค่าสถานะการสืบค้นที่จำเป็นสำหรับ 2017 เพื่ออ่านข้อมูล 2014 ตามที่แสดง


สวัสดีฌอน คุณสามารถให้ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าสถานะการสืบค้นกลับจากคำตอบของคุณ?
Konstantin Taranov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.