Play Integrity API 개요

Play Integrity API를 사용하면 속임수나 무단 액세스와 같이 잠재적인 위험과 허위적인 상호작용에 대비해 적절한 조치를 취하고 공격을 방지해 악용을 줄임으로써 앱과 게임을 보호할 수 있습니다.

Android 4.4(API 수준 19) 이상을 실행하는 기기에서 앱이나 게임을 사용하는 경우 Play Integrity API는 서명되고 암호화된 응답을 제공하며 여기에는 다음 정보가 포함됩니다.

  • 정품 앱 바이너리: Google Play에서 인식하는 수정되지 않은 바이너리와 상호작용하는지 확인합니다.
  • 정품 Play 설치: 현재 사용자 계정에 라이선스가 부여되었는지 확인합니다. 즉, 사용자가 Google Play에서 앱이나 게임을 설치했거나 비용을 지불했음을 의미합니다.
  • 정품 Android 기기: Google Play 서비스에서 제공하는 정품 Android 기기에서 앱이 실행되는지 알려줍니다.

서비스 약관 및 데이터 보안

Play Integrity API에 액세스하거나 이를 사용하면 Play Integrity API 서비스 약관에 동의하는 것으로 간주됩니다. Play Integrity API에 액세스하기 전에 모든 관련 약관 및 정책을 자세히 읽고 숙지하세요.

Google Play에는 개발자가 앱의 데이터 수집, 공유 및 보안 관행을 공개할 수 있는 데이터 보안 섹션이 있습니다. 데이터 보안 섹션의 요구사항을 충족하는 데 도움이 되는 정보는 Play Integrity API가 데이터를 처리하는 방법을 참고하세요.

보안 고려사항

Play Integrity API는 일반적으로 보안 강화와 조작 방지에 강하지만 앱의 가치 극대화를 위해서는 다음 권장사항을 준수해 주세요.

악용 방지 전략 수립

Play Integrity API는 단독 메커니즘이 아니라 전반적인 악용 방지 전략의 한 요소로 다른 신호와 함께 활용할 때 효과가 극대화됩니다. 따라서 이 API를 앱의 다른 적절한 보안 권장사항과 함께 사용하세요.

무결성 토큰을 너무 자주 가져오지 말 것

무결성 토큰을 생성하면 시간과 데이터, 배터리가 소모되는데 각각의 앱에는 사용 등급에 따라 정의된 일일 최대 호출 가능 횟수가 정해져 있습니다. 따라서 서비스에 로그인하거나 멀티플레이어 서버에 참여하는 등 사용자 환경에 필수적인, 중요하지만 빈도가 높지 않은 작업 보호를 위해서만 이 API를 호출해야 합니다. 자주 발생하거나 중요하지 않은 작업에는 이 API를 호출하면 안 됩니다. 예를 들어 앱이 포그라운드로 전환될 때마다 또는 백그라운드에서 몇 분마다 호출하지 마세요. API 호출을 너무 많이 실행하는 앱은 잘못된 구현으로부터 사용자를 보호하기 위해 제한될 수 있습니다.

nonce 필드를 사용하여 앱을 더 안전하게 보호

Play Integrity API는 재전송 공격, 중간자(PITM) 조작 공격과 같은 특정 공격으로부터 앱을 더욱 안전하게 보호하는 데 사용할 수 있는 nonce라는 필드를 제공합니다. Play Integrity API는 서명된 무결성 응답 내에서 이 필드에 설정한 값을 반환합니다. nonce를 생성하는 방법에 관한 안내를 주의 깊게 따라 앱을 공격으로부터 보호하세요.

보안 서버 환경 사용

보안 서버 환경 내에서 모든 복호화 및 검증을 실행합니다. 클라이언트 앱에서 보안 세부정보를 노출하면 공격자가 APK나 저장소에서 이러한 세부정보를 추출하여 앱이나 게임에 관한 중요한 정보를 얻을 수 있습니다.

서버에서 앱으로 다양한 응답 전송

매번 서버에서 앱으로 같은 바이너리 통과/실패 응답을 다시 전송하기보다는 복제가 어렵도록 결정 결과의 범위를 정해두면 좋습니다. 예를 들어 허용, 허용(제한 있음), reCAPTCHA 완료 후 허용(제한 있음), 거부와 같은 일련의 관련 응답을 하나의 범위로 지정하는 방법이 있습니다.

단계식 시행 전략 보유

Play Console에서 추가 기기 라벨을 수신하도록 선택하여 단계별 시행을 기반으로 한 악용 방지 전략을 수립할 수 있습니다. 추가 라벨 수신을 선택하면 무결성 응답에는 각 라벨 기준이 충족되는 경우 같은 기기의 라벨이 여러 개 포함됩니다. 따라서 가능한 응답 범위에 따라 다르게 동작하도록 백엔드 서버를 준비할 수 있습니다.

