Posta säkert till online highscore

Permalänk

Posta säkert till online highscore

Håller på att bygga en app och i den ska spelaren kunna posta till en highscore som sparas online. Hur säkerställer man att ingen bara kollar vad appen skickar och modifierar detta?

Permalänk
Medlem
Skrivet av -=*ThE_cRoW*=-:

Håller på att bygga en app och i den ska spelaren kunna posta till en highscore som sparas online. Hur säkerställer man att ingen bara kollar vad appen skickar och modifierar detta?

Du kan försvåra det genom att skicka med en hash på highscore liknande sha1("secretkey".score); Secret key är även krypterad inom appen. Men möjligheten att disassemblera appen och på så sätt komma på hur detta görs finns ju. Men detta stoppar iafl den slöa personen som bara avlyssnar kommunikationen.

Sen kan man låta all spellogik skötas på servern. Men detta beror ju helt och hållet på appen/spelet.
Man kan även skicka med data hur spelaren spelat spelet och återspela det på servern för att se om det är rimligt att poängen är den det är.

Permalänk
Medlem

Du får ju skicka datan krypterad.

Jag vet inte för vilken plattform du programmerar, men finns många bibliotek som kan lösa detta åt dig.

Är det Android & leaderboard, så rekommenderar jag Google Play Services.

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem

Kryptera, salta och kanske ha några "checks" som kollar andra saker i spelet så som AppID och kanske version etc med i sändningen, om alla krav inte uppfylls accepteras inte highscore.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk

Tack för era svar! Förstår då att det inte finns någon nyare magisk lösning tänkte det är bra att kolla ibland så man inte snöar in i gamla hjulspår.

Förstår men förstår samtidigt inte varför det inte kommit någon stor spelare på området som är överskridande plattformsgränserna. Tråkigt att Game Center inte tex också finns för Android och Windows.

Permalänk
Medlem

@-=*ThE_cRoW*=-:
Tror det har att göra med att t.ex. Windows vill ha sin lösning, Apple sin och Google sin och därav ogillar de saker som går cross-platform, på det är det svårt att slå sig in på en marknad och i detta fallet gäller det flera marknader samtidigt som utvecklingsbehovet för alla olika platformar gör att underhåll på tjänsten blir lätt kostsamt.

Bara titta på hur få spel som har cross-platform pga allt tjafs med olika krav från olika platformar samt att företagen inte vill öppna fler vägar in i sina nätverk än de absolut måste, det är svårt nog att hålla "obehöriga" ute.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Avstängd

Ganska så enkelt egentligen. På förhand räknar du ut en nyckel som representerar ett viss poäng i spelet.

Så skickar en spelare in en poängvärde på tex. 400'100 poäng så vet du vilket värde som motsvarar nyckeln redan på förhand

Sedan kan du byggare vidare på detta och införa fler variabler för att göra det ännu säkrare.

Men redan i sin enklaste form kommer det skydda mot flera försöka att spelare försöker fuska sig till poängen.

Permalänk
Medlem
Skrivet av burner1:

Ganska så enkelt egentligen. På förhand räknar du ut en nyckel som representerar ett viss poäng i spelet.

Så skickar en spelare in en poängvärde på tex. 400'100 poäng så vet du vilket värde som motsvarar nyckeln redan på förhand

Japp, detta fungerar, men säg att man har ett spel där extrema spelare kan uppnå 10 miljoner poäng ärligt, vill man då skicka med 10 miljoner array par eller 10 miljoner key/value (poäng/nyckel, sen skicka nyckeln när man fått reda på den) eller hur man nu väljer att implementera "uppslagsverket" inbakat i spelet? Det är ju ganska mycket poäng/nycklar att skicka med varje spel.

Så, istället för att på förhand räkna ut nyckeln så borde man ju kunna implementera ett dynamiskt nyckelsystem så att man i båda ändar kan kolla upp ifall nyckeln ingår i systemet man tillämpat? Bör ju kunna fixa ett system som är närapå omöjligt för smarta bråkstakar att finna ett "pattern" & sen lista ut en godkänd nyckel. Går ju alltid brute-forcea så isåfall får man ju även implementera ett rate-limit system så det blir ohållbart att testa.

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Japp, detta fungerar, men säg att man har ett spel där extrema spelare kan uppnå 10 miljoner poäng ärligt, vill man då skicka med 10 miljoner array par eller 10 miljoner key/value (poäng/nyckel, sen skicka nyckeln när man fått reda på den) eller hur man nu väljer att implementera "uppslagsverket" inbakat i spelet? Det är ju ganska mycket poäng/nycklar att skicka med varje spel.

Så, istället för att på förhand räkna ut nyckeln så borde man ju kunna implementera ett dynamiskt nyckelsystem så att man i båda ändar kan kolla upp ifall nyckeln ingår i systemet man tillämpat? Bör ju kunna fixa ett system som är närapå omöjligt för smarta bråkstakar att finna ett "pattern" & sen lista ut en godkänd nyckel. Går ju alltid brute-forcea så isåfall får man ju även implementera ett rate-limit system så det blir ohållbart att testa.

Nycklarna måste ju fortfarande finnas på klientsidan. Vad förhindrar en klient från att bara skicka det högsta värdet direkt?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Nycklarna måste ju fortfarande finnas på klientsidan. Vad förhindrar en klient från att bara skicka det högsta värdet direkt?

Hur har du tänkt hitta en giltig nyckel som du tänkt fusk-skicka till servern som motsvarar högsta värdet? Tror du någon kan hitta det högsta värdet, isåfall, vilket av följande är högst score i systemet?

