Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inciter l'activation de la sauvegarde automatique #915

Closed
NicolasBuquet opened this issue Nov 7, 2023 · 9 comments · Fixed by #926
Closed

Inciter l'activation de la sauvegarde automatique #915

NicolasBuquet opened this issue Nov 7, 2023 · 9 comments · Fixed by #926
Labels
enhancement New feature or request iOS

Comments

@NicolasBuquet
Copy link
Contributor

Mettre en place un mécanisme qui permette d'inciter l'utilisateur à activer la sauvegarde automatique des clés de chiffrement des message (le key Backup).

Pour pouvoir activer cette sauvegarde automatique, il faut que l'appareil est activé le cross-signing et qu'il soit vérifié.

Une clé de paramétrage existe dans le fichier back-end well-known de configuration qui permet d'amorcer le processus. Cette clé est secure_backup_required.

Le well-known étant vide actuellement sur Tchap, on va forcé cette valeur à TRUE dans ls clients.

Le code existant, appelé dans LegacyAppDelegate->handleAppState est le suivant :

        if (mainSession.vc_homeserverConfiguration.encryption.isSecureBackupRequired
            && mainSession.state == MXSessionStateRunning
            && mainSession.vc_canSetupSecureBackup)
        {
            // This only happens at the first login
            // Or when migrating an existing user
            MXLogDebug(@"[AppDelegate] handleAppState: Force SSSS setup");
            [self presentSecureBackupSetupForSession:mainSession];
        }

Voici ce qu'il teste :

  • la première condition est le isSecureBackupRequired forcé à TRUE (ou récupéré via le well-known configuration).
  • la seconde condition passe par différents états au cours du démarrage (ready, inProgress puis Running je crois)
  • la dernière condition vérifie si les clés nécessaires au cross-signing sont présentes localement

Si toutes c es conditions sont vérifiées, l'application affiche alors l'écran d'activation de la sauvegarde automatique (keyBackup) :
image

La méthode canSetupSecureBackup est la suivante :

- (BOOL)vc_canSetupSecureBackup
{
    MXRecoveryService *recoveryService = self.crypto.recoveryService;
    
    if (recoveryService.hasRecovery)
    {
        // Can't create secure backup if SSSS has already been set.
        return NO;
    }
    
    // Accept to create a setup only if we have the 3 cross-signing keys
    // This is the path to have a sane state
    // TODO: What about missing MSK that was not gossiped before?
    NSArray *crossSigningServiceSecrets = @[
                                            MXSecretId.crossSigningMaster,
                                            MXSecretId.crossSigningSelfSigning,
                                            MXSecretId.crossSigningUserSigning];
    
    return ([recoveryService.secretsStoredLocally mx_intersectArray:crossSigningServiceSecrets].count
            == crossSigningServiceSecrets.count);
}

Elle vérifie si les clé nécessaire au cross-signing sont présentes localement dans le SecureStorage.

Il faudra donc vérifier cela en amont, et seulement si ce n'est pas le cas, lancer l'activation du cross-signing (qui ne doit pas nécessiter l'intervention de l'utilisateur). Voir les classes CrossSigningService et CrossSigningSetupCoordinator.

Une fois assuré que le cross-signing est activé, alors on lancera l'activation de sauvegarde automatique : [self presentSecureBackupSetupForSession:mainSession]

@odelcroi
Copy link
Member

odelcroi commented Nov 7, 2023

vu avec nicolas

pour cette premiere itération : se concentrer sur les utilisateurs dont l'activation de la sauv automatique est triviale :

  • pas de cross signing => on ne fait rien
  • si cross signing activé sur ce compte et cet appareil (ios) est vérifié => on propose d'activer la sauv auto
  • si cross activé sur le compte et cet appareil n'est pas vérifié => ?

en deuxieme itération :

  • pas de cross signing => l'activer pour l'utilisateur et le secure backup

@yostyle what do think?

@NicolasBuquet NicolasBuquet linked a pull request Nov 16, 2023 that will close this issue
@NicolasBuquet NicolasBuquet changed the title Inciter l'activation de la sauvegarde automatique et cross-signing Inciter l'activation de la sauvegarde automatique Nov 20, 2023
@NicolasBuquet
Copy link
Contributor Author

@odelcroi

On met donc en place l'activation de la sauvegarde automatique dans le cas idéal.

Seconde étape : activation automatique du cross-signing sur iOS : #924

