두 개의 ssh 공개 키가 같은 시작을 갖는 이유는 무엇입니까? 시작된 것을 발견 한 것에

내가 얻은 새 랩톱의 공개 키로 서버의 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 = 0x10001
  • AAAQI: 2048 비트, e = 3