Eu estava atualizando o arquivo allowed_keys no meu servidor com a chave pública do novo laptop que recebi e fiquei surpreso ao descobrir que as duas chaves públicas começaram da mesma forma:
# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
Qual é a história, AAAAB3...
etc? Com algumas pesquisas on-line, vejo que outras teclas também começam da mesma forma. Isso explica o algoritmo, a versão ou algo assim?
ssh
encryption
Gabe Durazo
fonte
fonte
AAAAB3NzaC1yc2EAAAA
então acho que é algum tipo de identificador de tipo / versão de algo comum ...Respostas:
Este é realmente um cabeçalho que define que tipo de chave é essa. Se você verificar a seção Algoritmo de chave pública do RFC 4253 , podemos ver que, para chaves RSA
De fato, se você Base64 decodificar a sequência "B3NzaC1yc2E", verá que ela será traduzida para ASCII como "ssh-rsa". Presumivelmente, o "AAAA" representa algum tipo de cabeçalho para que o aplicativo possa saber exatamente onde exatamente no fluxo de dados iniciar o processamento da chave.
fonte
O formato da chave pública SSH está documentado na RFC 4253 e resumido aqui . Os dados codificados PEM consistem em vários pares (comprimento, dados) e o primeiro par codifica o nome do algoritmo, que será algo como
ssh-rsa
oussh-dsa
.Isso significa que a parte inicial dos dados da chave pública de todas as chaves ssh será semelhante.
fonte
Eu mergulhei profundamente no formato depois de seguir os links de Scott por diversão. TLDR:
RFC4231 especifica os dois tipos de dados usados:
string
: String binária de comprimento arbitrário. É permitido que cadeias contenham dados binários arbitrários, incluindo caracteres nulos e caracteres de 8 bits. Eles são armazenados comouint32
contendo seu comprimentompint
: Representa vários números inteiros de precisão no formato de complemento de dois, armazenados como uma seqüência de caracteres, 8 bits por byte, primeiro o MSB. [...]RFC4253 sec 6.6 diz que a chave é codificada como:
"ssh-rsa"
A string
ssh-rsa
é convertida em\x00\x00\x00\x07ssh-rsa
, que codifica paraAAAAB3NzaC1yc2E=
, então todas as chaves ssh-rsa devem começar com isso.e
, o expoente públicoGeralmente algo como 3, 17, 257, 65537. Esses números são codificados como abaixo (com o deslocamento à direita acima)
'\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
Portanto, se você ver "BAw", seu expoente foi 3 ou "DAQAB" = 65537
n
, o módulo (produto de seus dois primos secretos, considere isso!)AAABAQ
após o exposto acima, significa que o comprimento da sua chave é 2048 bits (e que seu expoente era como DAQAB por causa do preenchimento da base64). Todo o resto do material base64 é o expoente, não há nada depois.Outros prefixos de módulo que podem ser comuns:
AAAAg
1024 bits, e = 0x10001AAAQI
: 2048 bits, e = 3fonte