Cela devrait augmenter significativement le nombre d'appareils qui ensuite vont proposer d'activer la sauvegarde automatique.

@NicolasBuquet
Copy link
Contributor Author

NicolasBuquet commented Nov 20, 2023

Etat des tests :

  • si le cross-signing n'est pas activé sur l'appareil ni sur le compte, l'application ne propose pas d'activer la sauvegarde automatique
  • si un autre appareil (par ex. le client web) active le cross-signing, cela n'a pas d'influence sur le client iOS. Le cross-signing n'est toujours pas activé pour lui et il ne propose donc pas d'activer la sauvegarde automatique. Par contre, du fait de la clé secureBackupRequired, il cherchera à forcer la vérification de l'appareil maintenant qu'un autre appareil lié au compte à activé le cross-signing. Une option d'annulation de vérification est ajoutée côté iOS pour que l'utilisateur ne soit pas bloqué s'il n'a pas accès à l'autre appareil pouvant autoriser la vérification.
  • si l'utilisateur active le cross-signing sur iOS alors que le cross-signing n'est pas activé sur le compte, alors un tap suffit.
  • si l'utilisateur active le cross-signing sur iOS alors que le cross-signing a déjà été activé sur le compte, alors l'appareil doit être vérifié.
  • Une fois le cross-signing activé sur iOS, lors du prochain lancement de l'application, si la sauvegarde automatique n'est pas déjà activée sur le compte (par un autre appareil par exemple), l'application proposera à l'utilisateur, via une pop-up, d'activer la sauvegarde automatique.

Tout me semble bon.

@NicolasBuquet
Copy link
Contributor Author

NicolasBuquet commented Nov 20, 2023

Test rapide effectué avec 2 appareils connectés au même compte.

Cross-signinig et sauvegarde automatique activée depuis l'iPhone.

  • Création d'un salon.
  • l'iPhone poste 2 messages
  • le web poste 1 message
  • déconnexion du web
  • l'iPhone poste un 4e message
  • déconnexion de l'iPhone
  • reconnexion de l'iPhone
  • demande du code de récupération sur l'iPhone (et uniquement cette solution)
  • saisie acceptée du code de récupération
  • tous les messages sont récupérés (jusqu'au 4e)
  • connection depuis le web
  • demande du code de récupération ou de vérification par un autre apapreil
  • saisie acceptée du code de récupération
  • tous les messages sont récupérés (jusqu'au 4e)

Tout est bon.

@NicolasBuquet
Copy link
Contributor Author

@areox-net

Voici l'écran à worder :

Simulator Screenshot - iPhone 15 - 2023-11-20 at 15 05 04

@NicolasBuquet
Copy link
Contributor Author

@areox-net

Et c'est autre écran, seconde partie au-dessus du bouton "Annuler" :

Simulator Screenshot - iPhone 15 - 2023-11-20 at 15 24 09

@areox-net
Copy link
Collaborator

Voici les wording.
Sinon, concernant l'UX, je ne suis pas fan du 2e écran. On a d'autre moments ou l'on parle aux users de l'activation de la signature croisée? J'ai peur qu'on les perde davantage avec ce texte.
On avait parlé de mettre un bouton qui renvoit directement vers la signature croisée. On laisse ça pour une deuxième itération, c'est ça?

1er écran:

Sauvegarde automatique des messages
Activez cette fonction pour ne jamais perdre l’accès à vos messages suite à une déconnexion.
Annuler - Activer


2e écran

Si vous n'avez accès au aucun autre appareil, vous pouvez essayer d'activer la signature croisée dans vos paramètres.

@NicolasBuquet
Copy link
Contributor Author

@areox-net Oui, pour le 2e écran, je mettrai un bouton qui envoie aux settings de sécurité un peu plu tard.

Merci pour les autres wording.

@NicolasBuquet
Copy link
Contributor Author

@areox-net

Done

Simulator Screenshot - iPhone 15 - 2023-11-21 at 15 02 44

@github-project-automation github-project-automation bot moved this from prêt pour le sprint to déployé en prod in Roadmap Produit Nov 21, 2023
NicolasBuquet pushed a commit that referenced this issue Nov 21, 2023
@odelcroi odelcroi moved this from déployé en prod to done in Roadmap Produit Jan 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request iOS
Projects
Status: done
Development

Successfully merging a pull request may close this issue.

3 participants