sreda, 29. maj 2013

Najdena bančna kartica


Intro


Ste se kdaj vprašali, koliko časa bi rabil, da poberem ves denar iz bančne kartice, katero sem našel na cesti, jo ukradel babici (kaj ji bo penzija, če ima vnučke), ali pa jo pridobil na legalen način? Vsaka bančna kartica ima PIN številko, katera ima dolžino štirih cifer (vsaj na vseh bankomatih v Sloveniji, kljub temu, da so lahko ostale PIN številke dolge tudi do 12 cifer. Okej, imamo kartico, PIN številke pa nikakor ne. Poglejmo koliko je vseh kombinacij, da lahko zadevo brute forcamo.




XXXX


"X" predstavlja eno cifro, in na vsakem mestu lahko zapišemo po deset cifer, od 0 pa do 9. Vseh mest skupaj je štiri, torej končni rezultat je:

št. vseh kombinacij = 10 * 10 * 10 * 10 = 10^4 = 10.000 

Kaj sedaj?


Ziher se je komu posrečilo, da je pozabil PIN in po tretjem vnosu le-tega izgubil svojo predrago bančno kartico. Torej, število maksimalnih poskusov na dan je 2 in ne 3 (tatretji ti že požre zadevo). No izračunajmo, koliko dni nam bi takšen brute force vzel, da se uspešno logiramo:

št. dni  = št. vseh kombinacij / št. kombinacij na dan = 10^4 / 2 = 5.000 dni  = 13.68 LET

Thats too much, za par tistih evrov ali tisoč. Vendar to ni zadnja številka, ki jo vidimo, lahko jo tudi omejimo na naslednji način. Recimo, da uporabnik bančne kartice ni nek retard, in za PIN številko nima kombinacij kot so: 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 0000. Število vseh kombinacij v takem primeru:

št. vseh kombinacij = 10^4  - 10 = 9.990

Nadaljujemo z omejitvijo. Recimo, da so naslednje kombinacije tut izven zone retardiranega človeka: 0123, 3210, 1234, 4321, ... , 7890, 0987. Vseh teh kombinacij je (upam, da sem prav izračunal) 2*8 = 16.

št. vseh kombinacij = 10^4 - 10 - 16 = 9.974

Številka se manjša, ampak mislim, da je to zadnja cifra v pragu neretardiranosti uporabnika. Če zopet izračunamo koliko let bi nam vzel brute force (maksimalno št. let, lahko se zgodi, da v prvo uganemo pravi PIN, v nadaljevanju).

št. dni = št. vseh kombinacij / št. kombinacij na dan = 9.974 / 2 = 4967 dni = 13.59 LET

Naj ne obupajmo. Recimo, da smo šli z babico enkrat na bankomat, in se spomnemo, kakšno cifro je pritisnila na prvem mestu, poglejmo kaj se zgodi v takem primeru:

št. vseh kombinacij = 10^3 - 10 - 16 = 974!!!
št. dni = št. vseh kombinacij / št. kombinacij na dan = 487 dni = 1.33 LET

Impresivno kajnedar? Kaj pa če poznaš 2 cifri? Imejmo v mislih, da tiste retardirane kombinacije izključimo iz igre.

št. dni = (10^2 - 10 - 16)/ 2 = 37 dni = 1 mesec in 7(6) dni.

Še tabela uspešnosti:
NAČIN ODSTOTEK
4 neznane cifre +0.01%/dan
3 neznane cifre +0.1%/dan
2 neznane cifre +1%/dan

(Pri računanju so bile upoštevane tiste "znane" kombinacije, katere sem izključil iz računov)

Zaključek


Ne splača se vam bruteforcat kartic, ker jo uporabnik lahko prekine še isti dan. Torej imaš 0.020052135% možnosti, da uganeš kodo in žrtvi pobereš denar >:C, se splača ali ne? Mejbi bejbi, mejbi bejbi... Kako bi naredili generator štiri-mestnih števil?

Tako, da ne jočite, če vam ukradejo denarnico, misliš da se bo nekdo jebu 13 let in pol za tisto minimalno plačo, ki jo prejemaš? NO.



Programming and shit:
Naredimo tabelo prepovedanih kombinacij, uporabimo Math.random() funkcijo, ki jo ima vsak programskih jezik, razširimo njegove meje od 0000 do 9999, pretvorimo v Integer (celo število) in to je to. Naredimo funkcijo, ki vrača to random število, psevdo koda:

sobota, 25. maj 2013

Prvih 70,000 praštevil

Sicer gre za simpelj algoritem, ampak tu se je predvsem šlo za hitrost le-tega. Do potankosti sem hotel pridobiti na hitrosti iskanja praštevil (gre se za metodo iskanja deliteljev, počasna zadeva, lahko bi vključil iskanje podobnih števil, kar bi pospešilo iskanje večjih praštevil). Generiral sem 70,000 praštevil v 510 sekundah. Hitrost se zmanjša za vsako praštevilo, in v povprečje generiranja je bilo 137 praštevil/s, kar je za  i3 procesor kar kul zadeva (imejmo v mislih, da sem hkrati zapisoval število na trdi disk, kar zmanjša hitrost za okoli 70%, thats bad). Spodaj imate link do seznama teh števil.

70 000 praštevil.txt (1004 KB)
DOWNLOAD



Če želite generirati svoja praštevila, s svojim močnim procesorjem in SSD diskom hehe, si pa pač naložite programček z vključenim algoritmom in pošljite zadevo preko vseh meja (meja v bistvu je, to je 2^64, you do the counting).

generiraj prastevila.exe (27 KB)
DOWNLOAD



PS: Zdej, ko sem še enkrat prebral tale post, sem si rekel: "Domen, idiot si, kje imaš slovnico, debilnež ti!"