Seguridad: ¿Cómo almacenar Llave de encriptación localmente?

04/01/2007 - 19:05 por Néstor Sánchez A. | Informe spam
Hola,
tengo la siguiente duda respecto a seguridad y quisiera saber cuál es la
mejor práctica.
Para una aplicación WinForms C/S se requiere almacenar la Llave de
encriptación localmente.
¿cómo se podría almacenar la llave para que fuera accedida sólo por la
aplicación WinForms y no un usuario malicioso?
Alternativas:
- Un archivo: La clave tendría que a su vez estar encriptada para que no
fuera visible a simple vista.
- En duro en la aplicación: El problema es que el programa se puede
decompilar (incluso si está ofuscado).
- ¿Depender de un servicio del Sistema Operativo u otro ente externo?
Gracias de antemano,

Néstor.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
04/01/2007 - 19:31 | Informe spam
"Néstor Sánchez A." wrote in message
news:
¿cómo se podría almacenar la llave para que fuera accedida sólo por la
aplicación WinForms y no un usuario malicioso?

Alternativas:
- Un archivo: La clave tendría que a su vez estar encriptada para que no
fuera visible a simple vista.



No resuelve nada. Vuelves a tener el problema de cómo almacenas la clave
que sirve para desencriptar el archivo.

- En duro en la aplicación: El problema es que el programa se puede
decompilar (incluso si está ofuscado).



Cierto. Viene a ser lo mismo que almacenarla en un archivo.

- ¿Depender de un servicio del Sistema Operativo u otro ente externo?



El sistema operativo tiene un servicio para esto, que se llama DPAPI
(Data Protection API).

Otra alternativa: Utilizar criptografía de clave pública. La aplicación
cliente tiene (en un archivo sin encriptar) la clave pública (pero no la
privada) del servidor. Cuando tiene que comunicarse con éste, genera al azar
una clave de criptografía simétrica, la cifra mediante el algoritmo de clave
pública y se la envía al servidor. Nadie más la puede descifrar, ya que para
ello se necesita la correspondiente clave privada, que solo está en el
servidor. El servidor usa la clave privada para decodificar la clave
simétrica generada al azar, con lo que sólo él y el cliente tienen dicha
clave simétrica. Una vez completados estos preliminares, la comunicación
cliente/servidor se realiza empleando esta clave simétrica, que en ningún
momento ha estado grabada en ningún sitio del PC.

El proceso se puede sofisticar más si es necesario, por ejemplo, se puede
usar un certificado (en lugar de un simple fichero) para contener la clave
privada del servidor, para que no pueda ser falsificada.
Respuesta Responder a este mensaje
#2 Néstor Sánchez A.
05/01/2007 - 16:20 | Informe spam
Eso que dices se podría averiguar por decompilación del programa.
En otras palabras... creo que no se puede. Si te pueden decompilar el
programa entonces pueden crear una réplica que se haga pasar por tu
aplicación y conectars al server y aquel no tendría como diferenciar la
aplicación válida de la impostora.

"SebaCabrera" escribió en el mensaje
news:%
Se podria guardar en un recurso previo encriptarla y luego dividirla en n
partes y a la cryptacion caracteres falso que vos sepas.
"Néstor Sánchez A." escribió en el mensaje
news:
Hola,
tengo la siguiente duda respecto a seguridad y quisiera saber cuál es la
mejor práctica.
Para una aplicación WinForms C/S se requiere almacenar la Llave de
encriptación localmente.
¿cómo se podría almacenar la llave para que fuera accedida sólo por la
aplicación WinForms y no un usuario malicioso?
Alternativas:
- Un archivo: La clave tendría que a su vez estar encriptada para que no
fuera visible a simple vista.
- En duro en la aplicación: El problema es que el programa se puede
decompilar (incluso si está ofuscado).
- ¿Depender de un servicio del Sistema Operativo u otro ente externo?
Gracias de antemano,

Néstor.





Respuesta Responder a este mensaje
#3 Néstor Sánchez A.
05/01/2007 - 16:21 | Informe spam
Pero si el programa es decompilado entonces se puede crear una réplica
impostora y acceder al server.
Según veo no hay solución.


"Alberto Poblacion"
escribió en el mensaje news:
"Néstor Sánchez A." wrote in message
news:
¿cómo se podría almacenar la llave para que fuera accedida sólo por la
aplicación WinForms y no un usuario malicioso?



