PDF de programación - Criptografía para desarrolladores

Imágen de pdf Criptografía para desarrolladores

Criptografía para desarrolladoresgráfica de visualizaciones

Publicado el 6 de Noviembre del 2018
762 visualizaciones desde el 6 de Noviembre del 2018
165,6 KB
14 paginas
Creado hace 14a (20/03/2010)
Criptografía para desarrolladores

www.segu-info.com.ar

Criptografía para desarrolladores
Autor: Ariel H. Maiorano

Ariel es profesional informático que desarrolla servicios y aplicaciones para Internet desde
hace más de 10 años a través de su empresa m-sistemas. Se destaca sus implementaciones en
criptografía para el comercio electrónico y el almacenamiento seguro de datos.

Además, Ariel es el autor del libro “Criptografía – Técnicas de desarrollo para profesionales”

publicado en marzo de 2010. ISBN: 9789872311384

http://www.cuspide.com/detalle_libro.php/9872311382

http://www.amazon.com/CRIPTOGRAFIA-Tecnicas-Desarrollo-Profesionales-

Spanish/dp/9872311382

Edición y Corrección de este artículo: Lic. Cristian Borghello, CISSP

Fecha Publicación: 22 de marzo de 2010

Publicado en Segu-Info



Introducción

La intención de este artículo es dar cuenta, de manera general y desde el
punto de vista de un desarrollador, de las herramientas actualmente disponibles
para implementar criptografía fuerte en aplicaciones y servicios. Se comentan en
primera instancia las funcionalidades provistas por los entornos de desarrollo más
comunes, luego se presentan tres breves ejemplos prácticos incluyendo código
fuente, para terminar con algunas consideraciones respecto a la estandarización y
aspectos legales aplicables a esta rama de la seguridad informática.

Al margen de la necesidad de conocimientos mínimos en los lenguajes de

programación Java y/o PHP si se quisiera seguir el código fuente de los ejemplos, sí
será conveniente contar con ciertas nociones al menos acerca de algunos conceptos
criptográficos. En Segu-Info puede encontrase lo necesario y más: véase la sección
de criptografía, se trata de un excelente compendio de gran parte de los temas de
la materia. Principalmente, y en lo ocupa a este artículo, consúltense lo referente
a algoritmos de cifrado simétrico, de cifrado asimétrico y autenticación o
autentificación (éste incluye información acerca de funciones de hashing). También
se recomienda la consulta de la información incluida dentro de la sección
"Criptografía de la A-Z", como ser lo referente a Generadores de Números
Aleatorios o Protocolos Criptográficos y Estándares; y de un trabajo sobre los
"Fundamentos de Criptografía" disponible desde aquí.

Herramientas disponibles

Actualmente los diferentes entornos de desarrollo poseen una buena

variedad de funcionalidades criptográficas incorporadas. Para las tareas más
comunes entonces no serán necesarias librerías externas. Cuando, en cambio, fuese
preciso utilizar algoritmos algo más específicos -o aquellos de los más utilizados,
pero en modos, configuraciones o parametrizaciones particulares-, entonces sí nos
veríamos en la necesidad de valernos de librerías, módulos o frameworks
adicionales.



1 de 14

Criptografía para desarrolladores

www.segu-info.com.ar

De manera general, podría entenderse que tanto para hashing como para

cifrado simétrico, el entorno nos proveerá lo necesario en tanto decidamos utilizar
los algoritmos más populares. Si bien el cifrado asimétrico es menos común, sí
encontraremos implementaciones en versiones modernas de los lenguajes Java y
.NET. Esto último no aplica a ambientes limitados; por ejemplo, en el desarrollo
Java para teléfonos celulares o dispositivos móviles, J2ME (Java 2 Micro Edition),
no se dispone por defecto de función criptográfica alguna.

Al hablar de Java para desarrollos que involucren criptografía, se deberá

conocer la Java Cryptography Architecture, o JCA. Esta es una especificación del
lenguaje que especifica interfaces y clases abstractas que sirven de base para las
implementaciones concretas (engines y providers) de algoritmos criptográficos. La
JCA es parte del API de seguridad del lenguaje, desde la JDK 1.1, cuando la JCE era
una extensión aparte. Esta JCE (Java Cryptography Extension) se consideró como la
implementación concreta de algoritmos criptográficos de acuerdo a los
lineamientos definidos por la JCA (incorporada a partir de la JDK 1.4), aunque
actualmente las siglas JCA y JCE también se usan de manera general para referir a
la arquitectura del framework.

Considerando el entorno de desarrollo .NET, el soporte de criptografía lo

encontramos en las funcionalidades provistas por el namespace
System.Security.Cryptography. A partir de esta raíz común encontramos clases que
proveen implementaciones de varios algoritmos criptográficos. El modelo
criptográfico del framework .NET implementa un patrón extensible de herencia de
clases derivadas: existen clases de tipo de algoritmo, a nivel abstracto; luego,
clases de algoritmos, que heredan de una clase de tipo de algoritmo (abstractas
también), y bajo estas últimas, las implementaciones concretas de las clases de
algoritmos.

La función de hashing md5() en PHP quizás sea la función criptográfica de un

entorno de desarrollo más popularmente utilizada. Estuvo disponible desde la
versión 4.0 del lenguaje, y a partir de la versión 4.3 se contaba ya con sha1().
Lamentablemente, no hay mucho más. Para cifrar, firmar, autenticar, etc., en este
entorno, serán necesarias librerías o frameworks adicionales.

