Approbations et Règle des 4 Yeux (Maker-Checker)
L'écran Approbations (/approvals, accessible via le composant src/app/approvals/page.tsx) est le centre de contrôle réglementaire de TkushPatch. Il implémente le principe bancaire de séparation des tâches Maker-Checker (4 Yeux) conformément aux directives Normes de Gouvernance Bancaire, Sécurité Données Bancaires v4.0 et ISO 27001.
Aucun patch OTA destiné au grand public sur le canal stable ne peut être activé sans avoir franchi cette barrière de validation cryptographique.
1. Principe Maker-Checker et Quarantaine STAGED
Lorsqu'un développeur mobile (ROLE_RELEASE_DEVELOPER) compile et publie un patch correctif via le CLI (tk-ota-push patch) ou l'API, le patch entre immédiatement dans un état de quarantaine technique :
- Création du correctif (Maker) : Le développeur publie un patch depuis la CLI. Le patch est placé en attente au statut
STAGED. - Examen par un tiers (Checker) : Un second collaborateur autorisé examine les modifications dans la Console Web.
- Validation et signature : L'approbateur valide le patch, qui reçoit une signature numérique de production.
- Distribution : Le statut passe à
APPROVED_AND_SIGNEDet le déploiement débute.
Le statut STAGED
- Le binaire
.vmcodeest stocké sur le serveur, mais l'API Data Plane (/api/v1/patches/check) refuse formellement de le servir aux clients mobiles de production. - Seuls les appareils de test dont le
client_idest explicitement inscrit dans la liste blanche QA peuvent exécuter le patch en quarantaine.
2. Les 3 Gardes-Fous de Pré-Signature
Avant de présenter le bouton de signature finale, la console d'approbation inspecte automatiquement l'artefact selon 3 critères stricts :
| Garde-fou | Critère inspecté | Conséquence en cas d'échec |
|---|---|---|
| 1. Verrouillage du code natif | Absence de modification du hash de configuration native (patch.native_bridge_ok == true) | Rejet automatique : un patch OTA Dart ne peut pas modifier du code C++/Java/Obj-C ou des permissions du manifeste sans provoquer de crash. |
| 2. Intégrité de l'archive binaire | Somme de contrôle SHA-256 du micro-diff décompressé (targetSha256Hash) recalculée | Alerte rouge d'intégrité : blocage de la Signature cryptographique pour prévenir toute corruption disque ou altération MITM. |
| 3. Archivage des symboles Dart | Présence vérifiée de l'archive .symbols associée à ce numéro de patch | Avertissement opérationnel : empêche la perte de traçabilité en cas de crash en production (désobfuscation impossible). |
3. Matrice d'Habilitation sur /approvals
L'accès à l'écran /approvals et aux actions de signature dépend directement du rôle RBAC :
| Rôle | Accès à /approvals | Bouton "Approuver & Signer" | Bouton "Rejeter / Annuler" |
|---|---|---|---|
ROLE_ADMIN | ✅ Oui | ✅ Oui (sauf s'il est l'auteur en mode multi-membres) | ✅ Oui |
ROLE_SECURITY_OFFICER | ✅ Oui | ✅ Oui (Checker désigné) | ✅ Oui |
ROLE_RELEASE_DEVELOPER | ❌ Masqué | ❌ Interdit | ❌ Interdit |
ROLE_SRE_ADMIN | ❌ Masqué | ❌ Interdit | ❌ Interdit |
ROLE_AUDITOR_READONLY | ✅ Consultation | ❌ Lecture seule stricte | ❌ Lecture seule stricte |
[!IMPORTANT] Si un développeur mobile tente d'accéder directement à l'URL
/approvals, le composantRoleGuardintercepte la requête et affiche un écran de restriction d'accès conforme au principe de moindre privilège.
4. Mode Solo Tenant vs Organisation Multi-Membres
Dans le monde réel, une startup ou une phase de pré-lancement démarre souvent avec un administrateur unique. Pour ne pas paralyser les équipes réduites tout en garantissant une sécurité maximale, TkushPatch gère deux modes dynamiques :
A. Mode Développeur Solo (isSoloTenant == true)
- Détecté automatiquement lorsque l'organisation compte
totalMembers == 1. - L'administrateur unique est autorisé à s'auto-approuver de manière dérogatoire.
- Chaque auto-approbation est marquée d'un indicateur spécifique dans le journal d'audit légal (
audit_action: PATCH_APPROVED_SOLO_OVERRIDE), garantissant une traçabilité rétrospective complète.
B. Mode Entreprise / Réglementé (enforceFourEyes == true ou totalMembers > 1)
- L'auto-approbation est strictement impossible.
- Si l'administrateur connecté a soumis le patch via le CLI ou l'API, le bouton de signature est désactivé avec la mention : "En attente de validation par un second collaborateur habilité (RSSI ou Co-administrateur)".
5. Le Processus Cryptographique de Signature cryptographique
Lorsque l'officier de sécurité clique sur Approuver et Signer avec moteur cryptographique :
- La console envoie une requête
POST /api/admin/v1/patches/{id}/approveauthentifiée par JWT. - Le backend Serveur TkushPatch valide l'identité de l'opérateur et vérifie que
actor.id != patch.author_id. - Le backend invoque l'adaptateur
ShorebirdRsamoteur de signatureSignerAdapter:- Le hash hexadécimal SHA-256 de 64 caractères du binaire (
message.as_bytes()) est transmis au moteur service de signature sécurisé Engine. - moteur de signature signe ce digest avec la clé privée signature numérique/4096 dédiée à l'environnement cible.
- La signature numérique signature numérique est encodée en Base64 et persistée avec le patch.
- Le hash hexadécimal SHA-256 de 64 caractères du binaire (
- Le statut du patch passe à
APPROVED_AND_SIGNED. - Un événement certifié immuable est inscrit dans la table des journaux d'audit avec l'adresse IP et l'identité de l'approbateur.