Erlang 21 - 4. Engine Stored Keys

4 इंजन संग्रहीत कुंजी




erlang

4 इंजन संग्रहीत कुंजी

यह अध्याय एन्क्रिप्शन इंजन में संग्रहीत सार्वजनिक और निजी कुंजी का उपयोग करने के लिए क्रिप्टो एप्लिकेशन में समर्थन का वर्णन करता है।

4.1 पृष्ठभूमि

OpenSSL एक इंजन एपीआई को उजागर करता है, जो ओपनएसएसएल द्वारा कार्यान्वित कुछ क्रिप्टोग्राफिक संचालन के लिए वैकल्पिक कार्यान्वयन में प्लग करना संभव बनाता है। विवरण के लिए अध्याय Engine Load देखें और इंजन कैसे लोड करें।

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

स्टोरेज इंजन को ENGINE_set_load_privkey_function और ENGINE_set_load_pubkey_function को कॉल करना होगा। ओपनएसएसएल क्रिप्टोलिब के manpages देखें।

ओटीपी / क्रिप्टो की आवश्यकता है कि उपयोगकर्ता कुंजी के बारे में जानकारी के दो या तीन आइटम प्रदान करता है। उपयोगकर्ता द्वारा उपयोग किया जाने वाला एप्लिकेशन आमतौर पर एक उच्च स्तर पर होता है, उदाहरण के लिए SSL । अगर सीधे क्रिप्टो एप्लिकेशन का उपयोग करते हैं, तो यह आवश्यक है कि:

  • एक इंजन लोड किया गया है, Engine Load या Reference Manual पर अध्याय देखें
  • इंजन में एक कुंजी का संदर्भ उपलब्ध है। यह एर्लांग स्ट्रिंग या बाइनरी होना चाहिए और लोड किए गए इंजन पर निर्भर करता है
  • एक Erlang मानचित्र इंजन संदर्भ, कुंजी संदर्भ और संभवतः इंजन द्वारा आवश्यक होने पर एक प्रमुख पासफ़्रेज़ के साथ बनाया गया है। मानचित्र के विवरण के लिए Reference Manual देखें।

4.2 मामलों का उपयोग करें

एक इंजन संग्रहीत निजी कुंजी के साथ साइन इन करें

यह उदाहरण दिखाता है कि एक कुंजी संदर्भ का निर्माण कैसे किया जाता है जो एक साइन ऑपरेशन में उपयोग किया जाता है। वास्तविक कुंजी को उस इंजन में संग्रहीत किया जाता है जिसे प्रॉम्प्ट 1 पर लोड किया गया है।

1> {ok, EngineRef} = crypto:engine_load(....).
...
{ok,#Ref<0.2399045421.3028942852.173962>}
2> PrivKey = #{engine => EngineRef,
               key_id => "id of the private key in Engine"}.
...
3> Signature = crypto:sign(rsa, sha, <<"The message">>, PrivKey).
<<65,6,125,254,54,233,84,77,83,63,168,28,169,214,121,76,
  207,177,124,183,156,185,160,243,36,79,125,230,231,...>>

सार्वजनिक कुंजी संग्रहीत एक इंजन के साथ सत्यापित करें

यहां सार्वजनिक कुंजी का उपयोग करके अंतिम उदाहरण में हस्ताक्षर और संदेश का सत्यापन किया जाता है। सार्वजनिक कुंजी को एक इंजन में संग्रहीत किया जाता है, केवल यह सुनिश्चित करने के लिए कि यह संभव है। सार्वजनिक कुंजी को हमेशा की तरह खुलेआम नियंत्रित किया जा सकता है।

4> PublicKey = #{engine => EngineRef,
                 key_id => "id of the public key in Engine"}.
...
5> crypto:verify(rsa, sha, <<"The message">>, Signature, PublicKey).
true
6> 

पासवर्ड संरक्षित निजी कुंजी का उपयोग करना

पहला संकेत उदाहरण के रूप में एक ही उदाहरण, सिवाय इसके कि एक पासवर्ड इंजन में कुंजी नीचे की रक्षा करता है।

6> PrivKeyPwd = #{engine => EngineRef,
                  key_id => "id of the pwd protected private key in Engine",
		  password => "password"}.
...
7> crypto:sign(rsa, sha, <<"The message">>, PrivKeyPwd).
<<140,80,168,101,234,211,146,183,231,190,160,82,85,163,
  175,106,77,241,141,120,72,149,181,181,194,154,175,76,
  223,...>>
8>