12/09
음... 사실 이건 쓸까 말까 좀 고민했는데, 실제 찾아본 자료가 공식문서라 사양서에 가까워서... 개념만 정리하고 실제로는 그걸 보면서 하는게 맞지 않나..? 싶은
뭐 주요 특징정도만 간단하게 정리해놓고 넘어가야겠다.
APK 서명
v3 라는 것은 버전3 이라는 것이기 때문에.. 먼저 앱 서명이 뭔지부터 알아야 한다.
안드로이드 플랫폼에서 실행되는 모든 앱은 개발자가 서명해야 하며, 서명되지 않은 앱은 설치할 수 없다.(혹은 위험을 감수하거나) 따라서 서명을 통해 앱 작성자를 식별하고 안전하게 업데이트 할 수 있다. 앱 서명의 목적과 특징은,
보안과 책임 소재
앱이 수정되지 않고 사용자 기기에 배포되도록 보장하며, 앱 동작의 책임을 개발자에게 있도록 한다.
애플리케이션 샌드박스
서명된 인증서는 각 앱에 고유한 UID 를 할당하여 애플리케이션 샌드박스에 격리하며, 이는 제대로 정의된 IPC 를 통하지 않고서는 다른 앱으로의 무단 액세스를 차단한다.
설치 유효성 검사
기기에 앱 설치시 패키지 관리자는 APK 의 서명이 올바른지 확인한다. 인증서의 공개 키가 다른 APK 의 키와 일치하는 경우, 새 APK 는 매니페스트에서 유사하게 서명된 다른 APK 와 UID 를 공유한다고 지정할 수 있다.
자체 서명
외부 인증 기관(CA) 의 지원 없이 자체 서명된 인증서를 사용할 수 있도록 허용한다. 중앙 기관 서명 없이 서드파티(OEM, 운영자, 대체 시장) 나, 권한 없이 생성할 수 있는 자체 서명된 인증서도 가능하다.
권한 공유
동일한 키로 서명된 앱끼리는 서명 보호 수준의 권한을 공유하거나, 매니페스트에서 동일한 UID 와 애플리케이션 샌드박스를 유지할 수 있다.
서명 체계 v3
그래서 v3는, 그 세번째로 각 버전별로 호환 가능한 안드로이드 버전이 있다. 최대의 호환성을 원하는 경우 모든 체계로 앱을 전부 서명해야 하는 것. (v1, v2, v3 순으로)
뭐 다른 버전은 다음에 필요할 때 찾아보기로 하고, 오늘 궁금한 것은 v3 이기 때문에, v3의 특징을 알아보자

APK 서명 체계 v3 는 Android 9 (API 수준 28) 에서 도입된 서명 방식으로, 키 순환 기능을 지원하는 것이 가장 큰 특징이다. 이를 통해 개발자가 기존 서명 키를 더 안전한 새 키로 변경할 수 있도록 하여 보안을 강화하는 방식.
키 순환 지원
proof-of-rotation 이라는 구조를 도입하여, 새 서명 키와 이전 서명 키 간의 관계(lineage) 를 정의할 수 있다. 이를 통해 새 키로 서명된 앱 업데이트를 이전 키로 서명된 앱 위에 설치할 수 있다.
SDK 버전 타겟팅
서명 시 지원되는 최소 / 최대 SDK 버전을 지정할 수 있어, 특정 플랫폼 버전에 맞춰 서명 유효성을 제어할 수 있다.
하위 호환성
이전 안드로이드 플랫폼 버전과의 호환성을 유지하기 위해, v2 및 v1 서명도 함께 사용하는 것이 권장된다. Android 9 미만 기기는 v3 서명을 무시한다.
성능상 이점
v2 및 v3 체계는 APK 콘텐츠를 효율적으로 해싱하여, 앱 설치 시간을 단축시킨다.
정리하자면, 이전 버전들과 키 관계성을 통해 v2 와 구조나 설계가 유사하지만 역호환성을 높인 방식. Android 13 이상부터는 또 v3.1을 사용하긴 하는데, 키 순환 관련 문제를 해결했다고 한다.
살펴보면서 느낀 건데, 이건 확실히 개념이 문제가 아니라 실제 인증 절차나 형식이 더 중요한 것 같은.. 앞으로의 고생이 훤히 보인다(?)
사양에 대한 공식문서를 확인하고 싶다면, 이쪽으로
APK 서명 체계 v3 | Android Open Source Project
2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main 대신 android-latest-release를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요. 이 페이지는 Cloud Translation API를 통해 번역되
source.android.com
'공부 > Android' 카테고리의 다른 글
| Intent / Activity / Service (1) | 2025.12.28 |
|---|---|
| SHA-256 서명 (0) | 2025.12.24 |
| .jar / .aar (0) | 2025.12.12 |
| AndroidManifest (0) | 2025.12.11 |
| Android Studio 입문 (1) | 2025.12.09 |