Opseg i primjena zaštite
Dokument opisuje sigurnosne kontrole za osjetljive mobilne naredbe u sustavu EntryPoint.
Trenutno hard-enforced endpoint: POST /api/user/entry-point-on.
Version gating
- Verzija aplikacije >= 1.1.3: obavezna (hard) provjera App Integrity i relay potpisa.
- Verzija aplikacije < 1.1.3: soft mode (logiranje i metrike, bez blokade zahtjeva).
- Izvor verzije: zapis uređaja kroz device-register (polje appVersion).
App Integrity potpis zahtjeva
Klijent šalje integrity headere s kid identifikatorom ključa, vezanjem na deviceId, timestampovima i DER ES256 potpisom.
Backend ponovno gradi canonical string 1:1 i validira potpis preko javnog ključa vezanog uz kid.
- Canonical string: v1|METHOD|path-with-query|deviceId|bodySha256Hex|nonce|issuedAt|expiresAt
- METHOD mora biti uppercase.
- Putanja mora biti relativna od /api.
- Hash tijela mora odgovarati SHA-256 canonicaliziranog request body-a.
- TTL je ograničen na 30 sekundi uz kontrolu clock drift-a.
Relay potpis naredbe (entry-point-on)
Za osjetljive relay akcije u enforced modu provjerava se potpis payload-a.
Bool vrijednosti u canonical formatu serializiraju se striktno kao stringovi "true" i "false".
- Canonical string: v1|deviceId|status|stayOpen|delayTime|resetWifiConnection|resetLogs|checkWifiConnection|updateFirmware|opId|nonce|issuedAt|expiresAt
- Format potpisa: ES256 (ECDSA P-256 + SHA-256), DER Base64.
- Svaki retry mora imati novi opId i nonce.
Anti-replay zaštita
- App Integrity replay ključ: kid + nonce.
- Relay replay ključ: kid + deviceId + opId + nonce.
- Replay zapisi spremaju se u short-TTL cache kako bi se spriječilo ponovno izvršavanje.
Kodovi grešaka
Sigurnosne provjere vraćaju eksplicitne strojno čitljive kodove grešaka radi sigurnog fallback-a i dijagnostike.
- App Integrity: APP_INTEGRITY_REQUIRED, APP_INTEGRITY_INVALID_SIG, APP_INTEGRITY_EXPIRED, APP_INTEGRITY_REPLAY i detaljni mismatch kodovi.
- Relay signature: RELAY_SIG_REQUIRED, RELAY_SIG_INVALID, RELAY_SIG_EXPIRED, RELAY_SIG_REPLAY.
- Legacy relay ingest pravilo: SIGNATURE_REQUIRED za firmware >= 1.1.6.
Kompatibilnost i operativne napomene
- Stariji mobilni klijenti ostaju podržani kroz soft mode dok traje migracija.
- Legacy flow ostaje dostupan za uređaje s firmware verzijom ispod 1.1.6.
- Rotacija javnih ključeva radi se kroz environment konfiguraciju bez promjene API ugovora.