मेरी दो ssh सार्वजनिक कुंजी एक ही शुरुआत क्यों है?


25

मैं अपने लैपटॉप पर सार्वजनिक कुंजी के साथ अधिकृत_की फ़ाइल को अपडेट कर रहा था जो मुझे मिला था और मुझे यह जानकर आश्चर्य हुआ कि दोनों सार्वजनिक कुंजी एक ही शुरू हुई थीं:

# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....

AAAAB3...आदि पर कहानी क्या है ? कुछ ऑनलाइन खोज के साथ, मैं देखता हूं कि दूसरों की चाबियाँ भी शुरू होती हैं। क्या यह एल्गोरिथ्म या संस्करण या कुछ और समझाता है?


1
इसके लायक क्या है, मेरे पास कुछ कंप्यूटरों पर, कुछ वर्षों में अंतरिक्ष में उत्पन्न 7 कुंजियाँ हैं, और वे सभी के साथ शुरू होती हैं AAAAB3NzaC1yc2EAAAAइसलिए मैं अनुमान लगा रहा हूं कि यह किसी प्रकार का आम प्रकार / संस्करण पहचानकर्ता है ...
fukawi2

जवाबों:


24

यह वास्तव में एक हेडर है जो परिभाषित करता है कि यह किस तरह की कुंजी है। यदि आप RFC 4253 के सार्वजनिक कुंजी एल्गोरिथ्म अनुभाग की जाँच करते हैं, तो हम आरएसए कुंजी के लिए देख सकते हैं

"Ssh-rsa" कुंजी प्रारूप में निम्नलिखित विशिष्ट एन्कोडिंग हैं:

 string    "ssh-rsa"
 mpint     e
 mpint     n

यहां 'ई' और 'एन' पैरामीटर हस्ताक्षर कुंजी बूँद बनाते हैं।

वास्तव में, यदि आप "B3NzaC1yc2E" स्ट्रिंग को बेस 64 डीकोड करते हैं, तो आप देखेंगे कि यह ASCII में "ssh-rsa" के रूप में अनुवादित है। संभवतः "एएएएए" कुछ प्रकार के हेडर का प्रतिनिधित्व करता है इसलिए एप्लिकेशन को पता चल सकता है कि कुंजी को संसाधित करने के लिए डेटा स्ट्रीम में वास्तव में कहां है।


आरएफसी के लिंक सहित मैंने जो कहा, यह उल्लेखनीय है।
लार्क्स जूल

@ लार्क्स: जाहिरा तौर पर आप जमा मारा जबकि मैं अभी भी मेरा लिख ​​रहा था।
स्कॉट पैक

15

SSH सार्वजनिक कुंजी प्रारूप RFC 4253 में प्रलेखित है , और यहाँ कुछ संक्षेप में प्रस्तुत किया गया है । PEM एन्कोडेड डेटा में कई (लंबाई, डेटा) जोड़े होते हैं, और पहली जोड़ी एल्गोरिथम नाम को एन्कोड करती है, जो कुछ इस तरह से ssh-rsaया होने जा रहा है ssh-dsa

इसका अर्थ है कि सभी ssh कुंजी के लिए सार्वजनिक कुंजी डेटा का प्रारंभिक भाग समान होने वाला है।


2

मैंने फ़ंक्शंस के लिए स्कॉट के लिंक का अनुसरण करने के बाद प्रारूप में एक गहरी खाई खोद ली। TLDR:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
       |  "ssh-rsa"   |exponent|   modulus

RFC4231 उपयोग किए गए दो डेटा प्रकारों को निर्दिष्ट करता है:

  • string: मनमाना लंबाई बाइनरी स्ट्रिंग। स्ट्रिंग्स को मनमाने ढंग से बाइनरी डेटा शामिल करने की अनुमति है, जिसमें अशक्त वर्ण और 8-बिट वर्ण शामिल हैं। वे uint32इसकी लंबाई युक्त होते हैं

  • mpint: दो के पूरक प्रारूप में कई सटीक पूर्णांकों का प्रतिनिधित्व करता है, एक स्ट्रिंग के रूप में संग्रहीत किया जाता है, बाइट प्रति 8 बिट, एमएसबी पहले। [...]

RFC4253 सेकंड 6.6 कहता है कि कुंजी इनकोडिंग है:

"Ssh-rsa" कुंजी प्रारूप में निम्नलिखित विशिष्ट एन्कोडिंग हैं:

string    "ssh-rsa"
mpint     e
mpint     n

यहाँ 'ई' और 'एन' पैरामीटर हस्ताक्षर कुंजी बूँद बनाते हैं। [एड: लेकिन बूँद भी स्ट्रिंग शामिल करने के लिए लगता है "ssh-rsa"...]

परिणामस्वरूप हस्ताक्षर निम्नानुसार एन्कोडेड है:

string    "ssh-rsa"
string    rsa_signature_blob

'Rsa_signature_blob' का मान एक स्ट्रिंग के रूप में एन्कोड किया गया है जिसमें s [एड: डोन्ट व्हाट s क्या है।] (जो कि एक पूर्णांक है, बिना लंबाई या पैडिंग के, अहस्ताक्षरित और नेटवर्क बाइट क्रम में)।

"ssh-rsa"

स्ट्रिंग ssh-rsaको परिवर्तित कर दिया जाता है \x00\x00\x00\x07ssh-rsa, जो तब एन्कोड करता है AAAAB3NzaC1yc2E=, इसलिए सभी ssh-rsa कीज़ उसी से शुरू होनी चाहिए।

e, सार्वजनिक प्रतिपादक

आमतौर पर 3, 17, 257, 65537 जैसा कुछ होता है। वे संख्या नीचे के रूप में एन्कोडेड हो जाती हैं (ऊपर से पीछे की ओर ऑफसेट के साथ)

  • ३ → '\x00\x00\x00\x01\x03'AAAABAw
  • 17 → '\x00\x00\x00\x01\x11'AAAABEQ
  • २५ → '\x00\x00\x00\x02\x01\x01'AAAACAQE
  • 65537 / 0x10001 → '\x00\x00\x00\x03\x01\x00\x01'AAAADAQAB

इसलिए, यदि आप "BAw" देखते हैं, तो आपका घातांक 3 था, या "DAQAB" = 65537

n, मापांक (आपके दो गुप्त प्राइम का उत्पाद, यह कारक!)

AAABAQउपर्युक्त का अर्थ है कि आपकी कुंजी की लंबाई 2048 बिट्स है (और यह कि आपका घातांक बेस 64 पैडिंग के कारण DAQAB की तरह था)। बेस 64 सामान का पूरा बाकी घातांक है, इसके बाद कुछ भी नहीं है।

अन्य मापांक उपसर्ग जो सामान्य हो सकते हैं:

  • AAAAg 1024 बिट्स, ई = 0x10001
  • AAAQI: 2048 बिट्स, ई = 3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.