Saya sedang memperbarui file official_keys di server saya dengan kunci publik untuk laptop baru yang saya dapatkan dan saya terkejut menemukan bahwa dua kunci publik mulai sama:
# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
Apa ceritanya AAAAB3...
dll? Dengan beberapa pencarian online, saya melihat kunci orang lain juga mulai sama. Apakah ini menjelaskan algoritme atau versi atau sesuatu?
ssh
encryption
Gabe Durazo
sumber
sumber
AAAAB3NzaC1yc2EAAAA
jadi saya kira itu semacam pengidentifikasi jenis / versi algo yang umum ...Jawaban:
Ini sebenarnya adalah header yang mendefinisikan jenis kunci ini. Jika Anda memeriksa bagian Algoritma Kunci Publik RFC 4253 kita bisa melihatnya untuk kunci RSA
Bahkan, jika Anda Base64 decode string "B3NzaC1yc2E" Anda akan melihatnya diterjemahkan ke dalam ASCII sebagai "ssh-rsa". Agaknya "AAAA" mewakili semacam header sehingga aplikasi dapat mengetahui di mana tepatnya dalam aliran data untuk mulai memproses kunci.
sumber
Format kunci publik SSH didokumentasikan dalam RFC 4253 , dan dirangkum di sini . Data yang dikodekan PEM terdiri dari sejumlah (panjang, data) pasangan, dan pasangan pertama meng-encode nama algoritma, yang akan menjadi sesuatu seperti
ssh-rsa
ataussh-dsa
.Ini berarti bahwa bagian awal dari data kunci publik untuk semua kunci ssh akan serupa.
sumber
Saya melakukan deep-dive dalam format setelah mengikuti tautan Scott untuk funsies. TLDR:
RFC4231 menentukan dua tipe data yang digunakan:
string
: String biner panjang sewenang-wenang. String diizinkan untuk berisi data biner sewenang-wenang, termasuk karakter nol dan karakter 8-bit. Mereka disimpan sebagaiuint32
berisi panjangnyampint
: Merupakan beberapa integer presisi dalam format komplemen dua, disimpan sebagai string, 8 bit per byte, MSB pertama. [...]RFC4253 dtk 6.6 mengatakan kunci disandikan sebagai:
"ssh-rsa"
String
ssh-rsa
dikonversi menjadi\x00\x00\x00\x07ssh-rsa
, yang kemudian dikodekan keAAAAB3NzaC1yc2E=
, jadi semua kunci ssh-rsa harus dimulai dengan itu.e
, eksponen publikBiasanya sekitar 3, 17, 257, 65537. Angka-angka itu disandikan seperti di bawah ini (dengan trailing offset dari atas)
'\x00\x00\x00\x01\x03'
→AAAABAw
'\x00\x00\x00\x01\x11'
→AAAABEQ
'\x00\x00\x00\x02\x01\x01'
→AAAACAQE
'\x00\x00\x00\x03\x01\x00\x01'
→AAAADAQAB
Jadi, jika Anda melihat "BAw", eksponen Anda adalah 3, atau "DAQAB" = 65537
n
, modulus (produk dari dua bilangan prima rahasia Anda, faktorkan ini!)AAABAQ
setelah di atas berarti bahwa panjang kunci Anda adalah 2048 bit (dan eksponen Anda seperti DAQAB karena padding base64). Seluruh hal base64 lainnya adalah eksponen, tidak ada apa-apa setelahnya.Awalan modulus lain yang mungkin umum:
AAAAg
1024 bit, e = 0x10001AAAQI
: 2048 bit, e = 3sumber