안드로이드 애플리케이션 서명 및 서명 검증
애플리케이션 서명
애플리케이션 서명은 APK (Android 패키지)가 앱 개발자의 고유 식별을 나타내는 개인 키로 서명되는 과정입니다. 이 과정은 서명 후 앱이 변조되지 않았음을 보장하여 앱이 주장된 개발자에게서 왔음을 확인합니다. 자세한 내용을 알아보겠습니다:
키스토어 생성
- 개발자들은 키스토어, 즉 암호화 키를 포함하는 바이너리 파일을 생성합니다. 이 키스토어에는 APK 서명에 사용되는 개인 키가 포함되어 있습니다.
- 키스토어는 암호로 보호되며, 무단 접근을 방지하기 위해 안전하게 보관해야 합니다.
APK 서명하기
- 빌드 과정 중 또는 후에, 키스토어에 저장된 개인 키를 사용하여 APK가 서명됩니다.
- 이 과정에서 해시 함수에 의해 디지털 서명이 생성되어 APK 콘텐츠의 고유한 다이제스트를 만듭니다.
- 다이제스트는 개발자의 개인 키로 암호화되고, 그 결과는 APK 내에 저장됩니다.
인증서 포함
- APK는 서명에 사용된 개인 키에 해당하는 공개 키가 포함된 인증서를 포함합니다.
- 이 인증서는 설치 과정에서 디지털 서명을 검증하는 데 사용됩니다.
왜 애플리케이션 서명이 중요한가?
- 정품 인증 보장: 앱 개발자의 신원을 확인합니다.
- 무결성 보호: 서명 후 앱이 변조되지 않았음을 보장합니다.
- 안전한 업데이트 지원: 업데이트가 원 개발자로부터 왔고 동일한 키로 서명되었음을 보장합니다.
서명 검증
서명 검증은 안드로이드 운영 체제가 APK의 디지털 서명을 확인하여 설치 전에 그 무결성과 진위를 보장하는 과정입니다. APK의 서명 및 진위성을 쉽게 검증하는 방법에 관한 Reddit 게시물을 확인하고 나서 이 내용을 읽어보세요:
인증서 추출
APK가 다운로드되고 설치가 시작되면, 기기는 APK에서 공개 키가 포함된 인증서를 추출합니다.
서명 해독
- 기기는 인증서에서 추출한 공개 키를 사용하여 APK에 내장된 디지털 서명을 해독합니다.
- 해독은 서명 과정에서 생성된 원래의 해시(다이제스트)를 가져옵니다.
해시 생성
기기는 독립적으로 APK 컨텐츠의 자체 해시를 생성합니다. 이는 서명 과정에서 사용된 것과 동일한 해시 함수를 사용합니다.
해시 비교
- 기기는 독립적으로 생성된 해시와 디지털 서명에서 해독된 해시를 비교합니다.
- 일치: 해시가 일치하면 APK가 신뢰할 수 있고 변조되지 않았음을 검증하여 설치를 진행합니다.
- 불일치: 해시가 일치하지 않으면 APK가 서명된 이후로 수정되었을 수 있음을 나타내며 설치를 차단합니다.
왜 서명 검증이 중요한가?
- 정품 인증 확인: APK가 기술된 개발자에 의해 서명되었음을 보장합니다.
- 무결성 유지: 서명된 이후로 APK가 수정되지 않았음을 확인합니다.
- 사용자 보호: 잠재적으로 악성 APK의 설치를 차단합니다.
앱에 여러 개의 서명이 있는 경우 어떤 서명을 선택해야 하나요?
대부분의 앱은 단일 유효 서명을 가지고 있지만, 더 많을 수도 있습니다. 업데이트 오류를 피하기 위해 이미 기기에 설치된 APK의 서명과 일치해야 합니다.
여러 서명의 이유
- 키 변경: 안드로이드 9에서는 개발자가 서명 키를 변경할 수 있습니다. 이는 APK Signature Scheme v3 때문입니다.
- 배포 채널: 서로 다른 소스(예: 플레이 스토어, Github)에서의 앱은 다른 서명을 가질 수 있습니다.
- 시스템 앱: 시스템 앱의 서명 키는 기기 또는 OS 버전에 따라 다를 수 있습니다.
- 설명되지 않은 경우: Google's 파일 및 플레이 서비스와 같은 일부 앱은 단순히 여러 서명을 가지고 있습니다.
올바른 서명 식별 방법:
- AndroidFreeware에는 Android 권한 검사, 위험 플래그 및 필터 감지, md5, sha1, sha256 체크섬 계산, VirusTotal 안티바이러스 검사 등을 수행하는 고급 APK 검사기가 있습니다.
- My APK와 같은 도구를 사용하여 앱 서명을 확인합니다.
- 견제와 오류 방법을 사용합니다. 업데이트가 작동할 때까지 다양한 APK를 설치한 후, 올바른 서명을 기억하여 이후 업데이트에 사용합니다.
- 앱을 APKMirror에 업로드하거나, ML Manager를 사용하여 기존 서명을 찾습니다.
- 일부 데스크톱 도구는 apk 파일의 서명을 찾을 수 있습니다. 이들 중 Google의 apksigner, IBM의 keytool, Warren Bank의 print-apk-signature가 있습니다.