View Single Post
Å bruteforce CVC nummer er nok umuligt, eller CVC nummer er kontroll nummeret som ligger på magnet stripen til mastercard, CVC2 nummeret er skrevet på framsiden av mastercardet. VISA har ett lignende nummer, men kalles CVV (Skrevet på magnetstripen) CVV2 (skrevet på baksiden av VISA kortet).

Jeg leste litt om sikkerheten rundt VISA kort på den tiden jeg gikk første eller andre året på videregående skole, men det begynner å bli noen år siden. Men mener å huske at CVV2 koden blir generet av Bank-ID-nr (de 6 første sifrene i kort-nr), kort-konto-nr (de 9 sifrene etter Bank-ID-nr), utløpsdato og banken sin egen salt-hash (Som er en godt bevart hemmelighet i de forskjellige bankene). Så å få til å generer valid CVV2 nummer er nok ganske vanskelig, og i tillegg så har man utløpsdato på kortet som forholdsvis random, og navn på kort-holder.

Men kort-nr er en litt enklere sak å leke med, dem blir kontrollert opp mot en algorithme som jeg ikkje husker navnet på nå, men som er ganske enkel.

Kan ta den i enkle steg her:
1. Ta kort-nr, start fra venstre å multipliser alle tall som ligger i odde-talls posisjon med 2, hvis det blir mer enn 10, så tar man å adderer de to tallene med hverandre. (Egentlig skal man starte fra høyre å gå mot venstre, men alle VISA kort-nr har 16 tall, så det spiller ingen rolle).
2. De tallene i par-talls posisjon blir stående urørte.
3. Legg sammen alle de nye tallene, hvis den er mulig å dividere med 10 uten rest så er de gyldig kort-nr.

f.eks (Random kortnr):
Kort-nr: 4203 5102 7857 7222
Multiplisere: (4x2)+2+(0x2)+3 + (5x2)+1+(0x2)+2 +(7x2)+8+(5x2)+7 + (7x2)+2+(2x2)+2
=8+2+0+3 +10+1+0+2+14+8+10+7+14+2+4+2
Addere: 8+2+0+3+(1+0)+1+0+2+(1+4)+8+(1+0)+7+(1+4)+2+4+2
=8+2+0+3+1+1+0+2+5+8+1+7+5+2+4+2 = 51

Så dette er ikkje ett gyldig kortnr siden, 51%10=1.

Jeg skrev ett lite program i en av skole timene på videregående, som jeg fant igjen på serveren, dere får la være å mobbe den primitive C kodeningen min på den tiden.

Kode

#include <stdio.h>

int main (int argc, char **argv)
{
        int pos, tmpCN [16], tmp, checksum;

        int cardNumber [16] = { 4, 1, 0, 6, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  };

        while (cardNumber [6] <= 9)
        {
                pos = 15;
                do {
                        tmpCN [pos] = cardNumber [pos];

                        pos--;

                        tmpCN [pos] = cardNumber [pos] * 2;

                        if (tmpCN [pos] >= 10)
                        {
                                tmpCN [pos] = (tmpCN [pos] % 10) + 1;
                        }

                        pos--;

                } while (pos >= 0);

                pos = 0;
                checksum = 0;

                while (pos <= 15)
                {
                        checksum += tmpCN [pos];

                        pos++;
                }

                if (checksum % 10 == 0)
                {
                        pos = 0;

                        while (pos <= 15) 
                        {
                                printf ("%d", cardNumber [pos++]);
                        }

                        printf ("\t");
                        pos = 0;

                        while (pos <= 15)
                        {
                                printf ("%d", tmpCN [pos++]);
                        }

                        printf ("\t%d", checksum);
                        printf ("\n");
                }

                pos = 15;

                cardNumber [15]++;

                while (cardNumber [pos] >= 10)
                {
                        tmp = cardNumber [pos] % 10;
                        cardNumber [pos] = 0;
                        cardNumber [--pos] += (tmp + 1);
                }
        }

        return 0;
}
Denne koden generer kort-nr med prefix til en norsk bank etter den algorithmen jeg ikkje husker navnet på.
OBS: Jeg tar ikkje på meg ansvaret får hva dere bruker denne C koden til