Chiffrement multiplateforme sur les messageries : mise en œuvre sur iOS et Android
Lorsque seules des messageries autorisées sans chiffrement de bout en bout sont disponibles, une couche de protection sur le transport existant est nécessaire. Dark Message implémente le chiffrement hors ligne des messages, fichiers et documents en utilisant AES-256-GCM. Le contenu chiffré est copié dans n'importe quel canal de transmission — MAX, e-mail ou SMS — sans accès aux données originales sur l'appareil de l'expéditeur ou du destinataire.
L'application fonctionne sans autorisations réseau, chiffrant les données localement. Le destinataire déchiffre à l'aide d'un mot de passe partagé, garantissant la compatibilité entre Android, iOS et Windows.
Architecture et cryptographie
Le chiffrement symétrique repose sur AES-256-GCM pour la confidentialité et l'authentification. La dérivation de clé utilise PBKDF2-HMAC-SHA512 avec 600 000 itérations et un sel aléatoire. Le format du paquet chiffré est : [version:1B][typeContenu:1B][sel:16B][nonce:12B][texteChiffré+étiquette_GCM:NB]. Cela garantit un texte chiffré unique même pour des données d'entrée identiques avec le même mot de passe.
Types pris en charge :
- Messages texte (sortie en chaîne Base64).
- Images et fichiers (sortie en .darkm).
- Documents de tout format (PDF, DOCX, XLSX, ZIP).
Développement avec IA : de l'architecture au débogage
Claude a été utilisé pour la génération de code, la conception de la structure et l'analyse d'erreurs. L'IA a suggéré l'architecture, rédigé des ébauches et aidé à la comparaison d'octets lors des tests multiplateformes. Les tests finaux et les ajustements ont été effectués manuellement sur des appareils réels.
Processus :
- Description de la tâche — proposition de structure.
- Génération de code — tests locaux.
- Débogage des écarts (octets, clés).
- Tests sur Python pour vérification.
L'IA a accéléré le développement, remplaçant une équipe multiplateforme, mais n'a pas éliminé le besoin de validation matérielle.
CI/CD sans Mac : GitHub Actions pour iOS
Les builds iOS se font sur un macOS virtuel dans GitHub Actions. Le pipeline utilise XcodeGen pour générer le projet à partir de YAML, évitant de stocker .xcodeproj dans le dépôt. Signature automatique et téléchargement vers App Store Connect.
Étapes du pipeline :
- Clonage du dépôt.
- Génération du projet Xcode.
- Build et archivage.
- Téléchargement vers TestFlight (15 minutes après le commit).
Android est construit localement via Gradle (APK/AAB). Cela permet un développement multiplateforme sur Windows.
Problèmes multiplateformes et solutions
Garantir un déchiffrement identique entre les plateformes a révélé des écarts de clés.
UTF-8 dans la dérivation de clé
Java PBEKeySpec convertit les mots de passe via char[], iOS via octets UTF-8. Solution : PBKDF2 personnalisé sur Android avec passphrase.toByteArray(Charsets.UTF_8).
Caractères visuellement identiques
Mot de passe "a" (cyrillique U+D0B0) sur iPhone vs. latin "a" (U+0061) sur Android. Les tests avec un script Python ont confirmé des différences dans les clés.
Sélection du KDF
Argon2id sur Android entrait en conflit avec le CI/CD (problèmes de dépendances). Passer à PBKDF2 a assuré l'unification.
Publication : leçons de l'App Store et de RuStore
App Store : deux rejets dus à des mentions de messageries dans les métadonnées, des captures d'écran générées et des localisations incomplètes. Exigences : captures d'écran réelles, descriptions propres, localisations complètes, URL de support avec contacts.
RuStore : captures d'écran strictement 9:16, augmentation du versionCode.
Points clés
- Fonctionnement hors ligne : pas de requêtes réseau, les données ne quittent pas l'appareil.
- Compatibilité : chiffré sur Android — déchiffré sur iOS/Windows.
- Robustesse : AES-256-GCM + PBKDF2 (600k itérations) contre les attaques par force brute.
- Simplicité : copier/coller via n'importe quel transport.
- Ouverture : potentiel open source pour audit.
Utilisation dans les projets
L'intégration dans des applications existantes est possible en exportant la logique de chiffrement. Pour les développeurs intermédiaires/seniors : implémentez PBKDF2 avec des paramètres fixes pour la compatibilité multiplateforme. Testez sur des appareils réels, en vous concentrant sur la normalisation UTF-8 des mots de passe.
— Editorial Team
Aucun commentaire pour le moment.