본문 바로가기
안드로이드/CS

안드로이드 앱 서명

by 김어찐 2022. 10. 31.
728x90

안드로이드 앱 서명이란

안드로이드의 모든 APK는 앱 서명 키를 사용하여 서명되어야 설치 될 수 있다.

안드로이드는 앱 업데이트가 기기에 설치된 앱의 업데이트인지 확인한다.

안드로이드는 앱 서명을 사용하여 앱 업데이트를 위한 신규 APK가 기존에 이미 설치된 앱과 같은곳(개발자, 배포처 등)으로부터 생성되어 진 것인지 확인

 

서명 검증을 통과하는 경우에만 앱 설치를 허용하여, 악성 앱 업데이트 위험을 줄인다.

 

전통적인 앱 서명 방식

전통적인 앱 서명 방식은 개발자가 앱 서명 키를 생성화고 앱 설치 검증을 위한 인증서를 직접 생성하여 업로드하는 자체 서명 키 사용 및 관리 방식이다.

이때의 사명값은 사용자의 단말에 설치될 때 검증을 위해 사용된다.

구글 플레이스토어와 같은 앱 스토어에 개발자는 앱(APK)을 직접 업로드하고 배포하며, 앱 스토어에서는 서명 값을 변경하지 않는다.

 

 

 

AAB

Android App Bundle(AAB)은 앱의 모든 컴파일된 코드 및 리소스를 포함하는 게시 형식으로서 앱을 설치하고 실행할 때 사용되는 형식인 APK와는 다르게, 기기에 설치되거나 기기에서 실행될 수 없다.

개발자가 직접 APK 생성 및 서명을 하지 않고 Google Play에 맡기는 게시 형식이다

 

Google Play는 AAB를 활용하여 앱 설치를 요청한 각 기기에 맞게 최적화된 APK를 생성하고 제공한다.

따라서 사용자는 자신의 기기와 관련없는 코드, 리소스가 포함되지 않은 더 작고 최적화된 앱을 다운로드하게되며, 개발자는 다양한 기기에 대한 지원을 최적화하기위 여러 종류의 APK를 빌드, 관리할 필요가 없다.

 

AAB는 Google Play 뿐만 아니라 오픈소스이므로 모든 앱 스토어에서 지원 가능하다.

 

Google Play 정책 업데이트

Google Play는 앞으로의 정책 업데이트 일정을 공지하고 있으며, 2021년 8dnjfdml wjdcor djqepdlxmdptj AAB를 신규 앱의 필수 형식으로 지정하였다. 즉 8월 이후 신규 개발되어 배포되는 앱은 Google Play에 업로드 시에 AAB 형식으로 게시해야한다. (8월 이전 배초된 앱은 기존 방식을 그대로 사용 가능하다)

 

정통적인 앱 서명 방식에서는 개발자가 APK를 빌드하고 서명한 값이 사용자에게 그대로 전달됩니다. 하지만, AAB 형식으로 업로드한다면, Google Play에서 APK를 빌드하고 서명하므로, 기존의 앱 서명 방식은 적용될 수 없습니다.

 

Play 앱 서명 방식

Play 앱 서명은 2017년 출시된 Google Play의 키 관리 서비스 이다. 전톹적인 앱 서명 박식에서는 앱 서명 키를 개발자가 분실하면 더 이상 사용자에게 앱 업데이트를 제공할 수 없고, 키가 유출되면 사용자가 악성 업데이트의 위험에 놓이게 된다

Play 앱 서명은 이러한 위험을 없애고 높은 수준의 키 관리 보안 서비스를 제공한다.

 

업로드 키

업로드 키는 개발자가 보관하다가 앱을 Google Play에 업로드하기 위해 서명할 때 사용한다.

Google은 기 등록되어있는 업로드 인증서를 사용하여 서명을 검증한다.

최초 업로드 시 서명할 때 사용한 키가 업로드 키가 되며, 차우 업로드에도 이 키를 사용하여야 합니다.

만약, 개발자는 언제든지 업로드 키를 새로 생성하여 새로운 업로드 인증서를 등록 할 수 있다.

 

단순히 앱 개발자 입장에서는, 업로드 키 생성 및 서명, 관리는 기존 앱 서명 방식의 앱 서명키에서의 방식과 동일하다.

Android Studio를 사용한다면, 기존의 앱 빌드 시에 키 생성 및 선택 후 서명하는 과정이 업로드 키의 과정이다.

 

앱 서명 키

앱 서명 키는 Google에서 안전하게 저장하고 있으며, 배포할 APK를 서명하는 데 사용된다.

이 서명을 기기에 설치 및 업데이트 시에 검증한다. 앱 서명 키는 앱의 전체 기간동안 변경되지 않는다.(하지만, 변경될 수 있는 특수 상황이 있다.)

 

앱 서명 키는 3가지의 방법 중 하나를 통해 성성 되거나 등록된다.

 

첫 번째는, Google이 Play 앱 서명 구성 시 자동으로 앱 서명 키가 생선된다.

이 방법을 선택하다면, 개발자는 Play 앱 서명을 구성하고 앱을 업로드 할 때 추가적인 어떠한 동작도 필요 없다. 이 앱 서명 키는 Google이 생성하고 관리하기 때문에 개발자도 이 키를 획득할 수 는 없다. 하지만, 이 키로 서명된 인증서 및 apk를 다운로드 가능하다. 이렇게 서명된 apk를 다른 앱 스토에도 배포하여 같은 키로 서명된 apk를 여러 배포처를 통해 배포할 수 있다.

 

두 번째 방법은, 개발자가 가지고 있는 앱 서명 키를 업로드하여 대체하는 방시이다. 이 방법으로는, 개발자는 기존에 사용하던 키를 그대로 사용할 수도 있으며, Google에 키 생성을 맡기지 않고 개발자 측에서 생성 및 관리하는 키를 사용할 수 있다.

앱 서명 키는 개인키 이므로, 외부로 유출되서는 안된다. 하지만 Play 앱 서명 서비스를 사용하기 위해서는 Google에서 앱 서명 키의 원본을 가지고 있어야 하므로, 개발자는 앱 서명 키를 암호화 하여 업로드하고, Google은 복호화하여 등록된 앱 서명 키를 사용한다.

 

세 번째 방법은, 개발자 계정의 배포되는 다른 앱에서 사용중인 앱 서명 키를 사용하는 것이다.

 

참고

https://cocoslime.github.io/blog/Android-App-Signing/

 

[Android] 안드로이드 앱 서명 (feat. Android App Bundle)

안드로이드 앱 서명 방식의 변화와 AAB에 대해 알아보자

cocoslime.github.io

 

728x90

'안드로이드 > CS' 카테고리의 다른 글

QUERY_ALL_PACKAGES  (0) 2022.11.02
안드로이드 뷰 그려지는 과정  (0) 2022.11.01
안드로이드 앱 번들  (0) 2022.10.31
코틀린 Companion object, 자바 static 차이  (0) 2022.10.27
안드로이드 Dalvik과 ART 작동방식  (0) 2022.10.26