Что означает знак равенства = или == в конце открытого ключа SSH?


39

Я только что заметил, что большинство ssh pubkeys в моих авторизованных ключах заканчиваются на == или =

Например

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA9ZUwxXn2HZAAUswoaV8t2sQPvolVWDI053f0giNN154Zyi9FtWJKvyLHXoxW4IzFxgx+m6EYqXG/XCtfamLhwvGZv9FXkgQKeF6HJv/rjyKRBHPRyX0vV4S9uQU+xQV7f0Ock3urSzbUyoCgngA8Ax6AkYGmMTLLjx1HOBO/TJ477aysWt4IAg1gviT50I4xOYiHT4vC67czoDTnPl0UfKQJaM0+6WrneK7FJbd/8CAX7P7IxOhj1OxVbnEoh9FvecLbSDdOx/LF+kJcav/LThuoG7NR+Y+rS9lNkta3/KPi3IBMPum+bZpXJF7fkHl9Kx/iOMitT7KjNW/mty74xw== foo@bar

Однако сегодня я увидел паб без знака равенства в конце. Также я заметил, что единственное место, где когда-либо встречается в pubkey - это конец, и никогда больше нигде.

Теперь мне просто интересно, что означает ноль, один или два знака равенства в конце ключа паба?

Ответы:


50

Я считаю, что нет технической причины, это просто артефакт Base64 и длина строки. Попробуйте это с любым base 64 кодером

1     -> MQ==     (1 characters, 2 equals)
12    -> MTI=     (2 characters, 1 equals)
123   -> MTIz     (3 characters, 0 equals)
1234  -> MTIzNA== (4 characters, 2 equals)
[repeat]

Но я могу ошибаться в этом


18
+ Это кодировка base64, ничего особенного в этом нет. Статья в Википедии о Base64 # Padding
Chris S

2
Интересно, что соответствующий RFC ietf.org/rfc/rfc4716.txt не упоминает об этом, что может означать, что вы правы.
dunxd

@dunxd Я только сканировал через этот RFC, но я полагаю, что это относится к файлу .pub, а не к authorized_keysфайлу, хотя я думаю, что такая же ситуация применима. Поскольку ключом являются двоичные данные, но файл должен быть текстовым, Base64 решает эту проблему
Smudge

5
@dunxd: RFC действительно говорит, что использует кодировку Base64, и чтение о Base64 проясняет, что он дополняет конец =.
Кристофер Хаммарстрем

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.