카테고리 보관물: Superuser

superuser

ssh 키를 사용하여 파일에 서명 할 수 있습니까? 사용합니다. 파일 서명에도 사용할 수

SSH를 사용합니다 (리눅스에서는 OpenSSH 5.5p1). 암호가있는 키가 있습니다. 컴퓨터에 일반적인 로그인에 사용합니다.

파일 서명에도 사용할 수 있습니까?

내가 이해하는 것처럼 SSH 키는 RSA (또는 DSA) 키이며 SSH 로그인 프로세스 중에 서버로 보낸 메시지에 서명하는 데 사용됩니다. 따라서 원칙적으로 실제로는 사물에 서명하는 데 사용될 수 있습니다.

그러나 내가 알 수있는 한, 키를 사용하여 임의의 파일에 서명하는 방법은 없습니다 (PGP와 마찬가지로). 이것을 할 수있는 방법이 있습니까?



답변

OpenSSH 도구만으로는이를 수행 할 방법이 없을 수 있습니다.

그러나 OpenSSL 도구를 사용하면 매우 쉽게 수행 할 수 있습니다. 실제로 두 가지 방법이 있습니다. 아래 예에서는 ~/.ssh/id_rsa개인 키입니다.

한 가지 방법은 dgst를 사용하는 것입니다 .

openssl dgst -sign ~/.ssh/id_rsa some-file

다른 하나는 pkeyutl을 사용 하고 있습니다 .

openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file

이 두 가지 모두 이진 서명을 표준 출력에 씁니다. dgst-hex 옵션은 서명 형식에 대한 세부 정보와 함께 텍스트 표현을 인쇄 하는 옵션을 사용합니다. pkeyutl-hexdump조금 덜 유용한 옵션을 사용합니다. 둘 다 RSA 및 DSA 키를 모두 허용합니다. 출력 형식이 무엇인지 전혀 모른다. 두 명령은 다른 형식을 생성합니다. 나는 pkeyutldgst 보다 더 현대적이라고 생각된다 .

해당 서명을 확인하려면

openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file

과:

openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file

여기서 문제는 $PUBLIC_KEY_FILE입니다. OpenSSL은 OpenSSH의 공개 키 형식을 읽을 수 없으므로을 사용할 수 없습니다 id_rsa.pub. 몇 가지 옵션이 있지만 이상적인 것은 아닙니다.

OpenSSH 버전이 5.6 이상인 경우 다음을 수행 할 수 있습니다.

ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem

공개 키를 PEM 형식의 표준 출력에 쓰고 OpenSSL에서 읽을 수 있습니다.

개인 키가 있고 RSA 키인 경우 공개 키를 추출 할 수 있습니다 (공개 키를 파생시킬 수 없기 때문에 PEM으로 인코딩 된 개인 키 파일에 공개 키 사본이 포함되어 있다고 가정합니다) 개인 키 자체에서)를 사용하고 다음을 사용하십시오.

openssl rsa -in ~/.ssh/id_rsa -pubout

DSA에 해당하는 것이 있는지 모르겠습니다. 이 방법을 사용하려면 개인 키 소유자의 협조가 필요합니다. 개인 키는 공개 키를 추출하여 원하는 검증 자에게 보내야합니다.

마지막으로 Lars라는 챕터작성한 Python 프로그램을 사용 하여 공개 키를 OpenSSH에서 OpenSSL 형식으로 변환 할 수 있습니다 .


답변

@Tom의 대답은 시작하는 데 도움이되었지만 즉시 작동하지는 않았습니다.

이 명령은 다음과 함께 작동합니다.

  • OpenSSL 1.0.1 2012 년 3 월 14 일
  • OpenSSH_5.9p1

pkeyutl 사용

# openssl pkeyutl -sign -inkey ~/.ssh/id_sample -in $1 > $1.sig
# ssh-keygen -e -f ~/.ssh/id_sample.pub -m PKCS8 > pub
# openssl pkeyutl -verify -pubin -inkey pub -in $1 -sigfile $1.sig
Signature Verified Successfully

dgst 사용

# openssl dgst -sign ~/.ssh/id_sample $1 > $1.sig
# ssh-keygen -e -f ~/.ssh/id_sample.pub -m PKCS8 > pub
# openssl dgst -verify pub -signature $1.sig $1
Verified OK

pkeyutl 버전은 작은 크기의 파일에만 서명 할 수 있습니다. dgst는 임의로 큰 파일에 서명 할 수 있지만 결과에 서명하기 전에 요약이 필요하기 때문입니다.


답변

이러한 서명을 확인하려면 더 쉬운 솔루션 :

서명 된 문서가 동일한 지 확인하는 더 쉬운 방법은 디지털 서명 파일을 다시 생성 한 다음 diff를 사용하여 두 서명 파일이 동일한 지 확인하는 것입니다.


답변