# Bezpečnostní model Veškerá síťová komunikace produkční aplikace vzniká až na výslovný pokyn uživatele: přímý TCP/SSH/SFTP k serveru nebo DNS/TCP diagnostika zadaného hostu. Žádná registrace, centrální služba, automatická synchronizace, analytika, reklama ani telemetrie. Systémový výběr/sdílení souborů může zpřístupnit služby, které si uživatel sám zvolí. Vývojové stahování SDK a balíčků není síťovou funkcí výsledné aplikace. ## Vault a uzamčení Generuje se náhodný 256bitový datový klíč. Profily, hesla, soukromé klíče a důvěryhodné fingerprinty tvoří jeden AES-256-GCM autentizovaný šifrovaný dokument. Klíč je zabalen samostatným AES-256-GCM klíčem odvozeným z hlavního hesla přes PBKDF2-HMAC-SHA256, 600 000 iterací, náhodná sůl; KDF běží mimo UI isolate. Nonce se generuje znovu při každém zápisu. AAD odděluje datový a klíčový obal. Načtení selže při neplatném hesle nebo autentizačním tagu. Citlivý plaintext není v SharedPreferences ani v souboru profilů. Celý obal se ukládá přes `flutter_secure_storage`: Android Keystore / šifrované soukromé preferences, iOS Keychain `unlocked_this_device`, bez iCloud synchronizace. Automatický reset při chybě úložiště je zakázán. Zápisy se serializují; živý dokument se mění až po úspěšném zápisu. Volitelné rychlé odemknutí ukládá kopii datového klíče do odděleného **OS chráněného** úložiště. Android používá `AndroidOptions.biometric(enforceBiometrics: true, requireBiometricsPerOperation: true)` s odděleným namespace; iOS Keychain používá `passcode` + `AccessControlFlag.userPresence`. OS proto chrání zpřístupnění klíče, nikoli jen obrazovku. `local_auth` ověřuje dostupnost a inicializační souhlas; sám o sobě není ochranou dešifrovacího klíče. Biometrie nebo bezpečný kód zařízení jsou alternativou, hlavní heslo zůstává nezávislým fallbackem. Změna biometrického nastavení či chyba Keychain/Keystore nesmí vytvořit nezabezpečený náhradní klíč. Zamčení odpojí aktivní i rozpracované SSH spojení, vymaže živý klíč a odkazy na dokument, smaže terminálový buffer a zavře citlivé dialogy. Generace operací brání tomu, aby dokončené odemykání nebo potvrzení fingerprintu po zamčení znovu otevřelo data. Výchozí limit neaktivity je 5 minut (volba 1 / 5 / 15), zamčení při opuštění aplikace je výchozí. Přechod do `inactive` při systémovém dialogu není plný odchod; při `hidden`/`paused` se zamyká. Výslovně otevřený systémový výběr/sdílení souboru je dočasnou výjimkou, časový limit neaktivity nadále platí. Refresh monitoru je mimo popředí vždy zastaven a rozpracované kanály se uzavírají. Dart používá GC a neměnné řetězce: nelze slíbit fyzické přepsání každé dřívější kopie plaintextu v RAM. Dostupné byte buffery klíčů se přepisují a aplikační odkazy se zahazují. Toto není ochrana proti kompromitovanému OS nebo procesu. ## SSH `onVerifyHostKey` je povinné. Používá se skutečný OpenSSH SHA-256 fingerprint poskytovaný připnutou verzí dartssh2 4.1.0. První použití vyžaduje explicitní souhlas; známý klíč se musí shodovat. Změněný klíč se nenabízí jako nové první použití a spojení se zablokuje před autentizací. V této verzi není UI pro rotaci/odstranění důvěryhodného host key. Žádné vypnutí kontroly podpisu nebo host key. TCP, handshake, autentizace a otevření kanálu mají časové limity. Čas čekání na uživatelovo potvrzení se nezahrnuje do zobrazovaného času spojení. SSH command RTT je samostatné skutečné měření kanálu `true`, nikoli ICMP. Heslo se ukládá pouze volitelně. Soukromý klíč je uvnitř Vaultu; soubory klíčů mají importní limit 1 MiB. Passphrase se neukládá. Produkce nevolá debug logger SSH ani nevypisuje raw výjimky obsahující vzdálená data; chyby se mapují na lokalizované zprávy. ## SFTP a soubory Operace se soubory používají pouze SFTP, žádné sestavování shellových příkazů. Povolené jsou absolutní POSIX cesty bez `.`/`..`, nul, řídicích znaků a zpětných lomítek. Jednotlivé názvy nesmějí obsahovat oddělovače. `lstat` kontroluje všechny komponenty; symbolické odkazy se zobrazí, ale nenásledují ani nemažou. Importy přes `/tmp` symlink na macOS tedy vyžadují kanonickou cestu `/private/tmp`. Upload streamuje do náhodného exkluzivně vytvořeného `.part` souboru, pak jej SFTP v3 rename publikuje pod novým názvem. Existující cíle se odmítají. Zrušený nebo neúspěšný přenos se snaží vlastní dočasný soubor odstranit. Download streamuje do soukromé cache; po dokončení jej lze předat systémovému sdílení/uložení. Po selhání, zrušení a dokončeném sdílení se cache odstraňuje; pozůstatky po pádu se čistí při startu a zamčení. Při ztrátě síťového spojení může vzdálený `.part` zůstat a vyžadovat ruční odstranění. SFTP v3 nenabízí univerzální `openat`/`O_NOFOLLOW`: kontrola komponent není atomická vůči jinému procesu měnícímu vzdálený filesystem. Uživatel s právem měnit adresáře může způsobit souběžnou výměnu. Nejde o vzdálený sandbox; konečnou autoritou je SSH účet a server. Mazání adresářů není rekurzivní. UI potvrzuje mazání a přejmenování. Android zakazuje zálohy i device transfer aplikačních dat a používá FLAG_SECURE. iOS používá nepřenosné Keychain položky a systémovou cache, která se nezálohuje; app-switcher snapshot překrývá nativní privacy view. iOS foreground screenshoty nelze tímto opatřením blokovat. Sdílené kopie a clipboard jsou pod kontrolou uživatele a systému. Android cílí SDK 36: podle [oficiálních pravidel](https://developer.android.com/privacy-and-security/local-network-permission) potřebuje přímý LAN přístup INTERNET, nikoli oprávnění ACCESS_LOCAL_NETWORK určené pro target 37+. Před přechodem na target 37 musí být implementován příslušný runtime permission flow. iOS obsahuje lokalizované Local Network a Face ID usage descriptions. ATS není oslabeno.
Gepubliceerde bron
Download bron ZIP
CH-J SM Mobile
Blader door mappen en bestanden voor een specifieke toepassing release.
CH-J / SM Mobile
134 bestanden
sm-mobile-20261016T050549Z-3678f2a05fa9
Toegevoegd: · Gebouwd:
1
# Bezpečnostní model3
Veškerá síťová komunikace produkční aplikace vzniká až na výslovný pokyn uživatele: přímý TCP/SSH/SFTP k serveru nebo DNS/TCP diagnostika zadaného hostu. Žádná registrace, centrální služba, automatická synchronizace, analytika, reklama ani telemetrie. Systémový výběr/sdílení souborů může zpřístupnit služby, které si uživatel sám zvolí. Vývojové stahování SDK a balíčků není síťovou funkcí výsledné aplikace.5
## Vault a uzamčení7
Generuje se náhodný 256bitový datový klíč. Profily, hesla, soukromé klíče a důvěryhodné fingerprinty tvoří jeden AES-256-GCM autentizovaný šifrovaný dokument. Klíč je zabalen samostatným AES-256-GCM klíčem odvozeným z hlavního hesla přes PBKDF2-HMAC-SHA256, 600 000 iterací, náhodná sůl; KDF běží mimo UI isolate. Nonce se generuje znovu při každém zápisu. AAD odděluje datový a klíčový obal. Načtení selže při neplatném hesle nebo autentizačním tagu. Citlivý plaintext není v SharedPreferences ani v souboru profilů.9
Celý obal se ukládá přes `flutter_secure_storage`: Android Keystore / šifrované soukromé preferences, iOS Keychain `unlocked_this_device`, bez iCloud synchronizace. Automatický reset při chybě úložiště je zakázán. Zápisy se serializují; živý dokument se mění až po úspěšném zápisu.11
Volitelné rychlé odemknutí ukládá kopii datového klíče do odděleného **OS chráněného** úložiště. Android používá `AndroidOptions.biometric(enforceBiometrics: true, requireBiometricsPerOperation: true)` s odděleným namespace; iOS Keychain používá `passcode` + `AccessControlFlag.userPresence`. OS proto chrání zpřístupnění klíče, nikoli jen obrazovku. `local_auth` ověřuje dostupnost a inicializační souhlas; sám o sobě není ochranou dešifrovacího klíče. Biometrie nebo bezpečný kód zařízení jsou alternativou, hlavní heslo zůstává nezávislým fallbackem. Změna biometrického nastavení či chyba Keychain/Keystore nesmí vytvořit nezabezpečený náhradní klíč.13
Zamčení odpojí aktivní i rozpracované SSH spojení, vymaže živý klíč a odkazy na dokument, smaže terminálový buffer a zavře citlivé dialogy. Generace operací brání tomu, aby dokončené odemykání nebo potvrzení fingerprintu po zamčení znovu otevřelo data. Výchozí limit neaktivity je 5 minut (volba 1 / 5 / 15), zamčení při opuštění aplikace je výchozí. Přechod do `inactive` při systémovém dialogu není plný odchod; při `hidden`/`paused` se zamyká. Výslovně otevřený systémový výběr/sdílení souboru je dočasnou výjimkou, časový limit neaktivity nadále platí. Refresh monitoru je mimo popředí vždy zastaven a rozpracované kanály se uzavírají.15
Dart používá GC a neměnné řetězce: nelze slíbit fyzické přepsání každé dřívější kopie plaintextu v RAM. Dostupné byte buffery klíčů se přepisují a aplikační odkazy se zahazují. Toto není ochrana proti kompromitovanému OS nebo procesu.17
## SSH19
`onVerifyHostKey` je povinné. Používá se skutečný OpenSSH SHA-256 fingerprint poskytovaný připnutou verzí dartssh2 4.1.0. První použití vyžaduje explicitní souhlas; známý klíč se musí shodovat. Změněný klíč se nenabízí jako nové první použití a spojení se zablokuje před autentizací. V této verzi není UI pro rotaci/odstranění důvěryhodného host key. Žádné vypnutí kontroly podpisu nebo host key. TCP, handshake, autentizace a otevření kanálu mají časové limity. Čas čekání na uživatelovo potvrzení se nezahrnuje do zobrazovaného času spojení. SSH command RTT je samostatné skutečné měření kanálu `true`, nikoli ICMP.21
Heslo se ukládá pouze volitelně. Soukromý klíč je uvnitř Vaultu; soubory klíčů mají importní limit 1 MiB. Passphrase se neukládá. Produkce nevolá debug logger SSH ani nevypisuje raw výjimky obsahující vzdálená data; chyby se mapují na lokalizované zprávy.23
## SFTP a soubory25
Operace se soubory používají pouze SFTP, žádné sestavování shellových příkazů. Povolené jsou absolutní POSIX cesty bez `.`/`..`, nul, řídicích znaků a zpětných lomítek. Jednotlivé názvy nesmějí obsahovat oddělovače. `lstat` kontroluje všechny komponenty; symbolické odkazy se zobrazí, ale nenásledují ani nemažou. Importy přes `/tmp` symlink na macOS tedy vyžadují kanonickou cestu `/private/tmp`.27
Upload streamuje do náhodného exkluzivně vytvořeného `.part` souboru, pak jej SFTP v3 rename publikuje pod novým názvem. Existující cíle se odmítají. Zrušený nebo neúspěšný přenos se snaží vlastní dočasný soubor odstranit. Download streamuje do soukromé cache; po dokončení jej lze předat systémovému sdílení/uložení. Po selhání, zrušení a dokončeném sdílení se cache odstraňuje; pozůstatky po pádu se čistí při startu a zamčení. Při ztrátě síťového spojení může vzdálený `.part` zůstat a vyžadovat ruční odstranění.29
SFTP v3 nenabízí univerzální `openat`/`O_NOFOLLOW`: kontrola komponent není atomická vůči jinému procesu měnícímu vzdálený filesystem. Uživatel s právem měnit adresáře může způsobit souběžnou výměnu. Nejde o vzdálený sandbox; konečnou autoritou je SSH účet a server. Mazání adresářů není rekurzivní. UI potvrzuje mazání a přejmenování.31
Android zakazuje zálohy i device transfer aplikačních dat a používá FLAG_SECURE. iOS používá nepřenosné Keychain položky a systémovou cache, která se nezálohuje; app-switcher snapshot překrývá nativní privacy view. iOS foreground screenshoty nelze tímto opatřením blokovat. Sdílené kopie a clipboard jsou pod kontrolou uživatele a systému.33
Android cílí SDK 36: podle [oficiálních pravidel](https://developer.android.com/privacy-and-security/local-network-permission) potřebuje přímý LAN přístup INTERNET, nikoli oprávnění ACCESS_LOCAL_NETWORK určené pro target 37+. Před přechodem na target 37 musí být implementován příslušný runtime permission flow. iOS obsahuje lokalizované Local Network a Face ID usage descriptions. ATS není oslabeno.SHA-256
a52232dca97753db12448631b1fc02fa14ef89f195e98cafb752896d64bfd28fCH-J Proprietary Software License 1.14 · Bron wordt geleverd onder de CH-J Proprietary Software License 1.14. De beschikbaarheid verandert de licentievoorwaarden niet of verleent geen extra rechten.
Archief SHA-256
c486a807e4828998b9c57ab0f2e760f7980b31965fe118e89d3e1a5a2b65be65