¿Es posible tener una API RESTful encriptada sin TLS? [cerrado]

1

Me preguntaba si era posible implementar un servidor que solo tiene datos y autorización encriptados (por lo tanto, sin TLS que requiere también autenticar el certificado). Similar a SSH pero funciona con plataformas de desarrollo de aplicaciones móviles (iOS / Android / React Native / etc).

Editar: No queremos tener que instalar manualmente las claves en cada cliente, ni ejecutar una autoridad de certificación (CA) personalizada. Y la mayoría de los dispositivos se ejecutarán en una LAN privada utilizando direcciones IP reservadas, por lo que las CA estándar no emitirán certificados porque eso ya no está permitido para las direcciones IP reservadas. Este es esencialmente el problema emergente de IoT de tener transferencias de datos cifrados a través de redes privadas. Pero parece que las plataformas móviles comunes DEBEN utilizar SSL / TLS para obtener el cifrado. SSH estaría bien, excepto que no parece haber buenas soluciones disponibles para plataformas móviles como React Native, Nativescript, Ionic, etc.

    
pregunta Jason 03.03.2017 - 00:55
fuente

3 respuestas

3

Sí, es posible. ¿Pero por qué harías eso?

Todas las plataformas móviles son compatibles con TLS, ¿por qué reinventar la rueda?

El cifrado es muy difícil de corregir y fácil de equivocar. Si puedes inventar un mejor cifrado que los chicos que escriben el software TLS, no harías esta pregunta.

    
respondido por el Lie Ryan 03.03.2017 - 03:06
fuente
3

TLS no solo te da cifrado. Te da autenticación de confianza. Toda la privacidad en el mundo no importa si no sabes con quién estás teniendo esa conversación privada.

Sin una PKI y una CA sería muy difícil implementar su propia forma de autenticación confiable, a menos que esté dispuesto a distribuir las claves con anticipación.

Así que votaré "No", no es realmente posible, a menos que estés dispuesto a hacer mucho trabajo.

    
respondido por el John Wu 03.03.2017 - 04:46
fuente
1

Es posible, pero, en primer lugar, SSH puede no ser un buen modelo para esta aplicación.

SSH tiene un enfoque de Confianza en el primer uso (TOFU), que requiere que el usuario decida si acepta o no la clave de un servidor en la primera conexión. TLS, en comparación, tiene medios (ciertamente imperfectos) para tratar de determinar si una clave dada puede ser razonablemente aceptada para identificar un servidor. Solo si se encuentra algo inusual (por ejemplo, certificado autofirmado, certificado no concordado / caducado / inválido, etc.) se le pide al usuario que piense (y hay mucha evidencia de que el pensamiento se reemplaza con solo hacer clic en Aceptar sin leer el mensaje).

En otras palabras, uno requiere que ambos confíen en sus usuarios y que asuman que son capaces de tomar decisiones informadas cuando se les presenta una asociación de confianza. El otro requiere que use un sistema imperfecto pero bien establecido, y en su mayoría funcional, para establecer esa confianza.

Otro factor es que su configuración suena bastante como si tuviera una sola clave de cifrado para que los clientes le envíen datos. Lo que significa que, en ausencia de TLS, cualquier persona con esa clave (es decir, que la extrae de su aplicación) puede descifrar TODO el tráfico enviado a su API. TLS resuelve eso para ti también.

Podría argumentar que tendría claves por cliente, pero que:

  • necesita administración
  • requiere que las claves se compartan de alguna manera
  • y, presumiblemente, requiere que los usuarios puedan comunicarse con usted sin cifrado ...

tl; dr : es posible, pero incluso si encuentra un medio perfecto para hacer todo esto correctamente, todavía tendría un caso de uso convincente para que TLS cubra todo tipo de ventajas (y muy posiblemente , núcleo) casos.

    
respondido por el iwaseatenbyagrue 03.03.2017 - 13:37
fuente

Lea otras preguntas en las etiquetas