lunes, 1 de agosto de 2011

Encriptar Información Parte I (Base de datos)

Muchas veces por motivos de seguridad se nos hace necesario encriptar información. La gran pregunta es donde es más recomendable hacerlo (Aplicación, datos) y mi respuesta es clara “todo depende del proyecto(de claro nada jajaja) en post de ayudar les voy a dejar un tips para Oracle y otro en la segunda parte de este post en C#.

Encriptación de datos en la base de datos

Las ventajas de encriptar cadenas y campos dentro de la base de datos son las siguientes:

1.- Aumento del Nivel de seguridad externo de una solución, ya que hace necesario en la mayoría de los casos que el atacante deba tener un acceso considerable al servidor de base de datos para robar información.

2.- Aumento del Nivel de seguridad interno de una solución, esto se explica mucho mejor con un ejemplo: supongamos que tenemos una tabla Usuario en donde se almacena el rut y el password, si no tenemos encriptada la información ésta será accesible por todos los funcionarios (dba, desarrolladores) que tengan acceso al esquema.

Las desventajas:

1.- A más datos encriptados más lento y complejo será nuestro trabajo y el acceso a los datos, hay que encriptar sólo lo necesario.

2.- Si un proyecto no ésta bien diseñado en cuanto a niveles de seguridad, la encriptación solo será un maquillaje sin consistencia.

A continuación les dejo una función que encripta los datos y a su vez transforma la cadena encriptada a un Hexadecimal, esto último es solo si quieren ocupar esta cadena desde una aplicación Web.

CREATE OR REPLACE FUNCTION CINTEGRALC.encript(url varchar2)

RETURN varchar2 IS

hexvalue varchar2(5000);

enc_key RAW(8) := UTL_RAW.cast_to_raw('EDC34rfv');

l_enc_val varchar2 (2000);

l_enc_val_raw raw(2000);

l_mod number := DBMS_CRYPTO.ENCRYPT_DES

+DBMS_CRYPTO.CHAIN_ECB

+DBMS_CRYPTO.PAD_PKCS5;

BEGIN

l_enc_val_raw := dbms_crypto.encrypt

(

UTL_I18N.STRING_TO_RAW(url,'WE8ISO8859P1'),

l_mod,

enc_key

);

l_enc_val:= UTL_I18N.RAW_TO_CHAR(l_enc_val_raw,'WE8ISO8859P1');

for i in 1..length(l_enc_val) loop

hexvalue := hexvalue||hextoraw(to_char(ascii(substr(l_enc_val, i, 1)), 'FMXX'));

end loop;

RETURN hexvalue;

END encript;

Dentro de ésta función la que realmente hace la magia es DBMC_CRYPTO.ENCRYPT en este caso me pide tres parámetros:

1.- UTL_I18N.STRING_TO_RAW(url,'WE8ISO8859P1'), -> cadena a encriptar mas el tipo de globalización de Oracle.

2.- l_mod -> este es el tipo de cifrado, en este caso le solicitamos que opere con un cifrado en bloque de 3

3.- enc_key -> por último la clave con la que se está encriptando les recomiendo útilizar una clave con la misma estructura que se define en el ejemplo

En Sql server 2005 y 2008 es con la siguiente función encryptbypassphrase es tan sencillo que no necesita ejemplo

miércoles, 20 de julio de 2011

LLamada a un metodo XML-RPC

XML-RPC es un protocolo desarrollado por Microsoft en conjunto con un ingeniero (no recuerdo el nombre) de la empresa UserLand Software a fines de los 90, ocupa XML como medio de codificación de datos y el protocolo http para la transmisión de mensajes, si bien es un protocolo simple y muy básico en cuanto a funcionalidades es la base de lo conocemos actualmente como SOAP. La invocación de estos servicios no es una tarea compleja pero debido a la escasa literatura que existe respecto a este tema he decidido dar un ejemplo de su implementación esperando que a más de a uno lo ayude.

Para llevar a cabo la invocación se necesita lo siguiente:

