OpenSSH 형식으로 저장된 ed22519 개인 키의 값을 표시합니다.

OpenSSH 형식으로 저장된 ed22519 개인 키의 값을 표시합니다.

(이 질문은 텍스트에서 "openssh"와 "openssl"을 모두 사용하므로 둘을 혼동하지 않을 것입니다.)

일반 RSA 키 쌍(ssh-keygen)에 openssh를 사용하는 경우 "openssl rsa -in ..."을 사용하여 키 매개변수(모듈러스, 지수, 소수 등)를 볼 수 있습니다.

RSA 키를 생성했지만 openssh 형식(ssh-keygen의 -o 옵션 사용)을 사용하여 저장하면 openssl을 통해 직접 파일을 읽을 수 없습니다. 먼저 ssh-keygen -p -f를 사용하고 비밀번호를 제거했습니다. 생성된 파일은 "RSA 개인 키"입니다. 그런 다음 일반적인 방법으로 openssl을 사용하여 매개변수를 볼 수 있습니다.

openssl의 "ec" 및 "ecparam" 명령을 사용하여 파일을 생성하고 EC 키를 구성하는 매개변수를 볼 수 있습니다.

ssh-keygen -t ed25519를 사용하여 ed25519 키 쌍을 생성하면 "OPENSSH PRIVATE KEY" 형식의 파일이 생성됩니다.

분명히 이 파일에 위의 "ssh-keygen -p ..."를 사용하면 RSA 키가 아니기 때문에 "RSA" 출력을 얻을 수 없습니다.

그러면 ed25519를 사용하여 ssh-keygen으로 생성된 "OPENSSH PRIVATE KEY" 파일을 매개변수를 볼 수 있는 형식으로 변환하는 방법은 무엇일까요?

openssl EC 명령은 "BEGIN EC PARAMETERS" 및 "BEGIN EC PRIVATE KEY"와 같은 파일을 생성합니다.

그렇다면 OPENSSH PRIVATE KEY에서 ed25519 매개변수를 볼 수 있는 방법이 있습니까? 아니면 이 파일 형식을 openssl이 이해하는 EC 형식 중 하나로 변환하는 방법은 무엇입니까?

답변1

간단히 말해서: 당신할 수 없다OpenSSL로 변환

2021년 2월 업데이트: OpenSSH ed25519 키를 OpenSSL에서 지원하는 형식으로 변환할 수 없습니다. Q 및 원본 A 날짜를 기준으로 OpenSSL은 ed25519 키의 저장 형식을 지원하지 않으며 Ed25519(또는 기타 EdDSA) 알고리즘도 지원하지 않습니다. TLS 키 교환을 위해 X25519를 지원하지만 임시 키만 사용하고 저장 형식이 필요하지 않습니다. OpenSSL 1.1.1은 같은 달 말인 2018년 9월에 출시되어 PKCS8 형식 개인 키를 사용하여 Ed25519 및 Ed448(X25519 및 X448도 포함)을 지원합니다. 그러나 ssh-keygen(OpenSSH)는 할 수 없습니다.쓰다이 OpenSSL 호환 형식의 Ed25519 키는 이에 사용되는 OpenSSH 독점 형식을 OpenSSL 6.5부터 읽을 수 없습니다(다른 유형도 7.8 이후 기본값임).

Ed25519에는 매개변수가 필요하지 않으며 OpenSSH 키 파일 형식은 이에 대한 매개변수를 저장하지 않습니다. Ed25519는 모든 필수 매개변수를 정의하는 Bernstein curve25519(Edwards 형식)의 EdDSA 인스턴스화(매개변수화)로 정의됩니다. 자세한 내용은 RFC 8032 및 7748을 참조하세요.

X9 및 SECG에 의해 정의된 EC 알고리즘의 경우표준은 ECDSA 및 ECDH라고 하며 OpenSSL은 짧은 Weierstrass 형식의 방정식이 포함된 타원 곡선만 지원하는 이러한 표준에 정의된 매개변수를 사용합니다. Bernstein의 curve25519(및 curve448)는 Montgomery 및 Edwards 형식을 대신 사용합니다. 그 이유는 그의 웹 사이트의 논문과 어떤 경우에도 EdDSA에서 자세히 논의된 이유 때문입니다.연산ECDSA 알고리즘과 다릅니다. 그러나 그것은 더 이상 중요하지 않습니다.

OpenSSL에서 키를 사용하고 싶지 않고 키가 무엇인지 알고 싶은 경우 ssh-keygen -y공개 키는 이미 OpenSSH가 선호하는 형식으로 출력되어 있습니다. 이는 ASCII의 유형 이름 ssh-ed25519과 (SSH2) 와이어 형식의 base64 인코딩입니다. 순서대로 4단어입니다. 섹션 길이 + 유형 이름 + 4바이트 길이 + 32바이트 공개 키(RFC8032에 정의된 인코딩 사용) 정말로 개인 키를 원한다면 먼저 다음 명령을 사용하여 파일의 암호를 해독한 다음 ssh-keygen -p(나쁜 행위자가 이를 얻을 수 있는 곳에 복사본을 두지 않도록 주의) 다음을 사용하여 파일을 덤프할 수 있습니다 od -tx1. 오프셋 053에서 시작하는 공개 키 blob, 길이는 다음과 같습니다. 063(둘 다 8진수), 일반적으로 암호화되지 않은 부분은 오프셋 0142에서 시작하고 위와 같이 길이가 0210입니다(즉, 8바이트 검사, 그 다음 개인 "blob", 즉 4바이트 길이 + 32바이트 공개 키 복사 + 4바이트 길이). + 64바이트 API "비밀" 키, 그 중 32바이트만 실제 개인 키이고 나머지는 공개 키의 또 다른(!) 복사본이며 길이는 4바이트 + 주석입니다.

관련 정보