Criptografia

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Criptografía

La criptografía es una parte importante de casi todas las aplicaciones web o móviles
y sin embargo la mayoría de los desarrolladores sienten que no lo entienden o, peor
aún, lo están haciendo mal. Sí, el campo de la criptografía está dominado por
matemáticos súper-inteligentes, investigadores y doctorados a montones, pero
gracias a la ardua labor de aquellas personas, tenemos grandes herramientas que
el desarrollador promedio puede beneficiarse.

¿Qué es la criptografía?
La criptografía es la práctica de la protección de la información contra el acceso no
deseado al ocultar o convertirlo en algo sin sentido. Para los desarrolladores, la
criptografía es un tema notoriamente complejo y difícil de implementar.

El objetivo de esta guía es que le guiará a través de los fundamentos de la


criptografía. Como algunos de estos algoritmos y técnicas que se aplican a menudo
depende de su lenguaje y/o framework elegido pero esta guía es de esperar le
ayudará a saber qué buscar. Si eres un desarrollador de Java, echa un vistazo a
Apache Shiro.

Terminología
Primero, un poco de terminología. En la cripto-tierra, se puede dividir la mayoría de
los algoritmos en dos, sistemas de cifrado y hash.

 Cifrados son algoritmos que pueden cifrar o descifrar los datos basados en
claves compartidas o públicas / privadas.
 Hashes (también conocido como Message Digests) son una manera, la
conversión irreversible de una fuente de entrada. A menudo se utiliza para las
contraseñas y las sumas de comprobación.

¿Cuándo utilizar un cifrado o un hash?


Digamos que la contraseña de Sean es ‘Suck!tTrebek’. Su aplicación no necesita
realmente saber el valor bruto de la contraseña. Simplemente tiene que ser capaz
de verificar que cualquier intento de autenticación futuro por Sean le da un valor
coincidente. Hashes son grandes para los que, como el hachís, mientras que un
galimatías, siempre será el mismo para una entrada en particular, dejando de ese
modo a verificar si hay coincidencia. Debido a que sólo tiene el hash para realizar
comparaciones, el gran beneficio para usted es que usted no necesita almacenar
en crudo (texto plano) la contraseña de Sean directamente en su base de datos, lo
que sería una mala idea.

Otro ejemplo es una suma de comprobación o checksum. Una suma de


comprobación es una forma sencilla de saber si los datos se han dañado o alterado
durante el almacenamiento o la transmisión. Usted toma los datos, el hash, y luego
enviar datos junto con el hash (la suma de control). En el extremo receptor, se le
aplica el mismo algoritmo hash a los datos recibidos y comparar ese valor con la
suma de comprobación. Si no coinciden, los datos se han cambiado. Esta es una
de las estrategias que se utilizan para prevenir los ataques man-in-the-middle en
solicitudes a alguna API.

Cifrados por otro lado son su herramienta si va a necesitar el valor original en bruto
(llamado “texto plano” en la criptografía, aunque sean datos binarios) con el tiempo.
Números de tarjetas de crédito son un buen ejemplo de ello. Sean le da su tarjeta
de crédito y más tarde tendrás el valor de texto sin formato para procesar una
transacción. Con el fin de cifrar y descifrar cualquier dato necesitarás ciertas claves
(claves de cifrado) y asegurarse de que las estes manteniendo a salvo.

Trabajando con sistemas de cifrado


Elegir un algoritmo de cifrado
Si usted está leyendo esto … bueno, entonces probablemente debería atenerse a
AES-256 de cifrado, ya que es aprobado por el Ejército de los EE.UU. para el
material ultra secreto.

La mayoría de los lenguajes y muchos frameworks de seguridad admiten múltiples


algoritmos de cifrado, pero determinar cuál es apropiado para usted es un tema
complejo fuera del alcance de esta guía. Consulte a su criptoanalista local.

Los cifrados normalmente vienen en unas pocas variedades. Sistemas de cifrado


