Prácticas de programación segura

Listado de buenas prácticas a la hora de escribir código seguro:

  • Estar al día en temas de seguridad
  • Precaución en el manejo de datos: limpiar datos, comprobar variables, ficheros, parámetros, URL, etc.
  • Reutilizar código que se sabe que es seguro
  • Tener prácticas de de revisión de fallos: revisión por parte de más personas, verificaciones independientes, uso de herramientas de seguridad
  • Configuración correcta de permisos y roles
  • Evitar lo siguiente: rutas relativas, llamar a programas de forma no segura, pensar que el usuario actúa con buena intención, contraseñas inseguras, enviar contraseñas por mail, distribuir información sin seguridad, etc.

Criptografía de clave pública y clave privada

Etimológicamente la palabra Criptología proviene del griego (criptos = oculto y logos = ciencia, tratado) y denota de forma genérica dos disciplinas opuestas pero a su vez complementarias: la Criptografía y el Criptoanálisis.

La Criptografía diseña procedimientos para cifrar, es decir, para ocultar o enmascarar una determinada información confidencial.

La Criptografía se puede considerar la parte «constructiva» de este proceso
mientras que el Criptoanálisis es claramente la parte «destructiva». Sin embargo, ambas disciplinas siempre se han desarrollado de forma conjunta puesto que cualquier procedimiento de cifrado da lugar a un criptoanálisis o, al menos, a un intento de criptoanálisis.

Según sean las claves utilizadas en el proceso de cifrado/descifrado, existe una primera clasificación de métodos criptográficos:

  • MÉTODOS CRIPTOGRÁFICOS DE CLAVE SIMÉTRICA: son aquellos en los que la clave de cifrado coincide con la clave de descifrado. Esta clave única tiene que permanecer secreta y ser conocida exclusivamente por A y B. Este hecho presupone que emisor y receptor se han puesto previamente de acuerdo en la determinación de la misma o que existe un centro de distribución de claves, que por un canal seguro, la hace llegar a ambos comunicantes. Estos métodos tienen pues que solventar el difícil problema de la distribución de claves.
  • MÉTODOS CRIPTOGRÁFICOS DE CLAVE ASIMÉTRICA: son aquellos en los que la clave de cifrado es diferente a la de descifrado. En general la clave de cifrado es conocida libremente por el público, mientras que la de descifrado es conocida únicamente por el usuario sin tener que compartirla con nadie. Estos métodos claramente evitan el problema de la distribución de claves.

Principales aplicaciones de la criptografía

La criptografía es una disciplina con multitud de aplicaciones, muchas de las cuales están en uso hoy en día. Entre las más importantes destacamos las siguientes:

  • Seguridad de las comunicaciones. Es la principal aplicación de la criptografía a las redes de computadores, ya que permiten establecer canales seguros sobre redes que no lo son. Además, con la potencia de cálculo actual y empleando algoritmos de cifrado simétrico (que se intercambian usando algoritmos de clave pública) se consigue la privacidad sin perder velocidad en la transferencia.
  • Identificación y autentificación. Gracias al uso de firmas digitales y otras técnicas criptográficas es posible identificar a un individuo o validar el acceso a un recurso en un entorno de red con más garantías que con los sistemas de usuario y clave tradicionales.
  • Certificación. La certificación es un esquema mediante el cual agentes fiables (como una entidad certificadora) validan la identidad de agentes desconocidos (como usuarios reales). El sistema de certificación es la extensión lógica del uso de la criptografía para identificar y autentificar cuando se emplea a gran escala.
  • Comercio electrónico. Gracias al empleo de canales seguros y a los mecanismos de identificación se posibilita el comercio electrónico, ya que tanto las empresas como los usuarios tienen garantías de que las operaciones no pueden ser espiadas, reduciéndose el riesgo de fraudes y robos.

Protocolos criptográficos

Un protocolo criptográfico o protocolo de seguridad (también llamado protocolo de cifrado) es un protocolo abstracto o concreto que realiza funciones relacionadas con la seguridad, aplicando métodos criptográficos.