예를 들어 MEETS_BASIC_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_STRONG_INTEGRITY를 반환하는 기기는 MEETS_BASIC_INTEGRITY만 반환하는 기기보다 더 신뢰할 수 있습니다. 이에 따라 서버의 응답을 구성할 수 있습니다. 사용자 계정이 LICENSED인지 UNLICENSED인지에 관한 다양한 작업과 결합해도 됩니다.

지수 백오프로 다시 시도

불안정한 인터넷 연결이나 과부하된 기기와 같은 환경 조건으로 인해 기기 무결성 검사에 실패할 수 있습니다. 따라서 일반적으로는 신뢰할 수 있는 기기라도 라벨이 생성되지 않을 수 있습니다. 이러한 시나리오를 방지하려면 지수 백오프로 다시 시도 옵션을 포함해야 합니다.

실행 가능한 오류 메시지 표시

가능한 경우 사용자에게 유용한 오류 메시지를 제공하여 인터넷 연결 재시도나 사용 설정 또는 Play 스토어 앱이 최신 상태인지 확인하는 등 문제 해결을 위해 할 수 있는 작업을 사용자가 알도록 합니다.

대략적인 API 사용

그림 1. Play Integrity API의 대략적인 설계를 보여주는 시퀀스 다이어그램

무결성 검사로 보호하려는 앱에서 사용자가 중요 작업을 실행할 때 다음 단계를 완료하세요.

  1. 앱의 서버 측 백엔드는 고유한 값을 생성하여 클라이언트 측 로직에 전송합니다. 나머지 단계에서는 이 로직을 '앱'이라고 합니다.
  2. 앱은 고유한 값과 중요한 작업의 콘텐츠에서 nonce를 생성합니다. 그런 다음 앱에서 Play Integrity API를 호출하여 nonce를 전달합니다.
  3. 앱은 Play Integrity API에서 서명되고 암호화된 결과를 수신합니다.
  4. 앱은 서명되고 암호화된 결과를 앱의 백엔드에 전달합니다.
  5. 앱의 백엔드는 Google Play 서버로 결과를 전송합니다. Google Play 서버는 결과를 복호화하고 확인하여 결과를 앱의 백엔드로 반환합니다.
  6. 앱의 백엔드는 토큰 페이로드에 포함된 신호에 따라 진행 방법을 결정합니다.
  7. 앱의 백엔드는 결과를 앱에 전송합니다.

API 사용 등급

API 요청에는 호출 앱의 할당된 사용 등급에 따라 결정되는 앱당 일일 최대 요청 가능 횟수가 적용됩니다. 다음 표에는 여러 등급이 나와 있습니다.

표 1. Play Integrity API 사용 등급
사용 등급 하루에 허용되는 API 호출 수 자격요건 충족 방법
표준 최대 10,000회 모든 배포 채널을 사용하는 앱에서 사용 가능합니다.
높음 10,000회 초과 - 승인 필요 재시도를 비롯하여 API 로직을 올바르게 구현해야 합니다.
Google Play와 함께 다른 배포 채널도 사용하는 앱에서 사용 가능합니다.

Google Play와 기타 배포 채널에서 사용되는 같은 패키지 이름은 API 사용 면에서 단일 앱으로 간주됩니다. 패키지 이름이 다른 여러 앱에 단일 Google Cloud 프로젝트 ID를 사용할 수 있습니다. 이렇게 하면 앱이 API 사용 면에서 단일 앱으로 간주됩니다.

사용 등급 보기

Play Integrity API와 상호작용하는 빈도를 평가할 수 있도록 Play Console에는 앱의 사용 등급이 표시됩니다. 이 사용 등급을 보려면 다음을 실행하세요.

  1. Play Console에 로그인합니다.
  2. Play Integrity API를 사용하는 앱을 선택합니다.
  3. 왼쪽 메뉴의 '출시' 섹션에서 설정 > 앱 무결성으로 이동합니다.
  4. 'Integrity API' 탭의 '설정' 섹션에서 사용 등급 속성을 찾습니다. 이 속성 값은 앱의 사용 등급을 보여줍니다.

사용 등급 변경

앱의 사용 등급 변경을 요청하려면 이 양식을 작성하세요. 앱에서 더 많은 사용자를 처리해야 하지만 사용자당 API를 더 자주 호출하지 않아야 하면 높은 사용 등급으로의 이동을 요청해야 합니다. 사용 등급이 높더라도 앱은 API 호출을 자주 발생하지 않는 중요한 작업으로 계속 제한해야 합니다.