मैंने फ़ंक्शंस के लिए स्कॉट के लिंक का अनुसरण करने के बाद प्रारूप में एक गहरी खाई खोद ली। 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
AAAAB3NzaC1yc2EAAAA
इसलिए मैं अनुमान लगा रहा हूं कि यह किसी प्रकार का आम प्रकार / संस्करण पहचानकर्ता है ...