18
Feb
2012

Live! 2.0

Live martin.com.uy

Hago un paréntesis en las publicaciones habituales porque quiero presentarles Live! 2.0 (http://martin.com.uy/live). Es una versión renovada de este mini-sitio personal, que utilizo principalmente para subir imágenes y publicar notas.

Fue programado desde cero con Symfony 2 (php) y jQuery (javascript + ajax). Utilizo también el ORM Doctrine, el motor de plantillas Twig y Swiftmailer -para el envío de mails de notificación-.

Tenía desde hace tiempo en el debe aprender esas tecnologías y la verdad que me dejaron muy satisfecho.

El sitio fue probado en Firefox, Chrome y Safari. En Internet Expĺorer ni siquiera me molesté en probarlo…

Son bienvenidos los comentarios y sugerencias! :)

15
Dec
2011

Okteta: el mejor editor hexadecimal

okteta editor hexadecimal

En el día de hoy, fastidiado por la anti-usabilidad y anti-funcionalidad del editor hexadecimal hexedit, me puse a buscar un remplazo y me encontré esta pieza de software maravillosa llamada Okteta.

Okteta está desarrollado dentro del proyecto KDE. Por lo tanto, para instalarlo puede requerirse una cantidad grande de librerías: unos 220Mb apróx. si no se tienen instaladas las librerías de KDE y unos 15Mb teniendo instaladas las librerías básicas. Yo lo instalé en Linux; desconozco si en KDE para Windows también funciona.

Se puede editar el archivo con comodidad, insertar/editar/eliminar bytes, insertar texto, cambiar la codificación de los caracteres a nivel de visualización, visualizar los valores en binario/octal/decimal en lugar de hexa, insertar marcadores (comentarios) por byte, realizar operaciones a nivel de bits, etc.

La última versión estable es la 0.5. Se encuentra licenciado bajo la licencia GPL versión 2.


Leer el resto del artículo »

13
Dec
2011

Mi propia implementación de SHA1

Quiero presentarles en este artículo mi propia implementación del algoritmo de hashing SHA1. Me basé en el estándar Secure Hash Standard (FIPS 180-1) de la Federal Information Processing Standards Publications (FIPS) (link).

El trabajo fue realizado con fines educativos únicamente. Desaconsejo su utilización en entornos de producción. Busqué además la claridad del código en lugar de la eficiencia en las operaciones y estructuras de datos.

Para el desarrollo utilicé el framework Qt y el lenguaje de programación C++. Si desean recompilar o ejecutar el binario, deberán instalar la SDK o las librerías de Qt respectivamente.

Los comandos de ejecución son los siguientes:

Calcular el hash a la cadena “abcdefg”
./Sha1 abcdefg

Calcular el hash a la cadena por defecto (“abc”)
./Sha1

Para calcular el hash a una cadena binaria arbitraria (no tiene por qué ser múltiplo de 8), se debe modificar el src -en el código hay comentarios para esto- y recompilar.


Leer el resto del artículo »

6
Dec
2011

Criptografía: IV + demo en OpenSSL

Como mencionamos en el artículo anterior, el IV o Initialization Vector es un vector de bits que permite aplicar una operación XOR con el primer bloque de largo fijo del mensaje a cifrar. De esta forma, si utilizamos como regla no repetir el IV entre distintos mensajes -para una misma clave-, por más que se repita el primer bloque a cifrar a nivel de plaintext, el ciphertext será diferente.

Propongo visualizar los conceptos explicados hasta el momento haciendo unas pruebas simples con OpenSSL.

Tenemos un archivo con el siguiente contenido:

root@martin-laptop:~/ciphers# cat archivo
plain text, este es un texto de pruebas que debe ocupar mas 128 bits
root@martin-laptop:~/ciphers# hexdump archivo
0000000 6c70 6961 206e 6574 7478 202c 7365 6574
0000010 6520 2073 6e75 7420 7865 6f74 6420 2065
0000020 7270 6575 6162 2073 7571 2065 6564 6562
0000030 6f20 7563 6170 2072 616d 2073 3231 2038
0000040 6962 7374 000a
0000045

Como podemos ver, el archivo contiene exactamente 70 bytes = 560 bits. Esto es igual a 4 bloques enteros de 128 bits (4 * 128 = 512 bits) + 48 bits más.


Leer el resto del artículo »

5
Dec
2011

Criptografía: Padding + ECB + CBC

Para el cifrado de un mensaje, se divide a nivel binario el mensaje en bloques de largo fijo. Este largo puede ser por ejemplo de 128 bits (4 bytes) y depende de cada algoritmo. Se llama block cipher al algoritmo que dado un bloque de largo fijo y una clave, lo transforma en un bloque cifrado (ciphertext).

Los mensajes que se desean cifrar no necesariamente cumplen con la propiedad de tener un largo múltiplo del largo fijo del bloque. Padding es una técnica que permite expandir el último bloque del mensaje hasta lograr el tamaño requerido. Esta operación debe poder ser revertida por el destinatario del mensaje. En otras palabras, el destinatario debe poder determinar con precisión en el último bloque cuántos bits corresponden al mensaje real y cuántos bits fueron agregados por la técnica de padding.

Existen múltiples técnicas de padding. Bruce Schenier, en su libro Cryptography Engineering, menciona dos:

  • Agregar al final del mensaje un byte con el valor 128 y luego agregar tantos 0′s como haga falta para alcanzar el largo del bloque de largo fijo.
  • Determinar el número de bytes que se requieren de padding. Supongamos que este número es n. Completar el mensaje con n bytes de valor n.

Cualquier técnica es válida mientras permita completar el mensaje hasta el largo requerido y el receptor pueda obtener con exactitud el mensaje original -sin bits extra y sin bits faltantes-.


