Wpis z mikrobloga

#csgo #csgotrade #csgogambling

każdy każdego oszukuje ;) dzisiaj dowiedziałem się o pewnym sprytnym programiście któremu udało oszukać się pewną stronę gamblingową w bardzo sprytny sposób ;D

otóż strona losuje numer od 0 do 1000, który określa czy gracz w danej rundzie wygra, czy nie. Z tego budowany jest hash (do provably fair w którym też jest luka) w taki sposób: sha256(numer:0xsalt)
Salt oczywiście to liczba heksadecymalna, czyli składa się z znaków od 0 do f (16), ale zawsze ma 8 znaków (uzupełniane zerami)

Wygenerował sobie 30 terabajtów kombinacji, co stanowi podobno 0.4% wszystkich możliwych
w taki sposób
sha256(1:00000000)
sha256(1:00000001)
...
sha256(1:FFFFFFFF)
...
sha256(1000:FFFFFFFF)

oczywiście musiał zastosować jakieś optymalizacje ale to juz nie wiem, bo to w takiej formie by nie działało. Może grupowanie hashy (np można zauważyć ze pierwsze 3 znaki otrzymanego hasha są powtarzają się wiec można z nich stworzyc grupe i z hasha o długości 64 znaków otrzymujemy hash o długości 61. Wydaje się śmieszne, ale przy takiej ilości danych te 3 znaki robią różnice.

Później wystarczyło przez cały dzień obserwować pojawiające się hashe i jeśli jakiś jest w bazie danych, atakujący wiedział czy runda będzie wygrana dla niego, czy przegrana i obstawiał tylko te wygrane.

Mając 0.4% dało się obstawić 2 razy dziennie, mając 100% na wygraną $.$.

Kolejny problem, który mógł się pojawić (ja niestety nie wiem bo nie znam się na bigdata, jak ktoś kto się zna to przeczyta to proszę o komentarz) to czas przeszukania takiej ilości danych. Wiadomo są indeksy, ale czy to się sprawdzi przy takiej ilości danych? i czy uda znaleźć się dany hash w przeciągu 30 sekund (załóżmy ze tyle trwa runda)

pisane z palca to sorry za błedy
  • 4