Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

이동통신사 Wi-Fi

이동통신사 Wi-Fi는 이동통신사에서 구현한 Wi-Fi 네트워크에 기기가 자동으로 연결할 수 있는 자동 연결 기능(암호화된 IMSI 사용)으로 Android 9 이상에서 사용할 수 있습니다. 정체가 심하거나 경기장이나 지하철역과 같이 통화 가능 범위가 최소인 지역에서 이동통신사 Wi-Fi는 사용자의 연결성을 개선하고 트래픽을 오프로드하는 데 사용됩니다.

이동통신사 Wi-Fi 기능이 있는 기기는 구성된 이동통신사 Wi-Fi 네트워크(공개키 인증서가 있는 네트워크)에 자동으로 연결됩니다. 사용자가 이동통신사 Wi-Fi 네트워크에서 직접 연결을 끊으면 네트워크가 24시간 동안 차단됩니다(자동 연결 없음). 사용자는 언제든지 차단된 네트워크에 수동으로 연결할 수 있습니다.

이동통신사 Wi-Fi가 구현된 Android 9 이상을 실행하는 기기에서는 이동통신사 Wi-Fi를 통한 자동 연결이 기본적으로 꺼져 있습니다. 기기가 이동통신사 Wi-Fi 네트워크에 처음으로 연결을 시도할 때 사용자에게 알림이 전송됩니다.

구현

이동통신사 Wi-Fi를 구현하려면 기기 제조업체와 이동통신사가 다음을 실행해야 합니다.

제조업체

Android 11 이상을 실행하는 기기의 경우 Wi-Fi 추천 API를 사용하여 각 이동통신사에 Wi-Fi 프로필을 추가합니다.

10 이하를 실행하는 기기의 경우 이동통신사 구성 관리자에서 각 이동통신사의 carrier_wifi_string_array 매개변수를 구성하여 Wi-Fi 프로필을 추가합니다.

  • carrier_wifi_string_array: 각 문자열 항목이 Base64 인코딩 Wi-Fi SSID이고 쉼표로 구분된 EAP 유형인 문자열 배열입니다. 여기서 EAP 유형은 정수입니다(EAP(Extensible Authentication Protocol) 레지스트리 참조). 예를 들어 다음 구성은 EAP-AKA를 사용하는 SOME_SSID_NAMEEAP-SIM을 사용하는 Some_Other_SSID에 관한 것입니다.

    config {
      key: "carrier_wifi_string_array"
      text_array {
        item: "U09NRV9TU0lEX05BTUUK,23"
        item: "U29tZV9PdGhlcl9TU0lECg==,18"
      }
    }
    

이동통신사 구성 관리자에서 각 이동통신사에 관해 다음 매개변수를 구성합니다.

  • imsi_key_availability_int: IMSI 암호화에 사용된 키를 WLAN(비트 1이 설정됨), EPDG(비트 0이 설정됨) 또는 둘 다(비트 0과 비트 1이 모두 설정됨)에 사용할 수 있는지 식별합니다. 예를 들어 다음 구성은 IMSI 암호화를 WLAN에는 사용할 수 있지만 EPDG에는 사용할 수 없음을 나타냅니다.

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string: IMSI 암호화에 사용된 이동통신사의 공개 키를 포함하는 프로토콜이 다운로드되는 URL입니다. 예를 들어 다음 구성은 특정 URL을 제공합니다.

    config {
      key: "imsi_key_download_url_string"
      text_value: "https://www.some_company_name.com:5555/some_directory_name/"
    }
    
  • allow_metered_network_for_cert_download_bool: 데이터 전송량 제한이 있는 모바일 네트워크를 통해 이동통신사의 공개 키를 다운로드하는 것을 허용할지 표시하는 플래그입니다. 이 플래그를 설정하지 않으면 Wi-Fi 연결이 없는 새로운 기기에서 이동통신사 Wi-Fi 네트워크에 연결할 수 없습니다. 공개 키 다운로드가 허용되지 않기 때문입니다.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

이동통신사

이동통신사 Wi-Fi를 구현하려면 이동통신사에서 IMSI 개인정보 보호 기능을 사용 설정하고 공개 키를 제공해야 합니다.

IMSI 개인정보 보호 기능

Android에서는 공개 키 암호화를 사용하여 가입자 영구 ID(IMSI)의 기밀성을 보호합니다. Android는 Wi-Fi의 IMSI 개인 정보 보호 기능에 관한 무선 광대역 연결(WBA) 사양을 구현합니다. 연결에 IMSI 개인 정보 보호 기능이 사용 설정되면 영구 가입자 ID가 명확한 무선 업데이트로 전송되지 않습니다.

영구 ID 암호화