Leer el resto del artículo »

28
Jul
2011

Plan de Continuidad del Negocio y Análisis de Impacto

A continuación, quiero presentar un abordaje posible para el Análisis de Impacto en el Negocio (Business Impact Analysis) y la elaboración de Planes de Continuidad del Negocio (BCP):

1. Identificación de los procesos de la organización.

2. Análisis del impacto que tiene la suspensión de cada proceso desde la perspectiva económica, productiva, competitiva, de imagen o reputación, contractual y legal. Determinación de la criticidad de los procesos.

3. Definición del tiempo máximo que es tolerable la suspensión total o parcial de un proceso.

4. Identificación de los recursos físicos, tecnológicos y humanos que involucra cada proceso.

5. Identificación de las amenazas a las que están sujetos estos recursos.

6. Análisis de la probabilidad de ocurrencia de estas amenazas.

7. Análisis del impacto que puede tener la amenaza en los recursos y la no-disponibilidad de los recursos en los procesos. Por ejemplo: if a tornado were to hit and affect 65 percent of the facility, the company could be at risk of losing computing capabilities for up to 72 hours, power supply for up to 24 hours, and a full stop of operations for 76 hours, which would equate to a loss of $125,000 each day. (McGraw – Hill)

8. Desarrollo de planes de continuidad que para cada amenaza, planteen una alternativa para continuar el proceso según las siguientes consideraciones:

  • el proceso se continúa dentro del tiempo máximo tolerable de suspensión,
  • el proceso se continúa independientemente de los recursos afectados, y
  • el riesgo, dado por la probabilidad de ocurrencia de una amenaza y el impacto en los procesos de la organización, es una guía para medir los esfuerzos destinados a la continuidad.
28
Jul
2011

Plan de Continuidad del Negocio: amenazas

Las amenazas que pueden enfrentar los procesos de una organización pueden ser eventos naturales (inundaciones, terremotos, huracanas, descargas eléctricas), eventos causados por el hombre (ataques, fraude, ausencia) o por desperfectos técnicos (fallas en las comunicaciones, fallas en los sistemas).

Cualquiera sea la amenaza, puede causar escenarios como los siguientes en la organización:

  • Mal funcionamiento de los equipos o equipos no disponibles
  • Utilidades no disponibles (HVAC, energía, líneas de comunicación)
  • Instalaciones no disponibles
  • Personal crítico no disponible
  • Vendedores y proveedores de servicios no disponibles
  • Corrupción de software y/o datos

Es de interés para la organización la naturaleza de la amenaza y el impacto que genera en los recursos o activos que dan soporte a los procesos. La naturaleza de la amenaza permite el desarrollo de planes específicos de prevención y recuperación, mientras que el impacto en los recursos permite tomar acciones concretas para lograr la continuidad de las operaciones.

19
Jul
2011

Plan de Continuidad del Negocio (BCP)

Para la construcción de un Plan de Continuidad del Negocio (BCP) debe comprenderse el objetivo principal de la organización: ¿ser rentable vendiendo productos o servicios? ¿brindar servicios de interés público? ¿brindar servicios relacionados a la salud o binestar de las personas? En otras palabras, ¿qué buscamos estando preparados para continuar las operaciones en el caso de un acontecimiento inesperado?

Es importante en este sentido que la alta gerencia comprenda los objetivos, alcance y beneficios de la continuidad del negocio. Debe realizarse una declaración a nivel de las políticas de la organización donde se establezcan los lineamientos generales y el marco de trabajo para las actividades que engloba. Es indispensable el apoyo de la dirección de la organización, la asignación de recursos humanos calificados, la planificación y el presupuesto.


Leer el resto del artículo »

21
Mar
2011

Funciones virtuales en C++

En la clase pasada de Análisis Numérico, Alejandro mencionó la posibilidad de utilizar funciones virtuales en las clases “padre” definidas en el lenguaje C++.

¿Qué son las funciones virtuales?

Son funciones que pueden ser reimplementadas en las subclases, comportamiento que por defecto no se permite. Si la función es puramente virtual, no existe una implementación en la clase padre sino que se debe especificar en alguna subclase. Es una forma de definir interfaces.

Veamos el siguiente ejemplo tomado del libro C++ GUI Programming with Qt 4 (segunda edición):

#ifndef SHAPE_H
#define SHAPE_H
#include "point2d.h"
class Shape
{
public:
      Shape(Point2D center) { myCenter = center; }
      virtual void draw() = 0;
protected:
      Point2D myCenter;
};
#endif

Allí se puede visualizar que la función draw es virtual. También, podemos ver que es puramente virtual por la definición draw() = 0. ¡Que sintáxis horrible!


Leer el resto del artículo »

13
Mar
2011

Verisign: DNSSEC para .com y .net en 2011

(Ver video)

Supuestamente Verisign estaría aplicando la especificación DNSSEC a las dos zonas más importantes de Internet: .com y .net. Si bien existen actualmente zonas como .se, .br, .gov, .edu que utilizan DNSSEC, este cambio le daría a la especificación un reimpulso y mayor alcance.

Según un anuncio del SeCIU, se está estudiando que en el presente año la zona .uy también utilice DNSSEC.

Sería interesante ver en los navegadores un indicador para diferenciar cuando es posible trazar la cadena de confianza desde el trust-anchor al nombre resuelto y cuando no. Sin embargo, dada la cantidad de sitios que no van a tener Resource Records firmados, el usuario no le prestaría mayor importancia a esto -como sucede con SSL, que no hay demasiada consciencia-. Una vez más: el desafío no es tecnológico, es cultural.


Leer el resto del artículo »