Usando un pase simple de 5 caracteres para el evento vs. QR / barcode

4

Planeo hacer un sistema de "venta de boletos", donde un usuario compraría un "boleto de viaje" en línea. La parte que me sorprende es: después de comprar, ¿qué mecanismo usar para verificar el boleto?

He estado observando cómo plataformas como EventBrite, TicketMaster, y usan código QR o código de barras. Pero creo que para algo como mis recorridos (donde no espero más de 1000 personas a la vez), es una exageración. ¿Por qué no usar una combinación simple de 5 letras, con 26 ^ 5 combinaciones, como GFTLH? ¿Hay alguna desventaja de hacer esto desde una perspectiva de seguridad frente a un código de barras?

La única razón por la que veo que estas plataformas usan códigos QR / de barras es la gran cantidad de boletos (millones de ellos que venden). El uso de un código simple de 5 caracteres proporciona algunas ventajas como:

a) Un% más grande de personas podrá verificar el código. Incluso las personas con teléfonos tontos, podría crear un sistema en el que solo envíen SMS al código y reciban un SMS a cambio si el código es válido.

b) Dado que el código es más "portátil" (todos los que tienen un bolígrafo pueden escribirlo), hay opciones como: Crear tarjetas impresas con un marcador de posición para el código, y simplemente tener las instrucciones de compra / llenado en el tarjeta. Esto es imposible de hacer con un código QR (y es muy engorroso con un código de barras). Entonces, básicamente, podría distribuir esas tarjetas en varios lugares. Es como "su boleto de marcador de posición que puede activar en línea cuando lo desee".

Pero mi pregunta fue: ¿hay alguna desventaja desde el punto de vista de la seguridad, considerando estos factores? Es un poco raro para mí, no he visto ninguna plataforma de venta de entradas (incluso las que se alojan en forma propia) que use este sistema, usan todas las etiquetas de uso / códigos QR en comparación con las frases de acceso convenientes.

    
pregunta anemaria20 01.09.2018 - 23:16
fuente

3 respuestas

1

Si hay alguna ventaja en romper tu sistema, tarde o temprano alguien romperá tu sistema.

No hay una gran diferencia entre generar y administrar códigos de 5 dígitos versus códigos de 64 dígitos. Así que ir con 5 o 64 es la misma cantidad de trabajo. La principal diferencia es la dificultad de la fuerza bruta de 5 o 64 dígitos.

Podría crear una estructura como esa: TICKET_ID:EV_ID:CHECK

Donde, por ejemplo, TICKETID es de 8 caracteres, EV_ID es de 3 caracteres, y CHECK es de 5 caracteres, con un total de 16 bytes. CHECK debe calcularse utilizando una firma digital y truncando el resultado a los primeros 5 dígitos. Puede ponerlo todo en mayúsculas y evitar usar los números 0 y 1, y O y I mayúsculas, ya que se confunden fácilmente con la otra fuente con ciertas fuentes.

Entonces, el ticket ABCDE456AAA23F78 sería:

ID del ticket: ABCDE456

ID de evento: AAA

Compruebe: 23F78

Al generar los nuevos tickets, debe marcar el ID del ticket y el ID del evento, y firmar digitalmente el resultado. Cuando verifique la validez, no haga solo hash y verifique. Debe verificar si la ID del ticket tiene una longitud exacta de 8 caracteres, la ID del evento tiene una longitud exacta de 3 caracteres, y luego hash y verificación. Verifique si los caracteres evitados están presentes también. Haciendo esto, la probabilidad de una colisión se reduce.

Al revés:

  • Código QR pequeño
  • 16 dígitos son fáciles de escribir
  • Se eliminaron los caracteres confusos
  • Los teléfonos tontos pueden verificar la validez
  • Difícil de forjar
  • La verificación del código se puede hacer fuera de línea, con una pequeña página HTML con Javascript

El principal inconveniente es la longitud del cheque pequeño. No es muy difícil descifrar 5 dígitos, pero puede aumentar este tamaño a una firma completa de 64 bytes.

Al usar este esquema, puedes crear alrededor de 33 millones de entradas por evento y crear 10 eventos por semana durante los próximos 63 años sin usar todas las ID de eventos.

    
respondido por el ThoriumBR 02.09.2018 - 00:17
fuente
1

Estoy de acuerdo con la respuesta de ThoriumBR, y solo me gustaría abordar la "perspectiva de seguridad".

Cinco letras, 26 caracteres cada una, le dan el número total de combinaciones de 12M (11,881,376). Esto puede sonar como un gran número. Sin embargo, si alguien escribe un raspador que intenta forzar con fuerza los códigos que usa 50 conexiones simultáneas y ejecuta diez instancias de dicho raspador, probará 500 códigos por segundo y revisará TODOS sus códigos en menos de 7 horas. Y la ejecución de 10x50 scraper está disponible para casi todos.

Por supuesto, esto podría ser contrarrestado por otros medios (por ejemplo, captcha), pero esto crea otros problemas, especialmente la facilidad de uso.

    
respondido por el George Y. 02.09.2018 - 08:06
fuente
1

Lo primero que se debe considerar es si se trata de una redención solo en línea, o si tienes seres humanos que se registran en una puerta. Un sistema en línea puede ser atacado por la fuerza bruta por millones de máquinas, pero las personas no permiten millones de reintentos a un cliente.

En el caso de un sistema humano, puede establecer el tamaño mínimo según el riesgo que esté dispuesto a asumir: por lo general, un falsificador de boletos no lo arriesgará por una posibilidad de 1: 1000. Entonces, si está emitiendo 1000 boletos, su espacio numérico sería 1000 * 1000, o 1 millón (6 dígitos).

Si intentas comprimir eso a 4 o 5 caracteres usando un esquema de dígitos / texto, debes pensar en los humanos que lo usan y en el entorno en el que estarán. No hagas que distingan entre mayúsculas y minúsculas. Imprima los boletos en mayúsculas. No permita símbolos confusos / ambiguos: elimine la letra I y los dígitos 1, 0 y o, B y 8, etc., o haga que sean sinónimos. Si los compradores de boletos están en un teatro oscuro, esto se vuelve aún más importante. Si los clientes están imprimiendo sus pases en casa, un entorno húmedo / húmedo hará que la impresión se ejecute. Y es posible que desee escanear los códigos generados con un detector de palabras erróneas.

Tenga en cuenta que, por sí mismos, los códigos de barras no hacen nada seguro. Solo existen para facilitar la entrada de datos. Debido a que un código QR puede entregar muchos bytes de datos con precisión y rapidez, pueden pasar cargas útiles más grandes; pero son fáciles de copiar independientemente de su tamaño.

Los dígitos de verificación son opcionales, pero considérelos para ingresar más de 5 dígitos.

Si sus compradores de entradas usan una aplicación de teléfono para ingresar los códigos, también considere que un teclado alfa es más pequeño y más difícil de escribir con precisión que un teclado numérico de 10 dígitos. Los códigos de 7 dígitos pueden ser más rápidos de ingresar que 5 letras, y casi con toda seguridad más rápido que un código alfanumérico mixto de 5 caracteres.

    
respondido por el John Deters 03.09.2018 - 03:11
fuente

Lea otras preguntas en las etiquetas