Si puede romper este sistema de autenticación, puede entrar en mi casa

1

Comenzaré con esto diciendo que sé aproximadamente 0 sobre cyber-sec

He creado un servidor que permitirá que los teléfonos inteligentes actúen como control remoto para mi casa (por ejemplo, encender / apagar las luces y desbloquear puertas). Obviamente, la seguridad de este servidor es muy importante para mí. También me gustaría que la latencia en la aplicación fuera lo más baja posible, así que diseñé el sistema para minimizar el número de llamadas distintas al servidor. Si alguno de ustedes pudiera señalar alguna vulnerabilidad y / o pasos innecesarios, lo apreciaría:

Un mensaje al servidor toma la forma de una solicitud de obtención para

/[username]/[command]/[random noise]/[signature]

Estoy usando Sha256 como una función hash. la firma se calcula con

Sha256( Sha256( [username]+[password]+[command]+[random noise] ) + [previous successful signature] )

+ en este contexto significa concatenación

Si en algún momento pierde el rastro de la firma exitosa anterior, puede solicitarla. Es decir, la firma exitosa anterior es de conocimiento público (y obviamente esa firma no funcionará dos veces seguidas).

Hasta donde puedo suponer, no soy vulnerable a un ataque de repetición (ya que la señal anterior contribuye a la siguiente señal) ni a un ataque de extensión de longitud (como agregar al mensaje no será de ayuda e incluso si lo hizo solo podría agregarse al Sha256 interno en lugar de a los datos reales).

¿Me estoy perdiendo algo? ¿Mi sistema es seguro?

    
pregunta IIAOPSW 26.01.2015 - 07:48
fuente

1 respuesta

2

Algunas cosas:

Primero, ya existe un esquema para convertir un hash sin clave en un hash con clave. Se llama HMAC; si tiene un proceso de cuatro pasos (el cliente dice "envíeme un nonce", el servidor envía al cliente una nonce, el cliente calcula HMAC en el nonce con la contraseña como clave y lo envía de vuelta al servidor, el servidor verifica el HMAC), que debería funcionar ( las propiedades de un MAC requieren que un atacante sin la contraseña no pueda crear cualquiera pares de datos-MAC falsificados, incluso si puede hacer que el usuario real cree tantos pares de datos-MAC como quiera . Si el servidor no repite nonces (por ejemplo, si usa un contador), esto debería funcionar; no tiene que preocuparse por un nonce aleatorio, porque HMAC no lo requiere.

Mejor, especialmente si necesita enviar cualquier información después, sería utilizar un protocolo estandarizado como TLS-SRP. A diferencia de TLS normal, TLS-SRP no requiere un certificado; usa una contraseña en su lugar.

No importa qué, no deberías no diseñar tu propio esquema. Diseñar su propio protocolo de seguridad es algo que tiende a ir mal mal . La seguridad es difícil ; Los errores menores pueden fácilmente destruir totalmente la seguridad de un esquema. Utilice un protocolo estandarizado. TLS-SRP podría funcionar bien; un protocolo TLS normal también funcionaría, pero sería un poco más preciso porque necesita un certificado. Otros esquemas de autenticación estandarizados también pueden funcionar. Pero no simplemente arroje datos en un hash y asuma que será seguro.

    
respondido por el cpast 26.01.2015 - 09:56
fuente

Lea otras preguntas en las etiquetas