Códigos de barras rotativos

Introdução

Os códigos de barras rotativos são semelhantes aos normais, mas mudam com frequência periódica, normalmente a cada minuto, e o terminal/leitor é programado para aceitar apenas o código mais recente. Essa medida de segurança reduz os riscos associados à captura de tela de código de barras, em especial no caso de roubo ou revenda não autorizada de ingressos. Os códigos de barras rotativos também podem funcionar como um substituto para dispositivos que não conseguem usar o Toque inteligente porque não têm suporte para NFC (por falta de hardware ou software desativado).

Referência da API

Para ver detalhes técnicos sobre códigos de barras rotativos, consulte o tipo RotatingBarcode.

Exemplo de payload

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 substitutos

No dispositivo do usuário, apenas um mecanismo de resgate é usado por vez, dependendo de como o cartão é configurado e dos recursos do dispositivo. Em ordem de prioridade, os tipos de resgate a seguir são usados:

  1. Toque inteligente: se um payload de toque inteligente for especificado e se o dispositivo tiver suporte para NFC/HCE
    • Pode ser substituído pelo usuário ao clicar em “Mostrar código”, o que força a exibição do código de barras rotativo/estático.
  2. Código de barras rotativo: se um payload de código de barras rotativo for especificado
  3. Código de barras estático: se um payload de código de barras for especificado

Especificar vários payloads de resgate é uma forma de garantir que haja suporte para todos os usuários, mas isso pode gerar implicações de segurança. Se um código de barras estático for usado como substituto de um rotativo, a maioria dos benefícios de segurança será perdida. O código de barras estático substituto só vai aparecer nas visualizações da Web ou em clientes que não forem compatíveis com códigos de barras rotativos. A partir de hoje, esperamos que todos os clientes da Carteira do Google ofereçam suporte para códigos de barras rotativos.

Salvar fluxo

A API Google Wallet oferece vários fluxos, como estes:

  • Criar classes de transporte público no horário salvo ou com antecedência
  • Enviar objetos completos no JWT ou salvá-los com antecedência e depois se referir a eles pelo ID no JWT
  • Atualizar os objetos depois de salvá-los

O campo rotatingBarcode proposto é compatível com todos esses fluxos. No entanto, para melhorar a segurança, sugerimos o seguinte:

  • Chame a API object:insert para inserir o cartão no servidor da Carteira do Google e configure o botão "Adicionar à Carteira do Google" para fazer referência ao objeto específico por ID no JWT. Isso garante que o JWT resultante não inclua a chave secreta do código de barras rotativo.
  • Use uma chave secreta de OTP com escopo para apenas um cartão
  • A menos que seja atualizada, a chave será válida durante a vida útil do cartão. Não esperamos que essa chave seja atualizada em qualquer frequência durante o curso da operação normal.

No diagrama de sequência a seguir, ilustramos o fluxo entre os vários participantes para uma integração típica:

Diagrama de sequência para uso de códigos de barras rotativos