← home

Алгоритм вычисления CVV/CVV2

Jan 13, 2015

CSC/CVV

CVV – Card Verification Value (в терминологии Visa), оно же CSC – Card Verification Code (в терминологии MasterCard) состоит из трех цифр и хранится на магнитной полосе карты.

Для вычисления CVV/CSC требуются следующие данные: PAN: 4433 6782 9826 1175 Expiration Date: 0916 (здесь – в формате MMYY, хотя может быть и наоборот) Service Code: 101 (в случае CSC/CVV это всегда 101, подробнее про возможные значения написано вот тут)

Expiration Date и Service Code последовательно соединяются друг с другом, дополняются нулями до длины в 16 символов. Получается Block2:

0916 101 000000000

Для операций шифрования используется ключ двойной длины:

CVVKey: 4C37C8319D76ADAB 58D9431543C2165B
CVVKeyL: 4C37C8319D76ADAB
CVVKeyR: 58D9431543C2165B

Алгоритм вычисления CSC/CVV таков:

  1. PAN шифруется алгоритмом DES (именно DES, а не Triple DES) с помощью ключа CVVKeyL: des(CVVKeyL, PAN) = des(4C37C8319D76ADAB, 4433678298261175) = C19F07316463054E

  2. Результат этой операции XOR-ится с Block2: xor(0916101000000000, C19F07316463054E) = C88917216463054E

  3. Результат операции 2 шифруется алгоритмом 3DES с помощью ключа CVVKey: 3des(4C37C8319D76ADAB 58D9431543C2165B, C88917216463054E) = B4C78A032A4F6551

  4. Из результата операции 3 слева направо последовательно выбираются три цифры, которые и формируют значение CVV данной карты. В нашем случае это 478.

CVV2/CSC2

CVV2 (в случае Visa) и CSC2 (в случае MasterCard) – это три цифры, которые наносятся на обратную сторону карты. CSC2/CVV2 предназначен для выполнения операций “Card Not Present” – например, покупок в интернете. Вводя значение CVV2, вы тем самым подтверждаете, что карта физически находится у вас в руках.

Алгоритм вычисления CSC2 идентичен алгоритму вычисления CSC/CVV, за исключением того, что сервис-код имеет значение 000:

PAN: 4433 6782 9826 1175 Expiration Date: 0916 Service Code: 000 Block2: 0916 000 000000000

Для операций шифрования также используется ключ двойной длины (в моём примере ключи CVVKey и CVV2Key совпадают, в реальном мире они конечно же различны):

CVV2Key: 4C37C8319D76ADAB 58D9431543C2165B
CVV2KeyL: 4C37C8319D76ADAB
CVV2KeyR: 58D9431543C2165B

Здесь всё то же самое:

  1. PAN шифруется алгоритмом DES с помощью ключа CVV2KeyL: des(CVV2KeyL, PAN) = des(4C37C8319D76ADAB, 4433678298261175) = C19F07316463054E

  2. Результат этой операции XOR-ится с Block2: xor(0916000000000000, C19F07316463054E) = C88907316463054E

  3. Результат операции 2 шифруется алгоритмом 3DES с помощью ключа CVV2Key: 3des(4C37C8319D76ADAB 58D9431543C2165B, C88907316463054E) = D00AA1E607A144BE

  4. Из результата операции 3 слева направо последовательно выбираются три цифры, которые и формируют значение CVV2 данной карты – 001 в нашем примере.