मैं मशीन के टीपीएम मॉड्यूल का उपयोग करके बाइट्स को कैसे एन्क्रिप्ट कर सकता हूं?
CryptProtectData
विंडोज एपीआई का उपयोग करके एक बूँद को एन्क्रिप्ट करने के लिए एक (अपेक्षाकृत) सरल एपीआई प्रदान करता है CryptProtectData
, जिसे हम फ़ंक्शन का उपयोग करने के लिए आसान लपेट सकते हैं:
public Byte[] ProtectBytes(Byte[] plaintext)
{
//...
}
इस ProtectBytes
विचार से कम महत्वपूर्ण नहीं हैं कि आप इसे आसानी से उपयोग कर सकते हैं:
- यहाँ बाइट्स हैं जिन्हें मैं गुप्त कुंजी द्वारा एन्क्रिप्ट किया गया हूं
System
- मुझे वापस एन्क्रिप्टेड बूँद दे
दिया गया बूँद एक अनिर्दिष्ट है प्रलेखन संरचना है जिसमें मूल डेटा को डिक्रिप्ट और वापस करने के लिए आवश्यक सब कुछ शामिल है (हैश एल्गोरिथ्म, सिफर एल्गोरिथ्म, नमक, एचएमएसी हस्ताक्षर, आदि)।
पूर्णता के लिए, यहाँ बाइट को सुरक्षित रखने के लिए नमूना स्यूडोडकोड कार्यान्वयन का ProtectBytes
उपयोग किया Crypt API
गया है:
public Byte[] ProtectBytes(Byte[] plaintext)
{
//Setup our n-byte plaintext blob
DATA_BLOB dataIn;
dataIn.cbData = plaintext.Length;
dataIn.pbData = Addr(plaintext[0]);
DATA_BLOB dataOut;
//dataOut = EncryptedFormOf(dataIn)
BOOL bRes = CryptProtectData(
dataIn,
null, //data description (optional PWideChar)
null, //optional entropy (PDATA_BLOB)
null, //reserved
null, //prompt struct
CRYPTPROTECT_UI_FORBIDDEN || CRYPTPROTECT_LOCAL_MACHINE,
ref dataOut);
if (!bRes) then
{
DWORD le = GetLastError();
throw new Win32Error(le, "Error calling CryptProtectData");
}
//Copy ciphertext from dataOut blob into an actual array
bytes[] result;
SetLength(result, dataOut.cbData);
CopyMemory(dataOut.pbData, Addr(result[0]), dataOut.cbData);
//When you have finished using the DATA_BLOB structure, free its pbData member by calling the LocalFree function
LocalFree(HANDLE(dataOut.pbData)); //LocalFree takes a handle, not a pointer. But that's what the SDK says.
}
टीपीएम के साथ कैसे करें?
उपरोक्त कोड केवल स्थानीय मशीन के लिए डेटा एन्क्रिप्ट करने के लिए उपयोगी है। डेटा को System
कुंजी जनरेटर के रूप में खाते का उपयोग करके एन्क्रिप्ट किया गया है ( विवरण, जबकि दिलचस्प है, महत्वहीन हैं )। अंतिम परिणाम यह है कि मैं डेटा एन्क्रिप्ट कर सकता हूं (जैसे एक हार्ड ड्राइव एन्क्रिप्शन मास्टर कुंजी) जिसे केवल स्थानीय मशीन द्वारा डिक्रिप्ट किया जा सकता है।
अब इस एक कदम को आगे बढ़ाने का समय आ गया है। मैं कुछ डेटा (जैसे एक हार्ड ड्राइव एन्क्रिप्शन मास्टर कुंजी) को एन्क्रिप्ट करना चाहता हूं जिसे केवल स्थानीय टीपीएम द्वारा डिक्रिप्ट किया जा सकता है। दूसरे शब्दों में, मैं विंडोज में टीपीएम के साथ, एंड्रॉइड के लिए नीचे ब्लॉक आरेख में क्वालकॉम ट्रस्टेड एक्ज़ीक्यूशन एनवायरनमेंट ( टीईई ) को बदलना चाहता हूं :
नोट : मुझे एहसास है कि टीपीएम डेटा-हस्ताक्षर नहीं करता है (या यदि यह करता है, तो यह गारंटी नहीं देता है कि हर बार एक ही डेटा पर हस्ताक्षर करना एक ही बाइनरी आउटपुट देगा)। यही कारण है कि मैं "RSA हस्ताक्षर" को बदलने के लिए तैयार हूँ " एक हार्डवेयर बाउंड कुंजी के साथ 256-बिट बूँद को एन्क्रिप्ट करने के साथ " ।
तो कोड कहां है?
समस्या यह है कि टीपीएम प्रोग्रामिंग MSDN पर पूरी तरह से अनिर्दिष्ट है । कोई भी ऑपरेशन करने के लिए कोई एपीआई उपलब्ध नहीं है। इसके बजाय आपको अपने आप को विश्वसनीय कम्प्यूटिंग ग्रुप के सॉफ्टवेयर स्टैक (उर्फ टीएसएस) की एक प्रति ढूंढनी होगी , यह पता लगाना होगा कि किस क्रम में टीपीएम को भेजना है, पेलोड के साथ, किस क्रम में, और सीधे आदेश भेजने के लिए विंडो के Tbsip_Subb_Command फ़ंक्शन को कॉल करें :
TBS_RESULT Tbsip_Submit_Command(
_In_ TBS_HCONTEXT hContext,
_In_ TBS_COMMAND_LOCALITY Locality,
_In_ TBS_COMMAND_PRIORITY Priority,
_In_ const PCBYTE *pabCommand,
_In_ UINT32 cbCommand,
_Out_ PBYTE *pabResult,
_Inout_ UINT32 *pcbOutput
);
Windows के पास क्रिया करने के लिए कोई उच्च स्तरीय API नहीं है।
यह SATA I / O आदेशों को आपकी हार्ड ड्राइव पर जारी करके एक पाठ फ़ाइल बनाने की कोशिश करने के नैतिक समकक्ष है ।
सिर्फ ट्राउजर का इस्तेमाल क्यों न करें
विश्वसनीय कम्प्यूटिंग समूह (टीसीजी) ने अपने स्वयं के एपीआई को परिभाषित किया: टीसीबी सॉफ्टवेयर स्टैक (टीएसएस) । इस एपीआई का कार्यान्वयन कुछ लोगों द्वारा बनाया गया था, और इसे ट्राउजर कहा जाता है । एक व्यक्ति ने उस प्रोजेक्ट को विंडोज पर पोर्ट कर दिया ।
उस कोड के साथ समस्या यह है कि यह विंडोज की दुनिया में पोर्टेबल नहीं है। उदाहरण के लिए, आप इसे डेल्फी से उपयोग नहीं कर सकते, आप इसे C # से उपयोग नहीं कर सकते। इसकी जरूरत है:
- OpenSSL
- pThread
मैं सिर्फ यह चाहता हूं कि कोड मेरे टीपीएम के साथ कुछ एन्क्रिप्ट करे।
उपरोक्त के CryptProtectData
लिए फ़ंक्शन बॉडी में इसके अलावा और कुछ नहीं होना चाहिए।
TPM का उपयोग कर डेटा एन्क्रिप्ट करने के लिए समान कोड क्या है? जैसा कि दूसरों ने उल्लेख किया है, आपको संभवतः तीन टीपीएम मैनुअल से परामर्श करना होगा, और खुद को ब्लब्स का निर्माण करना होगा । इसमें संभवतः TPM_seal
कमांड शामिल है । हालांकि मुझे लगता है कि मैं डेटा को सील नहीं करना चाहता , मुझे लगता है कि मैं इसे बांधना चाहता हूं :
बाइंडिंग - TPM बाइंड कुंजी का उपयोग कर डेटा को एन्क्रिप्ट करता है, एक स्टोरेज कुंजी से आरएसए एक अद्वितीय कुंजी है। सीलिंग - डेटा को बाइंडिंग के समान तरीके से एन्क्रिप्ट करता है, लेकिन इसके अलावा एक स्थिति भी निर्दिष्ट करता है जिसमें टीपीएम को डिक्रिप्टेड (अनसेल्ड) किए जाने के लिए होना चाहिए
कोड की 20 पंक्तियों को खोजने के लिए मुझे तीन आवश्यक वॉल्यूम पढ़ने की कोशिश करनी चाहिए:
लेकिन मुझे नहीं पता कि मैं क्या पढ़ रहा हूं। यदि किसी प्रकार का ट्यूटोरियल या उदाहरण था, तो मेरे पास एक शॉट हो सकता है। लेकिन मैं पूरी तरह से खो गया हूं।
तो हम Stackoverflow से पूछते हैं
उसी तरह मैं प्रदान करने में सक्षम था:
Byte[] ProtectBytes_Crypt(Byte[] plaintext)
{
//...
CryptProtectData(...);
//...
}
क्या कोई इसके समकक्ष प्रदान कर सकता है:
Byte[] ProtectBytes_TPM(Byte[] plaintext)
{
//...
Tbsip_Submit_Command(...);
Tbsip_Submit_Command(...);
Tbsip_Submit_Command(...);
//...snip...
Tbsip_Submit_Command(...);
//...
}
यह वही काम करता है, जो System
एलएसए में बंद एक कुंजी के बजाय टीपीएम में बंद है?
अनुसंधान की शुरुआत
मुझे ठीक से पता नहीं है कि बाइंड का क्या मतलब है। लेकिन टीपीएम मेन - पार्ट 3 कमांड्स - स्पेसिफिकेशन वर्जन 1.2 को देखते हुए, इसमें बाइंड का उल्लेख है :
10.3 TPM_UnBind
TPM_UnBind डेटा ब्लॉब लेता है जो Tspi_Data_Bind कमांड का परिणाम है और इसे उपयोगकर्ता को निर्यात करने के लिए कम करता है। कॉल करने वाले को कुंजी के उपयोग को अधिकृत करना चाहिए जो आने वाली बूँद को डिक्रिप्ट करेगा। TPM_UnBind ब्लॉक-बाय-ब्लॉक आधार पर संचालित होता है, और एक ब्लॉक और दूसरे के बीच किसी भी संबंध की कोई धारणा नहीं है।
क्या भ्रम है कोई Tspi_Data_Bind
आदेश नहीं है ।
अनुसंधान प्रयास
यह भयावह है कि कैसे किसी ने कभी भी टीपीएम या इसके संचालन के दस्तावेज को परेशान नहीं किया है। ऐसा लगता है जैसे वे अपना सारा समय इस शांत चीज़ के साथ खेलने में बिता रहे थे, लेकिन किसी चीज़ के लिए इसे उपयोगी बनाने के दर्दनाक कदम से निपटना नहीं चाहते थे ।
टीपीएम 2.0 के लिए अब (अब) मुफ्त पुस्तक ए प्रैक्टिकल गाइड के साथ शुरू : सुरक्षा के नए युग में विश्वसनीय प्लेटफॉर्म मॉड्यूल का उपयोग करना :
अध्याय 3 - टीपीएम 2.0 पर त्वरित ट्यूटोरियल
टीपीएम की स्व-निर्मित निजी कुंजी तक पहुंच है, इसलिए यह सार्वजनिक कुंजी के साथ कुंजियों को एन्क्रिप्ट कर सकता है और फिर परिणामी बूँद को हार्ड डिस्क पर संग्रहीत कर सकता है। इस तरह, टीपीएम उपयोग के लिए उपलब्ध लगभग असीमित संख्या में चाबियों को रख सकता है लेकिन मूल्यवान आंतरिक भंडारण को बर्बाद नहीं कर सकता। हार्ड डिस्क पर संग्रहीत कीज़ को मिटाया जा सकता है, लेकिन उन्हें बैकअप भी दिया जा सकता है, जो डिजाइनरों को स्वीकार्य ट्रेड-ऑफ की तरह लग रहा था।
मैं टीपीएम की सार्वजनिक कुंजी के साथ एक कुंजी को कैसे एन्क्रिप्ट कर सकता हूं?
अध्याय 4 - मौजूदा अनुप्रयोग जो TPM का उपयोग करते हैं
टीपीएम का उपयोग करना चाहिए कि आवेदन लेकिन नहीं
पिछले कुछ वर्षों में, वेब-आधारित अनुप्रयोगों की संख्या में वृद्धि हुई है। इनमें वेब-आधारित बैकअप और स्टोरेज हैं। बड़ी संख्या में कंपनियां अब ऐसी सेवाओं की पेशकश करती हैं, लेकिन जहां तक हम जानते हैं, इन सेवाओं के लिए कोई भी ग्राहक उपयोगकर्ता को टीपीएम के लिए बैकअप सेवा की कुंजी को लॉक नहीं करने देता है। यदि ऐसा किया जाता है, तो यह निश्चित रूप से अच्छा होगा यदि टीपीएम कुंजी खुद ही कई मशीनों पर डुप्लिकेट करके समर्थित हो। यह डेवलपर्स के लिए एक अवसर प्रतीत होता है।
एक डेवलपर TPM की कुंजी को कैसे लॉक करता है?
अध्याय 9 - उत्तराधिकारिणी
उपयोग मामले: लॉगिंग पासवर्डों का भंडारण
एक विशिष्ट पासवर्ड फ़ाइल पासवर्ड की नमकीन राख को संग्रहीत करती है। सत्यापन में नमकीन बनाना शामिल है और एक आपूर्ति किए गए पासवर्ड को हैशिंग और संग्रहीत मूल्य से तुलना करना है। क्योंकि गणना में कोई रहस्य शामिल नहीं है, यह पासवर्ड फ़ाइल पर एक ऑफ़लाइन हमले के अधीन है।
यह उपयोग मामला TPM- जनरेटेड HMAC कुंजी का उपयोग करता है। पासवर्ड फ़ाइल नमकीन पासवर्ड के HMAC को संग्रहीत करता है। सत्यापन में आपूर्ति किए गए पासवर्ड को नमन और HMAC करना और संग्रहीत मूल्य से उसकी तुलना करना शामिल है। क्योंकि एक ऑफ़लाइन हमलावर के पास HMAC कुंजी नहीं है, हमलावर गणना करके प्रदर्शन पर हमला नहीं कर सकता।
यह काम कर सकता है । यदि टीपीएम में एक गुप्त एचएमएसी कुंजी है, और केवल मेरे टीपीएम को एचएमएसी कुंजी पता है, तो मैं "एचएमएसी" के साथ "साइन (उर्फ टीपीएम एन्क्रिप्ट के साथ निजी कुंजी)" को बदल सकता हूं। लेकिन फिर अगली पंक्ति में वह खुद को पूरी तरह से उलट देता है:
TPM2_Create, HMAC कुंजी निर्दिष्ट कर रहा है
अगर मैं HMAC कुंजी निर्दिष्ट करने के लिए है यह एक TPM रहस्य नहीं है। तथ्य यह है कि एचएमएसी कुंजी गुप्त नहीं है, यह समझ में आता है जब आपको एहसास होता है कि यह क्रिप्टोग्राफिक उपयोगिताओं के बारे में अध्याय है जो टीपीएम प्रदान करता है। अपने आप को SHA2, AES, HMAC, या RSA लिखने के बजाय, आप टीपीएम का पहले से ही उपयोग कर रहे हैं।
अध्याय 10 - कुंजी
एक सुरक्षा उपकरण के रूप में, हार्डवेयर डिवाइस में उन्हें सुरक्षित रखते हुए कुंजियों का उपयोग करने के लिए एक एप्लिकेशन की क्षमता TPM की सबसे बड़ी ताकत है। टीपीएम बाह्य उत्पन्न कीज़ को उत्पन्न और आयात दोनों कर सकता है। यह असममित और सममित कुंजी दोनों का समर्थन करता है।
अति उत्कृष्ट! आप इसे कैसे करते हो!?
कुंजी जेनरेटर
तर्क से, टीपीएम की सबसे बड़ी ताकत एक क्रिप्टोग्राफिक कुंजी उत्पन्न करने और एक हार्डवेयर सीमा के भीतर अपने रहस्य की रक्षा करने की क्षमता है। प्रमुख जनरेटर टीपीएम के अपने यादृच्छिक संख्या जनरेटर पर आधारित है और यादृच्छिकता के बाहरी स्रोतों पर भरोसा नहीं करता है। इस प्रकार यह एंट्रॉपी के अपर्याप्त स्रोत के साथ कमजोर सॉफ्टवेयर्स पर आधारित कमजोरियों को समाप्त करता है।
क्या TPM में क्रिप्टोग्राफ़िक कुंजियाँ उत्पन्न करने और एक हार्डवेयर सीमा के भीतर अपने रहस्यों की रक्षा करने की क्षमता है? है तो, कैसे?
अध्याय 12 - प्लेटफ़ॉर्म कॉन्फ़िगरेशन रजिस्टर
प्राधिकरण के लिए पीसीआर
उपयोग मामले: प्लेटफॉर्म राज्य के लिए एक हार्ड डिस्क की गणना की कुंजी है
पूर्ण-डिस्क एन्क्रिप्शन अनुप्रयोग कहीं अधिक सुरक्षित हैं यदि कोई TPM एन्क्रिप्शन कुंजी की सुरक्षा करता है यदि वह उसी डिस्क पर संग्रहीत है, केवल पासवर्ड द्वारा संरक्षित है। सबसे पहले, टीपीएम हार्डवेयर में एंटी-हैमरिंग प्रोटेक्शन होता है (टीपीएम डिक्शनरी प्रोटेक्शन प्रोटेक्शन के विस्तृत विवरण के लिए चैप्टर 8 देखें), जो पासवर्ड को अव्यवहारिक बनाने के लिए क्रूरतापूर्ण हमला करता है। केवल एक सॉफ्टवेयर द्वारा संरक्षित कुंजी एक कमजोर पासवर्ड से कहीं अधिक कमजोर है। दूसरा, डिस्क पर संग्रहीत एक सॉफ्टवेयर कुंजी चोरी करना कहीं अधिक आसान है। डिस्क (या डिस्क का बैकअप) लें, और आपको कुंजी मिलती है। जब टीपीएम कुंजी रखता है, तो पूरा प्लेटफॉर्म, या कम से कम डिस्क और मदरबोर्ड, चोरी होना चाहिए।
सीलिंग कुंजी को न केवल पासवर्ड से बल्कि एक नीति द्वारा संरक्षित करने की अनुमति देती है। एक विशिष्ट नीति सीलिंग के समय पीसीआर मूल्यों (सॉफ्टवेयर स्थिति) की कुंजी को बंद कर देती है। यह मानता है कि पहले बूट में स्थिति समझौता नहीं है। पहले बूट पर मौजूद किसी भी प्रीइंस्टॉल्ड मैलवेयर को पीसीआर में मापा जाएगा, और इस तरह कुंजी को एक समझौता किए गए सॉफ़्टवेयर स्टेट में सील कर दिया जाएगा। एक कम भरोसेमंद उद्यम में मानक डिस्क छवि और उस छवि का प्रतिनिधित्व करने वाले पीसीआर के लिए सील हो सकती है। इन पीसीआर मूल्यों को संभवतः अधिक विश्वसनीय प्लेटफॉर्म पर प्राथमिकता दी जाएगी। एक और भी अधिक परिष्कृत उद्यम TPM2_PolicyAuthorize का उपयोग करेगा, और विश्वसनीय पीसीआर मूल्यों के एक सेट को अधिकृत करते हुए कई टिकट प्रदान करेगा। PCRbrittleness समस्या को हल करने के लिए नीति प्राधिकृत और उसके आवेदन के विस्तृत विवरण के लिए अध्याय 14 देखें।
हालाँकि एक पासवर्ड भी कुंजी की सुरक्षा कर सकता है, लेकिन TPM कुंजी पासवर्ड के बिना भी सुरक्षा लाभ है। एक हमलावर TPMkey पासवर्ड की आपूर्ति किए बिना प्लेटफ़ॉर्म को बूट कर सकता है लेकिन OS उपयोगकर्ता नाम और पासवर्ड के बिना लॉग इन नहीं कर सकता। OSsecurity डेटा की सुरक्षा करता है। हमलावर एक वैकल्पिक ओएस बूट कर सकता है, लाइव डीवीडी या यूएसबी स्टिक से कह सकता है कि हार्ड ड्राइव से, ओएस लॉगिन सुरक्षा को बायपास करने के लिए। हालाँकि, यह भिन्न बूट कॉन्फ़िगरेशन और सॉफ़्टवेयर PCRvalues को बदल देगा। क्योंकि ये नए PCR सीलबंद मूल्यों से मेल नहीं खाते हैं, TPM डिक्रिप्शन कुंजी को रिलीज़ नहीं करेगा, और हार्ड ड्राइव को डिक्रिप्ट नहीं किया जा सकता है।
अति उत्कृष्ट! यह वास्तव में उपयोग मामला है जो मैं चाहता हूँ। यह उपयोग का मामला भी है जिसके लिए Microsoft TPM का उपयोग करता है। मैं यह कैसे करुं!?
इसलिए मैंने उस पूरी किताब को पढ़ा, और इसने कुछ भी उपयोगी नहीं दिया। यह काफी प्रभावशाली है क्योंकि यह 375 पृष्ठ है। आपको आश्चर्य है कि पुस्तक में क्या निहित है - और इस पर पीछे मुड़कर, मुझे कोई पता नहीं है।
इसलिए हम टीपीएम की प्रोग्रामिंग के लिए निश्चित गाइड पर छोड़ देते हैं, और माइक्रोसॉफ्ट से कुछ डॉक्यूमेंटेशन के बजाय मुड़ जाते हैं:
से माइक्रोसॉफ्ट TPM मंच क्रिप्टो-प्रदाता टूलकिट । इसमें उल्लेख है कि मैं क्या करना चाहता हूं:
इंडोर्समेंट की या ई.के.
ईके को मंच के लिए एक विश्वसनीय क्रिप्टोग्राफिक पहचानकर्ता प्रदान करने के लिए डिज़ाइन किया गया है। एक एंटरप्राइज़ अपने उद्यम में सभी पीसी के टीपीएम से संबंधित एंडोर्समेंट कीज़ का एक डेटाबेस रख सकता है, या एक डेटा सेंटर फैब्रिक कंट्रोलर के पास सभी ब्लेड में टीपीएम का डेटाबेस हो सकता है। विंडोज पर आप ईके के सार्वजनिक भाग को पढ़ने के लिए "विंडोज 8 में प्लेटफॉर्म क्रिप्टो प्रदाता" में वर्णित एनसीक्रिप्ट प्रदाता का उपयोग कर सकते हैं।
टीपीएम के अंदर कहीं एक आरएसए निजी कुंजी है। उस कुंजी को वहां बंद कर दिया जाता है - कभी भी बाहरी दुनिया द्वारा नहीं देखा जाना चाहिए। मैं चाहता हूं कि टीपीएम कुछ निजी कुंजी के साथ हस्ताक्षर करे (यानी इसे निजी कुंजी के साथ एन्क्रिप्ट करें)।
इसलिए मुझे सबसे बुनियादी ऑपरेशन चाहिए जो संभवतः मौजूद हो सकते हैं:
अपनी निजी कुंजी के साथ कुछ एन्क्रिप्ट करें। मैं भी (अभी तक) और अधिक जटिल सामान के लिए नहीं कह रहा हूँ:
- "सीलिंग" यह पीसीआर राज्य पर आधारित है
- एक कुंजी बना रहा है और इसे वाष्पशील या गैर-वाष्पशील मेम्ब्रो में संग्रहीत कर रहा है
- एक सममित कुंजी बनाना और इसे टीपीएम में लोड करने की कोशिश करना
मैं सबसे बुनियादी ऑपरेशन के लिए कह रहा हूं जो एक टीपीएम कर सकता है। यह कैसे करना है, इसके बारे में कोई जानकारी प्राप्त करना असंभव है?
मुझे यादृच्छिक डेटा मिल सकता है
मुझे लगता है कि मैं glib जा रहा था जब मैंने कहा था कि RSA पर हस्ताक्षर करना सबसे बुनियादी बात है जो TPM कर सकता है। सबसे बुनियादी बात TPM करने के लिए कहा जा सकता है मुझे यादृच्छिक बाइट्स देना है। कि मुझे पता है कि कैसे करना है:
public Byte[] GetRandomBytesTPM(int desiredBytes)
{
//The maximum random number size is limited to 4,096 bytes per call
Byte[] result = new Byte[desiredBytes];
BCRYPT_ALG_HANDLE hAlgorithm;
BCryptOpenAlgorithmProvider(
out hAlgorithm,
BCRYPT_RNG_ALGORITHM, //AlgorithmID: "RNG"
MS_PLATFORM_CRYPTO_PROVIDER, //Implementation: "Microsoft Platform Crypto Provider" i.e. the TPM
0 //Flags
);
try
{
BCryptGenRandom(hAlgorithm, @result[0], desiredBytes, 0);
}
finally
{
BCryptCloseAlgorithmProvider(hAlgorithm);
}
return result;
}
फैंसी थिंग
मुझे एहसास है कि टीपीएम का उपयोग करने वाले लोगों की मात्रा बहुत कम है। यही कारण है कि Stackoverflow पर कोई भी जवाब नहीं है। इसलिए मैं अपनी आम समस्या का समाधान पाने के लिए वास्तव में बहुत लालची नहीं हो सकता। लेकिन जिस चीज को मैं वास्तव में करना चाहता हूं वह है कुछ डेटा को "सील" करना:
- टीपीएम कुछ डेटा प्रस्तुत करें (उदाहरण के लिए मुख्य सामग्री के 32 बाइट्स)
- TPM डेटा को एन्क्रिप्ट करें, कुछ अपारदर्शी बूँद संरचना लौटाए
- बाद में टीपीएम से बूँद को डिक्रिप्ट करने के लिए कहें
- डिक्रिप्शन केवल तभी काम करेगा जब टीपीएम के पीसीआर रजिस्टर एन्क्रिप्शन के दौरान समान थे।
दूसरे शब्दों में:
Byte[] ProtectBytes_TPM(Byte[] plaintext, Boolean sealToPcr)
{
//...
}
Byte[] UnprotectBytes_TPM(Byte[] protectedBlob)
{
//...
}
क्रिप्टोग्राफी नेक्स्ट जनरल (Cng, उर्फ BCrypt) टीपीएम का समर्थन करता है
विंडोज में मूल क्रिप्टोग्राफी एपीआई को क्रिप्टो एपीआई के रूप में जाना जाता था।
Windows Vista के साथ शुरू, क्रिप्टो एपीआई के साथ प्रतिस्थापित किया गया है क्रिप्टोग्राफी एपीआई: अगली पीढ़ी (आंतरिक रूप में जाना जाता BestCrypt , के रूप में संक्षिप्त BCrypt , साथ भ्रमित होने की नहीं पासवर्ड हैशिंग एल्गोरिथ्म )।
दो BCrypt प्रदाताओं के साथ विंडोज जहाज :
- Microsoft आदिम प्रदाता (
MS_PRIMITIVE_PROVIDER
) डिफ़ॉल्ट : सभी प्राथमिकताओं का डिफ़ॉल्ट सॉफ़्टवेयर कार्यान्वयन (हैशिंग, सममित एन्क्रिप्शन, डिजिटल हस्ताक्षर इत्यादि) - Microsoft प्लेटफ़ॉर्म क्रिप्टो प्रदाता (
MS_PLATFORM_CRYPTO_PROVIDER
): प्रदाता जो टीपीएम एक्सेस प्रदान करता है
प्लेटफार्म क्रिप्टो प्रदाता MSDN पर दर्ज नहीं किया है, लेकिन 2012 में माइक्रोसॉफ्ट रिसर्च साइट से प्रलेखन है:
टीपीएम प्लेटफॉर्म क्रिप्टो-प्रदाता टूलकिट
टीपीएम प्लेटफ़ॉर्म क्रिप्टो प्रदाता और टूलकिट में विंडोज 8 में टीपीएम से संबंधित कार्यक्षमता का उपयोग करने के लिए नमूना कोड, उपयोगिताओं और प्रलेखन शामिल हैं। वर्णित सिस्टम में टीपीएम समर्थित क्रिप्टो-नेक्स्ट-जनरल (सीएनजी) प्लेटफॉर्म क्रिप्टो-प्रदाता और कैसे सत्यापन-सेवा प्रदाता शामिल हैं नई विंडोज सुविधाओं का उपयोग कर सकते हैं। दोनों TPM1.2 और TPM2.0-आधारित सिस्टम समर्थित हैं।
ऐसा लगता है कि माइक्रोसॉफ्ट का इरादा क्रिप्टोग्राफी एनजी एपीआई के माइक्रोसॉफ्ट प्लेटफॉर्म क्रिप्टो प्रदाता के साथ टीपीएम क्रिप्टो कार्यक्षमता को सतह पर लाना है।
Microsoft BCrypt का उपयोग कर सार्वजनिक कुंजी एन्क्रिप्शन
मान लीजिये:
- मैं आरएसए असममित एन्क्रिप्शन (टीपीएम का उपयोग करके) करना चाहता हूं
- Microsoft BestCrypt RSA असममित एन्क्रिप्शन का समर्थन करता है
- Microsoft BestCrypt में एक TPM प्रदाता है
आगे का तरीका यह हो सकता है कि Microsoft क्रिप्टोग्राफी नेक्स्ट जेन एपीआई का उपयोग करके डिजिटल हस्ताक्षर कैसे करें ।
मेरा अगला कदम मानक प्रदाता ( MS_PRIMITIVE_PROVIDER
) का उपयोग करते हुए आरएसए सार्वजनिक कुंजी के साथ बीसीक्रिप्ट में एन्क्रिप्शन करने के लिए कोड के साथ आना होगा । उदाहरण के लिए:
modulus
: 0xDC 67 FA F4 9E F2 72 1D 45 2C B4 80 79 06 A0 94 27 50 8209 DD 67 CE 57 B8 6C 4A 40F 4F 40 9F D2 69 FB 995D 85 0,0 07 A1 F9 47 1B 56 16 6E F6 7F B9 CF 2A 58 36 37 99 29 AA 4F A8 12 E8 4F C7 82 2B 9D 72 2A 9C DE 6F C2 EE 12 6D CF F0 F2 B8 C4 DD 7C 5C 1A C8 17 51 9 9 9 ACF DF 22 22 04D D7 F9 4B 09B 9 DE 9A EB 5C 51 1A D8 F8 F9 56 9E F8 FB 37 9B 3F D3 74 65 24 0D FF 34 75 57 A4 F5 BF 55publicExponent
: 65537
उस कोड के कामकाज के साथ, मैं टीपीएम प्रदाता ( MS_PLATFORM_CRYPTO_PROVIDER
) का उपयोग करने में सक्षम हो सकता हूं ।
2/22/2016: और Apple के साथ उपयोगकर्ता डेटा को डिक्रिप्ट करने में मदद करने के लिए मजबूर किया जा रहा है, टीपीएम को सबसे सरल कार्य करने के लिए कैसे बनाया गया है, इसके लिए नए सिरे से रुचि है कि इसके लिए आविष्कार किया गया था - कुछ एन्क्रिप्ट करना।
यह लगभग एक कार के मालिक के बराबर है, लेकिन किसी को नहीं पता है कि एक को कैसे शुरू किया जाए। यह वास्तव में उपयोगी और शांत चीजें कर सकता है, अगर केवल हम पिछले चरण 1 प्राप्त कर सकते हैं ।