हिन्दी

डेवलपर टूल · UUID जनरेटर

संस्करण 1 UUIDs आपका MAC पता और निर्माण समय लीक कर सकते हैं

· यह क्यों मायने रखती है

uuid क्रिप्टोग्राफी ब्राउज़र-एपिस

टाइमस्टैम्प फ़ील्ड और MAC एड्रेस बिट्स दिखाने वाली UUIDv1 संरचना का टूटना
मूल ToolAcre वेक्टर चित्रण

समय-आधारित UUID एक 60-बिट टाइमस्टैम्प और एक 48-बिट नोड पहचानकर्ता एम्बेड करता है जो अक्सर एक वास्तविक नेटवर्क कार्ड पता होता है। यह पोस्ट दिखाती है कि एक बाहरी व्यक्ति किसी से क्या पढ़ सकता है और यादृच्छिक पीढ़ी समस्या से क्यों बचती है।

वह पहचानकर्ता जो आपके लैपटॉप को नाम देता है - निर्यातित दस्तावेज़ में एक ID एक ID से अधिक क्यों हो सकती है

एक संस्करण 1 UUID का निर्माण एक टाइमस्टैम्प, एक MAC पते और एक घड़ी अनुक्रम मान से किया जाता है। 60-बिट टाइमस्टैम्प 15 अक्टूबर 1582, ग्रेगोरियन कैलेंडर सुधार की तारीख के बाद से 100-नैनोसेकंड अंतराल की संख्या का प्रतिनिधित्व करता है। 48-बिट नोड फ़ील्ड में पारंपरिक रूप से नेटवर्क इंटरफ़ेस का IEEE 802 MAC पता होता है जो UUID उत्पन्न करता है। जब आप कोई दस्तावेज़ निर्यात करते हैं, एक टूल चलाते हैं या एक फ़ाइल सहेजते हैं जो एक संस्करण 1 UUID को एम्बेड करता है, तो जो कोई भी बाद में उस UUID को डीकोड करता है वह पढ़ सकता है कि इसे कब बनाया गया था और, यदि नोड फ़ील्ड एक वास्तविक MAC पता है, तो इसे किस मशीन ने बनाया है। यह जानकारी एक अपारदर्शी पहचानकर्ता प्रतीत होने वाली चीज़ से चुपचाप लीक हो जाती है।

v1 UUID का एनाटॉमी - टाइमस्टैम्प फ़ील्ड, घड़ी अनुक्रम और नोड फ़ील्ड, और जहां प्रत्येक 36 वर्णों में बैठता है

सूचना लीक सूक्ष्म है लेकिन गोपनीयता और जिम्मेदारी के लिए परिणामी है। यदि आप किसी दस्तावेज़ पर सह-लेखक के साथ सहयोग करते हैं और आपके नेटवर्क कार्ड का MAC पता एम्बेडेड v1 UUID में है, तो एक पर्यवेक्षक किसी विशेष संस्थान या स्थान पर उपयोग में आने वाले हार्डवेयर को सीखता है। यदि आप किसी दस्तावेज़ को किसी विशिष्ट समय पर निर्यात करते हैं, तो प्रत्येक v1 UUID में टाइमस्टैम्प कार्य होने पर सीमाबद्ध होता है। छद्म नाम बनाए रखने की कोशिश करने वाले लेखक को ज्ञात प्रकाशन तिथियों या दस्तावेज़-निर्माण घटनाओं के साथ UUID टाइमस्टैम्प को सहसंबंधित करके अज्ञात किया जा सकता है। पहचानकर्ता अहानिकर प्रतीत होते हैं क्योंकि उन्हें अपारदर्शी 36-वर्ण स्ट्रिंग के रूप में स्वरूपित किया गया है, लेकिन वे किसी भी व्यक्ति के लिए अपारदर्शी नहीं हैं जो v1 प्रारूप को जानता है और उन्हें डीकोड करने की परवाह करता है।

एक पर्यवेक्षक क्या सीखता है - रिकॉर्ड कब बनाया गया था और, यदि नोड एक हार्डवेयर पता है, तो किस मशीन या विक्रेता ने इसे बनाया है

