पिछले लेख "PKCS # 11 टोकन: प्रमाणपत्र और निजी कुंजी " में हमने जांच की कि कैसे PKCS # 11 v.2.40 इंटरफ़ेस के साथ टोकन / स्मार्टकार्ड पर संग्रहीत तीनों प्रमाणपत्र x सार्वजनिक कुंजी x निजी कुंजी को विशिष्ट रूप से संबद्ध करना है। इस लेख में हम मुख्य जोड़ी पीढ़ी के बारे में बात करेंगे। हम पिछली बार की तरह, "GOST R 34.10-2012 सूचना प्रौद्योगिकी पर भरोसा करेंगे ।" क्रिप्टोग्राफिक सूचना सुरक्षा। इलेक्ट्रॉनिक डिजिटल हस्ताक्षर के गठन और सत्यापन की प्रक्रिया । ”तो एक प्रमुख जोड़ी क्या है?
मुख्य जोड़ी में दो कुंजी शामिल हैं:- / /Private key — , . / ;
- / / Public key — , , .
यह याद रखना चाहिए कि निजी और सार्वजनिक कुंजी न केवल उनके मूल्य हैं (सार्वजनिक कुंजी GOST R 34.10-2001 के लिए यह 512 बिट्स है), बल्कि डिजिटल हस्ताक्षर योजना ( GOST R 34.10-2012 के खंड 5.2) के पैरामीटर भी हैं । भविष्य में, सादगी के लिए, हम डिजिटल हस्ताक्षर योजना के मापदंडों को प्रमुख जोड़ी के मापदंडों (क्रिप्टोपामेटर्स) कहेंगे।हस्ताक्षर की सार्वजनिक कुंजी की गणना निजी कुंजी के कुछ फ़ंक्शन के मूल्य के रूप में की जाती है, लेकिन सार्वजनिक कुंजी का ज्ञान निजी कुंजी को निर्धारित करना असंभव बनाता है।प्रमुख जोड़े के लिए GOST R 34.10-2001 और GOST R 34.10-2012 की निजी कुंजी लंबाई 256 बिट्स (क्रमशः, एक सार्वजनिक कुंजी 512 बिट्स) के साथ है, निम्नलिखित क्रिप्टोग्राफ़िक मापदंडों को परिभाषित किया गया है:- आईडी-GostR3410-2001-CryptoPro-ए-ParamSet;
- आईडी-GostR3410-2001-CryptoPro-B-ParamSet;
- आईडी-GostR3410-2001-CryptoPro-C-ParamSet;
- आईडी-GostR3410-2001-CryptoPro-XchA-ParamSet;
- आईडी-GostR3410-2001-CryptoPro-XchB-ParamSet।
मुख्य जोड़े के लिए GOST R 34.10-2012, जिसकी निजी कुंजी लंबाई 512 बिट्स (क्रमशः, एक सार्वजनिक कुंजी 1024 बिट्स) है, निम्नलिखित क्रिप्टोग्राफ़िक मापदंडों को परिभाषित किया गया है ("सूचना प्रौद्योगिकी। सूचना की क्रिप्टोग्राफ़िक सुरक्षा। क्रिप्टोग्राफ़िक एल्गोरिदम और प्रोटोकॉल के लिए एलिप्टिक वक्र पैरामीटर"):- आईडी-tc26-मज़ा-3410-2012-512-paramSetA;
- आईडी-tc26-मज़ा-3410-2012-512-paramSetB।
Cryptoparameters
की संरचना GOST R 34.10-2012 के खंड 5.2 में परिभाषित की गई है । इस संरचना में एक प्रमुख q शामिल है - अण्डाकार वक्र के बिंदुओं के समूह के उपसमूह का क्रम:और यह निजी / सार्वजनिक कुंजी की लंबाई और निजी कुंजी की शुद्धता निर्धारित करता है:
- निजी कुंजी की लंबाई 256 बिट्स है;
- निजी कुंजी की लंबाई 512 बिट्स है।और इसलिए, सार्वजनिक कुंजी निजी कुंजी से प्राप्त की जाती है।और निजी कुंजी कहाँ से आती है?
एक निजी कुंजी प्राप्त करने के लिए, आपको पहले यह तय करने की आवश्यकता है कि निजी कुंजी कितनी देर तक (256 या 512 बिट्स) होगी, फिर कुंजी जोड़ी के क्रिप्टोग्राफिक मापदंडों पर निर्णय लें। अब हम यादृच्छिक संख्या सेंसर लेते हैं और संबंधित लंबाई का एक यादृच्छिक संख्या प्राप्त करते हैं। दरअसल, यह यादृच्छिक संख्या निजी कुंजी (हस्ताक्षर कुंजी d) का मान d होना चाहिए । इस मान को निम्न नियम को पूरा करना चाहिए:0 <d <q , जहां q क्रिप्टोकरंसी से एक प्रमुख संख्या है।यदि यह स्थिति पूरी नहीं हुई तो क्या होगा? यदि d == 0 है , तो बस एक नया रैंडम नंबर जनरेट करें। अन्यथा, यह पूर्णांक के शेष भाग को d के मान से विभाजित करने के लिए पर्याप्त है , जो कि q , से अधिक हैq (d% q) । शेष निजी कुंजी का मूल्य बन जाएगा।यही कारण है कि नियामक (रूस का एफएसबी) यादृच्छिक संख्या सेंसर पर विशेष मांग करता है।बफर भरने के लिए मुख्य स्रोत के एक उदाहरण के रूप में:- यादृच्छिक संख्याओं में शामिल हैं:
- प्रोसेसर TSC रजिस्टर - प्रोसेसर घड़ी काउंटर;
- जीटीसी समय काउंटर
- एक अलग धागे में ऑटो-इन्क्रीमेंट काउंटर;
- मानक फ़ंक्शन रैंड ();
- माउस निर्देशांक।
इस बफ़र को भरने के लिए अतिरिक्त स्रोत हो सकते हैं:- उपयोगकर्ता मोड में प्रक्रिया काउंटर;
- विंडोज उच्च संकल्प टाइमर।
इस प्रकार, PKCS # 11 टोकन / स्मार्ट कार्ड के लिए एक महत्वपूर्ण जोड़ी को अपने अंदर उत्पन्न करने के लिए, एक अंतर्निहित हार्डवेयर यादृच्छिक संख्या सेंसर के साथ एक टोकन / स्मार्ट कार्ड होना आवश्यक है जो नियंत्रक की आवश्यकताओं को पूरा करता है। और उसके बाद ही हम निजी कुंजी को न हटाने के बारे में बात कर सकते हैं।एक महत्वपूर्ण जोड़ी उत्पन्न करने के लिए, C_GenerateKeyPair फ़ंक्शन का उपयोग किया जाता है । किस प्रमुख जोड़ी पर निर्भर करता है (हम किस निजी कुंजी की लंबाई 256 या 512 बिट्स हैं) के आधार पर, इसमें उपयुक्त तंत्र का उपयोग किया जाएगा:- 256-बिट निजी कुंजी के साथ एक प्रमुख जोड़ी के लिए CKM_GOSTR3410_KEY_PAIR_GEN ;
- CKM_GOSTR3410_512_KEY_PAIR_GEN 512-बिट निजी कुंजी के साथ एक प्रमुख जोड़ी के लिए।
जब एक महत्वपूर्ण जोड़ी बनाते हैं, तो इसकी विशेषताएं निर्धारित की जाती हैं, उदाहरण के लिए, क्रिप्टोपैरमीटर:हम निजी कुंजी पुनर्प्राप्ति विशेषताओं में रुचि रखते हैं।
यह पूर्व में CKA_SENSITIVE विशेषता है, जो निजी कुंजी के मूल्य को प्राप्त करने के लिए जिम्मेदार है। यदि CKA_SENSITIVE विशेषता का मान CK_TRUE पर सेट है, तो निजी कुंजी को टोकन से स्पष्ट में नहीं निकाला जा सकता है। दूसरी विशेषता CKA_EXTRACTABLE आपको एन्क्रिप्टेड रूप में निजी कुंजी प्राप्त करने की अनुमति देती है। ऐसा करने के लिए, इसे CK_TRUE पर सेट करना होगा।CK_TRUE को CKA_SENSITIVE विशेषता सेट करना, और CKA_EXTRACTABLE विशेषता को CK_FALSE को सेट करना जब कुंजी युग्म उत्पन्न करना निजी कुंजी को पूरी तरह से अपरिवर्तनीय बनाता है। यह निर्धारित करने की क्षमता है कि क्या कुंजी निर्यात योग्य है Redfox ब्राउज़र में उपलब्ध है:
कोई कहेगा - अगर हम इन विशेषताओं के मूल्यों को बदल दें तो क्या होगा। एक नियम के रूप में, यह नहीं किया जा सकता है, सुरक्षा को कम नहीं किया जा सकता है, जैसे "आप डिग्री को कम नहीं कर सकते हैं"। उसी तरह, आप टोकन में आयात होने के बाद निजी कुंजी को गैर-वसूली योग्य बना सकते हैं (जब तक कि टोकन / स्मार्ट कार्ड आयात करने की अनुमति नहीं देता)। CKO_PRIVATE_KEY ऑब्जेक्ट बनाने (या निर्माण के दौरान) के बाद, आपको CKA_SENSITIVE = CK_TRUE , और विशेषता CKA_EXTRACTABLE = CK_FALSE सेट करना होगा ।बाद के मामले में (आयात पर), यह ध्यान में रखा जाना चाहिए कि यद्यपि निजी कुंजी गैर-वसूली योग्य हो गई, यह पक्ष (उदाहरण के लिए, PKCS # 12 ) से प्रकट हुई , और इसकी कोई गारंटी नहीं है कि कहीं और इसकी कोई डुप्लिकेट नहीं है।और यहाँ यह आपको याद दिलाने के लिए दुख नहीं होगा, प्रिय पाठक, वहसुरक्षा केवल संगठनात्मक और तकनीकी उपायों के कॉम्पलेक्स द्वारा प्रदान की जाती है । इसलिए, यह तकनीकी साधनों की कीमत पर संगठनात्मक सुरक्षा में छेद करने के लिए काम नहीं करेगा और इसके विपरीत - सब कुछ व्यवस्थित रूप से समन्वित होना चाहिए। निजी कुंजी के मूल्य तक पहुँचते समय, सहित।सुनिश्चित करें कि टोकन / स्मार्ट कार्ड में पूर्ण रूप से PKCS # 11 ऑब्जेक्ट्स (CKO_PRIVATE_KEY, CKO_PUBLIC_KEY, CKO_CERTIFICATE) शामिल हैं, जो टोकन पर क्रिप्टोकरंसी में शामिल हैं, आसानी से मुफ्त डाउनलोड के लिए उपलब्ध p11conf यूटिलिटी का उपयोग करते हुए टोकन पर।$ /usr/local/bin64/p11conf -h
usage: /usr/local/bin64/p11conf [-hitsmIupPred] -A APIpath [-c slotID -U userPin -S SOPin -n newPin -L label]
-h display usage
-i display PKCS
-s display slot(s) info (-c slotID is optional)
-t display token(s) info (-c slotID is optional)
Others must use -c slotID
-m display mechanism list
-I initialize token
-u initialize user PIN
-p set the user PIN
-P set the SO PIN
-r remove all objects
-e enumerate objects
-d dump all object attributes
Copyright(C) 2011-2016
$
यह देखने के लिए कि टोकन में कौन सी वस्तुएं हैं, यह प्रपत्र की एक कमांड निष्पादित करने के लिए पर्याप्त हैbash-4.3$ /usr/local/bin64/p11conf -A /usr/local/lib64/libls11sw2016.so -c 0 -e
Enter user PIN: ********
Token objects:
1: CKO_PRIVATE_KEY
label: 'LS11SW2016:; ..;0x23855(145493)'
2: CKO_PUBLIC_KEY
label: 'LS11SW2016:; ..;0x23855(145493)'
3: CKO_CERTIFICATE
label: 'LS11SW2016:; ..;0x23855(145493)'
…
OK
bash-4.3$
यदि ऐसी वस्तुएं टोकन पर अनुपस्थित हैं, और वे कहते हैं कि PKCS # 11 टोकन को गैर-पुनर्प्राप्ति योग्य कुंजी के साथ उपयोग किया जाता है, तो यह सबसे अधिक संभावना है, ऐसा नहीं है। सबसे अधिक संभावना है कि टोकन का उपयोग पिन कोड के साथ फ्लैश ड्राइव के रूप में किया जाता है, और प्रमाणपत्र और कुंजी को CKO_DATA ऑब्जेक्ट के रूप में संग्रहीत किया जाता है ।और अंत में, यह देखने के लिए कि टोकन पर न केवल किस प्रकार की वस्तुओं को संग्रहीत किया जाता है, बल्कि सभी विशेषताओं वाले ऑब्जेक्ट, आपको इसके अलावा -d ध्वज का उपयोग करना चाहिए :bash-4.3$ /usr/local/bin64/p11conf -A /usr/local/lib64/libls11sw2016.so -c 0 –e -d
Enter user PIN: ********
Token objects:
1: CKO_PRIVATE_KEY
label: 'LS11SW2016:; ..;0x23855(145493)'
==================================
Object handle: 0x1
----------------------------------
CKA_CLASS
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
CKA_TOKEN
0x01,
CKA_PRIVATE
0x01,
CKA_LABEL
0x4c, 0x53, 0x31, 0x31, 0x53, 0x57, 0x32, 0x30,
0x31, 0x36, 0x3a, 0xd0, 0x9e, 0xd0, 0x9e, 0xd0,
0x9e, 0x20, 0xd0, 0x9b, 0xd0, 0x98, 0xd0, 0xa1,
0xd0, 0xa1, 0xd0, 0x98, 0x2d, 0xd0, 0xa1, 0xd0,
0xbe, 0xd1, 0x84, 0xd1, 0x82, 0x3b, 0xd0, 0x9c,
0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe,
0x20, 0xd0, 0x90, 0x2e, 0xd0, 0x90, 0x2e, 0x3b,
0x30, 0x78, 0x32, 0x33, 0x38, 0x35, 0x35, 0x28,
0x31, 0x34, 0x35, 0x34, 0x39, 0x33, 0x29,
CKA_VALUE: attribute sensitive
CKA_KEY_TYPE
0x03, 0x10, 0x32, 0xd4, 0x00, 0x00, 0x00, 0x00,
CKA_SUBJECT
0x30, 0x81, 0x9b, 0x31, 0x0b, 0x30, 0x09, 0x06,
0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x55,
0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04,
0x03, 0x0c, 0x11, 0xd0, 0x9c, 0xd0, 0xb0, 0xd1,
0x81, 0xd0, 0xbb, 0xd0, 0xbe, 0x20, 0xd0, 0x90,
0x2e, 0xd0, 0x90, 0x2e, 0x31, 0x1c, 0x30, 0x1a,
0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x13, 0xd0,
0x9b, 0xd0, 0x98, 0xd0, 0xa1, 0xd0, 0xa1, 0xd0,
0x98, 0x2d, 0xd0, 0xa1, 0xd0, 0xbe, 0xd1, 0x84,
0xd1, 0x82, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09,
0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09,
0x01, 0x16, 0x10, 0x61, 0x6d, 0x61, 0x73, 0x6c,
0x6f, 0x76, 0x40, 0x6c, 0x69, 0x73, 0x73, 0x69,
0x2e, 0x72, 0x75, 0x31, 0x31, 0x30, 0x2f, 0x06,
0x03, 0x55, 0x04, 0x08, 0x0c, 0x28, 0x35, 0x30,
0x20, 0x20, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81,
0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x81,
0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x8f, 0x20, 0xd0,
0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1,
0x81, 0xd1, 0x82, 0xd1, 0x8c, 0x20,
CKA_ID
0x97, 0x46, 0x4e, 0xcc, 0x7c, 0xa9, 0xea, 0xb1,
0x0a, 0xda, 0xec, 0x10, 0xf4, 0x49, 0x7e, 0x7f,
0x2d, 0x71, 0x4b, 0xa7,
CKA_SENSITIVE
0x01,
. . .
CKA_GOSTR3410_PARAMS
0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02,
0x01, 0x02, 0x01,
CKA_GOSTR3411_PARAMS
0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01,
0x02, 0x03,
CKA_GOST28147_PARAMS
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f,
0x01,
…
OK
bash-4.3$
यहां कहा गया सब कुछ PKCS # 11 इंटरफ़ेस के साथ टोकन / स्मार्ट कार्ड के लिए मान्य है, जिसमें क्लाउड टोकन भी शामिल है।अंत में, हम याद करते हैं कि PKCS # 11 इंटरफ़ेस वाले टोकन / स्मार्टकार्ड व्यापक रूप से मोज़िला परियोजनाओं (ब्राउज़र, ईमेल क्लाइंट), Google और अन्य परियोजनाओं के क्रोम ब्राउज़र में उपयोग किए जाते हैं। अगर हम रूस के बारे में बात करते हैं, तो PKCS # 11 इंटरफ़ेस वाले टोकन / स्मार्टकार्ड सफलतापूर्वक राज्य सेवा पोर्टल का उपयोग करने के लिए उपयोग किए जाते हैं।