# Zabezpečení zařízení (/cs/in-store/security/device_security)



Tapaya Accept SDK mění běžná spotřebitelská zařízení (COTS, consumer off-the-shelf) na zabezpečené platební terminály. Protože tato zařízení nejsou specializovaným platebním hardwarem, SDK uplatňuje přísná bezpečnostní opatření, která zmírňují hrozby a zajišťují soulad se standardy PCI.

## Atestace zařízení [#device-attestation]

Aby bylo platební prostředí bezpečné, SDK průběžně kontroluje stav hostitelského zařízení. Pokud zjistí jakékoli porušení zabezpečení, odmítne se inicializovat nebo zpracovávat transakce.

### Detekce rootu a jailbreaku [#root-and-jailbreak-detection]

SDK sleduje v prostředí známky eskalace oprávnění. To zahrnuje detekci binárních souborů rootu nebo frameworků pro správu oprávnění, jako jsou Magisk nebo SuperSU.
Kontroluje také neoprávněný přístup pro čtení nebo zápis do chráněných systémových adresářů. Kromě toho rozpoznává nestandardní sestavení operačního systému, včetně vlastních ROM nebo upravených podpisů jádra.

### Detekce ladění [#debugging-detection]

Aby zabránilo reverznímu inženýrství a neoprávněnému testování, SDK zjišťuje, zda je k aplikaci připojen debugger, a ověřuje, že běží na fyzickém zařízení.
Běh v emulátoru nebo ve virtuálním prostředí je omezen.

### Google Play Integrity API [#google-play-integrity-api]

Na Androidu SDK využívá **Play Integrity API** k ověření, že Google binární soubor zařízení rozpoznává a že s ním nebylo manipulováno.

## Zabezpečení aplikace [#application-security]

### Obfuskace kódu [#code-obfuscation]

Tapaya Accept SDK používá pokročilé obfuskační techniky, které snižují riziko reverzního inženýrství.
Symboly v kódu jsou přejmenovány na nic neříkající identifikátory, logika programu je záměrně znejasněna a citlivé řetězce nebo vložené klíče jsou šifrovány.

### Ochrana proti manipulaci [#anti-tampering]

SDK za běhu ověřuje vlastní integritu. Kontroluje digitální podpis aplikace a knihoven SDK. Pokud byl APK upraven nebo znovu zabalen třetí stranou, SDK se nespustí.

## Ochrana údajů [#data-protection]

### End-to-end šifrování (E2EE) [#end-to-end-encryption-e2ee]

Údaje o kartě jsou zašifrovány hned po načtení z NFC řadiče. Používá se silné šifrování podle oborových standardů
a dešifrovací klíče jsou uloženy pouze v zabezpečených HSM. Mobilní zařízení nikdy nemá přístup k nezašifrovaným údajům o kartě.

### Zabezpečené zadávání [#secure-input]

U transakcí s PIN zajišťuje SDK bezpečné zadávání. Obrazovka pro PIN je chráněna proti útokům překrytím,
rozložení klávesnice je náhodné a u každého dotykového vstupu se ověřuje, že pochází z fyzického zařízení.

## Monitorování prostředí [#environment-monitoring]

### Zamezení záznamu obrazovky [#screen-recording-prevention]

Pro ochranu citlivých údajů SDK blokuje snímky obrazovky, záznam obrazovky a sdílení obrazovky tím, že na zařízení vynucuje zabezpečené zobrazení.

### Služby usnadnění přístupu [#accessibility-services]

Škodlivé aplikace často zneužívají služby usnadnění přístupu ke čtení obsahu obrazovky nebo k vkládání vstupů. SDK detekuje aktivní služby usnadnění přístupu.
Standardní služby pro zrakově postižené uživatele (například TalkBack) povoluje, ale neznámé nebo podezřelé služby může během platebního procesu zablokovat.

## Atestace a monitorování ve vaší aplikaci [#attestation-and-monitoring-in-your-app]

Atestace a monitorování nejsou komponentou, kterou byste instalovali. Jsou součástí Tapaya Accept SDK i pluginové
aplikace Tapaya Terminal, spouštějí se voláním `Accept.initialize()` a běží po celou dobu, kdy je SDK aktivní.
Neexistuje žádný konfigurační příznak, žádná možnost je vypnout a žádný režim, který by je zmírnil.

Obě části musí projít nezávisle na sobě. Vaše aplikace hostuje SDK a SDK předává každou platbu kartou aplikaci Tapaya
Terminal, která provádí vlastní atestaci samostatně. Zařízení, které splní podmínky jedné části, ale ne druhé, nemůže přijímat platby.

### Integrace atestace do vaší aplikace [#integrating-attestation-into-your-app]

| Povinnost                                           | Jak to vypadá v kódu                                                                                                 |
| :-------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- |
| Inicializujte jednou a včas                         | `Accept.initialize(context, isProduction = true)` ve vaší třídě `Application`.                                       |
| Deklarujte skutečné prostředí                       | `isProduction` se řídí typem sestavení; nikdy nejde o hodnotu natvrdo zadanou pro pohodlí.                           |
| Udržujte Tapaya Terminal nainstalovaný a aktivovaný | Před přijetím platby zkontrolujte `Accept.plugin.isInstalled()` a poté zavolejte `Accept.plugin.activateTerminal()`. |
| Považujte odmítnutí za konečné                      | Oznamte je obchodníkovi a skončete. Nezkoušejte to znovu a nepřecházejte na jinou cestu v kódu.                      |