v1 UUID की शारीरिक रचना स्पष्ट करती है कि क्या निकाला जा सकता है क्योंकि संरचना नियतात्मक है और सार्वजनिक रूप से प्रलेखित है। RFC 9562 लेआउट को परिभाषित करता है: 32 bits time_low के लिए, 16 bits time_mid के लिए, 4 bits संस्करण के लिए 1 पर सेट, 12 bits time_high के लिए, 2 bits वैरिएंट के लिए, क्लॉक_सेक के लिए 14 bits और नोड के लिए 48 bits। समय फ़ील्ड में कुल 60 bits शामिल होते हैं, जिन्हें 1582 के बाद से 100-नैनोसेकंड अंतराल के रूप में संयोजित और व्याख्या करने पर 100 नैनोसेकंड के भीतर तत्काल सटीक निर्माण प्राप्त होता है। 48-बिट नोड फ़ील्ड आमतौर पर MAC पते को 48-बिट पूर्णांक के रूप में रखता है। डिकोडिंग नियतात्मक है: बाइट्स पढ़ें, मास्क करें और फ़ील्ड को शिफ्ट करें और मूल्यों की व्याख्या करें। कोई क्रिप्टोग्राफी शामिल नहीं है; UUID संरचना एन्कोडिंग को पूरी तरह से पारदर्शी और प्रतिवर्ती बनाती है।

एक सावधान करने वाला इतिहास - कैसे दस्तावेज़ों में अंतर्निहित पहचानकर्ताओं का उपयोग लेखकत्व का पता लगाने के लिए किया गया है, बिना किसी अटकल के वर्णित है

RFC 9562 गोपनीयता इतिहास को स्वीकार करता है और नए अनुप्रयोगों के लिए v1 के विरुद्ध अनुशंसा करता है क्योंकि लागत लाभ से अधिक है। विनिर्देश में दस्तावेज़ीकृत गोपनीयता संबंधी विचारों के साथ v4 यादृच्छिक और v7 समय-क्रम वाले विकल्प शामिल हैं। तैनात सिस्टम के साथ बैकवर्ड संगतता के लिए संस्करण 1 को बरकरार रखा गया है, लेकिन नए कोड को सावधानीपूर्वक सुरक्षा समीक्षा और एक्सपोज़र के स्पष्ट औचित्य के बिना v1 UUID उत्पन्न नहीं करना चाहिए। भेद्यता कोई भूल नहीं थी; यह 1980 के दशक में एक जानबूझकर किया गया डिज़ाइन विकल्प था जब गोपनीयता लीक प्राथमिक चिंता नहीं थी और वितरित सिस्टम पहचान के लिए ट्रैकिंग एक स्वीकार्य सुविधा थी।

कार्यान्वित उदाहरण - एक नमूना v1 UUID को उसके टाइमस्टैम्प और नोड फ़ील्ड में हाथ से डिकोड करना

एक्सपोज़र को समझने के लिए समयरेखा महत्वपूर्ण है क्योंकि 1998 में बनाए गए दस्तावेज़ में एक v1 UUID में एक टाइमस्टैम्प एन्कोडिंग 1998-era समय शामिल होता है, जो फोरेंसिक के लिए उपयोगी है लेकिन समस्या ही है। यदि आपके पास v1 UUID के साथ ऐतिहासिक दस्तावेज़ हैं और आप उन्हें बाद में साझा करते हैं, तो टाइमस्टैम्प बने रहते हैं। आप पूर्वव्यापी रूप से उस ऐतिहासिक तथ्य को नहीं हटा सकते कि एक UUID एक निश्चित समय पर उत्पन्न हुआ था; आप केवल नए v1 UUID जनरेट करना बंद कर सकते हैं। कुछ अनुप्रयोगों ने वास्तविक MAC को यादृच्छिक छद्म नाम से प्रतिस्थापित करके MAC पता रिसाव को कम करने का प्रयास किया, लेकिन टाइमस्टैम्प पूरी तरह से पढ़ने योग्य और डिकोड करने योग्य बना हुआ है।

v4 और v7 में क्या परिवर्तन होता है - यादृच्छिक UUID में कोई मशीन डेटा नहीं होता है; v7 अभी भी निर्माण समय का खुलासा करता है, जो स्वीकार्य हो भी सकता है और नहीं भी

