it-swarm-es.com

Cifrado adecuado para SMS cifrado

Me gustaría crear una aplicación para cifrar SMS mensajes. Después de largas discusiones, decidí usar cifrado simétrico, ya que manejar la cuestión de las claves públicas/privadas es demasiado difícil para la mayoría de los usuarios.

Así que supongo que la clave secreta debe transferirse mediante interacción de voz entre las partes u otro método.

Mi pregunta es: ¿cuál será el algoritmo adecuado para cifrar SMS? El cifrado debe considerar la longitud máxima del mensaje de 160 caracteres y aceptar solo símbolos imprimibles. La fragmentación de mensajes y todo tipo de problemas relacionados son inaceptables. Sé que algunos teléfonos pueden fusionar automáticamente mensajes fragmentados, pero teniendo en cuenta la gran diversidad de marcas/modelos, no funciona.

¿Alguna idea, consejo?

12
Barmaley Red Star

Le insto a que revise su premisa. Si ambos extremos tendrán una aplicación, entonces sus criterios para la elección del algoritmo no son válidos: la aplicación manejará el cifrado/descifrado, no el usuario. La criptografía de clave pública puede proporcionar potencialmente una mejor seguridad en este contexto; por ejemplo, puede habilitar la administración de claves de confianza en el primer uso (similar a SSH). Además, te sugiero que empieces por pensar primero en el modelo de amenazas. La primera pregunta no debería ser, ¿qué algoritmo criptográfico utilizo? Su primera pregunta debería ser, ¿contra qué amenazas estoy tratando de defenderme?

Si debe utilizar cifrado simétrico para SMS textos, AES en modo CBC con robo de texto cifrado es una opción plausible. El robo de texto cifrado evitará el desperdicio si el mensaje a cifrar no es un múltiplo de 16 bytes. Aún necesitará un IV, que ocupará algo de espacio. Para ahorrar espacio, puede enviar un contador y utilizar el cifrado AES del contador como su IV.

Si hay alguna forma de evitar el transporte de textos cifrados a través de SMS, evítelo. 160 caracteres es muy limitante. ¿Puede transportar mensajes a través de Internet?

Si puede evitar el túnel a través de SMS, puede explorar un modelo en el que la aplicación tenga su propia clave privada/pública y mantenga una clave pública para cada contacto. Al contactar a alguien nuevo, la aplicación envía su propia clave pública, recibe una clave pública de la otra persona, recuerda esa clave pública y envía el mensaje encriptado con esa clave pública. Por supuesto, esto es vulnerable a los ataques man-in-the-middle, pero puede ser más fácil de usar.

9
D.W.

Si está probando una diversidad de marcas y modelos, simplemente no va a funcionar, aunque muchos teléfonos inteligentes permiten que el software de terceros envíe mensajes SMS a través de pasarelas de Internet, todos menos los sistemas operativos de teléfonos más abiertos no permiten que el software de terceros maneje mensajes entrantes SMS.

Sin embargo, si ignoramos la imposibilidad, 128 AES debería funcionar bien. Eso le dará un texto cifrado no mayor que el texto plano; 8 de los cuales caben en un SMS de 140 bytes. Usando la codificación de caracteres de SMS, eso significa que todavía tiene 146 caracteres de mensaje.

Ya que especificó el cifrado simétrico, ¡estoy más que feliz de dejar el problema de la distribución de claves en sus manos!

4
user502

Deberá utilizar AES o una combinación de AES + RSA. Ahora llega el tema de los 160 caracteres. En realidad, la carga útil disponible es de solo 140 bytes. En móviles (GSM o CDMA); Los 140 bytes disponibles se codifican en una codificación de 7 bits, lo que permite poner 160 caracteres en 140 bytes.

Ahora que SMS es el canal, y se debe realizar el cifrado, el modo de comunicación ya no puede ser un mensaje de texto sino un mensaje binario. Un mensaje binario necesitará 7 bytes adicionales para UDH (encabezado de datos de usuario). Entonces, la cantidad de caracteres con los que puede operar es solo 133.

Creo que si está utilizando el canal SMS, entonces necesita una aplicación en ambos extremos. Puede utilizar mensajería basada en puertos; mediante el cual el mensaje será procesado directamente por la aplicación final y no por la bandeja de entrada nativa.

Una ventaja del canal SMS es el protocolo de almacenamiento y reenvío, lo que significa que las posibilidades de que la otra parte reciba el mensaje son altas, el problema es el retraso y las limitaciones de carga útil. Con la segmentación a nivel de aplicación, también puede enviar mensajes largos.

Otra ventaja del canal SMS, es que en una comunicación bidireccional, se confirmará que la parte de confianza real solo está involucrada en la mensajería. A puede suplantar que es B mientras envía un SMS a C; pero cuando C responde, siempre irá solo a A. Por lo tanto, al utilizar negociaciones bidireccionales, puede crear un algoritmo de generación y uso compartido de claves para la comunicación mutua.

0
Mohit Sethi