암호화된 영구 ID의 형식은 다음과 같습니다.

  • 영구 ID는 <IMSI>@<NAI realm> 형식입니다. NAI 영역 형식은 wlan.mncXXX.mccYYY.3gppnetwork.org이며 여기서 XXX는 SIM 카드의 모바일 네트워크 코드(MNC)로 대체되고 YYY는 모바일 국가 코드(MCC)로 대체됩니다.
  • 영구 ID는 이동통신사에서 제공하는 RSA 공개 키를 사용하여 암호화됩니다. 공개 키는 X.509 인증서에 포함되어 있습니다.
  • 암호화 체계는 SHA-256이 암호화 해시 함수인 RSAES-OAEP입니다. 이 암호화 체계는 체계가 사용될 때마다 고유한 암호화 텍스트를 보장하므로 추적 가능한 다른 영구 ID를 방지합니다.
  • RSA 키 길이는 2,048비트입니다.
  • 암호화 버퍼는 256바이트입니다.
  • 암호화 텍스트는 Base64로 인코딩됩니다.
  • 암호화된 출력 영구 ID 길이는 344바이트입니다.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<IMSI>@<NAI Realm>))
키 식별자

키 식별자는 이동 통신사에서 인증서에 첨부하여 인증 중에 서버가 적절한 비공개 키를 찾을 수 있도록 하는 선택적 속성 값 쌍입니다. 키 식별자의 예는 CertificateSerialNumber=123456입니다. 키 식별자가 제공되면 인증 프로세스의 일부로 안전하게 전송됩니다.

SIM 기반 EAP 인증 메서드 수정

연결 시 IMSI 개인정보 보호 기능이 사용 설정되면 시스템에서 EAP-Request/Identity를 수신할 때 영구 ID를 전송하는 대신 익명 로그인으로 응답합니다.

SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>

<prefix>는 선택사항입니다. enable_eap_method_prefix_bool 이동통신사 구성이 true로 설정된 경우 ID의 첫 번째 문자(anonymous 이전)는 EAP 교환이 시작되기 전에 사용되는 EAP 메서드의 유형을 서버에 알립니다.

  • 0 - EAP-AKA
  • 1 - EAP-SIM
  • 6 - EAP-AKA'

이동통신사 구성이 false로 설정된 경우 이 접두어는 메시지에 포함되지 않습니다.

이에 응답하여 서버는 EAP-Request/AKA-Identity 메시지를 전송하고 시스템은 다음 형식으로 응답합니다.

SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"

ID의 첫 번째 문자는 암호화된 ID가 사용되었다는 점 또는 구성된 EAP 메서드의 유형을 서버에 알립니다.

  • \0 - 암호화된 영구 ID
  • 0 - EAP-AKA
  • 1 - EAP-SIM
  • 6 - EAP-AKA'

키 식별자 속성 값 쌍은 선택사항이며 사용하지 않는 경우 암호화된 영구 ID의 끝에 추가되지 않습니다.

이 시점에서 서버는 키 식별자(제공되는 경우)에서 비공개 키를 찾고 이동통신사 비공개 키를 사용하여 암호화된 ID를 복호화하며 일반 EAP 흐름을 지속합니다.

인증에 성공하면 서버는 빠른 재인증 ID나 임시 ID(가명)를 제공할 수 있고 이러한 ID는 후속 연결에 사용됩니다. 서버에서 제공하는 임시 ID가 없는 경우 시스템은 후속 연결에서 암호화된 ID를 전송합니다.

이동통신사 인증서 검색, 만료, 취소

시스템에 설치된 인증서가 없는 경우 시스템은 imsi_key_download_url_string 이동통신사 구성에 제공된 URL을 사용하여 인증서를 다운로드합니다. 시스템은 allow_metered_network_for_cert_download_bool 이동통신사 구성이 true로 설정된 경우에만 모바일 데이터를 사용합니다. 그 외의 경우 시스템은 Wi-Fi 연결이 가능할 때만 인증서를 다운로드합니다.

인증서 만료는 시스템에서 적용합니다. 시스템에서는 인증서 만료일 21일 전에 인증서 갱신 시도를 시작하고 동일한 URL을 사용하여 새 인증서를 다운로드합니다.

인증서가 취소되거나 서버에서 암호화된 ID를 복호화할 수 없는 경우 서버는 AT_NOTIFICATION 코드 General failure(16385)와 함께 EAP-Request/AKA-Notification 메시지를 전송하여 EAP 교환을 종료합니다. 이에 응답하여 시스템은 인증서를 삭제하고 동일한 URL에서 새 인증서를 다운로드하려고 시도합니다.

공개 키 제공

이동통신사의 인증서를 호스팅하는 서버에 공개 URL을 제공합니다(가능하면 HTTP over TLS 사용).

  1. 공개 키 및 만료일은 인증서에서 추출할 수 있습니다.
  2. 서버의 정보는 다음과 같이 JSON 형식입니다.

    Property: key-identifier
    Type: String
    Encoding: UTF-8
    Description: Specifies an identifier that the carrier would like to attach to the certificate.
    Optional: Yes
    
    Property: certificate
    Property alternative name: public-key
    Type: String
    Encoding: Base64
    Description: The content of the carrier's X.509 certificate.
    Optional: No
    
    Property: key-type
    Type: String
    Encoding: UTF-8
    Description: Specifies the module that will use the key. The value for type must be either WLAN or EPDG.
    Optional: Yes. If the key-type property isn't included, then its value defaults to WLAN.
    

    다음은 공개 키의 예입니다.

    {
    "carrier-keys" : [ {
      "key-identifier" : "CertificateSerialNumber=5xxe06d4",
      "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----"
    } ]
    }