एक कार्यशील उदाहरण RFC 9562 उदाहरण वैक्टर का उपयोग करके व्यवहार में डिकोडिंग दिखाता है। विनिर्देश से f81d4fae-7dec-11d0-a765-00a0c91e6bf6 जैसा v1 UUID लें। क्रम में बाइट्स f81d4fae 7dec 11d0 a765 00a0c91e6bf6 हैं। संस्करण फ़ील्ड तीसरे समूह में है: हेक्स में 11d0 बाइनरी में 0001 0001 1101 0000 है। पहला 4 bits 0001 है, जो संस्करण 1 है। टाइमस्टैम्प को पहले, दूसरे और तीसरे समूह के भाग में विभाजित किया गया है: दशमलव 4170404526 में time_low f81d4fae है, दशमलव 32236 में time_mid 7dec है, दशमलव 464 में संस्करण निबल को हटाने के बाद तीसरे समूह से time_high 1d0 है। इन्हें 60-बिट मान में संयोजित करने से 1582 के बाद से 100-नैनोसेकंड अंतराल का प्रतिनिधित्व करने वाली एक संख्या मिलती है।

इसमें क्या शामिल नहीं है - यादृच्छिक नोड विकल्प कुछ v1 कार्यान्वयन प्रदान करता है, जो कम करता है लेकिन टाइमस्टैम्प रिसाव को दूर नहीं करता है

चौथे और पांचवें समूह में नोड फ़ील्ड a765 00a0c91e6bf6 है, जो मशीन की जानकारी को एन्कोड करता है यदि बिट 0 प्रामाणिकता इंगित करता है। यदि नोड फ़ील्ड के पहले ऑक्टेट का सबसे कम महत्वपूर्ण बिट शून्य है, तो यह वास्तविक IEEE पता इंगित करता है; यदि इसे एक पर सेट किया जाता है, तो यह गोपनीयता के लिए उत्पन्न छद्म आयामी मान को इंगित करता है। इस उदाहरण में, हेक्स में a765 बाइनरी में 10100111 01100101 है; सबसे कम महत्वपूर्ण बिट 1 है, इसलिए यह एक यादृच्छिक स्यूडोनोड है, वास्तविक MAC नहीं। हालाँकि, पुराने कार्यान्वयन कभी-कभी वास्तविक MAC पतों को सीधे संग्रहीत करते हैं, और यदि वे करते हैं, तो 48-बिट नोड फ़ील्ड नेटवर्क कार्ड पहचानकर्ता को डीकोड करता है। IEEE MAC उपसर्गों की एक रजिस्ट्री बनाए रखता है; यह जानते हुए कि एक नेटवर्क कार्ड एक निश्चित उपसर्ग के साथ शुरू हुआ, निर्माता और संभावित रूप से उपयोग में आने वाले कंप्यूटर के मॉडल को सीमित कर देता है।

टेकवे: जानें कि आपकी ID क्या बताती है - ToolAcre जेनरेटर CSPRNG से प्रत्येक पहचानकर्ता को खींचता है, इसलिए लीक करने के लिए कोई MAC पता या टाइमस्टैम्प नहीं है

RFC 9562 संस्करण 4 और उससे आगे एन्कोडेड जानकारी के बजाय केवल यादृच्छिक डेटा का उपयोग करके जानबूझकर इस रिसाव से बचें। एक संस्करण 4 UUID क्रिप्टोग्राफ़िक रूप से यादृच्छिक डेटा का 122 bits है जिसमें संस्करण फ़ील्ड के लिए 4 bits और वैरिएंट फ़ील्ड के लिए 2 bits है। बिट्स को पढ़ने से कुछ भी पता नहीं चलता सिवाय इसके कि UUID वैध है; डिकोड करने के लिए कोई टाइमस्टैम्प नहीं है, निकालने के लिए कोई मशीन डेटा नहीं है। संस्करण 7 में लाभों को क्रमबद्ध करने के लिए एक टाइमस्टैम्प शामिल है, लेकिन वह टाइमस्टैम्प अस्पष्ट 1582-आधारित मान के बजाय Unix युग से परिचित और मानकीकृत है, और विनिर्देश स्पष्ट रूप से दस्तावेज करता है कि समय की जानकारी पहचानकर्ता में मौजूद है। गोपनीयता गुण संस्करणों के बीच मौलिक रूप से भिन्न होते हैं।