Los protocolos criptográficos se usan ampliamente para transporte de datos seguros a nivel de aplicación.

Un protocolo criptográfico comúnmente incorpora por lo menos uno de los siguientes aspectos:

  • Establecimiento de claves
  • Autenticación de entidades
  • Cifrado simétrico y autenticación de mensajes
  • Transporte de datos en forma segura a nivel de aplicación
  • Métodos de no repudio

Política de seguridad

Los ficheros de política de seguridad sirven para configurar qué permisos están habilitados para el código obtenido de los orígenes de código especificados.

Programación de mecanismos de control de acceso

Depende del sistema operativo y lenguaje de programación que se utilicen.

Encriptación de información (cifrado)

Tipo de AlgoritmoAcreditados por el CCN
Cifrado SimétricoTDEA (Triple Data Encryption Algorithm)
AES (Advanced Encryption Standard)
Algoritmos AsimétricosDSA (Digital Signature Algorithm)
ECDSA (Elliptic Curve Digital Signature Algorithm)
RSA (Criptosistema RSA)
ECIES (Elliptic Curve Integrated Encryption Scheme)
Intercambio de ClaveDH o DHKA (Diffie-Hellman Key Agreement)
MQV (Menezes-Qu-Vanstone Key Agreement)
ECDH (Elliptic Curve Diffie-Hellman)
ECMQV (Elliptic Curve Menezes-Qu-Vanstone)
Funciones resumen (Hash)SHA-2 (Secure Hash Algorithm)
HMAC (Hash Message Authentication Code )

Protocolos seguros de comunicaciones

Los datos que circulan a través de la red entre aplicaciones son accesibles por terceras personas ajenas a la comunicación, es necesario evitarlo a toda costa mediante el uso de protocolos seguros.

También si importante asegurarse de que los datos no se modifiquen durante el transporte. Los protocolos que aseguran la información a nivel de capa de transporte son SSL y TLS.

El protocolo SSL

Originalmente diseñado por Netscape para establecer comunicaciones seguras con protocolos como HTTP o FTP. Permite negociar qué algoritmos se van a emplear, intercambiar las claves de encriptación y la autentificación de clientes y servidores.

Existen tres versiones del protocolo, la cuarta es una mejora del SSLv3 y se conoce con el nombre de TLS.

El protocolo TLS (Transport Layer Security)

Es una evolución del protocolo SSL (Secure Sockets Layer). La última propuesta de estándar está documentada en la referencia [RFC_2246].

Los objetivos del protocolo son varios:

  • Seguridad criptográfica. El protocolo se debe emplear para establecer una conexión segura entre dos partes.
  • Interoperabilidad. Aplicaciones distintas deben poder intercambiar parámetros criptográficos sin necesidad de que ninguna de las dos conozca el código de la otra.
  • Extensibilidad. El protocolo permite la incorporación de nuevos algoritmos criptográficos.
  • Eficiencia. Los algoritmos criptográficos son costosos computacionalmente, por lo que el protocolo incluye un esquema de caché de sesiones para reducir el número de sesiones que deben inicializarse desde cero (usando criptografía de clave pública).

El protocolo SSL/TLS tiene multitud de aplicaciones en uso actualmente. La mayoría de ellas son versiones seguras de programas que emplean protocolos que no lo son. Hay versiones seguras de servidores y clientes de protocolos como el http, nntp, ldap, imap, pop3, etc.

Existen multitud de implementaciones del protocolo, tanto comerciales como de libre distribución. Una de las más populares es la biblioteca openssl, escrita en C y disponible bajo licencia GNU. Incluye todas las versiones del SSL y el TLS y un gran número de algoritmos criptográficos, algunos de los cuales ni tan sólo son empleados en el estándar TLS. La biblioteca está disponible en el URL http://www.openssl.org. En esa misma dirección se puede encontrar una lista de referencias a otras implementaciones gratuitas y comerciales de los protocolos SSL y TLS y aplicaciones que los emplean.

Programación de aplicaciones con comunicaciones seguras

Depende del sistema operativo y lenguaje de programación que se utilicen.