mAVWm44sxipL
hHKYtp976mxF
GwQniv1P69pL
iz2FXqfo9lOu
9aBZPEfT4HeJ
nt5W7ifqhFdD
LiWI3IVg2UGG
486AeoizNl46

Högsta scoren i detta fiktiva spel är 5'000'000 så vilken av ovanstående nyckel är 5'000'000 som skickas till servern från klienten? Enda sättet att då hitta högsta scoren är genom brute force men som jag nämnde, implementerar man en rate-limit mot sin server så är det närapå omöjligt att hitta dels en giltig score & ha tur nog att hitta en hög score innan klienten blir bannad från systemet

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Hur har du tänkt hitta en giltig nyckel som du tänkt fusk-skicka till servern som motsvarar högsta värdet? Tror du någon kan hitta det högsta värdet, isåfall, vilket av följande är högst score i systemet?

mAVWm44sxipL
hHKYtp976mxF
GwQniv1P69pL
iz2FXqfo9lOu
9aBZPEfT4HeJ
nt5W7ifqhFdD
LiWI3IVg2UGG
486AeoizNl46

Högsta scoren i detta fiktiva spel är 5'000'000 så vilken av ovanstående nyckel är 5'000'000 som skickas till servern från klienten? Enda sättet att då hitta högsta scoren är genom brute force men som jag nämnde, implementerar man en rate-limit mot sin server så är det närapå omöjligt att hitta dels en giltig score & ha tur nog att hitta en hög score innan klienten blir bannad från systemet

Hur ska klienten veta vad den ska skicka för värde till servern då? Om den inte har nån logik för att slå upp rätt värde ur tabellen så kan den ju inte rapportera poäng, och om den har den logiken så ligger den på client side och då kan man använda den för att skicka valfritt värde.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd
Skrivet av JesperA:

Japp, detta fungerar, men säg att man har ett spel där extrema spelare kan uppnå 10 miljoner poäng ärligt, vill man då skicka med 10 miljoner array par eller 10 miljoner key/value (poäng/nyckel, sen skicka nyckeln när man fått reda på den) eller hur man nu väljer att implementera "uppslagsverket" inbakat i spelet? Det är ju ganska mycket poäng/nycklar att skicka med varje spel.

Så, istället för att på förhand räkna ut nyckeln så borde man ju kunna implementera ett dynamiskt nyckelsystem så att man i båda ändar kan kolla upp ifall nyckeln ingår i systemet man tillämpat? Bör ju kunna fixa ett system som är närapå omöjligt för smarta bråkstakar att finna ett "pattern" & sen lista ut en godkänd nyckel. Går ju alltid brute-forcea så isåfall får man ju även implementera ett rate-limit system så det blir ohållbart att testa.

Min idé var att en viss nyckel representerar en viss poäng.

Vill man göra det mer komplicerat så kan man använda roterande nycklar också och då blir det ännu svårare att ta sig förbi.

Men som sagt, inget är 100% säkert, det finns många exempel där människor tagit sig in på både banker, NASA, FBI och många andra.

Permalänk
Avstängd
Skrivet av Teknocide:

Nycklarna måste ju fortfarande finnas på klientsidan. Vad förhindrar en klient från att bara skicka det högsta värdet direkt?

Nycklarna finns inte på förhand utan de genereras när de skickas.

Lägg sedan till att varje användare har har sina egna unika nycklar, dvs ett digitalt fingeravtryckt som går att generera med 1st rad kod. Enklaste form

String score = Generator.getScore(score,username, day);
remoteConnection.sendScore(score);

Permalänk
Medlem
Skrivet av Teknocide:

Hur ska klienten veta vad den ska skicka för värde till servern då? Om den inte har nån logik för att slå upp rätt värde ur tabellen så kan den ju inte rapportera poäng, och om den har den logiken så ligger den på client side och då kan man använda den för att skicka valfritt värde.

Hur klienten skickar har både andra & jag redan förklarat?

Jadu, för att hitta logiken/koden för client side ur en kompilerad app så får personen vara en jävel på att reversera maskinkod eller hitta något redan befintligt verktyg som ändå bara tar personen halva vägen. Personer som har kunskap & ork för detta, seriöst, det är ganska drygt att fixa, så ja, jag tvivlar starkt på att någon som har energi till detta slösar energin till att slutligen efter en jävla massa jobb posta highscore från en sketen app

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Hur klienten skickar har både andra & jag redan förklarat?

Jadu, för att hitta logiken/koden för client side ur en kompilerad app så får personen vara en jävel på att reversera maskinkod eller hitta något redan befintligt verktyg som ändå bara tar personen halva vägen. Personer som har kunskap & ork för detta, seriöst, det är ganska drygt att fixa, så ja, jag tvivlar starkt på att någon som har energi till detta slösar energin till att slutligen efter en jävla massa jobb posta highscore från en sketen app

Ja exempelvis du skrev att den kunde ha en map på 10-miljoner element från poäng till hash.

Hur ska en klient skapa en sådan map om den bara får en lista av hashar skickad till sig? Det behöver finnas en koppling mellan poäng och hash och när den kopplingen skickas från servern — som rimligen är den enda som kan veta om den — så kan man intercepta den rätt lätt.

Visst, servern kan skicka en krypterad poäng->hash map som dekrypteras av klienten innan den används men i det läget är det ju lika bra att skita i mapen helt och låta klienten kryptera sina poäng med en nyckel som bara servern kan dekryptera.

Du behöver inte bli sur i tonen, jag tycker bara det låter som ett jävla krångel för något som är omöjligt att göra perfekt och enkelt att lösa tillräckligt bra.

Visa signatur

Kom-pa-TI-bilitet