# Zabezpečenie zariadenia (/sk/in-store/security/device_security)



Tapaya Accept SDK mení bežné spotrebiteľské zariadenia (COTS, consumer off-the-shelf) na zabezpečené platobné terminály. Keďže tieto zariadenia nie sú špecializovaným platobným hardvérom, SDK uplatňuje prísne bezpečnostné opatrenia, ktoré zmierňujú hrozby a zaisťujú súlad so štandardmi PCI.

## Atestácia zariadenia [#device-attestation]

Aby bolo platobné prostredie bezpečné, SDK priebežne kontroluje stav hostiteľského zariadenia. Ak zistí akékoľvek porušenie zabezpečenia, odmietne sa inicializovať alebo spracúvať transakcie.

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

SDK sleduje v prostredí známky eskalácie oprávnení. Zahŕňa to detekciu binárnych súborov rootu alebo frameworkov na správu oprávnení, ako sú Magisk alebo SuperSU.
Kontroluje tiež neoprávnený prístup na čítanie alebo zápis do chránených systémových adresárov. Okrem toho rozpoznáva neštandardné zostavenia operačného systému vrátane vlastných ROM alebo upravených podpisov jadra.

### Detekcia ladenia [#debugging-detection]

Aby zabránilo reverznému inžinierstvu a neoprávnenému testovaniu, SDK zisťuje, či je k aplikácii pripojený debugger, a overuje, že beží na fyzickom zariadení.
Beh v emulátore alebo vo virtuálnom prostredí je obmedzený.

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

Na Androide SDK využíva **Play Integrity API** na overenie, že Google binárny súbor zariadenia rozpoznáva a že s ním nebolo manipulované.

## Zabezpečenie aplikácie [#application-security]

### Obfuskácia kódu [#code-obfuscation]

Tapaya Accept SDK používa pokročilé obfuskačné techniky, ktoré znižujú riziko reverzného inžinierstva.
Symboly v kóde sú premenované na nič nehovoriace identifikátory, logika programu je zámerne zahmlená a citlivé reťazce alebo vložené kľúče sú šifrované.

### Ochrana proti manipulácii [#anti-tampering]

SDK za behu overuje vlastnú integritu. Kontroluje digitálny podpis aplikácie a knižníc SDK. Ak APK upravila alebo znova zabalila tretia strana, SDK sa nespustí.

## Ochrana údajov [#data-protection]

### End-to-end šifrovanie (E2EE) [#end-to-end-encryption-e2ee]

Údaje o karte sú zašifrované hneď po načítaní z NFC radiča. Používa sa silné šifrovanie podľa odvetvových štandardov
a dešifrovacie kľúče sú uložené iba v zabezpečených HSM. Mobilné zariadenie nikdy nemá prístup k nezašifrovaným údajom o karte.

### Zabezpečené zadávanie [#secure-input]

Pri transakciách s PIN zaisťuje SDK bezpečné zadávanie. Obrazovka na PIN je chránená proti útokom prekrytím,
rozloženie klávesnice je náhodné a pri každom dotykovom vstupe sa overuje, že pochádza z fyzického zariadenia.

## Monitorovanie prostredia [#environment-monitoring]

### Zamedzenie záznamu obrazovky [#screen-recording-prevention]

Na ochranu citlivých údajov SDK blokuje snímky obrazovky, záznam obrazovky a zdieľanie obrazovky tým, že na zariadení vynucuje zabezpečené zobrazenie.

### Služby dostupnosti [#accessibility-services]

Škodlivé aplikácie často zneužívajú služby dostupnosti na čítanie obsahu obrazovky alebo na vkladanie vstupov. SDK deteguje aktívne služby dostupnosti.
Štandardné služby pre zrakovo postihnutých používateľov (napríklad TalkBack) povoľuje, ale neznáme alebo podozrivé služby môže počas platobného procesu zablokovať.

## Atestácia a monitorovanie vo vašej aplikácii [#attestation-and-monitoring-in-your-app]

Atestácia a monitorovanie nie sú komponentom, ktorý by ste inštalovali. Sú súčasťou Tapaya Accept SDK aj pluginovej
aplikácie Tapaya Terminal, spúšťajú sa volaním `Accept.initialize()` a bežia počas celej doby, keď je SDK aktívne.
Neexistuje žiadny konfiguračný príznak, žiadna možnosť ich vypnúť a žiadny režim, ktorý by ich zmiernil.

Obe časti musia prejsť nezávisle od seba. Vaša aplikácia hostí SDK a SDK odovzdáva každú platbu kartou aplikácii Tapaya
Terminal, ktorá vykonáva vlastnú atestáciu samostatne. Zariadenie, ktoré splní podmienky jednej časti, ale nie druhej, nemôže prijímať platby.

### Integrácia atestácie do vašej aplikácie [#integrating-attestation-into-your-app]

| Povinnosť                                              | Ako to vyzerá v kóde                                                                                                  |
| :----------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- |
| Inicializujte raz a včas                               | `Accept.initialize(context, isProduction = true)` vo vašej triede `Application`.                                      |
| Deklarujte skutočné prostredie                         | `isProduction` sa riadi typom zostavenia; nikdy nejde o hodnotu zadanú napevno pre pohodlie.                          |
| Udržiavajte Tapaya Terminal nainštalovaný a aktivovaný | Pred prijatím platby skontrolujte `Accept.plugin.isInstalled()` a potom zavolajte `Accept.plugin.activateTerminal()`. |
| Považujte odmietnutie za konečné                       | Oznámte ho obchodníkovi a skončite. Neskúšajte to znova a neprechádzajte na inú cestu v kóde.                         |

