Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
swift week + discount 30

Diskuze: Lokální akce a integrita dat

Aktivity
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:13.5.2018 20:21

Ahoj, jsem si vědom, že název vlákna není moc dobrý, ale nevím, jak to nazvat. Zajímalo by mě, jak může být bezpečné / autentikované něco, co ovlivní data na vzdáleném serveru, ale server může od klienta dostat jen něco typu "dude, trust me".
To není moc dobré na představu, proto uvedu příklady:

  1. Highscore u her - hra vlastně musí udělat něco jako že pošle serveru "jsem uživatel X, můj token pro tento počítač je Y a dosáhl jsem skóre Z". Jak ale může server vědět, že jsem si jako uživatel skóre nevymyslel - mohl jsem poslouchat síťový provoz a na základě toho vytvořit nový request, kde jen vyměním číslo, nebo jsem mohl hru dekompilovat a poskládat request tak, aby vypadal věrohodně.
  2. Potvrzení čtečkou prstu - pokud si koupím od ČD jízdenku do vlaku, musím buď použít zabezpečenou platební bránu, nebo použít nějaké jejich řešení, kde ale stejně musím vždy zadat PIN (ne ten od kary) ...nebo můžu použít Android appku a potvrdit to celé jen otiskem prstu bez jakékoliv jiné kontroly - takže tomu serveru nikdy nepošlu žádné tajemství, kromě úvodního přihlášení.

Existuje pro tento typ problému nějaké rozumné řešení, nebo to funguje tak, že třeba prostě existuje způsob, jak si koupit jízdenku bez zadání pinu nebo zfalšovat mé skóre a jen se to tváří jako bezpečné, ačkoliv tam je vestavěné porušení bezpečnostní vrstvy?

Odpovědět
13.5.2018 20:21
the cake is a lie
Avatar
Odpovídá na Petr Čech
Marian Benčat:13.5.2018 20:37
  1. Nikdy nevěř klientovi
  2. Nikdy nevěř klientovi
  3. Nikdy nevěř klientovi

Na 1) jednoduché řešení není, ostatně, server zkouší počítat jestli je to možné, ale i tak tomu ve většině případů zamezit nemůže, tedy přichází na řadu ochrana na klientovi..

Možná proto věci jako Denuvo dostávají takové šílené prachy pro to, aby nikdo ty informace na klientech falšovat nemohl?

  1. Eh, ty ČD si pak kontrolují, jestli ta platba opravdu dorazila,,.. nebo si nejsem jistý, co máš přesně na mysli..
Nahoru Odpovědět
13.5.2018 20:37
Totalitní admini..
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Marian Benčat
Petr Čech:13.5.2018 20:42

1.-3. já vím, proto se ptám

U ČD si můžeš jednorázově dobít jejich ČD kredit a z toho můžeš ukousávat přes PIN ... nebo otisk prstu. Takže platbě se samozřejmě nevyhneš. Ale teoreticky by potom měl jít zfalšovat můj požadavek bez znalosti PINu.

Editováno 13.5.2018 20:43
Nahoru Odpovědět
13.5.2018 20:42
the cake is a lie
Avatar
Odpovídá na Petr Čech
Marian Benčat:13.5.2018 20:46

No.. já opravdu upřímně nevím jak to tam funguje (vlakem jezdím jen pokud není k dispozici žádný jiný rozumný dopravní prostředek, ani osel,..)

Každopádně, celé se to snad děje online ne? Ten PIN / Otisk se někomu posílá, tam se kontorluje a ten někdo (Google , nebo přímo ČD) stanovuje, jeslti je ten PIN / OTISK ok? Tj. předpokládám, že na zařízení není uložený ten otisk. ?

Nahoru Odpovědět
13.5.2018 20:46
Totalitní admini..
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Marian Benčat
Petr Čech:13.5.2018 20:57

Děje se to online, ale normálně musíš vždy zadat PIN, abys mohl nějaký kredit utratit.
Android právě ukládá data pouze lokálně a aplikace samotná neví, jaký ten otisk je, jen se dozví, zda proběhlo ověření úspěšně.

Nahoru Odpovědět
13.5.2018 20:57
the cake is a lie
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Petr Čech
Marian Benčat:13.5.2018 21:18

No tak že jo,... já bych předpokládal, že to funguje nějak takto (+- je to vždycky stejně):

