2015-01-14 2 views
0

펌웨어가 들어있는 대형 바이너리 파일에 서명 한 다음이를받은 대상 장치에서이 서명의 유효성을 검사해야합니다. 몇몇 기사를 읽은 후에 나는 이것을하는 방법을 결론지었습니다, 그러나 나는 그것이 이런 방식으로 이루어져야하는지 확신 할 수 없습니다.OpenSSL을 사용하여 큰 파일에 서명하기

$ openssl pkey -in privkey-ID.pem -out pubkey-ID.pem -pubout 

보낸 사람이 다이제스트와 기호를 생성

$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3 -out privkey-ID.pem 

보낸 사람은 개인 키를 사용하여 공개 키를 생성

보낸 사람은 개인 키를 생성합니다 다음은 지금까지 한 일이다 을 사용하여 파일 :

$ openssl dgst -sha256 -sign privkey-ID.pem -out out.sha256 rootfs.jffs2 

수신기는 서명을 확인 :

$ openssl dgst -sha256 -verify pubkey-ID.pem -signature out.sha256 rootfs.jffs2 

네 번째 단계를 실행할 때 "확인 확인"응답이 표시되지만 올바르게 완료되었는지 확실하지 않습니다.

서명 할 때 대칭 키를 사용해야합니다. 내가 대칭 키를 사용하여 서명하는 것을 이해하는 한, 발신자와 수신자 모두에서 동일한 키를 사용해야한다는 것을 의미하지만 여기서 개인 키로 서명하고 공개 키로 확인합니다.

위의 사항에 대한 설명은 크게 인정됩니다.

+0

이 질문은 프로그래밍이나 개발에 관련되지 않은 주제와 관련이없는 것 같습니다. 아마도 정보 보안 스택 교환이 더 좋은 곳이 될 것입니다. – jww

답변

0

SHA256 다이제스트 (또는 해시, 전체 파일을 나타내는 짧은 값)를 생성하고 서명 한 다음 비대칭 RSA 알고리즘을 사용하여 서명을 확인했습니다.

비대칭 RSA 알고리즘은 공개 키와 개인 키를 사용합니다. 누구나 공개 키로 데이터를 암호화 할 수 있으며 개인 키의 소유자 만 암호를 해독 할 수 있습니다. 서명은 반대쪽에서 작동하며 소유자는 사인 키로 데이터를 암호화 할 수 있으며 모든 사람이 서명을 확인하기 위해 해독 할 수 있습니다.

하지만 사용자의 요구 사항에 따라 HMAC-SHA256과 같은 대칭 알고리즘을 사용해야합니다. 내부적으로 동일한 SHA-256 다이제스트를 계산 한 다음 제공된 키로 서명합니다.

cat filename | openssl dgst -sha256 -hmac "sharedkey" 

서명하고 확인하는 별도의 명령이 없으므로 두 장치에서 동일한 작업을 실행하고 결과를 비교하면됩니다.

+0

답장을 보내 주셔서 감사합니다. 서명 부분에 대해 좀 더 설명해주십시오. 즉, 개인 키가있는 파일에 서명하면이 개인 키에서 파생 된 공개 키를 가진 모든 사람이이를 확인할 수 있으며 그 반대의 경우도 가능하지 않습니다 ...? – Siva

+0

네, 맞습니다. 그것이 비대칭적인 작동 방식입니다. 개인 키와 공개 키에 저장된 숫자 사이에는 단방향 수학 관계가 있습니다. 그것을 역으로 계산하는 것은 매우 어렵습니다 (합리적인 시간에는 불가능합니다). – zakjan

+0

RSA를 선택했습니다. 특정 속성을 가지고 있으므로 개인 키와 공개 키를 모두 암호화와 암호 해독에 사용할 수 있지만 두 번째 키와 쌍으로 만 사용할 수 있습니다. 따라서 암호화를 역전하면 개인 키를 사용하여 "암호화"(= 서명)하고 공개 키를 가진 모든 사람은 "해독"(= 검증) 할 수 있습니다. 다른 비대칭 알고리즘에서는 가능하지 않습니다. 서명만을 목적으로하는 다른 알고리즘이 있습니다 (예 : DSA, ECDSA). – zakjan

관련 문제