Interoperabilidad de pinpads: Fiserv vs Prisma
Resumen
Cruzar pinpads entre Fiserv y Prisma es posible a nivel llaves, porque ambos hosts usan MasterSession en UltraHost, pero ninguna combinación funciona hoy sin cambios. El principal bloqueante para usar un pinpad Prisma con Fiserv es el largo de la working key.
| Pinpad | Procesador Fiserv | Procesador Prisma |
|---|---|---|
| Fiserv (protocolo F0101) | Funciona hoy (MODELO=FISERV) | Factible del lado UltraHost (MK de Prisma inyectada + cambios); falta confirmar que Prisma acepte MasterSession en terminales nuevas |
| Prisma Lane3000 | Solo si Fiserv emite WK simple; tiene slot 0 "FISERV SDES" | Funciona hoy (MODELO=PRISMA) |
| Prisma Android N910 / N6 | No: solo DUKPT | Solo DUKPT, sin código en UltraHost |
- Fiserv entrega WK doble (32 hex) por 0800; Prisma entrega WK simple (16 hex) en el campo 52 de cada respuesta.
- En UltraHost el modelo de pinpad es un switch global (
[PINPAD] MODELO), así que una instancia no puede mezclar familias de pinpad. - La equivalencia entre el NSL de Prisma y el IDE de Fiserv (ambos 16 dígitos, campo 59 producto
000) está sin confirmar.
Modelos de gestión de llaves
Fiserv opera con MasterSession (llave maestra + working keys); el host actual de Prisma documenta el PIN solo con DUKPT. Cada familia de pinpads soporta una parte distinta.
| Familia de pinpad | MasterSession (MK/WK) | DUKPT 3DES | Encripción de datos (tracks) | Sincronización de WK en el pinpad |
|---|---|---|---|---|
| Protocolo Fiserv F0101 (SP_PP-Caja V02/V04) | Sí, MK por posición de host 0..9 | No documentado | DES / 3DES con WK de datos, o RSA | Comandos S00 / S01 / S02 |
| Prisma Lane3000 (Ingenico) | Sí, "toda la familia de pinpads de Prisma soporta MasterSession" | Sí, solo PIN (según firmware) | Deprecada (campo ENC); RSA para PAN/track/CVV | No tiene |
| Prisma Android N910 Plus / N6 | No (WRK se omite) | Sí, solo PIN | Solo RSA | No tiene |
- MasterSession: el pinpad guarda una llave maestra (MK) en un slot; el host envía una working key (WK) cifrada bajo esa MK y el pinpad la usa para armar el PIN block. Fiserv usa dos WK por host: una de PIN y una de datos.
- DUKPT: el pinpad deriva una llave nueva por transacción a partir de una llave base; devuelve el PIN block más un KSN (20 hex) con el que el host deriva la misma llave. No viaja ninguna WK.
- Ciclo de vida de la WK en Fiserv (Anexo B): las WK iniciales de PIN y datos llegan por un 0800 en la sincronización; la WK de PIN se renueva en cada respuesta de transacción con PIN; la WK de datos se renueva en cada cierre de lote. Una WK desincronizada recibe "Error en encripción" del host.
Slots de llaves y campos de los comandos
El manual del Lane3000 reserva el slot 0 para una llave maestra Fiserv de DES simple, pero su campo de WK solo admite llaves de longitud simple.
Slots por defecto del Lane3000 (manual v2.2, sección 2.5; pueden venir vacíos, confirmar con el ejecutivo de cuenta):
| Slot (PMK) | Llave |
|---|---|
| 0 | FISERV SDES |
| 1 | Prisma SDES |
| 2 | Prisma 3DES |
Los Android usan PMK G (N910 Plus, slot 16) y 2 (N6) para DUKPT.
Campos de Y02 / Y19 comparados:
| Campo | Fiserv F0101 V04 | Prisma Lane3000 v2.2 | Prisma Android v2.2 |
|---|---|---|---|
| PMK (posición de MK) | 0..9 o N | 0..9 o N | 0..F, G o N |
| LWK (longitud de WK) | 1 simple, 2 doble, 3 triple | No existe | No existe |
| Working key de PIN | WKP, 1..48 caracteres | WRK, 1..16 caracteres (DES simple) | WRK se omite (solo DUKPT) |
| Working key de datos | WKD, 1..48 caracteres | No existe | No existe |
| ENC | 0 nada, 1 DES, 2 3DES, 3 RSA datos + DES PIN | 0/1, deprecado; ENC con slot DUKPT da error | RSA con llave pública en Y19 |
| Identificador de llave devuelto | IDE, 16N, obtenido en S01 | NSL 16 dígitos (MasterSession) o KSN 20 hex (DUKPT) | TKSN 20 hex |
| Tipo de encripción devuelto | TDE: D, T o R | Se detecta por largo de NSL/KSN | DUKPT |
| Comandos de sincronización | S00, S01 (hosts + PMK + IDE), S02 (carga de WK) | No tiene | No tiene |
- El ejemplo de S01 de Fiserv lista dos hosts,
POSNETyVISA: el protocolo se diseñó para que un pinpad guarde MK de varios procesadores. - La WK del ejemplo de S02 de Fiserv tiene 32 hex (doble longitud); no entra en el campo
WRKdel Lane3000. - El NSL (Lane3000) y el IDE (Fiserv) tienen 16 dígitos y ambos identifican el juego de llaves ante el host; no está confirmado que sean equivalentes.
Lado host: ISO8583
Ambos hosts llevan el PIN block en el campo 52; la diferencia está en cómo identifican la llave: Fiserv con el IDE y WK descargadas por 0800, Prisma con el KSN de DUKPT en el campo 59.
| Dato | Fiserv (según SP_PP-Caja F0101) | Prisma (Manual Integración CD v1.2.5) |
|---|---|---|
| PIN block | Campo 52 | Campo 52, b64, "tal cual lo devuelve el PIN PAD" |
| Identificador de llave | IDE (16N) en campo 59, producto 000 | KSN (20 hex) en campo 59, producto 084, subcampo 209 |
| Capacidad de encripción | No documentada en estos manuales | Campo 59, producto 028, subcampo 078, valor asignado por Prisma (nota de reunión: "mandar un 6") |
| Datos de tarjeta cifrados | Campo 47: tipo de encripción (TDE) + paquete cifrado (EPT) | Tracks en plano o según modo; no hay WK de datos documentada |
| Serie del pinpad | Campo 59, producto 039 (NSF) | No documentado para PIN |
| Descarga de WK | 0800 por host en la sincronización; nueva WK de PIN en la respuesta de transacciones con PIN | No documentada |
| Error de llaves | "Error en encripción": cerrar lote y resincronizar | Código de respuesta 98 "Desincronización de Working Key": reintentar |
- El manual de Prisma solo describe el PIN con DUKPT, pero el código 98 y los slots "Prisma SDES/3DES" del Lane3000 indican que Prisma también tiene un camino MasterSession; el código de UltraHost lo confirma (WK simple en el campo 52 de la respuesta).
- Los manuales de Fiserv son del protocolo caja-pinpad; la especificación ISO del host Fiserv (campo exacto donde viaja la WK) no está en estas carpetas.
Qué implementa ULTRAHOST
UltraHost opera MasterSession con ambos procesadores: Fiserv con WK doble (32 hex) por 0800, Prisma con WK simple (16 hex) que llega en el campo 52 de cada respuesta. DUKPT solo pasa el KSN, sin derivar llaves.
| Aspecto | Procesador Fiserv | Procesador Prisma |
|---|---|---|
| Protocolo de pinpad | Fiserv F0101: Y00, Y01, Y41, Y02, Y03, Y04, Y06, Y07, S00, S01, S02 (V02/V04 por terminal) | Prisma: Y01, Y02, Y03, Y06, Y07, Y08, Y09, Y15, Y19 |
| Selección del protocolo | Global: [PINPAD] MODELO=FISERV | Global: [PINPAD] MODELO=PRISMA |
| PMK que se envía | 0 fijo | 1 por defecto, 2 si el emisor tiene iUsaWorkingKeyNro=2 |
| Obtención de WK | 0800 con pcode 920000; IDE en campo 62; WK de PIN y de datos en campo 60 de la 0810 | No hay 0800; la WK nueva viene en el campo 52 de la respuesta |
| Largo de WK | Doble (16 bytes) forzado en Y02 y S02; el decodificador acepta 1/2/3 | Simple (8 bytes) desde el campo 52; Y02 acepta hasta 32 hex |
| WK de datos | Sí (cWorkingData); obligatoria con ENCRIPTA=2 | No |
| Encripción de datos | ENC 2 (3DES) o 0; RSA no implementado | ENC 1/0; tracks y CVV con RSA (Y19, rsakeyprivate.pem) |
| Campo 47 TDE | Se fuerza 2 | Se fuerza 1 |
| Campo 59 identificador | IDE: 0000001016000 + 16 | NSL: 0000001019000 + 16 (relleno con F), o KSN: 0840001023209 + 20 |
| Campo 59 capacidad 3DES | 02800010010782 | 02800010040786 (comentario: "antes len era 001 y ahora 004") |
| Campo 59 producto 002 | 00200010010091 | 00200010040091 |
| Código 98 | Sin manejo específico | Sin manejo específico ni resincronización automática |
- El modelo de pinpad es global, no por procesador ni por terminal: una instancia de UltraHost habla con una sola familia de pinpads (
main.cpp:970,wsserver_json.cpp:3625).UltraHost.iniyUltraHost.QA.initienenMODELO=FISERV. - Rastro de uso cruzado: en
wsserver_json.cpp:1178-1181hay un comentario de 2022, "con adquirencia Prisma vamos por el masterkey fijo de Visa", y una línea comentada que elegía MK1para tarjetas Visa y0("master-key fiser") para el resto. Indica que un pinpad Prisma se usó con las dos MK cargadas. - La renovación por campo 52 está en
iso.cpp:818-822y1061-1086: largo de 8 bytes multiplicado por 2 solo si el procesador es Fiserv. - Las llaves se guardan en plano en columnas de
mTerminal(cWorkingKeyNew,cWorkingKeyNew2,cWorkingData) y aparecen en el log (iso.cpp:1081). No hay HSM. - No hay código para los Android de Prisma (N910, N6) ni para derivar DUKPT.
Escenarios de interoperabilidad
Ninguna de las dos direcciones funciona hoy sin cambios; ambas son técnicamente posibles porque los dos hosts usan MasterSession en UltraHost, siempre que el pinpad tenga la MK del otro procesador inyectada.
| Pinpad Prisma (Lane3000) con procesador Fiserv | Pinpad Fiserv con procesador Prisma | |
|---|---|---|
| Llave maestra | Slot 0 "FISERV SDES" previsto de fábrica (puede venir vacío) | Hay que inyectar la MK de Prisma en una posición (S01 admite varios hosts; el ejemplo trae VISA) |
| Largo de WK | Bloqueante: Fiserv entrega WK doble (32 hex) y el Lane3000 acepta hasta 16 en WRK | Compatible: Prisma entrega WK simple; el protocolo Fiserv admite LWK=1 |
| Sincronización | El Lane3000 no tiene S00/S01/S02; UltraHost tendría que pedir el 0800 sin el pinpad | No hace falta 0800; la WK llega en el campo 52 |
| WK de datos | Fiserv con ENCRIPTA=2 exige WK de datos; el Lane3000 no la tiene. Con ENCRIPTA=0 no se envía | Prisma no da WK de datos, así que ENC=1 no sirve. Candidato: ENC=0, pero V02 y V04 difieren sobre si permite PIN online |
| Campo 59 | Fiserv espera IDE (000 sublargo 016); el Lane3000 da NSL de 16 dígitos, equivalencia sin confirmar | Prisma espera NSL (000 sublargo 019); el pinpad Fiserv da IDE de 16 dígitos, equivalencia sin confirmar |
| Cambios en UltraHost | PMK 0 para Fiserv en el flujo Prisma; 0800 de sincronización sin S0x; mapear NSL a IDE | Separar MODELO por procesador o terminal; LWK=1 y WK de datos opcional en el Y02 Fiserv; mapear IDE a NSL; TDE 1 en campo 47 |
| Veredicto | Solo si Fiserv emite WK simple. Si no, no | Factible del lado UltraHost (MK de Prisma inyectada + cambios); falta confirmar que Prisma acepte MasterSession en terminales nuevas |
Pinpads Android de Prisma (N910, N6): no sirven para Fiserv. Solo hacen DUKPT y Fiserv no documenta DUKPT ni KSN.
Mismo pinpad para los dos procesadores: el Lane3000 ya prevé MK de Fiserv (slot 0) y de Prisma (slots 1 y 2), y el comentario de 2022 en UltraHost elegía la MK según la marca de la tarjeta. El límite es el largo de la WK de Fiserv y que MODELO es global.
Preguntas abiertas
Siete puntos definen si el cruce es viable; cinco dependen de los procesadores.
- Fiserv: ¿puede el host emitir WK de longitud simple (
LWK=1) para un terminal? Define si el Lane3000 sirve con Fiserv. - Prisma: ¿quién inyecta la MK de Prisma en un pinpad Fiserv y en qué posición? ¿Lo homologan?
- Prisma y Fiserv: ¿el NSL del Lane3000 y el IDE de Fiserv son el mismo identificador de juego de llaves?
- Prisma: confirmar el valor del producto
028(UltraHost manda6con sublargo004; la nota de reunión dice "mandar un 6"). - Comercial: ¿los Lane3000 en campo traen cargada la llave del slot 0 (FISERV SDES)?
- Prisma: ¿acepta hoy MasterSession (WK en campo 52) para terminales nuevas, o exige DUKPT? El manual CD v1.2.5 solo documenta DUKPT y los cambios más recientes de UltraHost (2026) agregan el KSN.
- Fiserv y Prisma: ¿siguen emitiendo WK de DES simple para terminales nuevas? Si no, ambos cruces necesitan MasterSession 3DES o DUKPT en los dos extremos.
Fuentes
Manuales (C:\Work\AI\UltraHostDocs):
PRISMA202511/Manual+PinPad+Lane3000+v2.2.pdf: sección 2.5 (métodos de encripción, slots), comandos Y02 / Y19PRISMA202511/MANUAL+COMUNICACIÓN+PINPAD+ANDROID+A+SISTEMAS+PROPIOS+v2.2+1.pdf: secciones 4.2-4.3 (dispositivos), 10 (encriptación)PRISMA202511/Manual Integración CD v1.2.5 (1).pdf: campos 52 y 59, código 98, anexo IV (productos 028 y 084)FISERV2026/SP_PP-Caja_F0101_ProtocoloV04_01_Bimonetario.pdfyV02_01: Y02, S00-S02, anexos A y BPRISMA202511/meet20260114: notas de reunión
Código (C:\Work\AI\FISERV\ULTRAHOST):
main.cpp:970,wsserver_json.cpp:3625: switch globalMODELOwsserver_json.cpp:1178-1202: PMK y comentario de MK Visa/Fiservwsserver_json_fiserv.cpp: Y02, S00-S02,ComandoS02iso.cpp:818-822,1061-1086: WK nueva en campo 52;1440-1560:DecodeWKFiServ(campo 60)trx.cpp:11-170: armado del campo 59 por procesadortrx_sql.cpp:917-936:GetWKNewAUsarUltraHost.ini,UltraHost.QA.ini:[PINPAD] MODELO=FISERV