Alternativas:
- Un archivo: La clave tendría que a su vez estar encriptada para que no
fuera visible a simple vista.



No resuelve nada. Vuelves a tener el problema de cómo almacenas la
clave que sirve para desencriptar el archivo.

- En duro en la aplicación: El problema es que el programa se puede
decompilar (incluso si está ofuscado).



Cierto. Viene a ser lo mismo que almacenarla en un archivo.

- ¿Depender de un servicio del Sistema Operativo u otro ente externo?



El sistema operativo tiene un servicio para esto, que se llama DPAPI
(Data Protection API).

Otra alternativa: Utilizar criptografía de clave pública. La aplicación
cliente tiene (en un archivo sin encriptar) la clave pública (pero no la
privada) del servidor. Cuando tiene que comunicarse con éste, genera al
azar una clave de criptografía simétrica, la cifra mediante el algoritmo
de clave pública y se la envía al servidor. Nadie más la puede descifrar,
ya que para ello se necesita la correspondiente clave privada, que solo
está en el servidor. El servidor usa la clave privada para decodificar la
clave simétrica generada al azar, con lo que sólo él y el cliente tienen
dicha clave simétrica. Una vez completados estos preliminares, la
comunicación cliente/servidor se realiza empleando esta clave simétrica,
que en ningún momento ha estado grabada en ningún sitio del PC.

El proceso se puede sofisticar más si es necesario, por ejemplo, se puede
usar un certificado (en lugar de un simple fichero) para contener la clave
privada del servidor, para que no pueda ser falsificada.




Respuesta Responder a este mensaje
#4 Alberto Poblacion
05/01/2007 - 16:52 | Informe spam
"Néstor Sánchez A." wrote in message
news:
Pero si el programa es decompilado entonces se puede crear una réplica
impostora y acceder al server.
Según veo no hay solución.



Estamos mezclando dos cosas: autenticación y cifrado. La pregunta
original sólo se refería al cifrado, y con este sistema se resuelve: Una vez
establecida la comunicación no es posible interceptarla escuchando en la
linea, por lo que si el usuario teclea algo y se lo manda al servidor, nadie
puede "espiar" y saber qué es lo que el usuario ha preguntado o qué es lo
que el servidor ha contestado.

Otra cosa distinta es la autenticación, es decir, saber QUIEN es el que
está haciendo esas preguntas al servidor, cosa que efectivamente no se
resuelve con el mecanismo anterior. Una forma de resolverlo es tecleando una
password y enviándola al servidor para que éste la compruebe. Dicha password
obviamente debe transmitirse a través de la conexión cifrada para que nadie
pueda "capturarla". En consecuencia, es útil y tiene sentido establecer
dicha comunicación cifrada (con el mecanismo que hemos descrito) ANTES de
haber autenticado al usuario, ya que dicha autenticación se realiza a través
de la conexión cifrada. Aunque alguien cree una réplica impostora y por
tanto pueda abrir un canal encriptado al servidor, si no sabe la password
que tiene que teclear para transmitir por el canal encriptado, el servidor
no le hace caso.

Por cierto, básicamente este mecanismo es el mismo que usa el navegador
de internet cuando te conectas a un servidor con https:. El https lo único
que hace es establecer el canal cifrado para que no se pueda espiar la
linea, pero eso no quita que luego, si el servidor lo necesita, tengas que
autenticarte, por ejemplo, accediendo a un formulario de login. La conexión
encriptada impide que alguien pinchando la linea sepa qué es lo que estás
tecleando en el formulario de login.
Respuesta Responder a este mensaje
#5 SebaCabrera
05/01/2007 - 20:39 | Informe spam
Se podria guardar en un recurso previo encriptarla y luego dividirla en n
partes y a la cryptacion caracteres falso que vos sepas.
"Néstor Sánchez A." escribió en el mensaje
news:
Hola,
tengo la siguiente duda respecto a seguridad y quisiera saber cuál es la
mejor práctica.
Para una aplicación WinForms C/S se requiere almacenar la Llave de
encriptación localmente.
¿cómo se podría almacenar la llave para que fuera accedida sólo por la
aplicación WinForms y no un usuario malicioso?
Alternativas:
- Un archivo: La clave tendría que a su vez estar encriptada para que no
fuera visible a simple vista.
- En duro en la aplicación: El problema es que el programa se puede
decompilar (incluso si está ofuscado).
- ¿Depender de un servicio del Sistema Operativo u otro ente externo?
Gracias de antemano,

Néstor.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida