IDTech VP3350

The IDTech VP3350 delivers magnetic stripe reader (MSR), Europay, MasterCard and Visa (EMV), and NFC (contactless) payment acceptance with SRED security and reliability. The VP3350 is a mobile device and supports Smart MSR, Chip, and Contactless transactions. The device is PCI Secure Reading and Exchange of Data (SRED) certified and supports all contactless payment methods. The payload data is Derived Unique Key Per Transaction (DUKPT) encrypted and hex encoded.

Outputs from the device can be parsed using IDTech's parser tool:

https://www.idtechproducts.com/hosted-files/tools/parsomatic.html

Swiped Payloads

When a card is swiped on the VP3350 device, the track data is encrypted in separate data blocks. Below is a sample output from the machine.

In this sample payload, the tag that contains the track data is dfee23.

Sample Payload:

5669564f74656368320002000179e8dfee25020011dfee23820138023201801f4f2800a39b252a343736312a2a2a2a2a2a2a2a303034335e554154205553412f5445535420434152442030322020202020205e323431322a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a3f2a3b343736312a2a2a2a2a2a2a2a303034333d323431322a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a3f2a38047053c538669d53a00c538d71234ef4869898eaea0d0f92ec5ba3825ec225c29dee9b7f878b0e7afb16955678bfdd8c9f628311d2158b40bb553dca6d9a197dc7954b10d9c977636d49d692aed1802f33f5033ce7f7ddee87fe9b6554eade63862f1aa4f6c44f04aa91c5876875083e791b510c6d1b890000000000000000000000000000000000000000000000000000000000000000000000000000000033313054303631303430ffffff0200110940000fae68039f390190ffee0105dfee30010cdfee2602e8009f02060000000000009f0306000000000000df5b01059a032311169f2103202609c6b8

The result after decoding the track data will be

023201801F4f2800A39B%*4761********0043^UAT USA/TEST CARD 02^2412***************************?*;4761********0043=2412****************?*38047053c538669d53a00c538d71234ef4869898eaea0d0f92ec5ba3825ec225c29dee9b7f878b0e7afb16955678bfdd8c9f628311d2158b40bb553dca6d9a197dc7954b10d9c977636d49d692aed1802f33f5033ce7f7ddee87fe9b6554eade63862f1aa4f6c44f04aa91c5876875083e791b510c6d1b890000000000000000000000000000000000000000000000000000000000000000000000000000000033313054303631303430ffffff0200110940000fAE6803

This data is parsed as follows

CharsValueDescription
1-202Start of transmission (STX)
3-63201Total Data Length (low, high byte) of card data. It is 0x132 or 306 characters in decimal.
7-880Card Encoding type (ISO/ABA, new format)
9-101FTrack status (Track 1 and Track 2 are good)
11-124FUnencrypted Track 1 length (79 bytes)
13-1428Unencrypted Track 2 length (40 bytes)
15-1600Unencrypted Track 3 length (not present)
17-18a3Clear/masked data sent status. Binary 1010 0011 is interpreted as follow:
Bits 0,1,2 = Track 1 and 2 are sent, Track 3 is not;
Bit 3: 1 = fixed key, 0 = DUKPT key;
Bits 4,5: 00=TDES encryption; 01=AES
Bit 6: 0= Data key; 1=PinKey
Bit 7: 1=Device Serial Number is included; 0= is not
19-209BEncrypted data sent status. Binary 1001 1011 is interpreted as follow:
Bits 0,1,2 = Track 1 and 2 are sent, Track 3 is not;
Bits 3,4,5 = Track 1 and 2 dummy hashes are sent, Track 3 is not;
Bit 6: 0 = session ID is not included.
Bit 7: 1=Key Sequence Number (KSN) is included
21-100%*4761...****?*Masked Track 1 data.
101-139;4761*...****?*Masked Track 2 data.
140-299380470...aed180Track 1 encrypted data. Total length is 80 bytes: real length 76 is rounded up to 8 bytes = 80 bytes. Decrypted Data in ASCII (4 zero bytes at the end); %B4761731000000043^UAT USA/TEST CARD 02 ^2412201114380440x00 …0x00
300-3792f33f5...6d1b89Track 2 encrypted data.Total length is 40 bytes: real length 36 is rounded up to 8 bytes = 40 bytes.Decrypted Data in ASCII ;4761731000000043=24122011303130600000?
380-419000000...000000Track 1 dummy hash data (20 zero bytes)
420-459000000...000000Track 2 dummy hash data (20 zero bytes)
460-479333130...130343010 bytes of device serial number. In ASCII: 310T061040
480-499ffffff ...40000f10 bytes of Key Sequence Number (KSN)
500-501AECheckLRC - one byte Exclusive-OR sum calculated for all data bytes
502-50368CheckSum - one byte Sum calculated for all data bytes
504-50503End of transmission (ETX)

The encrypted track data, KSN, and serial number are sent to Decryptx to be decrypted. This example payload is decoded to the following