Kompletné API, ktoré stojí za každým z týchto bodov, nájdete v časti [Integrácia mobilného SDK](../integration/sdk_integration).

### Nasadenie v konfigurácii pripravenej na produkčné prostredie [#deploying-in-a-production-ready-configuration]

Produkčné zostavenie nesmie byť laditeľné, nesmie logovať a nesmie oslabovať zabezpečenie prenosu. SDK
väčšinu z toho vynucuje samo: laditeľné zostavenie alebo pripojený debugger úplne zabráni jeho inicializácii.

| Nastavenie                            | Vývoj                                                              | Produkcia                                                                        |
| :------------------------------------ | :----------------------------------------------------------------- | :------------------------------------------------------------------------------- |
| `android:debuggable`                  | `true`                                                             | `false`                                                                          |
| `Accept.initialize(isProduction = …)` | `false`                                                            | `true`                                                                           |
| `Accept.setDebugLoggingEnabled(…)`    | `true`                                                             | `false`                                                                          |
| Podpisový kľúč                        | ladiace úložisko kľúčov (debug keystore)                           | produkčné úložisko kľúčov (release keystore)                                     |
| R8 / ProGuard                         | vypnuté                                                            | zapnuté, s nedotknutými consumer pravidlami SDK                                  |
| Konfigurácia zabezpečenia siete       | môže dôverovať certifikačným autoritám nainštalovaným používateľom | žiadna dôvera v používateľské certifikačné autority, žiadne obchádzanie pinningu |
| Ladenie cez USB na zariadení          | zapnuté                                                            | vypnuté                                                                          |

Prostredie riaďte zo zostavenia namiesto toho, aby ste ho pred vydaním ručne upravovali:

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

<Callout title="Súlad s predpismi" type="warn">
  Zostavenie vydané so zapnutým ladením, s ponechaným ladiacim logovaním alebo s obídeným certificate pinningom
  je mimo konfigurácie, pre ktorú je Tapaya Accept certifikovaný, bez ohľadu na to, či stále spracúva platby.
  Pred každým produkčným vydaním overte každý riadok vyššie uvedenej tabuľky.
</Callout>

### Predpoklady platformy [#platform-preconditions]

Každá z vyššie uvedených kontrol závisí od schopnosti hostiteľského zariadenia. Stránka [Podporované
zariadenia](../getting-started/supported_devices#android-requirements) uvádza každú požiadavku, prečo ju atestácia potrebuje a čo
sa stane, keď chýba. Dve z nich ovplyvňujú výber hardvéru:

* **Android 11 je pevná spodná hranica.** Na zariadeniach so staršou verziou Androidu SDK vôbec nepobeží. Niekoľko špecializovaných modelov SoftPOS
  sa stále dodáva s Androidom 7 až 9 bez možnosti aktualizácie, preto overte verziu OS konkrétneho kusu, nie
  celého modelového radu.
* **Google Mobile Services sú voliteľné.** Ak sú GMS k dispozícii, SDK k svojim vlastným kontrolám pridá verdikt [Play Integrity
  API](#google-play-integrity-api). Špecializované terminály dodávané bez GMS, bežné
  u výrobcov ako Sunmi a iMin, sú plne podporované.

### Keď kontrola zlyhá [#when-a-check-fails]

Neúspešná kontrola je pre dané zariadenie konečná, nejde o prechodnú chybu, ktorú možno skúsiť znova. SDK sa odmietne inicializovať, alebo
odmietne spracovať transakciu, ak sa porušenie objaví počas relácie. Nič vo vašej integrácii to nemôže
zmeniť a akýkoľvek pokus o obídenie tohto správania vyradí vaše nasadenie z certifikovanej konfigurácie.

Postupujte rovnako ako pri neopraviteľnej poruche zariadenia: oznámte obchodníkovi, že zariadenie nemôže prijímať platby, a
nasmerujte ho na podporu. Neopakujte pokusy v slučke a neprechádzajte na inú platobnú cestu.

## Zodpovednosti vývojára [#developer-responsibilities]

Väčšinu práce síce odvedie SDK, vy ako integrátor však musíte zabezpečiť:

1. **Nevypínajte bezpečnostné varovania:** V produkčných zostaveniach sa nepokúšajte obísť SSL pinning ani detekciu rootu.
2. **Udržiavajte SDK aktuálne:** Bezpečnostné opravy vychádzajú pravidelne. Zabezpečte, aby vaša aplikácia používala najnovšiu verziu Tapaya Accept SDK.
3. **Obfuskujte svoju aplikáciu:** Na vlastný kód aplikácie použite ProGuard alebo R8, aby ste zabránili odhaleniu API kľúčov alebo logiky, ktorá komunikuje so 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ásenie bezpečnostného incidentu [#reporting-a-security-incident]

Ak objavíte bezpečnostnú zraniteľnosť alebo máte podozrenie na bezpečnostný incident týkajúci sa Tapaya Accept SDK alebo vašej integrácie, nahláste ho neverejne podľa postupu v časti [Kontakty](/support/contacts#security-issues). Ak je to relevantné, uveďte dotknutú verziu SDK a informácie o zariadení.
