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?