Encripta datos de tarjeta por medio de script

En caso de que estés en fase de pruebas y aún no cuentes con un HSM (Hardware Security Module), puedes solicitar a Kushki que te proporcione las llaves de prueba para que, a través de una librería, puedas encriptar los datos de la transacción y hacer peticiones en Postman a la API de Kushki, de esta forma poder acelerar la implementación de tu solución.

A continuación se mostrarán los pasos a seguir para poder generar una petición de transacción con el POS de Kushki usando cardtool para encriptar la data transancional.

Requerimientos previos

Para poder realizar el encriptado por medio del script y obtener la data que se debe incluir en el request es necesario contar con los siguientes elementos:

  • BDK (en formato TR-31) que será proporcionada por el área de Seguridad de la Información de Kushki.
  • BDK (en formato TR-31) de PIN que de igual manera es proporcionado por el área de Seguridad de la Información. Este es utilizado solamente para transacciones con PIN online.
  • Un par de credenciales para transaccionar, deberás contar con tu private key y tu public key.
  • Key Serial Number (KSN) de tu terminal, puedes obtener un KSN de ejemplo y simplemente modificar el contador cada que realices una nueva transacción
  • Instalar Python.
  • Instalar la herramienta de cardtool, link de la herramienta: https://pypi.org/project/cardtool/

1. Preparación de variables

Para poder realizar la ejecución deberás colocar los siguientes datos en los archivos de configuración de tu script setting.yml y cards-out.json

La configuración deberá mostrarse como se indica en la siguiente imagen:

EN preparacion variables

Ejecutar los siguientes comandos:

python3 -m venv .env
source .env/bin/activate
!pip3 install cardtool

2. Obtener Llave en “claro”

Para poder realizar la encriptación de los datos de PIN y tarjeta es necesario primero obtener la llave en “claro” desde la llave compartida por seguridades en formato tr-31

Para ello, vamos a realizar la ejecución del siguiente comando

cardtool decrypt-key -kbpk <your_key_block_protection_key> -kcv <key_check_value> YOUR_KEY_BLOCK

El valor de esta forma vamos a obtener un respuesta como esta:

Plaintext Key: ABCD1234AB01CD23F126FBAB02621ADA

Este valor será utilizado para el siguiente comando donde vamos a ejecutar la encriptación de la data y PIN

3. Ejecución de script para obtener data encriptada

Ahora que tenemos configurado el archivo de settings.yaml e instalado nuestra dependencia vamos a realizar la ejecución del siguiente comando:

cardtool gen-card -cfg setting.yml -fmt json cards-out.json

EN ejecucion de script

Al ejecutar el comando vamos a obtener el archivo de cards-out.json como salida, este archivo contendrá la información necesaria para poder enviar en el cuerpo de tu petición de ejemplo:

en  resultado comando

4. Payload de transacción

Para poder ejecutar el payload de prueba de una transacción recomendamos utilizar Postman, en el cual ya contamos con una colección que podrás encontrar en este enlace. Dicha colección puede ser de apoyo para las pruebas y validaciones durante la implementación.

Al obtener la información cifrada de la tarjeta y el PIN, solo debes inlcuir en el body del request y enviar.

EN postman