1) la Dirección Web en donde está alojado el servicio a llamar (url).

2) El XML con los parámetros de entrada y las especificaciones del método(xmlparam).

El XML tiene la siguiente estructura

<?xml version="1.0"?>
<methodCall>
<methodName>Nombre metodo</methodName>
<params>
<param>
<value><i4>valor</i4></value>
</param>
</params>
</methodCall>

Sabiendo esto la llamada la hacemos de la siguiente forma:

public string LLamadaXMLRPC(string url, string xmlparam)

{

WebRequest webRequest = WebRequest.Create(url);

webRequest.ContentType = "application/x-www-form-urlencoded";

webRequest.Method = "POST";

byte[] bytes = Encoding.ASCII.GetBytes(xmlparam);

Stream os = null;

try

{ // send the Post

webRequest.ContentLength = bytes.Length; //Count bytes to send

os = webRequest.GetRequestStream();

os.Write(bytes, 0, bytes.Length); //Send it

}

catch (WebException ex)

{

//

}

finally

{

if (os != null)

{

os.Close();

}

}

try

{ // get the response

WebResponse webResponse = webRequest.GetResponse();

if (webResponse == null)

{ return null; }

StreamReader sr = new StreamReader(webResponse.GetResponseStream());

return sr.ReadToEnd().Trim();

}

catch (WebException ex)

{

//

}

return null;

}

Al ver el código se darán cuenta que la llamada es a través de un POST y tiene como propiedad "application/x-www-form-urlencoded", esto tiene como función codificar todos los caracteres antes de que sean enviados.

martes, 19 de julio de 2011

Nuevamente escribiendo

Hace casi 2 años que no me doy el tiempo de escribir algunas palabras con el solo fin de compartir mis ideas o entregar conocimiento, ésta practica si bien era esporádica me relajaba, me permitía descargar esas emociones contenidas y sentir que se las gritaba al mundo. Por otro lado cuando escribía cosas técnicas sentía que realmente estaba enseñando lo que yo deseaba enseñar y no lo que me imponían enseñar, y aquí estoy nuevamente poniendo mis dedos en un teclado para transmitir lo que me de la gana y esperar ser un aporte al que lee. Este blog lo cree el 2006 y con suerte escribí en él, es más apenas me recordaba que lo tenía fue Google plus el que me lo recordó desde ahora pretendo ocuparlo como mí espacio para hacer todo lo que mencioné anteriormente, aclarado este primer post en mucho tiempo es de un descargo que espero que mas de un chileno comparta conmigo

No es la forma de gobernar el pasar por encima de las decisiones de un congreso, que pena que nuestro presidente al cual siempre apoyé cometa este tipo de errores y que no diferencie que no siempre la legalidad es amiga de la moralidad, que pena también por los miembros del TC que se creen superiores a los elegidos por el pueblo, eliminemos el congreso ya que con esta forma de gobernar está realmente de más, que aprueben las leyes los del TC y que nuestro presidente tome decisiones de forma unilateral. Que pena por todas las mujeres profesionales en donde incluyo a mi esposa que no podrá disfrutar de un postnatal parejo para todas las chilenas, espero que el país no se haga el sordo y demuestre su descontento, aunque por lo que hemos visto estas últimas semanas muy poco le interesa al gobierno la opinión de la ciudadanía.

sábado, 15 de marzo de 2008

DISCURSO DEL BUEN LADRÓN

Acuérdate de mí cuando estés en tu reino

Nómbrame Presidente del Senado

Nómbrame Director del Presupuesto

Nómbrame Contralor General de la República.

Acuérdate de la corona de espinas

Hazme Cónsul de Chile en Estocolmo

Nómbrame Director de Ferrocarriles

Nómbrame Comandante en Jefe del Ejército.

Acepto cualquier cargo

Conservador de Bienes Raíces

Director General de Bibliotecas

Director de Correos y Telégrafos.

Jefe de VialidadVisitador de Parques y Jardines

Intendente de la Provincia de Ñuble.

Nómbrame Director del Zoológico.

