Función de inicio de sesión seguro con bajo poder de CPU

1

Estoy desarrollando un programa que contiene una función de inicio de sesión en C ++. El problema es que no sé cómo desarrollarlo en mi situación. Quiero ejecutar el software en una frambuesa pi, solo tiene una CPU programada en 1 GHZ y 512 MB de memoria. La memoria no causará ningún problema, pero la CPU sí.

El problema es que no puedo dedicar mucha potencia de CPU al cifrado, claro que cifro todas las contraseñas, pero no puedo cifrar la conexión. Esto es porque creo que HTTPS es demasiado pesado. No HTTPS no es un problema real porque los datos no están clasificados, pero quiero asegurarme de que nadie más pueda capturar las acciones de conexión y preforma.

Esto es lo que diseñé hasta ahora:

Las funciones de inicio de sesión validan al usuario, si se proporciona un nombre de usuario y una contraseña correctos, el usuario obtiene un número cifrado único. El usuario debe enviar este número cada vez para acceder a su cuenta.

El problema:

El problema es que cada uno puede capturar el número único del usuario, y podría usar este número para iniciar sesión en su cuenta. ¿Cómo puedo desarrollar una función de inicio de sesión sin este problema? Puedo usar la IP de los usuarios en el número cifrado, pero esto no es seguro cuando el pirata informático tiene acceso a la red de destino.

Además, el usuario envía sus credenciales a través de la red. Supongo que también puedo preformar algo del lado del cliente de cifrado, pero esto no es muy útil para mi CPU porque necesito hacer más ciclos de cifrado en mi servidor.

    
pregunta Laurence 21.12.2012 - 14:05
fuente

5 respuestas

7

HTTPS no es demasiado pesado para un RPi, son sorprendentemente poderosos y SSL es muy liviano en términos de CPU y uso de memoria. Lo he visto implementado en microcontroladores Atmega de 40MHz.

Si no me crees, considera el hecho de que puedes SSH en un RPi sin ningún problema.

    
respondido por el Polynomial 21.12.2012 - 14:08
fuente
3

SSL será bastante pesado en un procesador Pi ARM en comparación con las conexiones HTTP de vainilla. Cuando los procesadores normales del servidor tenían 1Ghz, probé el rendimiento de SSL con varios aceleradores de hardware SSL en ese momento. Normalmente, SSL bajaría al 15% del rendimiento de HTTP de vainilla para Apache, IIS, etc. en ese momento.

SIN EMBARGO. Es el protocolo de enlace SSL, es decir, en la conexión, que utiliza la CPU. Entonces, si puede minimizar esto, entonces el uso general de la CPU será un problema menor.

Hay dos estrategias:

  1. traza el modelo de rendimiento para tu aplicación. Si los clientes están creando nuevas conexiones SSL todo el tiempo, puede sufrir problemas de rendimiento. Quizás considere mantener sesiones más largas entre solicitudes y esto reducirá la carga.
  2. Utilice SSL mutuamente asegurado, es decir, con certificados del lado del cliente. Esto reduce la carga de la CPU en la conexión a cerca de la de HTTP de texto plano de vainilla.

SSH parece funcionar bastante bien con mi Pi (pero no es aplicable en este escenario)

    
respondido por el Callum Wilson 21.12.2012 - 14:17
fuente
3

Sé de un procesador PowerPC de 50 MHz que ejecuta un servidor SSL y maneja rutinariamente 70 clientes simultáneos; Yo mismo escribí el código. SSL es no pesado. Además, toso y grito cuando escucho que un procesador de 1 GHz es "lento": una Raspberry Pi habría sido una estación de juego totalmente radical en 2001, e Internet ya existía en ese momento ...

Si tienes algo de fetiche sobre los ciclos de CPU, entonces la buena idea aún es no para diseñar tu propio protocolo. En su lugar, use un SSL correctamente configurado (por ejemplo, con curvas elípticas para la criptografía asimétrica).

    
respondido por el Thomas Pornin 27.12.2012 - 20:08
fuente
1

Básicamente estás implementando un sistema de sesión. Lea más acerca de cómo asegurarla en enlace y enlace . Básicamente, desea evitar el secuestro de sesiones y los ataques de reproducción. Una de las defensas es vincular la sesión a la dirección IP de un cliente y requerir una nueva autorización si la dirección IP cambia. Busca más en la web, la palabra clave es "secuestro de sesión".

Para mayor seguridad, necesita usar HTTPS. Puede minimizar la cantidad de recursos que utiliza HTTPS (SSL / TLS) durante el intercambio mediante el uso de certificados RSA de 1024 bits en lugar de los estándares de 2048 bits. Para el cifrado simétrico, use RC4 en lugar de AES, porque RC4 usa menos CPU, lo que probablemente es la razón por la que Google lo está usando, aunque eso debería cambiar pronto con el soporte de AES-NI.

    
respondido por el Matrix 21.12.2012 - 17:07
fuente
0

Alternativamente, puede configurar un proxy que permita que los clientes entrantes se conecten al proxy a través de HTTPS, y luego el proxy puede realizar el cifrado / descifrado, y obtener los datos reales del Pi: esto permite que el Pi se enfoque en el aspectos no relacionados con la seguridad y descargue el HTTPS si ese es el problema, tenga en cuenta que esto requiere una red "segura" entre el Pi y el proxy si lo necesita para estar realmente seguro.

    
respondido por el user2813274 27.07.2014 - 19:18
fuente

Lea otras preguntas en las etiquetas