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.
š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:




