¿Está usando MD5 razón suficiente para rechazar este procesador de pagos?

8

Estoy evaluando un procesador de tarjetas de crédito [1], y noté que están usando MD5 como parte de un algoritmo hash con sal para proteger una clave secreta. Como sé que el MD5 generalmente se considera roto, se siente como una mala solución. ¿Es eso suficiente criterio para rechazarlos como nuestro procesador? ¿Es posible demostrar un ataque?

(Si esto debería estar en un sitio de StackExchange diferente, hágamelo saber)

Aquí está el escenario específico, simplificado a los puntos salientes.

Credenciales

Primero, tengo una "clave secreta" de más de 30 caracteres y símbolos alfanuméricos superiores. (Por ejemplo, TUQ1ICGIIIK/PSBKNDFK=GNKOTHMMDBI ). También tengo un "ID de comerciante" de 12 dígitos. (Diga, 123456789012 .)

Formulario de pago accesible públicamente

En segundo lugar, el formulario de pago simplificado se ve algo así. (La forma real incluiría otros parámetros como nombre y dirección).

<form action="https://examplepaymentprocessor.com" method="POST">
    <input name="MERCHANT" value="123456789012" />
    <input name="TAMPER_PROOF_SEAL" value="d550a25dfb97697f5be928953ee7cfc4" />
    <input name="TPS_DEF" value="MERCHANT AMOUNT TRANSACTION_TYPE" />
    <input name="AMOUNT" value="10.00" />
    <input name="TRANSACTION_TYPE" value="SALE" />
    <!-- other input fields for credit card number, contact information, etc. -->
    <input type="submit" value="Make Purchase" />
</form>

El "sello a prueba de manipulaciones" es el "resumen" de un hash MD5 de, en este caso, un "mensaje" compuesto por una concatenación de cadenas de:

  1. mi clave secreta,
  2. mi identificación de comerciante,
  3. el importe de la transacción, y
  4. el tipo de transacción

Por lo tanto, en este caso, MD5("TUQ1ICGIIIK/PSBKNDFK=GNKOTHMMDBI12345678901210.00SALE") = d550a25dfb97697f5be928953ee7cfc4 .

TPS_DEF le permite al usuario especificar el contenido específico del mensaje o, si lo prefiere, la clave secreta más un salt. El mensaje incluye, como mínimo, la clave secreta, pero podría incluir hasta todos los demás parámetros en el formulario. Mi ejemplo incluye la identificación del comerciante, la cantidad y el tipo de transacción.

Recuperación de datos

El proceso para recuperar transacciones de ejemplo es similar. A través de un formulario HTML (no accesible públicamente) o algún otro método para HTTP POST , puedo obtener información sobre una transacción determinada. (Supongamos que tengo un ID de transacción del procedimiento anterior).

<form action="https://examplepaymentprocessor.com/transaction_status" method="POST">
    <input name="MERCHANT" value="123456789012" />
    <input name="TAMPER_PROOF_SEAL" value="d550a25dfb97697f5be928953ee7cfc4" />
    <input name="TPS_DEF" value="MERCHANT" />
    <input name="TRANSACTION_ID" value="1234567890" />
    <input type="submit" value="Get Info" />
</form>

Esto devolverá información que incluye todos los detalles de contacto del cliente y los últimos cuatro dígitos de su número de tarjeta de crédito. Tenga en cuenta que, de nuevo, usted (o un atacante) puede especificar el TPS_DEF como desee.

Ataque imaginado

Dado que MD5 es vulnerable a un ataque de prefijo elegido, he jugado con el uso de HashClash de Mark Stevens , pero eso parece crear dos mensajes nuevos con ciertos prefijos, en lugar de crear un segundo mensaje cuyo MD5 coincide con el primero. Sin embargo, parece que alguien con su propia clave secreta podría potencialmente crear una solicitud de estado de la transacción que haría un hash de tal manera que recuperaría los datos de mi en lugar de los suyos.

Preguntas

  • ¿Qué tan probable es que un atacante pueda falsificar el "sello a prueba de manipulación indebida" para imitarme? ( O para transacciones falsificadas o para obtener información de clientes y transacciones, lo último es lo que creo que es más probable).
  • ¿Hay otros ataques que puedas imaginar o demostrar?
  • ¿Rechazarías este procesador? (Tenga en cuenta que son una combinación perfecta para nosotros en cualquier otro aspecto).

EDIT 1: Leer esta otra pregunta me hace pensar eso, desde el MD5 sigue siendo resistente a los ataques de pre-imagen, esta situación en particular es segura.

EDIT 2: Aclaré mi pregunta sobre un ataque relacionado con transacciones falsificadas y de información robada de clientes.

[1] No se menciona aquí. Envíeme un correo electrónico para obtener información específica.

    
pregunta David Alan Hjelle 17.04.2013 - 16:58
fuente

3 respuestas

12

Este "sello a prueba de manipulaciones" es un MAC hecho en casa , y no es bueno.