Kompletní API, které stojí za každým z těchto bodů, najdete v části [Integrace mobilního SDK](../integration/sdk_integration).

### Nasazení v konfiguraci připravené pro produkční prostředí [#deploying-in-a-production-ready-configuration]

Produkční sestavení nesmí být laditelné, nesmí logovat a nesmí oslabovat zabezpečení přenosu. SDK
většinu z toho vynucuje samo: laditelné sestavení nebo připojený debugger zcela zabrání jeho inicializaci.

| Nastavení                             | Vývoj                                                            | Produkce                                                                   |
| :------------------------------------ | :--------------------------------------------------------------- | :------------------------------------------------------------------------- |
| `android:debuggable`                  | `true`                                                           | `false`                                                                    |
| `Accept.initialize(isProduction = …)` | `false`                                                          | `true`                                                                     |
| `Accept.setDebugLoggingEnabled(…)`    | `true`                                                           | `false`                                                                    |
| Podpisový klíč                        | ladicí úložiště klíčů (debug keystore)                           | produkční úložiště klíčů (release keystore)                                |
| R8 / ProGuard                         | vypnuto                                                          | zapnuto, s nedotčenými consumer pravidly SDK                               |
| Konfigurace zabezpečení sítě          | může důvěřovat certifikačním autoritám nainstalovaným uživatelem | žádná důvěra v uživatelské certifikační autority, žádné obcházení pinningu |
| Ladění přes USB na zařízení           | zapnuto                                                          | vypnuto                                                                    |

Prostředí řiďte ze sestavení, místo abyste je před vydáním ručně upravovali:

```kotlin
Accept.initialize(context = this, isProduction = !BuildConfig.DEBUG)
Accept.setDebugLoggingEnabled(BuildConfig.DEBUG)
```

<Callout title="Soulad s předpisy" type="warn">
  Sestavení vydané se zapnutým laděním, s ponechaným ladicím logováním nebo s obejitým certificate pinningem
  je mimo konfiguraci, pro kterou je Tapaya Accept certifikován, bez ohledu na to, zda stále zpracovává platby.
  Před každým produkčním vydáním ověřte každý řádek výše uvedené tabulky.
</Callout>

### Předpoklady platformy [#platform-preconditions]

Každá z výše uvedených kontrol závisí na schopnosti hostitelského zařízení. Stránka [Podporovaná
zařízení](../getting-started/supported_devices#android-requirements) uvádí každý požadavek, proč jej atestace potřebuje a co
se stane, když chybí. Dva z nich ovlivňují výběr hardwaru:

* **Android 11 je pevná spodní hranice.** Na zařízeních se starší verzí Androidu SDK vůbec nepoběží. Několik specializovaných modelů SoftPOS
  se stále dodává s Androidem 7 až 9 bez možnosti aktualizace, proto ověřte verzi OS konkrétního kusu, nikoli
  celé modelové řady.
* **Google Mobile Services jsou volitelné.** Pokud jsou GMS k dispozici, SDK ke svým vlastním kontrolám přidá verdikt [Play Integrity
  API](#google-play-integrity-api). Specializované terminály dodávané bez GMS, běžné
  u výrobců jako Sunmi a iMin, jsou plně podporovány.

### Když kontrola selže [#when-a-check-fails]

Neúspěšná kontrola je pro dané zařízení konečná, nejde o přechodnou chybu, kterou lze zkusit znovu. SDK se odmítne inicializovat, nebo
odmítne zpracovat transakci, pokud se porušení objeví v průběhu relace. Nic ve vaší integraci to nemůže
přebít a pokus o její obejití vyřadí vaše nasazení z certifikované konfigurace.

Postupujte stejně jako u neopravitelné závady zařízení: sdělte obchodníkovi, že zařízení nemůže přijímat platby, a
nasměrujte jej na podporu. Neopakujte pokusy ve smyčce a nepřecházejte na jinou platební cestu.

## Odpovědnosti vývojáře [#developer-responsibilities]

Většinu práce sice odvede SDK, vy jako integrátor však musíte zajistit:

1. **Nevypínejte bezpečnostní varování:** V produkčních sestaveních se nepokoušejte obejít SSL pinning ani detekci rootu.
2. **Udržujte SDK aktuální:** Bezpečnostní opravy vycházejí pravidelně. Zajistěte, aby vaše aplikace používala nejnovější verzi Tapaya Accept SDK.
3. **Obfuskujte svou aplikaci:** Na vlastní kód aplikace použijte ProGuard nebo R8, abyste zabránili odhalení API klíčů nebo logiky, která komunikuje se SDK.

```kotlin title="proguard-rules.pro"
# The Tapaya Accept SDK includes its own consumer rules, but ensure you do not strip them
-keep class com.tapaya.** { *; }
```

## Nahlášení bezpečnostního incidentu [#reporting-a-security-incident]

Pokud objevíte bezpečnostní zranitelnost nebo máte podezření na bezpečnostní incident týkající se Tapaya Accept SDK nebo vaší integrace, nahlaste jej neveřejně podle postupu v části [Kontakty](/support/contacts#security-issues). Pokud je to relevantní, uveďte dotčenou verzi SDK a informace o zařízení.
