Pregunta

Quiero discutir sobre el método de escritura y lectura de OpenSSL.
Suponga que tengo una estructura de datos como a continuación:

/-----------------------------------------------------\
|  my_header   |  PAYLOAD                             |
\-----------------------------------------------------/
       |                              |
      \ /                            \ /
 not encrypted                      encrypted

I think the proper algorithm would be like this :
   SEND:
   build my_header with my own header.
   encrypt PAYLOAD with encryption function
   attach my_header and PAYLOAD (encrypted) to one buffer
   send it using common POSIX function just like send or sendto
   RECV:
   using common POSIX function just like recv or recvfrom.
   extract my_header and PAYLOAD(encrypted)
   decrypt PAYLOAD with decryption function
   at last i got my_header and PAYLOAD(decrypted).

¿Cómo es su enfoque si enfrenta un problema como lo anterior? Dado que OpenSSL encrypt todos los datos que se envían a la función SSL_Write (CMIIW).

Gracias.

Tal vez, la pregunta apropiada es, ¿cuál es la función de cifrado y descifrado que se puede usar para cifrar/descifrar la carga útil en OpenSSL?

No hay solución correcta

Otros consejos

En realidad, puede dejar que OpenSSL haga mucho para usted.

Puede crear sus primitivas de red como antes y asociar los descriptores de archivos con un contexto SSL abierto, que manejará el apretón de manos SSL, el cifrado y el descifrado. Estoy pasando por alto muchos detalles, pero el código de muestra en el sitio web de OpenSSL y en este libro:

http://www.amazon.com/network-security-openssl- John-viega/dp/059600270x

será muy instructivo. El libro también está disponible en línea, pero creo que tiene que pagar para acceder a él.

En la distribución de OpenSSL, puede encontrar mucho código de muestra que ilustra exactamente cómo hacer esto.

Buena suerte.

OpenSSL viene con una biblioteca libcrypto que se usa comúnmente para realizar un cifrado independiente fuera de un contexto SSL.

http://www.openssl.org/docs/crypto/evp.html

Alternativamente, la parte biografía de la biblioteca puede estar aún más cerca de lo que desea:http://www.openssl.org/docs/crypto/bio.html

Pero si realmente tiene la intención de enviar esto a través de la red, entonces cuestionaría la seguridad de dejar el encabezado sin cifrar. El cifrado es más que privacidad, también se trata de garantizar que los datos no se hayan modificado en tránsito. Si alguien está en condiciones de monitorear su tráfico, entonces generalmente está en condiciones de manipularlo.

Si desea el encabezado sin secuestrar para que pueda leerlo en Wireshark para la depuración, sugiero que haga una bandera en su aplicación para habilitar/deshabilitar completamente el cifrado para su uso en un entorno de depuración.

Si estás construyendo un protocolo encriptado, así es exactamente como lo haría, asumiendo my_header Contiene suficiente información y nada que en sí mismo debe mantenerse seguro, como la clave de la sesión. Los paquetes de red en el nivel bajo (ver tcpdump/libpcap) son solo un char* ("cadena") y extraes diferentes encabezados moviendo a lo largo de la matriz diferentes longitudes, lo que estás sugiriendo sonidos como este.

Cuando usa TLS/DTLS, tiene la opción: cifra todo el marco o nada en absoluto.

Si desea tener algunos datos no tenidos en el marco, entonces probablemente no necesite TLS/DTLS. Sin embargo, puede usar OpenSSL para calcular un hash de su encabezado (usando SHA o cualquier otro algoritmo hash relacionado) y agregarlo al final del marco para evitar la manipulación.

Para la parte cifrada del marco, tendrá que elegir entre algoritmos de cifrado simétricos y asimétricos. Pero sin saber lo que quieres lograr, realmente no puedo aconsejar sobre esto.

Solo tenga en cuenta que los algoritmos simétricos suelen ser más rápidos, pero al principio requieren un intercambio de claves. Para hacerlo, puede usar un algoritmo asimétrico, pero luego, está reinventando TLS/DTLS;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top