ČD SERVER -> 3rd party: " Hele potřebuji tady ověřit identitu pomocí tvoji služby - otisku"
3rd party -> ČD SERVER: "Ok, tady máš public 12345 a private key, zobraz si ho v aplikaci.

ČD APP -> 3rd party server: "Tady máš otisk prstu a jde o public 12345
3rd party server -> ČD APP: "Jo jsi to fakt ty"
ČD APP -> ČD server : "Už jsem se ověřil pod tím 12345"
ČD Server -> 3rd party server: "Hele, fakt se ověřil pod 12345? Nebo kdo to tedy je? private key je ten a ten.."
3rd party server -> ČD server: "hele fakt je to Petr Čech"
ČD Server -> ČD App: "Ok, platba byla provedena"..

Ve složitější / jednodušší mutaci.. jde rpostě o 3legged komunikaci.. prostě tu validaci máš na serveru, ne na klientovi. Ten server pak poví "fakt je to on", ne klient.

Editováno 13.5.2018 21:19
Nahoru Odpovědět
13.5.2018 21:18
Totalitní admini..
Avatar
Luboš Běhounek Satik:14.5.2018 15:52

Asi nejbezpečnější řešení je pokud je hra plně deterministická, tak ukládat třeba záznam a pak ho nechat ověřit na serveru, jestli to sedí, případně třeba během hraní na klíčových místech ověřovat nějaký dílčí části dat - to už není tak stoprocentní, ale pořád lepší než nic :)

Ale i proto některý hry dneska už jedou jenom online, třeba Diablo3 - tam pak máš jistotu, že uživatel nic zfalšovat nemůže (pokud tam nemáš nějakou chybu, jako že na tuším xbox verzi Diabla3 šlo duplikovat předměty :) )

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
14.5.2018 15:52
https://www.facebook.com/peasantsandcastles/
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15.5.2018 15:47

Viz Marian Benčat, nikdy never klientovi.

Jsou online hry, kde, jak popisujes, je mozne podvrhnout vysledek. Obvykle jde o jednoduche piskvorky. Je to 99% vsech her! :)

Pak jsou hry, kde tohle osefuji tim, ze veskera data hry jsou na serveru. Kliknes piskvorku, neco kliknes, posila se to na server. Takze skore pocita server a muzes zkusit podvadet, jak chces. Dokonce si pohlida, abys nehral 2x po sobe. Samozrejme, to je slozite naprogramovat, takze vetsinou se jde do te levne 99% varianty :)

Resi se to pres RTC, Websockety a pod. Propoji tebe a server samostatnou jakoby session. A pak jenom vami posilate data. Posila se kratke id cislo sesny a hash pro sifrovani. kdyz se nekdo ozve se stejnym id, posle spravne zasifrovana data, bude se to povazovat za ok a dal uz zalezi na serverove kontrolu.
Problem je, ze tu kontrolu nemuzes resit prilis dukladne, kvuli rychlosti. Napr u online her. Muzes maxilane zaznamenat veskere udalosti a vyhodnotit je pozdeji. To dela ted Lol, kdyz hraci kliknout po hre, ze nekdo cheatuje nebo mluvi sproste. Nebo bys musel mit spesl stroj, ktery ma treba 3d pameti a risc procesory a muze to zpracovavat online.

klient - chci se pripojit
server - vytvarim ti peer, posilam svuj server-hash a pridelene id
klient - potvrzuji, vracim svuj klient-hash (hash(server-hash+heslo))
server - nastavi u peeru klient-hash
A od teto chvile bez spravneho hashe do toho kanalu nelze posilat.
Zprava se xoruje klient-hash a server-hashem. Soucasne si server muze ulozit ip a ruzne dalsi informace, co mu klient pri vytvareni pripojeni posle. U RTC byvaji ty hash dost kratke, asi by to slo padelat.

Ano, ve hrach podvadet je. Je to problem. A nejde mnoho udelat za male penize pro ochranu.

 
Nahoru Odpovědět
15.5.2018 15:47
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:15.5.2018 16:01

Děkuji za reakce, myslím, že vše už bylo řečeno - za rozumnou snahu to zkrátka nejde.

Nahoru Odpovědět
15.5.2018 16:01
the cake is a lie
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.