CVV – Card Verification Value (в терминологии Visa), оно же CSC – Card Verification Code (в терминологии MasterCard) состоит из трех цифр и хранится на магнитной полосе карты.
Для вычисления CVV/CSC требуются следующие данные:
Expiration Date и Service Code последовательно соединяются друг с другом, дополняются нулями до длины в 16 символов. Получается Block2:
0916 101 000000000
Для операций шифрования используется ключ двойной длины:
CVVKey: 4C37C8319D76ADAB 58D9431543C2165B
CVVKeyL: 4C37C8319D76ADAB
CVVKeyR: 58D9431543C2165B
Алгоритм вычисления CSC/CVV таков:
des(CVVKeyL, PAN) = des(4C37C8319D76ADAB, 4433678298261175) = C19F07316463054E
xor(0916101000000000, C19F07316463054E) = C88917216463054E
3des(4C37C8319D76ADAB 58D9431543C2165B, C88917216463054E) = B4C78A032A4F6551
CVV2 (в случае Visa) и CSC2 (в случае MasterCard) – это три цифры, которые наносятся на обратную сторону карты. CSC2/CVV2 предназначен для выполнения операций “Card Not Present” – например, покупок в интернете. Вводя значение CVV2, вы тем самым подтверждаете, что карта физически находится у вас в руках. Алгоритм вычисления CSC2 идентичен алгоритму вычисления CSC/CVV, за исключением того, что сервис-код имеет значение 000:
Для операций шифрования также используется ключ двойной длины (в моём примере ключи CVVKey и CVV2Key совпадают, в реальном мире они конечно же различны):
CVV2Key: 4C37C8319D76ADAB 58D9431543C2165B
CVV2KeyL: 4C37C8319D76ADAB
CVV2KeyR: 58D9431543C2165B
Здесь всё то же самое:
des(CVV2KeyL, PAN) = des(4C37C8319D76ADAB, 4433678298261175) = C19F07316463054E
xor(0916000000000000, C19F07316463054E) = C88907316463054E
3des(4C37C8319D76ADAB 58D9431543C2165B, C88907316463054E) = D00AA1E607A144BE