Réseau Wi-Fi de l'opérateur

Le réseau Wi-Fi de l'opérateur est une fonctionnalité de connexion automatique (via une connexion IMSI chiffrée) disponible dans les pays suivants : Android 9 ou version ultérieure qui permet aux appareils de se connecter automatiquement au réseau Wi-Fi mis en œuvre par l'opérateur réseaux sociaux. Dans les zones très encombrées ou dont la couverture cellulaire est minimale, par exemple un stade ou une station de métro, le Wi-Fi de la compagnie peut être utilisé pour améliorer des utilisateurs et de décharger le trafic.

Les appareils dotés de la fonctionnalité Wi-Fi de l'opérateur se connectent automatiquement à réseaux Wi-Fi d'opérateur configurés (réseaux avec certificat de clé publique). Quand ? un utilisateur se déconnecte manuellement du réseau Wi-Fi d'un opérateur, le réseau est mis sur liste noire pendant 24 heures (aucune connexion automatique). Les utilisateurs peuvent se connecter manuellement à les réseaux sur liste noire à tout moment.

Sur les appareils équipés d'Android 9 ou version ultérieure sur lesquels le Wi-Fi de l'opérateur est implémenté, la connexion automatique via le réseau Wi-Fi de l'opérateur est désactivée par défaut. Une notification est envoyé à l'utilisateur lorsque l'appareil tente de se connecter au réseau Wi-Fi d'un opérateur réseau pour la première fois.

Implémentation

Les fabricants et opérateurs d'appareils doivent procéder comme suit pour implémenter l'opérateur Wi-Fi.

Fabricants

Pour les appareils équipés d'Android 11 ou version ultérieure, utilisez le API Wi-Fi Suggestion afin d'ajouter des profils Wi-Fi pour chaque opérateur.

Pour les appareils équipés d'Android 10 ou version antérieure, ajoutez des profils Wi-Fi en configurer le paramètre carrier_wifi_string_array pour chaque opérateur dans le gestionnaire de configuration de l'opérateur.

  • carrier_wifi_string_array: Un tableau de chaînes dans lequel chaque entrée de chaîne correspond à un SSID Wi-Fi encodé en base64 et un type EAP séparé par une virgule, où le type EAP est un nombre entier (reportez-vous à le registre du protocole EAP (Extensible Authentication Protocol)). Par exemple, la configuration suivante concerne SOME_SSID_NAME avec EAP-AKA et Some_Other_SSID via EAP-SIM:

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

Dans gestionnaire de configuration de l'opérateur configurez les paramètres suivants pour chaque transporteur:

  • imsi_key_availability_int: Indique si la clé utilisée pour le chiffrement IMSI est disponible pour le WLAN (le bit 1 est défini), EPDG (le bit 0 est défini) ou les deux (le bit 0 et le bit 1 sont tous les deux défini). Par exemple, la configuration suivante indique qu'IMSI le chiffrement est disponible pour le WLAN, mais pas pour EPDG:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string: URL à partir de laquelle le proto contenant la clé publique de l'opérateur utilisé pour Le chiffrement IMSI a été téléchargé. Par exemple, la configuration suivante fournit une URL spécifique:

    config {
      key: "imsi_key_download_url_string"
      text_value: "https://www.some_company_name.com:5555/some_directory_name/some_filename.json"
    }
    
  • allow_metered_network_for_cert_download_bool: indicateur indiquant si pour permettre le téléchargement de la clé publique de l'opérateur (cellulaire). Si cet indicateur n'est pas défini, un nouvel appareil sans Wi-Fi ne pourra pas se connecter au réseau Wi-Fi de l'opérateur, car il ne sera pas autorisé à télécharger la clé.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

Opérateurs

Pour implémenter le Wi-Fi de l'opérateur, celui-ci doit activer la protection de la confidentialité IMSI et fournir une clé publique.

Protection de la confidentialité IMSI

Android protège la confidentialité de l'identité permanente d'un abonné (IMSI) à l’aide de la cryptographie à clé publique. Android implémente le haut débit sans fil Spécification WBA pour IMSI Privacy Protection for Wi-Fi (Protection de la vie privée IMSI pour les réseaux Wi-Fi). Lorsque la protection de la confidentialité IMSI est activée pour une connexion, le paramètre l'identité de l'abonné n'est pas transmise en clair Over The Air.

Chiffrement permanent de l'identité

