Křížové šifrování nad messengerem: implementace pro iOS a Android
V situacích, kdy jsou k dispozici pouze messengerové aplikace z bílého seznamu bez end-to-end šifrování, je potřeba vrstva ochrany nad stávajícím přenosem. Dark Message implementuje offline šifrování zpráv, souborů a dokumentů pomocí AES-256-GCM. Zašifrovaný obsah se zkopíruje do libovolného přenosového kanálu – MAX, e-mail nebo SMS – bez přístupu k původním datům na zařízení odesílatele nebo příjemce.
Aplikace funguje bez síťových oprávnění, data šifruje lokálně. Příjemce dešifruje pomocí společného hesla, což zajišťuje kompatibilitu mezi Androidem, iOS a Windows.
Architektura a kryptografie
Symetrické šifrování je postaveno na AES-256-GCM pro důvěrnost a autentizaci. Odvození klíče – PBKDF2-HMAC-SHA512 s 600 000 iteracemi a náhodnou solí. Formát zašifrovaného paketu: [verze:1B][typ obsahu:1B][sůl:16B][nonce:12B][šifrový text+GCM_tag:NB]. To zaručuje jedinečnost šifrového textu i pro identická vstupní data se stejným heslem.
Podporované typy:
- Textové zprávy (výstup – Base64 řetězec).
- Obrázky a soubory (výstup – .darkm).
- Dokumenty libovolných formátů (PDF, DOCX, XLSX, ZIP).
Vývoj s AI: od architektury po ladění
Claude byl použit pro generování kódu, struktury a analýzu chyb. AI navrhoval architekturu, psal návrhy, pomáhal při porovnávání bajtů při křížových testech. Finální testování a úpravy byly provedeny ručně na skutečných zařízeních.
Proces:
- Popis úlohy – návrh struktury.
- Generování kódu – lokální testování.
- Ladění nesrovnalostí (bajty, klíče).
- Testování na Pythonu pro ověření.
AI urychlil vývoj, nahradil mezifunkční tým, ale nevyloučil potřebu validace na hardwaru.
CI/CD bez Macu: GitHub Actions pro iOS
Sestavení iOS probíhá na virtuální macOS v GitHub Actions. Pipeline používá XcodeGen pro generaci projektu z YAML, vyhýbá se ukládání .xcodeproj v repozitáři. Automatické podepsání a nahrání do App Store Connect.
Fáze pipeline:
- Klonování repozitáře.
- Generace Xcode projektu.
- Sestavení a archivace.
- Nahrání do TestFlight (15 minut od commitu).
Android se sestavuje lokálně přes Gradle (APK/AAB). To umožňuje křížový vývoj na Windows.
Křížové problémy a řešení
Zajištění identické dešifrace mezi platformami odhalilo klíčové nesrovnalosti.
UTF-8 v odvozování klíčů
Java PBEKeySpec převádí heslo přes char[], iOS – přes utf8 bajty. Řešení: vlastní PBKDF2 na Androidu s passphrase.toByteArray(Charsets.UTF_8).
Vizuálně identické znaky
Heslo „a“ (cyrilice U+D0B0) na iPhone vs latinské „a“ (U+0061) na Androidu. Testování Python skriptem potvrdilo rozdíly v klíčích.
Volba KDF
Argon2id na Androidu konfliktoval s CI/CD (problémy závislostí). Přechod na PBKDF2 zajistil sjednocení.
Publikace: lekce z App Store a RuStore
App Store: dvě zamítnutí kvůli zmínkám messengerů v metadatech, generovaným snímkům obrazovky a neúplným lokalizacím. Požadavky: skutečné snímky obrazovky, čisté popisy, úplné lokalizace, Support URL s kontakty.
RuStore: snímky obrazovky striktně 9:16, rostoucí versionCode.
Co je důležité
- Offline práce: žádné síťové požadavky, data neopouštějí zařízení.
- Kompatibilita: zašifrováno na Androidu – dešifrováno na iOS/Windows.
- Odolnost: AES-256-GCM + PBKDF2 (600k iterací) proti brute-force.
- Jednoduchost: kopírovat/vkládat přes libovolný přenos.
- Otevřenost: potenciální open source pro audit.
Použití v projektech
Integrace do existujících aplikací je možná přes export šifrovací logiky. Pro middle/senior vývojáře: implementujte PBKDF2 s pevnými parametry pro křížovou kompatibilitu. Testujte na skutečných zařízeních, zaměřte se na UTF-8 normalizaci hesel.
— Editorial Team
Zatím žádné komentáře.