आमची गुपिते वाचण्यासाठी कळा धरल्याशिवाय सर्व्हर कसा संग्रहित आणि समक्रमित करू शकतो? Confidex त्याच्या किल्या कशा तयार करतात, लॉकमध्ये सुरक्षित ठेवतात आणि डेटा एनक्रिप्ट करण्यासाठी आणि बदलांची पडताळणी करण्यासाठी त्याचा वापर करण्यासाठी आम्ही फॉलो करू.
लॉक
फक्त निवडलेली व्यक्तीच दार उघडू शकते
मॅट्रिक्स रीलोडेड
अशी कल्पना करा की आम्ही गुप्त डेटा संचयित करण्यासाठी एक आभासी vault तयार करत आहोत. ॲप्लिकेशन बंद झाल्यानंतर तो डेटा लॅपटॉपवर ठेवला पाहिजे आणि तो दुसऱ्या डिव्हाइसवर उघडू द्या. तिजोरीला स्वतःच्या चाव्या लागतील. आम्ही त्या संग्रहित केल्या पाहिजेत जेणेकरून फायली कॉपी केल्याने बाहेरील व्यक्तीला त्यांची सामग्री वाचण्याचा किंवा बदलण्याचा कोणताही मार्ग मिळत नाही.
A lock कळा संरक्षित करते: एक लहान एनक्रिप्टेड फाइल. तो उघडण्यासाठी एक मास्टर पासवर्ड आणि गुप्त कोड लागतो, secret_key; दोन्हीही फाइलमध्ये नाही. आम्ही सकाळच्या वर्तमानपत्रात संपूर्ण कुलूप छापू शकलो. वाचकांना एक प्रत मिळेल, परंतु ती प्रकाशित केल्याने खाजगी कळा उघड होणार नाहीत.
समजा बाहेरच्या व्यक्तीला ही फाईल मिळाली आणि तो मास्टर पासवर्ड देखील शिकला. ते आता प्रत्येक गणनेची पुनरावृत्ती करू शकतात ज्यांना फक्त पासवर्डची आवश्यकता आहे, परंतु ती गणना लॉक उघडणारी की तयार करणार नाही: secret_key देखील एक इनपुट आहे. फाइलमध्ये एकट्या पासवर्डची स्वतंत्र तपासणी नाही. ते उघडण्यासाठी अद्याप अज्ञात गुप्त कोड आवश्यक आहे.
तो कोड क्रिप्टोग्राफिकली यादृच्छिक डेटामधून येतो; एखाद्या व्यक्तीने त्याचा शोध लावला नाही. जोपर्यंत secret_key अज्ञात आहे, तोपर्यंत अचूक अंदाज लावलेला मास्टर पासवर्ड देखील लॉक उघडत नाही: आक्रमणकर्त्याकडे अद्याप यादृच्छिक रहस्य नाही. त्यामुळे केवळ एक कमकुवत पासवर्ड सर्व्हर कॉपीला व्यावहारिक शब्दकोश हल्ल्यात बदलत नाही.
आक्रमणकर्त्याने secret_key देखील प्राप्त केल्यास, ते ऑफलाइन मास्टर-पासवर्ड अंदाज तपासू शकतात. हे महाग आहे, परंतु अंतिम अडचण पासवर्डच्या ताकदीवर अवलंबून असते.
किल्ल्या
सज्जनांनो, चाव्या काय करतात? की... गोष्टी अनलॉक करायच्या?
पायरेट्स ऑफ द कॅरिबियन - मृत माणसाची छाती
अनुप्रयोग ऑपरेटिंग सिस्टमच्या क्रिप्टोग्राफिक जनरेटरकडून 32 यादृच्छिक बाइट्स प्राप्त करतो आणि त्यांना की म्हणून वापरण्यासाठी तयार करतो. हे तयार केलेले बाइट खाजगी मास्टर की आहेत, master_key.
ॲप्लिकेशन नेहमी master_key वरून समान की मिळवते: समान बाइट्सवर समान गणनेची पुनरावृत्ती केल्याने समान परिणाम मिळतो. त्यामुळे लॅपटॉप आणि फोन एकसारख्या की पुनर्प्राप्त करू शकतात. नवीन डिव्हाइसवर master_key मिळवण्यासाठी, ॲप्लिकेशनने प्रथम मास्टर पासवर्ड आणि secret_key सह लॉक उघडणे आवश्यक आहे.
पहिली जोडी: एनक्रिप्शन
मी कीमास्टर आहे.
घोस्टबस्टर्स
एनक्रिप्ट केलेला डेटा संचयित करण्यासाठी, अनुप्रयोग master_key: secret_key वरून सार्वजनिक की मोजतो. ते वॉल्टसाठी डेटा एन्क्रिप्ट करू शकते, तर डिक्रिप्शनसाठी master_key आवश्यक आहे.
"सार्वजनिक" अल्गोरिदममध्ये या कीच्या भूमिकेचे वर्णन करते, ते प्रत्येकाला देण्याचे बंधन नाही. Confidex मध्ये ते वापरकर्त्याकडे राहते. हे लॉक उघडण्यासाठी आवश्यक असलेले दुसरे रहस्य देखील आहे, म्हणून ते स्थानिक राहते आणि नेटवर्कवर पाठवले जात नाही. स्वतःच, secret_key एखाद्याला व्हॉल्टसाठी डेटा एन्क्रिप्ट करू देते, परंतु ते डिक्रिप्ट करू शकत नाही किंवा त्याच्या वतीने बदलांवर स्वाक्षरी करू शकत नाही.
X25519 हा master_key पासून secret_key काढणारा अल्गोरिदम आहे. master_key ची secret_key वरून पुनर्प्राप्ती करणे व्यवहारात अशक्य आहे. दर सेकंदाला 10^18 कर्व्ह ऑपरेशन्स करणाऱ्या एका काल्पनिक महासंगणकावरही पारंपरिक हल्ल्यास सरासरी सुमारे 2.3 ट्रिलियन वर्षे लागतील (SafeCurves चा अंदाज).
दुसरी जोडी: स्वाक्षरी
केवळ मूळ गोष्ट म्हणजे स्वाक्षरी
कॅच मी इफ यू कॅन
प्रथम जोडी सामग्री लपविण्यास मदत करते. व्हॉल्टच्या मालकाने बदल अधिकृत केला आहे याची पुष्टी करण्यासाठी आम्हाला आता एक मार्ग हवा आहे. सर्व्हर स्वाक्षरी देखील तपासण्यास सक्षम असणे आवश्यक आहे, म्हणून आम्हाला त्यास सार्वजनिक सत्यापन की पाठवणे आवश्यक आहे. पहिल्या जोडीचा सार्वजनिक भाग secret_key आहे, जो सर्व्हरला मिळू नये. म्हणून आम्ही स्वाक्षरीसाठी दुसरी, कायमची की जोडी तयार करतो.
दुसरे स्वतंत्र गुपित साठवण्याऐवजी, आम्ही master_key वरून खाजगी स्वाक्षरी की मिळवतो आणि तिला signing_key म्हणतो. अनुप्रयोग डेटा आणि लॉक साइन इन करण्यासाठी वापरते. इतर उपकरणे आणि सर्व्हर सामग्री न वाचता स्वाक्षरी तपासण्यासाठी त्याचा सार्वजनिक भाग वापरतात.
आम्ही ही जोडी त्याच master_key मधून पुनर्प्राप्त करू शकतो. ॲप्लिकेशनला त्यातून एक प्रारंभिक मूल्य प्राप्त होते: 32 बाइट्स जे अद्वितीयपणे स्वाक्षरी की निर्धारित करतात.
वेगवेगळ्या नोकऱ्यांसाठी वेगवेगळ्या की मिळवण्यासाठी, आम्ही गणनामध्ये एक निश्चित लेबल समाविष्ट करतो: येथे, confidex/vault/ed25519/v1. समान master_key आणि समान लेबल नेहमी समान की तयार करतात.
मास्टर पासवर्डने ही गणना प्रविष्ट केलेली नाही. दोन्ही जोड्या master_key च्या यादृच्छिक बाइट्सवर अवलंबून असतात, एखाद्या व्यक्तीने शोधलेल्या स्ट्रिंगवर नाही. हा फरक नंतर महत्त्वाचा ठरेल: संकेतशब्द आधीपासून अस्तित्वात असलेल्या कीच्या प्रवेशाचे संरक्षण करेल, म्हणून आम्ही स्वतः की न बदलता ते बदलू शकतो.
व्युत्पन्न हॅश-आधारित की व्युत्पन्न कार्य वापरते: HKDF, HMAC-based Extract-and-Expand Key Derivation Function. Confidex ते SHA-256 सह वापरते, म्हणून हे नाव HKDF-SHA256 आहे. परिणामी 32 बाइट्स Ed25519 जोडीसाठी seed आहेत. signing_key चा सार्वजनिक भाग secret_key प्रकट करत नाही, म्हणून आम्ही स्वाक्षरी पडताळणीसाठी सर्व्हरकडे पाठवू शकतो.
लॉक फाइल म्हणजे काय आणि ते काय करते?
पॉड बेचे दरवाजे उघडा, HAL.
एक स्पेस ओडिसी
मला माफ करा, डेव्ह. मला भीती वाटते की मी ते करू शकत नाही.
लॉक एन्क्रिप्टेड master_key संचयित करते. ते उघडण्यासाठी मास्टर पासवर्ड आणि secret_key आवश्यक आहे. पब्लिक हेडरमध्ये फॉरमॅट व्हर्जन, व्हॉल्ट आयडेंटिफायर, signing_key चा सार्वजनिक भाग, मीठ आणि पासवर्ड-प्रोसेसिंग पॅरामीटर्स असतात. अंतर्गत स्वरूप आवृत्ती master_key च्या बाजूने कूटबद्ध केली आहे.
लॉक तयार करताना, ऍप्लिकेशनमध्ये आधीपासूनच master_key आहे, त्यामुळे ते एन्क्रिप्शनपूर्वी secret_key ची गणना करते. ते उघडताना, वापरकर्ता स्वतंत्रपणे secret_key पुरवतो: ते लॉकच्या सार्वजनिक प्रतमधून अनुपस्थित आहे.
डिक्रिप्शन केल्यानंतर, ऍप्लिकेशन X25519 वापरून master_key चा सार्वजनिक भाग मोजतो आणि तो secret_key शी जुळणे आवश्यक आहे. ते नंतर signing_key पुनर्प्राप्त करते आणि त्याच्या सार्वजनिक भागाची शीर्षलेखातील कीशी तुलना करते. अशा प्रकारे, लॉक स्वतः तपासतो.
मास्टर-पासवर्ड अंदाज कमी करण्यासाठी, प्रत्येक प्रयत्नासाठी वेळ आणि मेमरी खर्च करणे आवश्यक आहे. Confidex 64 MiB मेमरी आणि तीन पाससह Argon2id वापरते. संकेतशब्द प्रक्रिया देखील यादृच्छिक मीठ वापरते. मीठ गुप्त नाही: ते समान पासवर्ड वेगवेगळ्या लॉकमध्ये भिन्न परिणाम देते.
जर secret_key आधीच माहित असेल तर, पासवर्डची लांबी आक्रमणाच्या प्रमाणात नाटकीयरित्या बदलते. 5 यादृच्छिक लोअरकेस लॅटिन अक्षरांचे सुमारे 12 दशलक्ष संयोजन आहेत, 7 चे सुमारे 8 अब्ज आणि 12 चे सुमारे 9.5 × 10¹⁶ आहेत. 7 ते 12 अक्षरांपर्यंत जाण्याने शोध जागा जवळपास 12 दशलक्ष पटीने वाढते. दिलेल्या मशीनवर 7 अक्षरे शोधण्यासाठी सरासरी एक दिवस लागला, तर 5 अक्षरांना सुमारे दोन मिनिटे आणि 12 ला सुमारे 33,000 वर्षे लागतील.
Argon2id परिणाम आणि secret_key मधून एक की मिळवण्यासाठी, आम्ही confidex/lock/wrap/v1 लेबलसह, आधी सादर केलेले HKDF-SHA256 फंक्शन वापरतो. परिणाम म्हणजे wrapping_key, लॉक एनक्रिप्ट करणारी की.
आपण master_key लपवले पाहिजे आणि छेडछाड करण्यापासून त्याचे संरक्षण केले पाहिजे. XChaCha20-Poly1305 ते wrapping_key सह एनक्रिप्ट करते आणि प्रमाणीकरण टॅग जोडते. टॅग सायफरटेक्स्टला सार्वजनिक शीर्षलेखाशी जोडतो: चुकीचा पासवर्ड किंवा संरक्षित बाइट्समध्ये बदल केल्याने उघडणे अयशस्वी होते. टॅग आणि यादृच्छिक एकल-वापर मूल्य, nonce, सायफरटेक्स्टसह संग्रहित केले जातात.
प्रत्येक वेळी लॉक तयार किंवा पुन्हा एनक्रिप्ट केल्यावर, ऍप्लिकेशनला ताजे मीठ आणि nonce मिळते. एनक्रिप्टेड सामग्रीमध्ये एक आवृत्ती बाइट आणि master_key चे 32 बाइट्स समाविष्ट आहेत; 24-बाइट nonce आणि 16-बाइट टॅग त्यांच्या बाजूने साठवले जातात. अल्गोरिदमचे दस्तऐवजीकरण बांधकामाचे वर्णन करते.
पुनर्प्राप्त केलेल्या की दरम्यान जुळत नसणे हे जाणूनबुजून विकृत लॉक किंवा तयार केलेल्या प्रोग्राममधील बगमुळे होऊ शकते. यादृच्छिक बाइट भ्रष्टाचार सामान्यतः आधी आढळतो, जेव्हा टॅग तपासला जातो.
हा टॅग तपासण्यासाठी आवश्यक असलेली गुपिते सर्व्हरकडे नाहीत. लॉक हस्तांतरित करण्यासाठी, अनुप्रयोग म्हणून signing_key सह केलेली स्वाक्षरी जोडते. हे सार्वजनिक शीर्षलेख आणि एनक्रिप्टेड सामग्रीसह संपूर्ण तयार फाइल कव्हर करते. सर्व्हर स्वाक्षरी तपासतो आणि, पहिल्या अपलोडवर, signing_key चा पूर्ण सार्वजनिक भाग आणि अंतर्गत व्हॉल्ट आयडेंटिफायर पिन करतो. हे या की विरुद्ध नंतरचे बदल तपासते. लॉक आणि एनक्रिप्ट केलेला डेटा समान signing_key सह स्वाक्षरी केलेला आहे, master_key वरून पुनर्प्राप्त केला आहे.
तिजोरी
आम्ही आता लॉक प्रकाशित करू शकतो. केवळ secret_key आणि master password माहीत असलेली व्यक्ती master_key वाचू शकते, तर कोणीही लॉक फाइलमधून सार्वजनिक स्वाक्षरी की घेऊ शकतो आणि लॉक किंवा डेटामधील सामग्री न पाहता साइन केलेला डेटा तपासू शकतो.
पासवर्ड विचारात घ्या, SuperPa55worD. आत्तासाठी, आम्ही फक्त ते जतन करू इच्छितो: ऍप्लिकेशन बंद केल्यानंतर, आम्ही त्यांना आमचे लेखकत्व सत्यापित करू देत असताना, कोणीही SuperPa55worD न पाहता कुठेही लॉक फाइल आणि एनक्रिप्टेड पासवर्ड पाठवू शकतो. आमच्याकडे secret_key आणि master password असताना एन्क्रिप्शन उलट करता येण्यासारखे असणे आवश्यक आहे. एक सिमेट्रिक सायफर समान की सह कूटबद्ध आणि डिक्रिप्ट करू शकतो. आम्ही ती किल्ली साठवून ठेवत नसल्यामुळे, आम्ही लॉक वापरून ती पुनर्प्राप्त करण्यास सक्षम असणे आवश्यक आहे. आम्ही त्याला message_key म्हणू.
आम्ही प्रत्येक नवीन एन्क्रिप्शनसाठी स्वतंत्र message_key प्राप्त करू. आम्हाला अजूनही त्याच्या पुनर्प्राप्तीची व्यवस्था करणे आवश्यक आहे: सिफरटेक्स्टच्या बाजूला की उघडी ठेवल्यास कॉपी असलेल्या कोणालाही सर्वकाही वाचू देईल.
ताज्या यादृच्छिक बाइट्समधून, अनुप्रयोग फक्त या एन्क्रिप्शनसाठी तात्पुरती X25519 जोडी तयार करतो: record_key. ते नंतर record_key चा खाजगी भाग आणि व्हॉल्टची कायमस्वरूपी सार्वजनिक की, secret_key घेते आणि शेअर केलेल्या गुपिताची गणना करते. त्या गुपितातून एक वेगळे फंक्शन message_key प्राप्त होते; ही की आमचा पासवर्ड एन्क्रिप्ट करते.
वाचताना, अनुप्रयोग दुसरा मार्ग घेतो. हे master_key आणि record_key चा सार्वजनिक भाग वापरते. या दोन कळा समान सामायिक रहस्य निर्माण करतात. गणितीयदृष्ट्या, दोन्ही मार्ग वक्रवरील समान प्रारंभिक बिंदूला दोन खाजगी संख्यांनी भिन्न क्रमाने गुणाकार करतात. ऑर्डर परिणाम बदलत नाही. म्हणून आम्ही record_key चा खाजगी भाग न ठेवता डिक्रिप्शन की पुनर्प्राप्त करू शकतो.
दोन सार्वजनिक की पासून हे रहस्य मिळवणे व्यावहारिकदृष्ट्या अशक्य आहे: दोन्ही मार्गांना संबंधित खाजगी की आवश्यक आहे. सार्वजनिक बिंदू आम्हाला ते तयार करणारे खाजगी क्रमांक कार्यक्षमतेने पुनर्प्राप्त करू देत नाहीत. ही गणिती युक्ती वॉल्टच्या सुरक्षिततेला अधोरेखित करते. पण आपल्या कुलूपाशी जोडलेली वेगळी तिजोरी आपल्याला देण्यापासून कोणीतरी थांबत नाही.
आम्ही आता record_key च्या सार्वजनिक भागासोबत सायफरटेक्स्ट स्टोअर करू शकतो. record_key चा खाजगी भाग आणि वापरलेले message_key भविष्यातील वाचनासाठी यापुढे आवश्यक नाहीत. नंतर, अनुप्रयोग master_key वरून डिक्रिप्शन की आणि record_key चा संग्रहित सार्वजनिक भाग पुनर्प्राप्त करतो. एक कायमस्वरूपी व्हॉल्ट गुपित अशा प्रकारे अनेक स्वतंत्रपणे कूटबद्ध केलेली मूल्ये डिक्रिप्ट करू शकते, प्रत्येकाची स्वतःची message_key आवश्यकतेनुसार पुनर्प्राप्त केली जाते.
मजकूर लपवणे पुरेसे नाही: ते वाचताना आम्ही छेडछाड देखील शोधली पाहिजे. म्हणून एन्क्रिप्शन एक प्रमाणीकरण टॅग जोडते, एक लहान मूल्य एनक्रिप्टेड डेटासह तपासले जाते. चेक अयशस्वी झाल्यास, अर्ज निकाल नाकारतो. तो यशस्वीरित्या डिक्रिप्ट केलेला पासवर्ड म्हणून यादृच्छिक किंवा बदललेला मजकूर प्रदर्शित करू नये.
आम्ही एका बांधकामाचे वर्णन केले आहे ज्यामध्ये असममित जोडी सामायिक रहस्य स्थापित करण्यात मदत करते, तर message_key सामग्री एन्क्रिप्ट करते. याला Hybrid Public Key Encryption, किंवा HPKE म्हणतात, आणि RFC 9180 मध्ये नमूद केले आहे. Confidex गुप्ततेवर सहमत होण्यासाठी X25519 वापरतो, की मिळवण्यासाठी HKDF-SHA256 आणि इंटिग्रिटी चेकिंगसह एनक्रिप्शनसाठी ChaCha20-Poly1305 वापरतो. येथे, HKDF record_key आणि master_key जोडीचा वापर करून सहमत असलेले सामायिक रहस्य घेते; हे Ed25519 seed मिळवण्यापासून वेगळे काम आहे. RFC 5869 HKDF चे वर्णन करते.
पुढील एन्क्रिप्शनसाठी, अनुप्रयोग नवीन record_key आणि नवीन HPKE संदर्भ तयार करतो. message_key आणि nonce चे संयोजन पुन्हा वापरल्याने सायफरचे संरक्षण खंडित होते. Confidex मध्ये, की आणि nonce HPKE च्या आत व्युत्पन्न केले जातात, एका संदेशासाठी वापरले जातात आणि नंतर संदर्भ टाकून दिला जातो.
ChaCha20 स्वतः २५६-बिट message_key वापरते. थेट हल्ल्याची जाणीव होण्यासाठी, एक काल्पनिक सुपर कॉम्प्युटर प्रति सेकंद एक अब्ज अब्ज उमेदवारांची चाचणी घेत असल्याची कल्पना करा. 2²⁵⁶ संभाव्य की शोधण्यासाठी सुमारे 1.8 × 10⁵¹ वर्षे लागतील. RFC 8439 अल्गोरिदम आणि त्याचे विश्लेषण वर्णन करते.
एक रेकॉर्ड
आम्ही आनंदी आहोत?
पल्प फिक्शन
आम्ही पासवर्ड सेव्ह केला आहे, परंतु वेबसाइटवर लॉग इन करण्यासाठी सहसा वापरकर्तानाव आणि पत्ता आवश्यक असतो. कधीकधी आम्हाला त्यांच्या शेजारी एक चिठ्ठी हवी असते. आम्ही ही मूल्ये स्वतंत्रपणे संग्रहित केल्यास, अनुप्रयोगाने हे लक्षात ठेवले पाहिजे की ते एकत्र आहेत. चला हे “कागद” एका लिफाफ्यात टाकूया. आम्ही फील्ड एका संग्रहात एकत्र करतो आणि त्याला record म्हणतो.
रेकॉर्डमध्ये फील्डचे कोणतेही संयोजन असू शकते. ऍप्लिकेशन त्यांना एका पॅकेटमध्ये एकत्र करते, ते संकुचित करते आणि आम्ही नुकतेच वर्णन केलेले बांधकाम वापरून संपूर्ण एन्क्रिप्ट करते. फील्ड मूल्ये, नावे, प्रकार आणि टॅग सर्व संरक्षित आहेत. वेबसाइट पत्ता बदलणे, अगदी तोच पासवर्ड ठेवत असतानाही, संपूर्ण रेकॉर्डची नवीन आवृत्ती तयार करते, नवीन record_key सह एनक्रिप्ट केली जाते.
हॅश-चेन
तुमच्या प्रकल्पात ब्लॉकचेन वापरावे का? → नाही
XKCD 2267
secret_key माहीत असलेले कोणीतरी आमच्या वॉल्टसाठी एन्क्रिप्टेड रेकॉर्ड तयार करू शकते. ते आमचे म्हणून स्वीकारणे टाळण्यासाठी, अनुप्रयोग प्रत्येक रेकॉर्ड आवृत्तीवर signing_key सह स्वाक्षरी करतो. या की शिवाय, बाहेरील व्यक्ती स्वाक्षरी असलेली आवृत्ती तयार करू शकत नाही जी सर्व्हर आणि इतर उपकरणे स्वीकारतील.
एनक्रिप्टेड आवृत्तीला काही सोबतची माहिती आवश्यक आहे: ती कोणत्या व्हॉल्टची आणि रेकॉर्डची आहे, ती कधी बदलली आणि कोणत्या आवृत्त्या त्याच्या आधीच्या आहेत. हे सार्वजनिक शीर्षलेख तयार करते. त्यात पासवर्ड नसतो, परंतु तरीही त्याला संरक्षणाची आवश्यकता असते: अन्यथा कोणीतरी सायफरटेक्स्टला स्पर्श न करता वस्तूंची मालकी आणि नातेसंबंध बदलू शकते. अनुप्रयोग सिफरटेक्स्टसह अचूक शीर्षलेख बाइट्सवर स्वाक्षरी करतो. स्वाक्षरी केलेला डेटा बदलल्याने स्वाक्षरी अवैध होते.
सर्व्हर सीलबंद पार्सलच्या गोदामासारखे दिसते. हे शीर्षलेख, कूटबद्ध सामग्री आणि स्वाक्षरी पाहते, परंतु आत पासवर्ड नाही, आणि प्राप्तकर्ता शहरात अस्तित्वात आहे हे माहीत आहे. हे signing_key च्या पिन केलेल्या सार्वजनिक भागाविरुद्ध स्वाक्षरी तपासते आणि नवीन आवृत्ती स्वीकारायची की नाही हे ठरवते. त्याला मास्टर पासवर्ड किंवा secret_key किंवा कोणत्याही खाजगी कीची आवश्यकता नाही. वाचताना, क्लायंट समान स्वाक्षरी तपासतो, नंतर डिक्रिप्शन दरम्यान, HPKE प्रमाणीकरण टॅग वापरून सामग्री आणि शीर्षलेख यांच्यातील बंधन पुन्हा तपासतो.
स्वाक्षरी आवृत्त्यांमधील दुवे देखील संरक्षित करते. अचूक हेडर आणि सिफरटेक्स्ट बाइट्सचा एक SHA-256 हॅश आवृत्तीचा ओळखकर्ता बनतो. पुढील आवृत्तीच्या शीर्षलेखामध्ये मागील आवृत्तीचा अभिज्ञापक आहे. जेव्हा आम्ही वेबसाइट पासवर्ड बदलतो, तेव्हा अनुप्रयोग या लिंकसह एक नवीन ऑब्जेक्ट तयार करतो आणि त्यावर स्वाक्षरी करतो. जुनी वस्तू आणि तिची स्वाक्षरी अपरिवर्तित राहते. त्यामुळे नवीन आवृत्तीची स्वाक्षरी जतन करताना पूर्ववर्ती बदलणे अयशस्वी होईल. दोन उपकरणांनी स्वतंत्र बदल केल्यास दोन्ही शाखा टिकून राहतात; विलीन केलेली आवृत्ती दोन्हीचा संदर्भ घेऊ शकते.
ब्लॉकचेन लक्षात आहे? तिथे आहे :-).
सार्वजनिक शीर्षलेख आम्हाला डिक्रिप्ट न करता दुवे तपासू देतो, परंतु काही माहिती दृश्यमान राहते. सर्व्हरला अभिज्ञापक, आवृत्ती दुवे, क्लायंटने दिलेला बदल वेळ, फील्डची संख्या आणि प्रत्येक फील्ड मूल्याचा एन्कोड केलेला आकार माहित असतो. एन्क्रिप्शन रेकॉर्डची सामग्री लपवते, ही संरचनात्मक माहिती नाही.
सिंक
“डेटा लीक नाही, विनामूल्य वितरित बॅकअप.”
इंटरनेट मेम.
अनेक डिव्हाइसेसवर काम करण्यासाठी, आम्हाला लॉक स्थानांतरित करण्याची आणि त्यांच्यामध्ये इतिहास रेकॉर्ड करण्याची आवश्यकता आहे. ऑब्जेक्ट फॉरमॅट बदलत नाही: आम्ही तेच एन्क्रिप्टेड बाइट्स आणि स्वाक्षरी हस्तांतरित करतो जे स्थानिकरित्या संग्रहित केले जातात.
मॅन्युअल ट्रान्सफरसाठी, ऍप्लिकेशन लॉक असलेले एक ZIP संग्रहण, सर्व स्थानिकरित्या संग्रहित एन्क्रिप्टेड रेकॉर्ड आवृत्त्या आणि स्वाक्षरी केलेली फाइल सूची तयार करते. पासवर्ड किंवा secret_key दोन्हीचा समावेश नाही. दुसऱ्या डिव्हाइसवर, अनुप्रयोग प्रथम लॉक उघडतो, नंतर स्वाक्षरी तपासतो, रेकॉर्ड डिक्रिप्ट करतो आणि स्थानिक व्हॉल्ट प्रत पुनर्संचयित करतो. आयात करणे अशा डिव्हाइससाठी आहे जेथे हे व्हॉल्ट अद्याप अस्तित्वात नाही; ते अस्तित्वात असलेल्या प्रतीसह इतिहास विलीन करत नाही.
सिंक सर्व्हर कार्यरत प्रतींमध्ये बदलांची देवाणघेवाण करतो. प्रथम अपलोड केल्यावर, ते स्वाक्षरी केलेले लॉक प्राप्त करते, स्वाक्षरी तपासते आणि signing_key च्या सार्वजनिक भागातून सार्वजनिक व्हॉल्ट पत्त्याची गणना करते. हे नंतर हेडरमधील ही की आणि व्हॉल्ट आयडेंटिफायर लक्षात ठेवते: हे सर्व्हरवर व्हॉल्टची नोंदणी करते. त्यानंतरचे बदल या अभिज्ञापकाशी जुळले पाहिजेत आणि त्याच की वरून स्वाक्षरी असणे आवश्यक आहे.
नवीन डिव्हाइसला व्हॉल्ट ॲड्रेस आणि secret_key आवश्यक आहे, त्यामुळे ॲप्लिकेशन त्यांना चेकसमसह ट्रान्सफर कोडमध्ये एकत्र करते. वापरकर्ता हा कोड डिव्हाइसवर हस्तांतरित करतो आणि स्वतंत्रपणे मास्टर पासवर्ड प्रविष्ट करतो; फक्त सार्वजनिक पत्ता सर्व्हरवर पाठविला जातो.
डाउनलोड केलेले लॉक उघडल्यानंतर, ऍप्लिकेशन पुनर्प्राप्त केलेल्या कीच्या सार्वजनिक भागांची secret_key आणि शीर्षलेखाशी तुलना करतो आणि ट्रान्सफर कोडच्या विरूद्ध गणना केलेला पत्ता तपासतो. हे नंतर रेकॉर्ड तपासण्यासाठी signing_key चा सत्यापित सार्वजनिक भाग जतन करते.
सिंक्रोनाइझेशन दरम्यान, अनुप्रयोग गहाळ आवृत्त्या आणतो आणि त्यातील बदल अपलोड करतो. सर्व्हर स्वाक्षरी आणि आधीच्या आवृत्त्यांचे दुवे तपासतो, स्वीकारलेल्या वस्तू संग्रहित करतो आणि इतर उपकरणांना पास करतो. प्राप्त डेटा तपासणे, ते डिक्रिप्ट करणे आणि विवादांचे निराकरण करणे हे सर्व वापरकर्त्याच्या डिव्हाइसवर होते.
नोंदणीसाठी कोणतेही नाव, ईमेल पत्ता किंवा वेगळा पासवर्ड विचारला जात नाही. सर्व्हर सार्वजनिक पत्ता, स्वाक्षरी पडताळणी की, सार्वजनिक शीर्षलेख, ऑब्जेक्ट आकार आणि आवृत्ती दुवे पाहतो. हे IP पत्ते आणि विनंती वेळा देखील पाहते. मास्टर पासवर्ड, secret_key, खाजगी की आणि प्लेनटेक्स्ट रेकॉर्ड सामग्री वापरकर्त्याच्या डिव्हाइसवर राहतात. सार्वजनिक पत्ता माहीत असलेला कोणीही एनक्रिप्टेड वस्तू डाउनलोड करू शकतो, परंतु त्या वाचण्यासाठी वापरकर्त्याचे रहस्य आवश्यक आहे.
या तपासण्या बनावट वस्तू शोधतात, परंतु सर्व्हरने संपूर्ण इतिहास आणि त्याची नवीनतम स्थिती दर्शविली असल्याचे सिद्ध होत नाही. हे क्लायंटने कधीही न पाहिलेली शाखा लपवू शकते किंवा सातत्यपूर्ण जुना डेटासेट परत करू शकते. स्वाक्षरी वैयक्तिक ऑब्जेक्टच्या सत्यतेची पुष्टी करते, सर्व्हरच्या प्रतिसादाची पूर्णता नाही. वापरकर्त्याला दुसऱ्या डिव्हाइसवर गहाळ बदल लक्षात येऊ शकतात, परंतु सातत्यपूर्ण जुना इतिहास hash-chain सत्यापन उत्तीर्ण करेल.
मास्टर पासवर्ड बदलणे
मग, तुमची पवित्रता तिचा पासवर्ड बदलेल का?
हॅकर्स (1995)
मास्टर पासवर्ड बदलल्याने फक्त लॉक पुन्हा एनक्रिप्ट होते; आतमध्ये master_key समान राहते. त्यामुळे रेकॉर्ड, त्यांच्या स्वाक्षरी, secret_key आणि तिजोरीचा पत्ता अपरिवर्तित राहतो. नवीन लॉक त्याच signing_key सह स्वाक्षरी केलेले आहे.
जुनी लॉक प्रत अजूनही जुन्या पासवर्डसह उघडते आणि त्याच secret_key; पासवर्ड बदलल्याने आधीच उघड झालेल्या कळा रद्द होत नाहीत.
पूर्ण चित्र
लॉक master_key संरक्षित करते, message_key रेकॉर्ड एन्क्रिप्ट करते आणि signing_key स्वाक्षरी तयार करते. ZIP संग्रहण आणि सर्व्हर स्वाक्षरीसह एनक्रिप्टेड वस्तू प्राप्त करतात.