개인 키 ( ~/.ssh/id_rsa
)는 1766 바이트 파일이지만 공개 키 ( ~/.ssh/id_rsa.pub
)의 길이는 396 바이트에 불과합니다. 왜 큰 차이가 있습니까? 개인 키가 AES를 사용하여 암호화 되었기 때문입니까? AES 암호문이 보통 평문과 길이가 같지 않습니까?
답변
개인 키에는 공개 키보다 많은 정보가 있습니다. 공개 키는 암호화 지수 (e) 및 모듈러스 (n)만을 전달하는 반면, 개인 키는 복호화 지수 (d) 및 모듈러스의 두 가지 주요 요소 (p 및 q)를 추가로 포함한다. 개인 키에는 기본적으로 공개 키가 있습니다.
[암호화 : 암호문 = 메시지 ^ e (mod n); 암호 해독 : 메시지 = 암호문 ^ d (mod n)]
개인 키 파일의 모든 데이터를 보려면
$ openssl rsa -in id_rsa -text -noout
편집 : 개인 키 파일에는 분명히 암호화 지수가 없지만 지수 d_1 및 d_2가 있습니다. 여기서 d_1 = d (mod p-1) 및 d_2 = d (mod q-1)입니다. 이것들은 해독 속도를 높이는 데 사용됩니다. 암호화 지수를 더 작은 병렬 지수 호출로 나눌 수 있습니다.
답변
불행히도 키가 저장되는 형식을 지정하지 않았습니다. OpenSSH 키 인코딩을 참조한다고 생각합니다. 이 형식에서 키는 base64로 인코딩 된 데이터 블록에 저장됩니다. 암호화시 인코딩에 따라 일반적으로 데이터를 암호화 할 때 일종의 패딩이 발생합니다. 결과 데이터는 암호화 블록 크기의 배수입니다.
OpenSSH 키는 또한 일종의 주석과 ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----
및 -----END RSA [PUBLIC|PRIVATE] KEY-----
마커 사이에 삽입 된 추가 속성을 포함 할 수 있습니다 . RFC4716을 참조하십시오 .
또한 공개 키의 경우 모듈러스와 공개 지수가 저장되고 개인 키의 경우 개인 지수가 저장됩니다. 수학 기반에 대한 자세한 내용은 Wikipedia 에서 RSA 키 생성을 참조하십시오 . 웹에는 이러한 키 사이의 수학적 연결을 설명하는 많은 장소가 있습니다. 여기에이 설명의 사본이 필요한지 확실하지 않습니다.
이론적으로 공개 키 정보에서 개인 키를 계산할 수는 있지만 다른 방법보다 수학적으로 훨씬 어렵습니다. 개인 키는 모든 변수와 공개 키를 계산 결과로 포함하는 “소스”로 간주하십시오. 모든 변수를 알고 있지만 결과 만 알면 모든 소스 변수를 얻는 것이 어려운 경우 계산을 반복해서 쉽게 수행 할 수 있습니다. 개인 키를 안전한 장소에 저장하기에 충분한 이유이기도합니다. 항상 개인 키를 사용하여 공개 키를 다시 계산할 수 있습니다. 그러나 다른 방법은 아닙니다. 이론적으로는이 작업을 수행 할 수 있지만 키 길이에 따라 몇 년이 걸릴 수 있습니다.).