Gloria al Padre
..................... Gloria al Hijo........................................ Gloria al Espíritu Santo

Nómbrame Embajador en cualquier parte

Nómbrame Capitán del Colo-Colo

Nómbrame si te placePresidente del Cuerpo de Bomberos.

Hazme rector del Liceo de Ancud.

En el peor de los casos Nómbrame Director del Cementerio.

Como verán todos eso cargos los posee un ladron, así que si su trabajo aparece por ahi nunca es tarde para hacer las cosas bien.

viernes, 4 de enero de 2008

Comparación entre Java y Visual Studio

"Para muchos desarrolladores de java se les torna complejo realizar un cambio de lenguaje, o muchas veces por desconocimiento desechan algunas opciones, en el siguiente artículo veremos un análisis comparativo entre java y las tecnologías .Net."
Java y Visual Studio no se compilan a código maquina si no que se compilan a un formato intermedio, aunque parezca una semejanza en este punto nace la primera gran diferencia, ya que estas dos implementaciones difieren fundamentalmente en su filosofía. Comparar Common Language Runtime con la máquina virtual de Java sólo resulta razonable hasta cierto punto, ya que sus objetivos en cuanto a la arquitectura son muy diferentes.

Sun Microsystems promueve un programa de marketing llamado 100% Pure Java que resulta ciertamente muy adecuado cuando lo que se persigue es la portabilidad del código y la transparencia del sistema operativo subyacente. Sin embargo, muchos servidores de aplicaciones Java de terceros crean una ventaja competitiva al utilizar de forma muy acertada las llamadas a funciones de "C" (a través de Java Native Interface o JNI) en servicios de valor añadido de sus sistemas operativos host, que no expone la plataforma de aplicaciones Java (la biblioteca de clases Java). Las llamadas a la plataforma principal constituyen el único mecanismo viable para utilizar la funcionalidad base que sólo se presenta a través de una interfaz nativa.

La máquina virtual de Java es una auténtica "máquina virtual" cuyo principal objetivo es abstraer (hacer virtual) el sistema operativo subyacente y proporcionar un entorno de desarrollo idealizado (no necesariamente ideal, sino idealizado). También está íntimamente unida a la API, la plataforma de aplicaciones Java, en la que los servicios los proporciona la implementación de la máquina virtual. Independientemente de dónde ejecute el código Java compilado, lo ejecutará dentro del contexto de la máquina virtual y lo vinculará ostensiblemente con las API de la plataforma Java proporcionadas.

El nombre de .NET Common Language Runtime es muy acertado, ya que se utiliza más como tiempo de ejecución de lenguaje que como máquina virtual. Aunque no tiene problemas para abstraer los aspectos del hardware subyacente mediante el uso de un lenguaje intermedio, cuando CLR se combina con la biblioteca de API de .NET Framework, se vincula a la plataforma subyacente, Windows. CLR proporciona todos los servicios de la plataforma Windows a cualquier lenguaje habilitado para .NET.

Otra diferencia entre estas dos herramientas es la seguridad de sus aplicaciones, puesto que en .Net, además de las API utilizadas para la criptografía, las cookies de seguridad y la autenticación, existe un mecanismo enriquecido y extensible para la asignación de distintos niveles de permisos a conjuntos de usuarios diferentes en función del origen del código. Por ejemplo, todo el código de Microsoft se puede considerar seguro. Se puede otorgar (o denegar) acceso de lectura y escritura sobre determinados recursos (tales como la pantalla o el directorio temporal) al código que proceda de una URL específica. Asimismo, se pueden marcar algunas aplicaciones para especificar que necesitan determinados permisos (por ejemplo, el acceso al sistema de archivos). Si estos permisos no se encuentran disponibles, la aplicación no se cargará. Puesto que la comprobación de seguridad se realiza en el momento de la carga, no es necesario que el desarrollador escriba en la aplicación lógica para la detección de errores de seguridad. Todo este proceso se administra a través de una nueva tecnología, llamada "seguridad de acceso al código", que funciona con código cargado desde Internet o el equipo local, lo que hace de Visual Studio mas seguro en sus aplicaciones respecto a Java .