Con respecto a los motores de base de datos, al menos los más comúnmente

implementados hoy en día, nótese que así como cuentan con funciones generales
para el manejo de strings, fechas, operaciones matemáticas, etc. (a usarse dentro
de sentencias en lenguaje SQL por supuesto), también disponen de funciones para
la generación de hashes criptográficos o para el cifrado o descifrado de información
(a almacenar o no por el motor).

Resumiendo ahora respecto a qué podríamos hacer con lo disponible por

defecto en una instalación estándar de entornos de desarrollo Java, .NET y PHP, y
en los principales motores de bases de datos, a continuación se intentará un breve
detalle:

• Java: Desde la JDK 1.4 -o J2SE 1.4.2- encontraremos los algoritmos de

hashing MD2, MD5, SHA-1, SHA-256, SHA-384 y SHA-512. Se podrá firmar
digitalmente mediante el algoritmo DSA, cifrar simétricamente mediante
AES, Blowfish, DES, DESede -o TripleDES, o 3DES- y RC2; asimétricamente, a
partir de 1.5 -o J2SE 5.0- con RSA.



2 de 14

Criptografía para desarrolladores

www.segu-info.com.ar
• .NET: Se dispone de MD5 y SHA1 en todas las versiones del framework .NET.
La familia SHA-2 (SHA-256, SHA-385, SHA-512) sólo está disponible a partir
de la versión 3.5, igual que el algoritmo de cifrado simétrico AES. En todas
las versiones en cambio dispondremos de DES, TripleDES y RC2. También se
dispone aquí de los algoritmos asimétricos DSA y RSA.

• PHP: Aquí encontraremos menos opciones, estas son, los algoritmos de

hasing MD5 y SHA-1 únicamente.

• Oracle: Funciones de hashing MD5 y cifrado simétrico DES desde versión 8i;

TripleDES desde 9i; MD4 y SHA-1, AES y RC4, desde la versión 10g.

• MS-SQL: A partir de la versión 2005 se dispone de MD2, MD4, MD5 y SHA-1;

algoritmos de cifrado simétrico disponibles de acuerdo a instalación de
sistema Windows, por ejemplo DES y/o AES, y lo mismo para el cifrado
asimétrico; por ejemplo, RSA.

• MySql: Función de hashing MD5 disponible desde versión 3.23. SHA-1, DES y
AES desde 4.0/4.1. Familia SHA-2 disponible a partir de versiones 6.0/6.0.5.

Esto sería entonces lo que podríamos considerar incluido dentro de cada uno

de los lenguajes o entornos más comúnmente utilizados. Téngase en cuenta
además que algunos algoritmos o protocolos se definen a partir de otras funciones
criptográficas, que muchas veces sí están incorporadas. Por lo tanto, en tales
casos, no sería estrictamente necesaria la utilización de librerías extra (pongamos
por caso, lo especificado en el estándar PKCS #5 respecto a la generación de llaves
a partir de contraseñas; ver ejemplo práctico #1).

De lo anterior se desprende que, si se tuvieran necesidades específicas no

contempladas en las versiones a utilizar de la máquina virtual Java o en el
ambiente PHP, se vería uno obligado a utilizar librerías o frameworks adicionales.
Si bien hay muchas alternativas disponibles (muchas ellas de uso libre y de código
abierto), se comentarán algunas opciones a continuación.

En PHP, mediante la librería Mcrypt, obtendremos la posibilidad de utilizar

los algoritmos de cifrado simétrico DES, TripleDES, Blowfish, Rijndael (AES),
Twofish, IDEA, RC2, RC4, RC6 y Serpent entre otros. La librería MHash proveerá una
variedad importante de funciones de hashing, incluyendo por supuesto a la familia
SHA-2. Por último, el package PEAR Crypt_RSA servirá para generar llaves, firmar y
comprobar firmas, y, por supuesto, cifrar y descifrar asimétricamente. Podrían
también consultarse los packages Crypt_HMAC, Crypt_HMAC2, y
Crypt_DiffieHellman (estos dos últimos sólo para PHP 5), como sus nombres lo
indican, para generar HMACs o códigos de autenticación de mensajes basados en
hashing (ver ejemplo práctico #2), y para el intercambio de claves (algoritmo DH),
respectivamente.

Si Java fuese nuestro ambiente o entorno de desarrollo, no debería dejar de

consultarse la documentación del proyecto open-source de Bouncy Castle. Desde
allí puede descargarse una librería de funciones que implementa una cantidad muy
importante de algoritmos criptográficos. Podría decirse que implementa la mayoría
de los más conocidos y utilizados, tanto para el cifrado simétrico y asimétrico,
hashing, generación de claves, códigos de autenticación de mensajes, etc. (entre
otros: MD2/4/5, SHA1/2, Tiger, Whirlpool, AES, Blowfish, DES, DESede, GOST,
IDEA, RC2/4/5/6, SEED, Serpent, Twofish, HC256, RSA, ElGamal, Diffie-Hellman).



3 de 14

Criptografía para desarrolladores

www.segu-info.com.ar

Se distribuye como una implementación de lo que sería un provider JCE, o de
manera separada, para ser utilizada por ejemplo en desarr
  • Links de descarga
http://lwp-l.com/pdf14142

Comentarios de: Criptografía para desarrolladores (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad