फ़ंक्शन का उपयोग करते समय मैं कैसे जान सकता हूं कि हैशिंग एल्गोरिथ्म एसक्यूएल सर्वर एन्क्रिप्टेड डेटा को डिक्रिप्ट करने के लिए उपयोग किया जाता है?


12

मेरा प्रश्न दो उदाहरणों के साथ निम्नलिखित प्रयोग से संबंधित है:

SQL सर्वर 2017 एक्सप्रेस उदाहरण (Microsoft SQL Server 2017 (RTM-CU16))
SQL सर्वर 2014 एक्सप्रेस उदाहरण (Microsoft SQL सर्वर 2014 (SP2-CU18))

मैंने एक पाठ को एन्क्रिप्ट करने के लिए ENCRYPTBYPASSPHRASE फ़ंक्शन का उपयोग किया और परिणाम का उपयोग डेसीपीटीबीपीएएसएसपीएचआरईएस के लिए @ciphertext के रूप में किया । मेरे परीक्षणों के परिणाम ये थे:

परिणामों की तालिका

इस Microsoft सुधार के अनुसार ,

[...] SQL सर्वर 2017 पासफ़्रेज़ को हैश करने के लिए SHA2 हैशिंग एल्गोरिथ्म का उपयोग करता है। SQL सर्वर 2016 और SQL सर्वर के पुराने संस्करण SHA1 एल्गोरिथ्म का उपयोग करते हैं जिसे अब सुरक्षित नहीं माना जाता है।

लेकिन यह कैसे पता चलता है कि एल्गोरिथ्म का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया गया था अगर फ़ंक्शन DECRYPTBYPASSPHRASE पर उस से संबंधित कोई तर्क नहीं है? क्या यह एन्क्रिप्टेड डेटा का हिस्सा है?

मेरे परीक्षणों के परिणामों से, मुझे लगता है कि SQL सर्वर हमेशा डेटा एन्क्रिप्ट करने के लिए उदाहरण पर उपलब्ध एल्गोरिथ्म के नए संस्करण का उपयोग करता है, लेकिन सभी एल्गोरिदम को डेटा को डिक्रिप्ट करने की कोशिश करता है जब तक कि वह एक फिट या रिटर्न न मिल जाए जब कोई संगत एल्गोरिदम नहीं मिलता है। । यह सिर्फ एक अनुमान है, क्योंकि मुझे यह जांचने का कोई तरीका नहीं मिला है कि हैशिंग एल्गोरिथ्म SQL सर्वर एन्क्रिप्टेड डेटा को डिक्रिप्ट करने के लिए क्या उपयोग करता है।

जवाबों:


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 सर्वर 2014 केवल 0x01इसलिए समझता है क्योंकि यह पुराना है और नई चीजों में से किसी को भी नहीं जानता है क्योंकि नई चीजों को वापस नहीं भेजा गया था।

[...] SQL सर्वर 2017 पासफ़्रेज़ को हैश करने के लिए SHA2 हैशिंग एल्गोरिथ्म का उपयोग करता है। SQL सर्वर 2016 और SQL सर्वर के पुराने संस्करण SHA1 एल्गोरिथ्म का उपयोग करते हैं जिसे अब सुरक्षित नहीं माना जाता है।

यह एक ही बात नहीं है, लेकिन आम तौर पर दोनों संस्करणों में समान आरंभीकरण वेक्टर के साथ बनाई जाने वाली सममित कुंजी के साथ करना है। मैंने इस बारे में ब्लॉग किया था जब 2017 सामने आया था और इसे थोड़ा बाद में ट्रेस ध्वज के साथ तय किया गया था जिसका उपयोग किया जाना चाहिए, जबकि आपके प्रश्न में 2014 के आंकड़ों को पढ़ने के लिए 2017 के लिए कोई ट्रेस ध्वज की आवश्यकता नहीं है।


हाय, सीन। क्या आप अपने उत्तर से ट्रेस ध्वज के बारे में अधिक विस्तृत जानकारी प्रदान कर सकते हैं?
कॉन्स्टेंटिन तारानोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.