내가 얻은 새 랩톱의 공개 키로 서버의 authorized_keys 파일을 업데이트하고 있었고 두 공개 키가 동일하게 시작된 것을 발견 한 것에 놀랐습니다.
# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
AAAAB3...
등 이야기는 무엇입니까 ? 온라인으로 검색하면 다른 키도 동일하게 시작됩니다. 알고리즘이나 버전 또는 무언가를 설명합니까?
답변
이것은 실제로 이것이 어떤 종류의 키인지를 정의하는 헤더입니다. RFC 4253 의 공개 키 알고리즘 섹션을 확인하면 RSA 키에 대한 내용을 볼 수 있습니다
“ssh-rsa”키 형식에는 다음과 같은 특정 인코딩이 있습니다.
string "ssh-rsa" mpint e mpint n
여기서 ‘e’및 ‘n’매개 변수는 서명 키 Blob을 구성합니다.
실제로 “B3NzaC1yc2E”문자열을 Base64 디코딩하면 “ssh-rsa”로 ASCII로 변환되는 것을 볼 수 있습니다. 아마도 “AAAA”는 일종의 헤더를 나타내므로 응용 프로그램은 데이터 스트림에서 정확히 키 처리를 시작할 위치를 알 수 있습니다.
답변
SSH 공개 키 형식은 RFC 4253에 문서화되어 있으며 여기에 요약되어 있습니다 . PEM을 부호화 데이터 (길이, 데이터)의 쌍의 개수로 구성하고, 제 1 쌍과 같이 될 것이다 알고리즘 명, 인코딩 ssh-rsa
또는 ssh-dsa
.
이것은 모든 ssh 키에 대한 공개 키 데이터의 초기 부분이 비슷하다는 것을 의미합니다.
답변
나는 스콧의 재미를 위해 링크를 따라 간 후 형식에 대해 과도하게 뛰어 들었다. TLDR :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
| "ssh-rsa" |exponent| modulus
RFC4231 은 사용되는 두 가지 데이터 유형을 지정합니다.
-
string
: 임의 길이의 이진 문자열. 문자열은 널 (null) 문자 및 8 비트 문자를 포함하여 임의의 이진 데이터를 포함 할 수 있습니다. 그것들은uint32
길이를 포함하는 것으로 저장됩니다 -
mpint
: 2의 보수 형식으로 다중 정밀도 정수를 나타내며, 문자열로 바이트 당 8 비트, MSB가 먼저 저장됩니다. […]
RFC4253 sec 6.6에 따르면 키는 다음과 같이 인코딩됩니다.
“ssh-rsa”키 형식에는 다음과 같은 특정 인코딩이 있습니다.
string "ssh-rsa" mpint e mpint n
여기서 ‘e’및 ‘n’매개 변수는 서명 키 Blob을 구성합니다. [Ed : 그러나 blob도 문자열을 포함하는 것 같습니다
"ssh-rsa"
…]결과 서명은 다음과 같이 인코딩됩니다.
string "ssh-rsa" string rsa_signature_blob
‘rsa_signature_blob’의 값은 s [Ed : s is know.]를 포함하는 문자열로 인코딩됩니다 (정수, 길이 또는 패딩, 부호 없음 및 네트워크 바이트 순서 없음).
"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 비트이며 지수가 base64 패딩으로 인해 DAQAB와 유사하다는 것을 의미합니다. base64의 나머지 부분은 모두 지수이며, 이후에는 아무것도 없습니다.
일반적 일 수있는 다른 계수 접두사 :
AAAAg
1024 비트, e = 0x10001AAAQI
: 2048 비트, e = 3