# ONE store App 서명

## ONE store App 서명 사용 <a href="#onestore-onestoreapp" id="onestore-onestoreapp"></a>

Android App Bundle을 사용하기 위해서는 앱 서명 키를 원스토어에서 생성한 앱 서명 키를 사용하거나 직접 생성한 앱 서명 키를 등록하여야 합니다.

Android는 APK를 기기에 설치하거나 업데이트할 때 인증서로 디지털 서명을 요구하기 때문입니다.

ONE store는 Android App Bundle을 강제하지 않습니다.

하지만, 한번 Android App Bundle로 전환하면, 다시 APK 판매는 불가능하기 때문에 신중히 결정해 주세요.

현재 판매 중인 상품이 아래와 같을 경우 APK를 지속 사용하는 것을 권장합니다.

1. 2개 이상의 바이너리를 등록하여 판매 중이며, 아래에 해당되는 경우
   1. 판매 중인 상품에 서로 다른 패키지 네임을 사용하는 경우
   2. 판매 중인 상품이 서로 다른 서명 키를 사용하는 경우
2. UDP를 통해 앱을 등록하는 경우

## ONE store App 서명 보안 <a href="#onestore-onestoreapp" id="onestore-onestoreapp"></a>

ONE store 앱 서명을 사용하면 ONE store에서 자체 키를 생성 및 저장하는 인프라에 키가 저장됩니다.

ONE store 키 관리 서비스로 보호됩니다.

Android 앱은 비공개 키로 서명됩니다. 앱 업데이트를 신뢰할 수 있도록 하기 위해 모든 비공개 키에는 기기 및 서비스에서 앱이 신뢰할 만한 소스로부터 게시되었는지 확인하는 데 사용하는 관련 공개 인증서가 있습니다.

기기는 업데이트의 서명이 설치된 앱의 서명과 일치할 때만 업데이트를 수락합니다. ONE store가 이 앱 서명 키를 관리하도록 허용함으로써 이 프로세스를 더욱 안전하게 만들 수 있습니다.

## 원스토어 키관리 시스템 보안 <a href="#onestore-onestore" id="onestore-onestore"></a>

원스토어 키관리 시스템은 회원의 앱 서명키를 안전하게 보관하기 위하여 아래와 같이 여러 단계의 보안 장치를 두고 철저히 관리하고 있습니다.

1. 앱 서명키를 각 단계마다 암호화하여 관리합니다.
   1. 하드웨어 암호화(AES256)
   2. 데이터 베이스 암호화(AES128/AES256 + RSA)
   3. 전송구간 암호화(ECDH+AES)
2. 암호화 키 분산 저장
   1. 각 구간에서 인적 문제로 인하여 노출이 되어도 데이터를 알 수 없도록 키를 분산 저장합니다.
3. 키 관리 시스템 앱 서명키 노출 차단
   1. 키관리 시스템은 외부에서의 접근이 제한되며 앱 서명키 관련 작업은 모두 키 관리 시스템에 위임하여 키 관리 시스템 밖으로 키 정보가 노출되는것을 원천 차단합니다.
4. 하드웨어 접근 제한
   1. 키 관리 시스템과 통신 가능한 하드웨어를 최소화 하여 관리 운영합니다.
5. 유저 인증
   1. 키 관리 서버에 접근하는 유저에 대한 2차 인증을 실시하고 있으며 필수 유저에 대해서만 접근 허용하여 관리합니다.

## 앱 서명 <a href="#onestore" id="onestore"></a>

ONE store는 아래와 같은 앱의 서명 옵션을 제공하고 있습니다.

1. ONE store가 앱 서명키를 관리 보호
2. 이 개발자 계정의 다른 앱과 동일한 키 사용
3. Java Keystore의 키 내보내기 및 업로드
4. 키 내보내기 및 업로드(Java Keystore를 사용하지 않음)
5. ONE store 앱 서명 선택해제(AAB를 사용하지 않고 서명한 APK를 등록합니다.)

### **서명 옵션**

#### 1. ONE store가 앱 서명키를 관리 보호

* ONE store가 서명 키를 직접 생성하고 저장하는 옵션입니다.
* 기존 APK로 판매 중인 상품은 서명 키가 달라지면 업데이트를 할 수 없기 때문에 신규 생성한 상품만 사용할 수 있는 옵션입니다.
* 앱에서 서명 키 일치 여부를 확인하는 솔루션 또는 기능(구글 로그인 등)을 사용 중인 경우, **신규 바이너리 > 서명 키 정보**에서 인증서 지문을 해당 업체에 제공하여야 합니다.
* 이미 다른 마켓에서 판매 중인 상품 솔루션 또는 기능을 연동하여 사용 중인 경우에는 Java Keystore의 키 내보내기 및 업로드 또는 키 내보내기 및 업로드(Java Keystore를 사용하지 않음) 옵션을 통해 사용 중인 서명 키를 등록하는 옵션을 선택해 주세요.

#### 2. 이 개발자 계정의 다른 앱과 동일한 키 사용

* 다른 앱에서 서명키를 등록하거나 생성하였다면, 해당 서명 키와 동일한 서명 키를 사용하는 옵션입니다.
* 개발자 계정 내의 다른 서명 키로만 연결 가능하며, 다른 앱과 연동 등이 필요한 경우 사용할 수 있는 옵션입니다.

#### 3. Java Keystore의 키 내보내기 및 업로드, 키 내보내기 및 업로드(Java Keystore를 사용하지 않음)

