Retour à l'accueil

Chiffrement sur MAX : AES-256 pour Android/iOS

L'article décrit le développement de l'application Dark Message hors ligne pour le chiffrement sur messageries avec AES-256-GCM et PBKDF2. Analyse des problèmes UTF-8 multiplateformes, CI/CD sur GitHub Actions sans Mac, publication sur App Store. Compatibilité complète Android-iOS-Windows.

Chiffrement AES-256 hors ligne pour n'importe quelle messagerie
Advertisement 728x90

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.

Google AdInline article slot

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 :

Google AdInline article slot
  • 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 :

Google AdInline article slot
  • 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

Advertisement 728x90

Lire ensuite