2010-08-02 4 views
20

.apk 파일에 서명하는 방법에 대한 질문이 아닙니다. 나는 실제로 서명하는 것이 무엇이며 어떻게 구현되는지를 알고 싶다..apk 파일에 서명하는 방법

.apk 파일 안에는 META-INF 폴더가 있으며 그 안에는 두 개의 파일이 있습니다.

첫 번째 CERT.SF은 SHA1은 다양한 구성 요소에 대한 해시를 포함하며 다음과 같습니다

Name: res/layout/main.xml 
SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM= 

Name: AndroidManifest.xml 
SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc= 

Name: resources.arsc 
SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY= 

Name: classes.dex 
SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI= 

또한 CERT.RSA라는 파일이 있습니다. 서명을 확인하는 것이 공개 키라고 가정합니다.

제 질문은 전체 .apk 파일의 서명이 어디에 저장되어 있습니까? 실제로 서명 된 것은 무엇입니까? 그것은 하나의 바이너리 객체로 사용하거나

  • 의 .apk 파일이 될 수 있으며,이
  • 을 체결하거나 CERT.SF가 다른 구성 요소

또한 많은 것에 대한 개별 해시를 포함하는 서명 자세한 서명 및 검증 프로세스의 문서를 참조 할 수 있다면 더 좋습니다.

답변

24

는 사실이 특정 안드로이드 질문이 아닌 것입니다 그러나 어쨌든 답변 ... 모든

먼저 게시 자바에-일반적인 질문 A : 만 XXX.SF 파일이 서명; 이것은 XXX.SF가 해시를 포함하고 있기 때문에 XXX.SF 파일에 언급 된 모든 파일이 "간접적으로"서명되었음을 의미합니다. 사실 "Meta-Inf"에없는 모든 파일에는 해시가 있어야합니다! .apk 아카이브 전체가 서명되지 않았습니다.

XXX.SF 파일은 MANIFEST.MF 파일의 사본입니다. "MANIFEST.MF"자체의 SHA-1 해시 인 "SHA1-Digest-Manifest"행이 있습니다. "SHA1-Digest"행은 파일의 해시를 포함하지 않지만 다음과 같이 Manifest.MF 파일에서 해당 트리의 해시를 포함합니다.

SHA1 ("이름 : 파일 이름"+ CR + LF + "SHA1 -Dagest : "+ SHA1 (file_content) + CR + LF + CR + LF)

XXX.DSA/.RSA의 파일 형식은 S/MIME 전자 메일 서명 (XXX의 내용)과 동일합니다. SF) 그러나 데이터는 base64로 인코딩되지 않으며 헤더/트레일러 행은 사용되지 않습니다. "openssl smime -sign -outform DER"이이 형식을 만듭니다.

여러 인증서를 사용하여 ZIP 파일에 서명 할 수 있습니다. 이 경우 (XXX.SF/.RSA, YYY.SF/.RSA, ...)의 여러 쌍이 존재합니다.

+0

마틴, .NET을 사용하여 마지막 단계 (.RSA 파일 생성)를 복제하려고합니다. .SF 파일 (예 : 3 줄)에있는 파일 항목을 서명해야 입력 할 수 있습니까? 이 데이터를 UTF8 또는 유니 코드로 인코딩해야합니까? 동일한 인증서/데이터에 대한 jarsigner 도구와 비슷한 출력 (동일한 경우)을 생성 할 수 없습니다. 힌트가 도움이 될 것입니다! –

관련 문제