simétrico o asimétrico. Sistemas de cifrado simétricos pueden clasificarse en cifrado
por bloques o cifrado en flujo. Vamos a discutir las diferencias.

Cifrado simétrico vs asimétrico


El cifrado simétrico (también conocido como cifrado de clave secreta) utiliza el
mismo (o trivialmente similar) clave tanto para cifrar y descifrar datos. Siempre que
el emisor y el receptor ambos saben la clave, entonces se puede cifrar y descifrar
todos los mensajes que utilizan que utilizan esa tecla. AES y Blowfish son cifrados
simetricos (Block).
Pero podría haber un problema. ¿Qué ocurre si la clave cae en las manos
equivocadas? ¡Oh no!

Los cifrados asimétricos al rescate. El cifrado asimétrico (también conocido como


cifrado de clave pública) utiliza un par de claves, una clave para cifrar y la otra para
descifrar. Una de las claves, la clave pública, se publica abiertamente para que
cualquier persona pueda enviarle un mensaje cifrado correctamente. La otra clave,
la clave privada, la mantiene en secreto para que solo usted pueda descifrar esos
mensajes. Asimétrica suena perfecto, ¿verdad? Por desgracia, también tiene
limitaciones. Es más lento, utilizando más recursos de cómputo que un cifrado
simétrico y se requiere más coordinación entre las partes para cada sentido de la
comunicación.

Considera el cifrado asimétrico hasta que los requisitos del proyecto sugieren lo
contrario. Y siempre recuerda proteger adecuadamente las claves privadas.

Cifrado por bloques vs Cifrado en flujo


Sistemas de cifrado simétricos se pueden clasificar en dos sub-categorías:

 Cifrado por bloques: En estos algoritmos el cifrado se realiza bit a bit.


 Cifrado en flujo: En este tipo de algoritmos, el cifrado se realiza bloque a
bloque.

Un stream (o flujo) de cifrado tiene una clave de transmisión que se utiliza para cifrar
y descifrar datos. Un bloque de cifrado utiliza un “bloque” de los datos (un ‘trozo’ de
bytes = una array de bytes) como la clave que se utiliza para cifrar y descifrar. Se
recomienda que la mayoría de la gente utilice los cifrados por bloque ya que las
claves de matrices de bytes son fáciles de trabajar y almacenar. AES y Blowfish son
ambos Cifrados por bloques, por ejemplo.

Cifrados de flujo tienen sus beneficios (como la velocidad), pero son más difíciles
de trabajar por lo que generalmente no se recomienda a menos que sepas lo que
estás haciendo.

Hay una idea errónea de que los cifrados de bloque son para bloques de datos,
como los archivos y campos de datos, mientras que los cifrados de flujo son para
datos de flujo, como flujos de red. Este no es el caso. La palabra “stream” refleja
una corriente de bits usados para la clave, no los datos en bruto (de nuevo,
_plaintext) está cifrado o descifrado.
Asegurar Claves… Sí
¡Hablando de asegurar sus llaves, usted debe! No, lo digo en serio. Si alguna vez
alguien se apodera de sus claves privadas, todos los datos cifrados puede ser que
también sea en texto plano. Como casi todo en la criptografía, hay estrategias muy
avanzadas, pero la mayoría están fuera del conjunto de habilidades y el presupuesto
de la mayoría de los desarrolladores. Si usted puede permitirse el software de
gestión de claves, entonces es su apuesta más segura y mejor. De lo contrario, aún
puede reducir algunos riesgos con estrategias básicas.

1. Mantenga sus claves en otro servidor y base de datos de los datos cifrados.
2. Mantenga los parches de seguridad de ese servidor 100% hasta al día todo el
tiempo (Firmware, sistema operativo, base de datos, etc.)
3. Bloquee su acceso a la red tanto como puedas. Invierta en un buen firewall.
4. Límite quién en su equipo tiene acceso al servidor y aplicar autenticación de
múltiples factores para que puedan acceso a él.

También podría gustarte