Que MD5 está "roto" no tiene relación aquí. MD5 no funciona para colisiones y las colisiones no tienen ningún impacto en su situación. Lo que podría ser una preocupación es ataques de extensión de longitud . Esto se debe a que MD5 es una función Merkle-Damgård . Esto significa que cuando MD5 procesa un mensaje m , hace lo siguiente:

  • El mensaje m se rellena con una secuencia de bits p , que tiene una longitud entre 65 y 576 bits (inclusive), de modo que la longitud total de m || p es un múltiplo de 512. p depende de la longitud de m , pero no del contenido de m .
  • La cadena rellena m || p se divide en bloques de 512 bits.
  • MD5 procesa cada bloque en la secuencia debida, utilizando un estado de 128 bits que es el resultado del procesamiento del bloque anterior. La salida de hash es la salida del procesamiento del último bloque.

Ahora imagine que el atacante podría ver uno de sus "sellos a prueba de manipulaciones". El sello es un hash de algunos m que el atacante no conoce (comienza con su clave secreta). Sin embargo, el atacante podría hacer una buena estimación de la longitud de de m . Por lo tanto, el atacante puede calcular p . Ahora, el atacante elige una cadena m ', arbitrariamente. El "ataque de extensión de longitud" es que puede calcular MD5 ( m || p || m ') incluso sin saber m , porque conoce el estado de MD5 cuando ha procesado m || p : ese es exactamente su valor de "sello a prueba de manipulaciones". Luego puede usar eso como punto de partida para procesar los bloques en los que m ' consiste.

Lo que puede salvarte en tu caso son los dos puntos siguientes:

  1. Incluso si el atacante puede elegir m ' arbitrariamente, solo puede adjuntar , con el relleno p en medio. Su objetivo es calcular un hash para una transacción sintácticamente válida. Dependiendo de la codificación real de la "cantidad" y el "tipo de transacción", el atacante puede o no diseñar algunos m ' de manera que m || p || m' todavía tiene algún sentido en el lado del servidor.

  2. El atacante debe observar un valor de "sello" para comenzar. Dado que se transmiten con HTTPS, esto podría ser difícil para él.

Nota importante: el ataque de extensión de longitud funcionaría exactamente igual (modulo algunos detalles de endianness en p ) con SHA-256. Esto no explota una debilidad específica de MD5.

La forma correcta de calcular un MAC es HMAC . HMAC utiliza una función de hash subyacente como MD5 o SHA-256, pero lo hace "inteligentemente", con dos invocaciones anidadas, precisamente para evitar problemas como el ataque de extensión de longitud.

En cuanto a su pregunta exacta: no, no creo que esto sea motivo para negarse a hacer negocios con estas personas. Después de todo, el MAC no es una "prueba", a pesar de su nombre. Esto es criptografía simétrica: para verificar el sello, el servidor también debe conocer su valor secreto. En consecuencia, el servidor tiene el poder técnico para hacer valores de sello "falsos". En caso de disputa entre usted y el procesador de la tarjeta de crédito, puede señalarlo: el sello no se puede utilizar como prueba en su contra durante el litigio.

Este sello es lo que necesitan para autenticarlo, por lo que es, básicamente, su responsabilidad. Te sugiero que dejes sus propios problemas en sus manos. Sin embargo, es posible que desee plantear el problema como una advertencia cortés. Algo como "ya sabes, para un buen sello, es mejor que uses una solución estándar aprobada por el NIST como HMAC / SHA-256, en lugar de un mecanismo no estándar de cosecha propia con MD5 (de dudosa reputación)". Las debilidades conocidas de MD5 (en comparación con SHA_256) no tienen un impacto práctico en la seguridad en este caso específico, pero el nombre "MD5" y su mala prensa aún pueden ser efectivos como influencia diplomática.

    
respondido por el Tom Leek 17.04.2013 - 17:36
fuente
1

Si lo están utilizando como firma concat (efectivamente, eso es lo que es, garantiza que los parámetros no se alteraron), y viendo el orden de los parámetros, me atrevo a decir que MD5, aunque no es la mejor opción en la Tierra, no es tan malo como puede sonar.

Las colisiones de prefijo elegido son triviales (orden de 2 ^ {50}) para generar en la siguiente situación:

  • ya sabes hash (p1 // m1) ( True )
  • usted sabe p1 ( Falso . Su prefijo es su clave privada, que se supone que es privada)
  • elige un segundo prefijo p2

Por lo tanto, los ataques de prefijo elegido no se aplican necesariamente. No solo esto, sino que para forjar efectivamente una transacción, buscará cambiar un segmento del hash, manteniendo todos los demás constantes (no desea una clave pública o privada diferente, si tuviera que falsificar algo, solo cambiarías la cantidad).

Entonces, en realidad, no es lo mejor (HMAC-SHA256 generalmente se usa para este propósito), pero cumple su cometido y es relativamente seguro (para un valor dado de relativo). Personalmente, basaría el rechazo / aceptación en función de los montos que se están pagando y el pago del seguro del proveedor de pagos en el caso de una transacción falsificada que no fue su culpa.

    
respondido por el Sébastien Renauld 17.04.2013 - 17:08
fuente
0

Sería mejor si usaran SHA-256. Sin embargo, el diseño parece un ataque de falsificación por fuerza bruta que sería bastante costoso computacionalmente. Creo que es más probable que un atacante intente evitarlo a través de malware, MITM o ingeniería social. Honestamente, rara vez intentan atravesar el cifrado a menos que sea un hash de contraseña mal hecho. El procesador de pagos podría valer la pena si otros aspectos de un acuerdo comercial se ven bien.

    
respondido por el Nick P 17.04.2013 - 20:07
fuente

Lea otras preguntas en las etiquetas