https://source.android.com/docs/security/features/apksigning
애플리케이션 서명 | Android 오픈소스 프로젝트 | Android Open Source Project
애플리케이션 서명 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 참고: Android App Links를 사용하는 경우 웹사이트의 디지털 애셋 링크 JSON 파일에 해당하는
source.android.com
- 앱 서명을 통해 개발자들은 본인들이 개발한 앱이 본인들에 의해 개발됐다는 것을 입증할 수 있다. 또한, 앱 업데이트 시 복잡한 절차를 거치지 않아도 된다.
- 안드로이드 플랫폼 위에서 동작하는 모든 앱은 개발자에 의해 서명되어야한다.
- 서명되지 않은 앱은 Google Play 혹은 안드로이드 기기 내 package installer에 의해 거절당한다.
- Google Play에서 앱서명의 역할
- 개발자는 본인이 만든 앱이 위변조 되지 않고 사용자들의 안드로이드 기기에 설치된 것을 확인 할 수 있다.
- 만약 앱이 악의적인 목적으로 제작된 경우, 앱 서명을 통해서 앱이 누구에 의해 만들어 졌는지 알 수 있다.
- 안드로이드 기기에서 앱서명의 역할
- Application Sandbox를 구분짓는데 중요한 역할. 앱 서명을 하는데 사용된 인증서는 해당앱에게 어떤 user ID를 부여할지 결정.
- 어플리케이션이 안드로이드 기기에 새로 설치 될때, 패키지 매니저는 apk에 포함된 인증서로 앱의 앱서명을 점검함. 만약 앱서명에 사용된 인증서가 현재 기기내에 설치된 다른 앱을 서명하는데 사용된 인증서라면, 개발자의 설정에 따라 그 다른 앱과 user ID를 공유할지 여부를 결정 가능
- 어플리케이션은 third-party (google play외 다른 앱마켓)에 의해 서명되거나 self-signed될 수 있다.
- 안드로이드는 개발자가 생성한 self-signed certificate를 이용한 코드 사이닝을 제공한다. 개발자의 인증서가 CA로부터 인증 받을 필요가 없다.
- 동일한 키로 서명된 앱들은 userID와 application sandbox가 달라도 서로 데이터에 접근가능할 수 있다.
안드로이드는 왜 self-signed certficate을 허락할까?
self-signed certificate일지라도 개인키로 서명된 앱은 매칭되는 공개키로만 검증가능하므로 앱 위변조의 목적은 달성한다.
하지만 self-signed certificate은 CA가 없으니 인증서의 주인(앱을 서명한 개발)의 신원을 확인할 수 없다.
이는 보안적으로 위험할 수도 있다. 그럼에도 불구하고 안드로이드는 왜 self-signed certificate을 허용하는가?
- 안드로이드는 운영체제 자체가 오픈소스이다. 따라서 벤더별로 안드로이드를 커스터마이징한 운영체제를 제공할 수도 있다. 하지만 만약 안드로이드 운영체제 내에 무조건 CA에 의해 검증된 인증서를 가진 앱만 설치될 수 있다면, 각 벤더사에서 원하는 앱들을 preinstall하는데 제약이 있을 것이다.
- 개발자 자치권 - 애플과는 다르게 어플리케이션이 플레이스토어 이외에의 서드파티 스토어에서 배포될 수도 있기 때문에 self-signed certificate을 허락한다.
이외에도 여러가지 이유가 있을 수 있다.
안드로이드도 무조건 적으로 self-signed certificate을 포함한 app을 설치할 수 있게 하는게 아니라 어느정도 유저의 동의를 구한다.
앱서명이랑 코드 사이닝이랑 다른거야?
코드사이닝이 앱서명에 상위개념
- 코드사이닝
- 코드 사이닝은 단순히 어플리케이션 뿐만이 아니라 라이브러리와 같이 어떤 종류에 소프트웨어 및 실행 가능한 코드에도 적용될 수 있는 개념
- 코드 사이닝을 통해 코드 작성자를 신뢰할 수 있고, 코드의 위변조를 검증가능. 코드 작성자를 신뢰하기 위해서는 코드 사이닝을 점검하는데 사용하는 인증서가 CA로부터 발급 된 것이여야함. 즉, self-signed certificate는 안됨 (물론 시스템에 해당 인증서를 신뢰한다면 가능해짐)
- 앱 서명
- APK 자체에 대한 코드 사이닝이라고 보면 될 듯
- 앱이 안드로이드 기기에 설치될 때, 개발자가 제공한 인증서를 통해 앱의 위변조를 검증함
APK signing scheme
https://source.android.com/docs/security/features/apksigning
애플리케이션 서명 | Android 오픈소스 프로젝트 | Android Open Source Project
애플리케이션 서명 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 참고: Android App Links를 사용하는 경우 웹사이트의 디지털 애셋 링크 JSON 파일에 해당하는
source.android.com
어플리케이션을 사인하는 규격이 여러가지가 있다고 보면 될듯하다.
안드로이드 버전에 따라 높은 버전의 규격은 지원안할 수 있다.
그렇다면 우리는 앱 서명시 signing schema를 직접 골라야할까?
android studio 2.2 버전, gradle 2.2 버전 부터는 앱 서명시 V2 스키마와 V1 스키마를 모두 사용한다고 한다.
'mobile > android' 카테고리의 다른 글
안드로이드 앱 배포하기 (1) - 개념 이해 - Store File, Store Password, Key Alias, Key Password (0) | 2024.04.28 |
---|