답변:
이것은 실제로 이것이 어떤 종류의 키인지를 정의하는 헤더입니다. RFC 4253 의 공개 키 알고리즘 섹션을 확인하면 RSA 키에 대한 내용을 볼 수 있습니다
"ssh-rsa"키 형식에는 다음과 같은 특정 인코딩이 있습니다.
string "ssh-rsa" mpint e mpint n
여기서 'e'및 'n'매개 변수는 서명 키 Blob을 구성합니다.
실제로 "B3NzaC1yc2E"문자열을 Base64 디코딩하면 "ssh-rsa"로 ASCII로 변환되는 것을 볼 수 있습니다. 아마도 "AAAA"는 일종의 헤더를 나타내므로 응용 프로그램은 데이터 스트림에서 정확히 키 처리를 시작할 위치를 알 수 있습니다.
나는 스콧의 재미를 위해 링크를 따라 간 후 형식에 대해 과도하게 뛰어 들었다. 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과 같은 숫자입니다.이 숫자는 아래와 같이 인코딩됩니다 (위에서 후행 오프셋으로).
'\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
따라서 "BAw"가 표시되면 지수는 3이거나 "DAQAB"= 65537입니다.
n
, 모듈러스 (두 비밀 소수의 곱, 이것을 고려하십시오!)AAABAQ
위의 뒤에는 키 길이가 2048 비트이며 지수가 base64 패딩으로 인해 DAQAB와 유사하다는 것을 의미합니다. base64의 나머지 부분은 모두 지수이며, 이후에는 아무것도 없습니다.
일반적 일 수있는 다른 계수 접두사 :
AAAAg
1024 비트, e = 0x10001AAAQI
: 2048 비트, e = 3
AAAAB3NzaC1yc2EAAAA
일반적인 알고리즘 타입 / 버전 식별자라고 생각합니다.