Juan Pablo Prado

Software Engineer

  • Home
  • About
  • Contact

Connect

  • Github
  • Linkedin
  • Twitter

Juan Pablo Prado © 2021

REST

mayo 15, 2015 By Juan Prado Leave a Comment

Arquitectura web cliente-servidor

La esencia de la Web no ha cambiado. Todavía se compone de servidores que sirven documentos HTML a los clientes a través del protocolo HTTP.

REST

Una arquitectura web cliente-servidor se asemeja más a la arquitectura subyacente de la propia Web. Aunque no técnicamente específicos del protocolo, REST se desarrolló en base sobre y en conjunción con HTTP. REST define esencialmente las limitaciones en el uso de HTTP. Busca describir una aplicación web bien diseñada: una aplicación fiable que funciona bien, escala, tiene un diseño simple y elegante, y puede ser modificado fácilmente.

De hecho para enfatizar con mayor precisión los retos en el entorno web moderno, debemos tener en cuenta varios dispositivos e implementaciones en la nube.

La idea de la especificidad del medio es importante ya que, si se ignora la naturaleza subyacente de una plataforma, el sistema resultante nunca funcionará de una manera óptima o no funcionará en absoluto. Esto se ha vuelto dolorosamente obvio en muchas áreas de la tecnología.
El área específica de “la especificidad del medio” que ha sido ignorado en el desarrollo web en general (y en frameworks de componentes en particular) es la naturaleza de cliente-servidor sin estado de la propia Web.

Filed Under: Sin categoría

Criptografía

abril 30, 2015 By Juan Prado Leave a Comment

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.

Fuente: Cryptography 101 – Stormpath

Filed Under: Sin categoría

Haciendo el desarrollo del software más simple

abril 29, 2015 By Juan Prado Leave a Comment

El Software es complejo por naturaleza, diseñar, desarrollar, entregar y mantener. Todo el mundo sabe eso, ¿cierto? Nuevos planteamientos al desarrollar aplicaciones y cambios fundamentales en las formas que las empresas de todo tipo funcionan están desafiando la creencia de que la satisfacción de las necesidades de software a los clientes, requieren de un ejército de especialistas que trabajan en una jerarquía mantenida bajo estricto control. Centrarse en los resultados repetibles y APIs reutilizables podrá  eliminar la complejidad del proceso de desarrollo.

Implementando una arquitectura cliente servidor, nos podemos ocupar del modelo y la lógica de negocio del lado de las APIs y el cliente, donde el usuario solo interactuaría con una interfaz para dicho propósito.

Filed Under: Sin categoría

  • « Previous Page
  • 1
  • …
  • 4
  • 5
  • 6

Categorías

  • Uncategorized