Le format de l'identité permanente chiffrée est le suivant:

  • L'identité permanente est au format <EAP-Method><IMSI>@<NAI realm>.
  • Le préfixe de méthode EAP est un seul octet qui définit la méthode EAP qui est utilisée pour l'authentification: <ph type="x-smartling-placeholder">
      </ph>
    • 0: EAP-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA
  • Le format de domaine de la NAI est wlan.mncXXX.mccYYY.3gppnetwork.orgXXX est remplacé par le mobile network code (MNC) de la carte SIM, et YYY est remplacé par le mobile country code (MCC).
  • L'identité permanente est chiffrée à l'aide d'une clé publique RSA fournie par l'opérateur. La clé publique est incluse dans Certificat X.509.
  • Le schéma de chiffrement est RSAES-OAEP avec SHA-256 comme fonction de hachage cryptographique. Ce schéma de chiffrement garantit un texte chiffré unique chaque fois que le schéma est utilisé, ce qui évite une autre identité persistante pouvant être suivie.
  • La longueur de la clé RSA est de 2 048 bits.
  • La taille du tampon de chiffrement est de 256 octets.
  • Le texte chiffré est encodé avec Base64 :
  • La longueur de la sortie chiffrée de l'identité permanente est de 344 octets.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Identifiant de clé

L'identifiant de clé est une paire de valeurs d'attribut facultative que le transporteur associe à un certificat pour permettre au serveur de localiser la bonne clé privée pendant l'authentification unique. Voici un exemple d'identifiant de clé : CertificateSerialNumber=123456 Si l'identifiant de clé est fourni, il est envoyé en clair dans le cadre du processus d'authentification.

Modifications apportées aux méthodes d'authentification EAP basées sur la carte SIM

Lorsque la protection de la confidentialité IMSI est activée sur une connexion, le système n'envoie pas l'identité permanente à la réception de EAP-Request/Identity, répond par une connexion anonyme:

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

<prefix> est facultatif. Si l'opérateur enable_eap_method_prefix_bool est définie sur true, le premier caractère de l'identité (avant anonymous) informe le serveur du type de méthode EAP utilisé avant que L'échange EAP commence.

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

Si la configuration de l'opérateur est définie sur false, ce préfixe n'est pas inclus dans le message.

En réponse, le serveur envoie un message EAP-Request/AKA-Identity et système répond au format suivant:

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

Le premier caractère de l'identité informe le serveur qu'un ou le type de méthode EAP configurée:

  • \0: identité permanente chiffrée
  • 0: EAP-AKA
  • 1: EAP-SIM
  • 6: EAP-AKA

La paire valeur d'attribut identifiant de clé est facultative et n'est pas ajoutée à la de l'identité permanente chiffrée s'il n'est pas utilisé.

À ce stade, le serveur localise la clé privée à partir de l'identifiant de clé (si fournie), déchiffre l'identité chiffrée à l'aide de la clé privée de l'opérateur, et continue le flux EAP normal.

Une fois l'authentification réussie, le serveur peut fournir un identité de réauthentification rapide ou une identité temporaire (pseudonyme), qui est utilisées dans les connexions ultérieures. Si aucune identité temporaire n'est fournie par le le système envoie l'identité chiffrée lors de la connexion suivante.

Récupération, expiration et révocation des certificats d'opérateur

Si aucun certificat n'est installé dans le système, celui-ci utilise URL fournie dans la configuration d'opérateur imsi_key_download_url_string vers télécharger un certificat en utilisant la méthode GET HTTP. Le système utilise les données mobiles uniquement si l'opérateur allow_metered_network_for_cert_download_bool est définie sur true. Sinon, le système télécharge le certificat uniquement lorsqu'une connexion Wi-Fi est disponible.

L'expiration du certificat est appliquée par le système. Le système commence à tenter de renouveler les certificats 21 jours avant leur date d’expiration, et utilise la même URL pour télécharger le nouveau certificat.

Si le serveur n'est pas en mesure de déchiffrer l'identité chiffrée, envoie un message EAP-Request/AKA-Notification avec le code AT_NOTIFICATION General Failure (16384) pour mettre fin à l'échange EAP.

Dans le cas où le certificat est révoqué ou a expiré, le serveur envoie une Message EAP-Request/AKA-Notification avec le code AT_NOTIFICATION Certificate Replacement Required (16385) pour mettre fin à l'échange EAP. En réponse, le système applique une heuristique interne pour déterminer supprimer le certificat et tenter d'en télécharger un nouveau à partir du même URL.

Fournir la clé publique

Fournissez une URL publique vers un serveur, qui utilise de préférence HTTP plutôt que TLS, qui héberge le certificat du transporteur où:

  1. La clé publique et la date d'expiration peuvent être extraites du certificat.
  2. Les informations provenant du serveur sont au format JSON, comme suit:

    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.
    

    Voici un exemple de clé publique.

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