ฉันดำน้ำลึกเข้าไปในรูปแบบหลังจากทำตามลิงก์ของ Scott สำหรับเรื่องตลก TLDR:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
| "ssh-rsa" |exponent| modulus
RFC4231ระบุสองประเภทข้อมูลที่ใช้:
string: สตริงไบนารีความยาวโดยพลการ สตริงได้รับอนุญาตให้มีข้อมูลไบนารีโดยพลการรวมถึงตัวละครโมฆะและตัวอักษร 8 บิต พวกเขาจะถูกเก็บไว้เป็นuint32ความยาวที่มี
mpint: แสดงจำนวนเต็มความแม่นยำหลายรายการในรูปแบบที่สมบูรณ์สองจัดเก็บเป็นสตริง 8 บิตต่อไบต์ MSB ก่อน [ ... ]
RFC4253 sec 6.6บอกว่ารหัสถูกเข้ารหัสเมื่อ:
รูปแบบคีย์ "ssh-rsa" มีการเข้ารหัสเฉพาะดังต่อไปนี้:
string "ssh-rsa"
mpint e
mpint n
นี่คือพารามิเตอร์ 'e' และ 'n' ในการสร้างคีย์ลายเซ็น blob [Ed: แต่หยดก็ดูเหมือนจะมีสตริง"ssh-rsa"เช่นกัน ... ]
ลายเซ็นที่ได้รับมีการเข้ารหัสดังนี้:
string "ssh-rsa"
string rsa_signature_blob
ค่าของ 'rsa_signature_blob' ถูกเข้ารหัสเป็นสตริงที่มี s [Ed: ไม่ทราบว่า s คืออะไร] (ซึ่งเป็นจำนวนเต็มโดยไม่มีความยาวหรือการเว้นวรรคไม่ได้ลงนามและตามลำดับเครือข่าย)
"ssh-rsa"
สตริงssh-rsaจะถูกแปลงเป็น\x00\x00\x00\x07ssh-rsaซึ่งจะเข้ารหัสAAAAB3NzaC1yc2E=ดังนั้นคีย์ ssh-rsa ทั้งหมดควรเริ่มต้นด้วย
eเลขชี้กำลังสาธารณะ
โดยทั่วไปแล้วจะมีลักษณะเช่น 3, 17, 257, 65537 ตัวเลขเหล่านั้นได้รับการเข้ารหัสดังนี้ด้านล่าง
- 3
'\x00\x00\x00\x01\x03'→→AAAABAw
- 17
'\x00\x00\x00\x01\x11'→→AAAABEQ
- 257
'\x00\x00\x00\x02\x01\x01'→→AAAACAQE
- 65537 / 0x10001
'\x00\x00\x00\x03\x01\x00\x01'→→AAAADAQAB
ดังนั้นถ้าคุณเห็น "BAw" เลขชี้กำลังของคุณคือ 3 หรือ "DAQAB" = 65537
n, โมดูลัส (ผลิตภัณฑ์ของสองช่วงเวลาลับของคุณปัจจัยนี้!)
AAABAQหลังจากด้านบนหมายความว่าความยาวของคีย์ของคุณคือ 2048 บิต (และเลขชี้กำลังของคุณเป็นเหมือน DAQAB เนื่องจากฐานรอง 64) ส่วนที่เหลือทั้งหมดของ base64 คือเลขชี้กำลังไม่มีอะไรหลังจากนั้น
คำนำหน้าโมดูลัสอื่น ๆ ที่อาจพบได้ทั่วไป
AAAAg 1024 บิต e = 0x10001
AAAQI: 2048 บิต e = 3
AAAAB3NzaC1yc2EAAAAดังนั้นฉันจึงเดาว่ามันเป็นตัวระบุชนิด / รุ่นทั่วไปของอัลโก ...