El sistema de control de versiones de Visual Studio .Net es más robusto que el de Java. En Java, si se instalan dos versiones de la misma clase, el tiempo de ejecución sólo cargará la primera clase que encuentre en la ruta de acceso de clases, sin tener en cuenta la versión. En cambio, Visual Studio .Net se ha diseñado para ofrecer una amplia compatibilidad con todo tipo de versiones. Con la ejecución página tras página, se pueden cargar y ejecutar a la vez varias versiones diferentes de la misma clase. Cada aplicación puede seleccionar su mecanismo de enlace: enlazar a una versión específica de una biblioteca de clases, la más reciente, o bien, a una versión que se encuentre en una ubicación específica. Asimismo, se pueden aplicar directivas por equipos para reemplazar o volver a definir más adelante el control de versiones. Este control de versiones se aplica también a los lenguajes de programación.

La característica de Visual Studio .Net que realmente destaca sobre las de Java es la capacidad para definir el rendimiento y el comportamiento de las aplicaciones. Las unidades principales de creación de aplicaciones se han diseñado para ofrecer escalabilidad y un rendimiento elevado. Por ejemplo, con el acceso a datos desconectado de ADO.NET, se pueden realizar en memoria un número mayor de funciones de datos, lo que en JDBC (Java Database Connectivity) exige un recorrido de ida y vuelta a la base de datos. Además, la arquitectura de la aplicación .NET se ha diseñado para que ésta sea más rápida. Por ejemplo, las páginas Web ASP.NET ofrecen un rendimiento altamente mejorado en comparación con las páginas Active Server (ASP), las páginas Java Server Pages (JSP) y los lenguajes de secuencias de comandos incrustados HTML. Si lo comparamos con la plataforma Java, el rendimiento de .NET resulta mejor no sólo en escenarios de un único usuario, sino también en escenarios multiusuario.

Otra diferencia fundamental es la portabilidad que nos proporciona Java, ya que a diferencia de .Net una aplicación construida en Java se puede ejecutar en distintos tipos de Sistemas Operativos sin ningún problema.

viernes, 1 de diciembre de 2006

 Posted by Picasa

Iluminar Hualpén

Hace un tiempo, en la comuna de Hualpén donde he estado trabajando ultimamente nos hemos puesto una meta, entregar Internet a todos los habitantes de la comuna. Pero que es lo que mas importa del proyecto solo entregar Internet, o entregar un servicio integral donde Internet sea una herramienta para una meta aun mayor la cual es "lograr un desarrollo social, cultural y educacional en todos los habitantes de la comuna".

Teniendo en cuenta que Internet como red de comunicación global no afecta sólo a un tipo de sociedad única y coherente, pues su poder atraviesa distancias, barreras geográficas, barreras políticas y zonas horarias. Hoy, las principales actividades económicas, sociales, políticas y culturales de todo el mundo se están estructurando en torno a Internet. Es por lo mismo que se ve como solución entregarles un servicio gratuito y de calidad a todos los habitantes de Hualpén, pero que es realmente un servicio de calidad, no es solo permitir acceso a Internet libre, también debe ir de la mano con un trabajo de concientización ya que tenemos que tener muy en claro que la tecnología triunfa cuando esta triunfa socialmente.

La visión del proyecto debe estar enfocada en tener bien en claro cual es el beneficio social que la propuesta entregará, y como se planificará el trabajo integrador entre las tecnologías y los habitantes de la comuna, no vasta con poner antenas ya que esto no provoca una transformación cultural, social y educacional. De la mano de la vision de nuestro alcalde y del equipo que el a formado para la realización de este sueño pretendemos ubicar a la comuna de Hualpén como un centro de desarrollo dentro de chile. Tomando en cuenta lo anterior, y lo visionario del proyecto solo nos queda trabajar duro y enfretar este hermoso desafío todo en beneficio de los habitantes de Hualpén que es lo que mas le importa a nuestro alcalde y a nosotros