* 직접 생성한 서명 키를 등록 및 사용하는 옵션입니다.
* 생성한 서명 키를 PEPK(Play Encrypt Private Key) 툴을 통해 암호화하여 ONE store에 안전하게 전송 및 저장할 수 있습니다.

#### 4. 앱 서명 사용 안함(서명 키를 등록하지 않고 서명한 APK를 등록합니다.)

* Android App Bundle을 사용하지 않고 APK를 사용하는 경우 선택하는 옵션입니다.

## 앱 서명 및 등록 절차 <a href="#onestore" id="onestore"></a>

### **신규 상품**

1. APK로 등록할지 AAB로 등록할 지 결정\
   (신규 상품은 APK 또는 AAB로 등록하여 판매할 수 있으나, AAB로 판매하는 경우 업데이트 시 APK로 업데이트 할 수 없습니다.)
2. 업로드 키 생성 및 업로드 키로 서명
3. AAB를 등록하려는 경우 AAB 파일 등록 옵션 선택 후 서명 옵션(1\~3번) 선택. 그 다음에, AAB 파일 등록
4. APK를 등록하려는 경우 APK 파일 등록 옵션 선택 후 서명 옵션(1\~4번) 선택. 그 다음에, APK 파일 등록

### **기존 상품**

1. 앱 업데이트 시 APK로 등록할지 AAB로 등록할 지 결정
   1. (APK로 판매중인 상품은 Android App Bundle로 전환하거나 APK를 계속 사용할 수 있으나, 멀티바이너리 APK를 사용하는 경우 앱 서명은 지원되지 않습니다.)
   2. AAB로 판매중인 상품은 앱 업데이트 시에도 AAB로만 등록 가능합니다.
2. APK를 업데이트 하며, 앱 서명을 사용하지 않는 경우, APK 파일 등록 옵션 선택 후 서명 옵션(4번) 선택. 그 다음에, APK 파일 등록
3. APK를 업데이트 하며, 앱 서명을 사용하는 경우, APK 파일 등록 옵션 선택 후 서명 옵션(1\~3번) 선택. 그 다음에, APK 파일 등록
4. 앱 서명을 사용하지 않았던 APK를 AAB로 업데이트 하는 경우, AAB 파일 등록 옵션 선택 후 서명 옵션(2\~3번) 선택. 그 다음에, AAB 파일 등록 (Android App Bundle로 전환 시 다시 APK로 전환할 수 없습니다.)

## 업로드 키 분실 하거나 도난 당하여 교체가 필요한 경우 <a href="#onestore" id="onestore"></a>

업로드 키를 분실하거나 도난당한 경우, 문의하기 > 기술지원을 통해 교체할 상품 제목을 지정해 요청해 주세요.\
초기화가 완료되면 새로운 업로드 키로 상품을 업데이트할 수 있습니다.

## 앱 서명 관련 용어 <a href="#onestore" id="onestore"></a>

| 용어                               | 설명                                                                                                                                                                                                                                                                      |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 앱 서명 키                           | ONE store에서 사용자의 단말로 배포를 하기 위해 APK 서명에 사용되는 키입니다. ONE store 앱 서명을 통해 키를 생성하거나 판매중인 앱에서 사용중인 키를 등록할 수 있습니다.                                                                                                                                                              |
| 업로드 키                            | ONE store에 앱 등록 시 개발자의 신원을 확인하기 위해 사용 되는 키입니다. 상품 업데이트 시 동일한 업로드 키로 서명 된 파일을 업로드하여야 등록 가능합니다.                                                                                                                                                                           |
| 인증서(.der 또는 .pem)                | <p>인증서에는 공개 키와 키 소유자에 관한 추가 식별 정보가 포함되어 있습니다. 공개 키 인증서를 사용하면 누구나 App Bundle에 서명한 사람을 확인할 수 있으며 비공개 키가 포함되어 있지 않으므로 이를 다른 사람과 공유할 수 있습니다.</p><p>API 제공업체에 키를 등록하려면 바이너리 파일 상세정보 서명 화면에서 앱 서명 키와 업로드 키의 공개 인증서를 다운로드합니다. 공개 키 인증서는 다른 사람과 공유할 수 있으며 비공개 키를 포함하지 않습니다.</p> |
| 인증서 지문                           | <p>짧고 고유한 인증서 표현 형식으로 API 제공업체가 패키지 이름과 함께 요청하는 경우가 많습니다. 앱을 제공업체 서비스에 등록하는 데 사용됩니다.</p><p>업로드 및 앱 서명 인증서의 MD5, SHA-1 및 SHA-256 지문은 바이너리 파일 상세정보 서명 화면에서 앱 서명 페이지에서 확인할 수 있습니다.</p><p>해당 화면에서 원래 인증서(.der)를 다운로드하여 다른 지문으로 변환할 수도 있습니다.</p>                             |
| Java Keystore(.jks 또는 .keystore) |  보안 인증서와 비공개 키 저장소입니다.                                                                                                                                                                                                                                                  |
| Play 암호화 비공개 키(PEPK) 도구          | <p>Java Keystore에서 비공개 키를 내보내고 암호화하여 ONE store로 전송하기 위한 도구입니다.</p><p>인터넷 또는 합법적인 소스를 통해 도구를 다운로드하고 사용합니다. 원하는 경우 PEPK 도구의 오픈소스 코드를 사용할 수 있습니다.</p>                                                                                                                      |
