Pomysły na zaprojektowanie bezpiecznych, „low cost” metodę potwierdzania wyników po stronie klienta gry

głosy
3

Jest to bardziej projekt systemu pytanie / wyzwanie, niż pytanie kodującej.

Zasadniczo, mam na myśli rzucanie razem Bejeweled -esque grę na Facebook używając tylko HTML, CSS i JavaScript. Jest to przede wszystkim z chęci do nauki wszystkie małe zastrzeżenia, o FBJS poprzez niebanalną projektu.

Więc tutaj jest wiele. Przy opracowywaniu na Facebooku, rzeczywiste wywołania API są bardzo drogie; Nie tylko tam jest dodatkowe stanowisko do serwerów Facebooka, istnieje również granica wywołanie API i dławienie się martwić. W skrócie, im mniej połączeń na Facebook lepsze. W połączeniu z harmonogramem obaw nawet ten prosty gra logiczna, i jest dobry powód, aby agresywnie zminimalizować liczbę wywołań zwrotnych w ogóle.

Nie będąc ekspertem w dziedzinie bezpieczeństwa, oto projekt mam wymyślić:

  1. Osadzić losowych na stronie gry.
  2. Użyj że materiał siewny stworzyć planszę (jak również dodatkowe elementy, jak jest to konieczne).
  3. Wykręcanie nasienie (XOR CONCATENATE i hash, coś takiego) po każdym ruchu gracza, w oparciu o czas od ostatniego ruchu. Edit: mam prawdopodobnie także rzeczywisty ruch podjętą mutacji nasienie.
  4. Po zakończeniu gry zakładać z powrotem następujące: czas rozpoczęcia gry, każdy ruch podjąć i kiedy, a wyniki po stronie klienta.
  5. Na serwerze, ponownie uruchomić grę z podanych danych, poczytalność sprawdzanie czas rozpoczęcia i przenieść razy, a następnie potwierdzić, że wyniki spotkania.
  6. Aby złagodzić odmowę usługi, sama gra będzie manipulowane mieć różnicą stanu kolej X.
  7. Aby zniechęcić serwer używany jako „oracle” sortuje użytkownik delegowania powrotem nieprawidłową grę będą zakazane od jakiegoś czasu stały X (X jest rzędu minut).

Taka konstrukcja wymaga trzech Facebook wezwanie za grą: jeden do przechowywania losowych zanim się gra, jeden sprowadzić go po zakończeniu gry, a jeden zaktualizować wynik gracza, jeśli gra jest ważna.

Co Próbuję dowód system przeciw jest prosto Wyników spoofing ( http: // ... myscore = 999999999 lub podobnym). Chciałbym również, aby złagodzić „patrzeć w przyszłość” ataków, w którym użytkownik może powiedzieć, jakie kawałki idą do tablicy obok. Ataków typu DoS na serwerze hostingowym (zamierzone lub w inny sposób), należy również zapobiegać.

Rzeczywiste pytanie, może ktoś zobaczyć lukę w tym projekcie? Równoważnie, czy istnieje prostszy projekt, który spełnia moje kryteria?

Uwaga: Zdaję sobie sprawę, jak to prawdopodobnie jest zbędny, ale jego pytanie nie mniej interesujący.


Zamierzam spróbować i rzucić kilka liczb tu do dodatkowych wojsk zilustrować moje rozumowanie, są dość szorstki, ale mam nadzieję, że pomocne.

Zakładając planszy 10x10 gry, istnieje potencjalne ruchy ~ 200 (zamiana dwóch sąsiednich elementów), z których większość jest nieprawidłowy. Można powiedzieć, że są średnio 5 prawidłowych ruchów na „włącz”. Jeśli mamy ograniczyć działania gracza do ramy 50 do 30000 milisekund, istnieje 149,750 potencjalnych nowych mieszań dostarczyły Tweaking „algorytm” nie odrzucić bitów; Czuję się pewny, że istnieją co najmniej 10.000 potencjalnych nowych mieszań, które muszą być obliczone przez atakującego przyjmując skrótu kryptograficznego jest używany. Jeśli rzucisz algorytm min-max na tym, drzewo decyzyjne eksploduje bardzo szybko. Rzut wygasania sesji gry na to, powiedzmy 30 minut, i wierzę, że ten atak, ponieważ równoważną złożoności pisaniu mały program bot do odegrania dla was, które nie mogą być bronione przed rozsądnie.

Utwórz 26/05/2009 o 22:04
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
3

Jeśli kod klient oblicza następny kawałek i nie można ukryć tego algorytmu bardzo dobrze, a potem jakiś znudzony student będzie wymyślimy. W rezultacie, będą w stanie wygenerować ogromną wynik i pokonać swoich zamiarów.

Odpowiedział 26/05/2009 o 22:14
źródło użytkownik

głosy
0

Staram się powiedzieć, że jest to niemożliwe do zrobienia. Czemu? Nie można ufać klienta - może po prostu analizować i całkowicie przepisać kod po stronie klienta i powrót cokolwiek wartości lubię. Jedynym sposobem, aby uchronić się przed oszustwem i wszelkiego rodzaju ataków jest wykonywanie logiki na serwer - klient po prostu zbierać dane wprowadzone przez użytkownika i wyświetla dane wyjściowe serwera. Ale to jest zupełnie wbrew twojej cel projektu, aby zminimalizować liczbę połączeń serwerowych.

Odpowiedział 26/05/2009 o 22:20
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more