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에 액세스하거나 이 API를 사용하면 Play Core 소프트웨어 개발 키트 서비스 약관에 동의하는 것으로 간주됩니다. Play Integrity API에 액세스하기 전에 모든 관련 약관 및 정책을 자세히 읽고 숙지하세요.

기본 요건

Play Integrity API를 앱에 통합하려면 다음을 실행하세요.

보안 고려사항

Play Integrity API는 보안을 강화하고 조작을 방지하지만 이 섹션에 나열된 각 권장사항을 따를 때 앱에 가장 큰 가치를 제공합니다.

악용 방지 전략 수립

Play Integrity API는 단독 악용 방지 메커니즘이 아니라 전반적인 악용 방지 전략의 일부로 다른 신호와 함께 사용할 때 가장 좋습니다. 이 API를 앱의 다른 적절한 보안 권장사항과 함께 사용하세요.

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

기본적으로 이 API는 서비스에 로그인하거나 멀티플레이어 서버에 참여하는 등 사용자 환경의 필수 요소인 가치가 높고 반복되지 않는 작업을 보호하는 데 호출해야 합니다.

평균적으로 활성 사용자당 하루에 한 번 호출하는 것이 적절하지만 하루에 가치가 높은 작업을 여러 개 실행하는 사용자는 여러 번 호출할 수도 있습니다.

신중하게 nonce 생성

nonce는 고유하고 공격자가 예측할 수 없어야 합니다.

보안 서버 환경 사용

보안 서버 환경 내에서 모든 복호화 및 검증을 실행합니다. 클라이언트 앱에서 보안 세부정보를 노출하면 공격자는 APK/저장소에서 이러한 세부정보를 추출하여 삭제할 수 있습니다.

서버에서 앱으로 여러 결정 전송

서버에서 앱으로 단일 통과/실패 응답을 다시 전송하는 대신 복제하기 어려운 결정 결과와 신호를 여러 개 전송하는 것이 더 좋습니다. 예를 들어 허용, 허용(제한 있음), reCAPTCHA 완료 후 허용(제한 있음), 거부와 같은 일련의 관련 응답을 사용할 수 있습니다.

단계식 시행 전략 보유

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

예를 들어 MEETS_BASIC_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_STRONG_INTEGRITY를 반환하는 기기는 MEETS_BASIC_INTEGRITY만 반환하는 기기보다 더 신뢰할 수 있으며 서버의 응답 방식은 적절하게 조정할 수 있습니다. 사용자 계정이 LICENSED인지 UNLICENSED인지에 관한 다양한 작업과 결합해도 됩니다.

지수 백오프로 다시 시도

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

대략적인 API 사용

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

대략적으로 앱이나 게임은 다음과 같이 Play Integrity API를 사용합니다.

  1. 앱의 서버 측 백엔드는 고유한 nonce를 생성하여 클라이언트 측 로직에 전송합니다. 나머지 단계에서는 이 로직을 '앱'이라고 합니다.
  2. 앱은 Play Integrity API를 호출하여 nonce를 전달합니다.
  3. 앱은 Play Integrity API에서 서명되고 암호화된 결과를 수신합니다.
  4. 앱은 서명되고 암호화된 결과를 앱의 백엔드에 전달합니다.
  5. 앱의 백엔드는 결과를 Play 서버에 전송합니다. 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 사용 등급 속성을 찾습니다. 이 속성 값은 API 사용 등급을 보여줍니다.

사용 등급 변경

앱의 사용 등급 변경을 요청하려면 Play Console에서 개발자 지원팀에 문의하세요.