[{"name":"value0","value":"%B4761731000000043^UAT USA/TEST CARD 02 ^2412201114380440000000000000000?O\u0000"}]

EMV Data

Transaction data from chip-card interactions (EMV data) is returned primarily as tag-length-value (TLV) triplets.

ID Tech transaction data consists of mix industry-standard EMV tags and proprietary ID Tech tags. Tag value is encoded as follows:

  • Byte 1: First (and possibly the only) value of the tag. If the bottom 5 bits are ON, then next byte is also part of the tag. In other words:
    (1stByte & 0x1F == 0x1F) // TRUE means more tag bytes follow
  • Byte 2..n (if necessary): If the most significant bit is ON, then next byte is also part of the tag. In other words:
    (Byte & 0x80 == 0x80) // TRUE means more tag bytes follow

The top bits of the tag length byte have special meaning:

  • If the most significant bit of the length byte is OFF, then byte represent the byte length of data to follow. Otherwise, if the bit is ON, then the lower nibble specifies how many following bytes specifies the length of the data to follow. For example, if the length byte is 84, the most significant bit is 1, the lower nibble is 4. Thus, the number of data length bytes is 4.
  • If bit 7 is set, bits 5 and 6 of the tag length byte are used in a special way:
    • Bit 6 will be set, if data is encrypted.
    • Bit 5 will be set, if data is masked (i.e. track data)

The following table lists IDTech proprietary tags for encrypted and/or masked data:

Tag Data
5A Masked or encrypted packed PAN
56 Masked or encrypted packed Track 1 data
57 Masked or encrypted packed Track 2 data
5F20 Hex string of cardholder name
5F24 Packed card expiration Date (YYMMDD)
5F30 Card service code
9F1F Hex string of encrypted Track 1 discretionary data
9F20 Hex string of encrypted Track 2 discretionary data
9F6B Packed encrypted Track 2 data
FFEE13 Packed encrypted Track 1 data
FFEE14 Packed encrypted Track 2 data
DFEE12 10 bytes hex string of Key Sequence Number (KSN)
DFEE26 Encryption Status Info

IDTech's parser tool also has a section to look up and confirm tag information.

Example

The EMV payloads from this device do not provide the full serial number as required to decrypt them. The device serial can be obtained by running the command 12-01 prior to capturing the payload.

5669564f74656368320060000060e0dfee2602e000dfee120affffff02001109400010dfee2502000257a1134761cccccccc0043d2412ccccccccccccccccc57c1183217f758ebfbf3b1e6132ddee1ec02c7226d31c9a769f0669f1e083054303631303430ffee0105dfee3001010bc1
TagLengthValue
dfee120affffff02001109400010
57c1183217f758ebfbf3b1e6132ddee1ec02c7226d31c9a769f066

Once the sample payload is decrypted through Decryptx, the response is

{"success":true,"messageId":"1202311221504111013149689","decrypted":[{"name":"value0","value":"57134761731000000043d24122011303130600000f000000"}]}

Contactless Data

Example

5669564f74656368320002230284e1dfee2602e100dfee120affffff02001109400011dfef4c06000000000000dfef4d009f410400000004df8116161e04000000656e000000000000000000000000000000df81290830f0f000b0f0ff00ff810647df8115060000000000ff9f5d030100009f42020840df810b0100df810e0100df810f01009f6e200840000030300000000000000000000000000000000000000000000000000000ff81058201994f07a0000000041010500a4d41535445524341524457a1135413cccccccc4111d2512ccccccccccccccccc57c11827625316fb77f5b0793a7a9336f586f8b151fbd72d0e0c065aa1085413cccccccc41115ac11026d036de3bb4fb3c8378a5203a18a6c05f24032512315f25032103015f280208405f2d02656e5f340101820219808407a00000000410108e0c00000000000000005e031f038f01ef950504000000019a032311179b0200009c01009f01009f02060000000001009f03060000000000009f0607a00000000410109f0702ff009f090200029f0d05b4508080009f0e0500000000009f0f05b4708080009f10120111a00009220000000000000000000000ff9f1101019f120a4d6173746572636172649f150211119f16009f1a0208409f1c009f1d086cff0000000000009f1e0830543036313034309f21032140109f2608d08fe3fdbc22afed9f2701809f2a01029f33030008089f34031f03029f3501229f360200299f37040e8389fb9f3901079f400500000000009f4104000000049f4e009f5301009f6d020001dfee76050400000001df8116161b00000000656e000000000000000000000000000000ffee0105dfee300100dfee4c0103dfec1c1e08030003ff001e04000000ff0000000000000000656e000000000000ff006885
TagLengthValue
dfee120affffff02001109400011
57c11827625316fb77f5b0793a7a9336f586f8b151fbd72d0e0c06

When the sample payload is decrypted through Decryptx, the response is

{"success":true,"messageId":"1202311221527361031935599","decrypted":[{"name":"value0","value":"57135413330089604111d25122010123409172029f000000"}]}