Rotación de códigos de barras

Introducción

Los códigos de barras rotativos tienen el mismo aspecto que los códigos de barras normales, pero cambian periódicamente (por lo general, cada minuto) y la terminal o el lector están programados para aceptar únicamente el más reciente. Esta medida de seguridad reduce los riesgos asociados con las capturas de pantalla de códigos de barras, en particular el robo o la reventa no autorizada de entradas. La rotación de códigos de barras también puede actuar como resguardo en dispositivos que no pueden aprovechar el Toque inteligente debido a que no son compatibles con NFC (falta de hardware o software inhabilitado).

Referencia de la API

Para obtener detalles técnicos sobre la rotación de códigos de barras, consulta el tipo RotatingBarcode.

Carga útil de ejemplo

JSON
{
  "rotatingBarcode": {
    "type": "QR_CODE",
    "valuePattern": "MyRotatingBarcode-{totp_timestamp_seconds}-{totp_value_0}",
    "alternateText": "Ticket#: 1234567890",
    "totpDetails": {
      "algorithm": "TOTP_SHA1",
      "periodMillis": "3000",
      "parameters": [
        {
          "key": "3132333435363738393031323334353637383930",
          "valueLength": "8"
        }
      ]
    }
  }
}

Mecanismos de resguardo

En el dispositivo del usuario, solo se utiliza un mecanismo de canje en un momento dado, según cómo esté configurado el pase y las capacidades del dispositivo. En orden de prioridad, se utilizan los siguientes tipos de canje:

  1. Toque inteligente: Si se especifica una carga útil de toque inteligente y si el dispositivo es compatible con NFC/HCE.
    • Ten en cuenta que el usuario puede anular esta acción haciendo clic en “Mostrar código”, lo que forzará la visualización del código de barras rotativo o el código de barras estático.
  2. Código de barras rotativo: si se especifica una carga útil de código de barras rotativa
  3. Código de barras estático: si se especifica la carga útil de un código de barras.

Especificar varias cargas útiles de canje puede garantizar que todos los usuarios sean compatibles, pero puede tener implicaciones de seguridad. En particular, el uso de un código de barras estático como resguardo de un código de barras rotativo anula la mayoría de los beneficios de seguridad de usar códigos de barras rotativos. Un resguardo de código de barras estático solo se mostrará en las vistas web o en los clientes que no admitan la rotación de códigos de barras. A partir de hoy, esperamos que todos los clientes de la Billetera de Google admitan la rotación de códigos de barras.

Guardar flujos

La API de la Billetera de Google ofrece varios flujos, incluidos los siguientes:

  • Crea las clases de transporte público en tiempo real o con anticipación
  • Enviar los objetos completos en tu JWT o guardar los objetos con anticipación y, luego, hacer referencia a ellos por ID en tu JWT
  • Actualiza los objetos después de haberlos guardado

El campo roundBarcode propuesto es compatible con todos estos flujos. Sin embargo, para mejorar la seguridad, sugerimos lo siguiente:

  • Llama a la API de object:insert para insertar el pase al servidor de la Billetera de Google y configura el botón Agregar a la Billetera de Google para hacer referencia al objeto específico por ID en tu JWT. Esto garantiza que el JWT resultante no incluya la clave secreta del código de barras rotativo.
  • Usa una clave secreta de OTP cuyo alcance sea un solo pase
  • Se espera que la clave, a menos que se actualice, sea válida durante la vida útil del pase. No esperamos que esta clave se actualice con ninguna frecuencia durante el curso de un funcionamiento normal.

En el siguiente diagrama de secuencias, se ilustra el flujo entre varios actores de una integración típica:

Diagrama de secuencias para usar códigos de barras rotativos