miércoles, 19 de octubre de 2011

CRIPTOGRAFÍA – IMPLEMENTADA EN UN LENGUAJE DE PROGRAMACIÓN


Primeramente la criptografía puede clasificarse como una ciencia la cual estudia las técnicas que se aplican en las alteraciones de las representaciones lingüísticas de un lenguaje. La función principal de esta es ocultar mensajes de ciertos usuarios cambiando el mensaje principal y mostrar otro siguiendo un patrón, este patrón es muy importante para volver a descifrar el mensaje de salida revirtiendo el proceso para llegar al mensaje principal.
Actualmente existen muchos algoritmos para poder cifrar un mensaje, algoritmos simples y complejos, la complejidad se basa en el proceso que el algoritmo transforma el mensaje de entrada al mensaje de salida.

¿Será tan difícil crear nuestro propio sistema de cifrado?, ¿Cómo la podríamos emplear en un lenguaje de programación?

Importancia en la vida cotidiana
Esta técnica es muy usada en la informática para dar seguridad a la información que se intercambia por la red, sobre todo en los programas y paginas web, podríamos poner un ejemplo de cualquier pagina donde se necesite ingresar con una contraseña y un usuario, nuestra contraseña es el mensaje de entrada, la pagina web cifra esta contraseña con un algoritmo y la manda al servidor, este por ultimo comprueba si es correcta o no pero para que cifrarla?, como bien se menciono al inicio por seguridad si la pagina web no la cifrara esta sería enviada tal y como es permitiendo a otros programas leer la clave fácilmente.
En general la mayoría de los programas que usan una conexión de redes, utiliza esta técnica como medida de seguridad, algunos ejemplos son (msn, ares, antivirus, páginas como: Facebook, hotmail, gmail, paginas bancarias sobre todo).

Proceso de la criptografía
El proceso de la criptografía es el siguiente:
Cifrado:
1.- Se toma cualquier mensaje de entrada.
2.- Se toma un patrón de cifrado.
3.- Se cifra el mensaje de entrada usando el patrón de cifrado.
4.- Se devuelve un mensaje de salida, el cual debe de ser diferente al de entrada.

Descifrado:
1.- Se toma el mensaje de salida.
2.- Se toma el mismo patrón y se vuelve a cifrar el mensaje de salida (en algunas ocasiones el proceso es diferente que el del cifrado).
3.- Se devuelve el mensaje de entrada nuevamente.
Un ejemplo básico siguiendo los pasos sería:
1.- Tomamos el mensaje "Hola".
2.- El patrón que tomaremos es voltear la palabra al revés.
3.- Lo ciframos (volteamos), "Hola" ----> "aloH".
4.- Nuestro mensaje de salida es "aloH".

Si analizamos un poco "aloH" en sí no significa nada, si le dijéramos "aloH" a cualquier persona que no sepa el patrón de cifrado no nos haría caso, veamos el proceso de descifrado.
1.- Tomamos "aloH"
2.- Tomamos el mismo patrón que es voltear la palabra al revés.
3.- Lo ciframos de nuevo (volteamos) "aloH" ----> "Hola".
4.- Tenemos nuestro mensaje principal "Hola".

Ahora bien, si quien reciba el mensaje de salida sabe el patrón de cifrado lo podrá descifrar y entender sin ningún problema, un dialogo usando la criptografía de dos personas que conocen el patrón de cifrado:

Miguel: "? olbaP av et omoc ,lat euQ".
Pablo: ".anañam arap aerat im odnanimret ,leugiM neib yuM".
Miguel: ".secnotne ojed et ,ranimret a yov al néibmat oy ,! laineG".
Pablo: ".anañam atsah ,kO".

A simple vista algo difícil de entender para cualquier persona, pero no para Miguel y Pablo que conocen el patrón de cifrado, conocerán el mensaje principal. Pero cualquier persona curiosa podrá encontrar el patrón de cifrado y posteriormente encontrar el mensaje de entrada, entonces para que esto sea mas difícil necesitaremos un patrón de cifrado mas difícil así como el proceso de cifrado sea mas complejo.
Otro ejemplo de cifrado empleando un poco las matemáticas, pensaremos un poco, las letras del alfabeto son 27, entonces podríamos reemplazar cada letra del alfabeto por un número, nos basamos en esta tabla:

1 = a
2 = b
3 = c
4 = d
5 = e
6 = f
7 = g
8 =h
9 = i
10 = j
11 = k
12 = l
13 = l
14 = m
15 = n
16 = ñ
17 = o
18 = p
19 = q
20 = r
21 = s
22 = t
23 = u
24 = v
25 = x
26 = y
27 = z


Ahora bien, vamos a cifrar la oración “Hoy es un día nuevo”.
1.-Nuestro mensaje de entrada es “Hoy es un día nuevo”.
2.- Nuestro patrón es reemplazar cada letra por el número que le corresponda de la tabla.
3.-Ciframos:
H = 08, o = 17, y = 26, e = 05, s = 21, u =23, n = 15, d = 04, i =9, a = 01, n = 15, u = 23, e = 05, v = 24, o = 17
4.- Nuestro mensaje final sería:
“081726 0521 2315 040901 1523052417”

Este patrón es un poco mas complejo, por lo tal el mensaje de salida es mas difícil de entender, para volver al mensaje principal solamente reemplazamos el numero por la letra correspondiente en base a la tabla anterior.

Criptografía en un lenguaje de programación

Cuando hablamos de programación podemos encontrar más técnicas de cifrado, por lo que los datos se pueden interpretar de muchas formas, bits, código ASCII.
Primeramente haremos uso del operador lógico XOR, el cual consta de esta tabla:
A             B             Resultado
0             0                   0
0             1                   1
1             0                  1
1             1                   0

El operador XOR es un operador reversible, es decir si el resultado aplicamos de nuevo el operador XOR al dato B nos dará el dato A, solamente 0s y 1s, por suerte toda información en una computadora esta hecha en bits, y los bits solo lo conforman 0s y 1s.
Si bien sabemos que todo texto se puede transformar en código ASCII, el lenguaje Visual Basic puede convertir de un carácter al código ASCII directamente con la función Asc, por ejemplo:

Asc("a") = 97
Asc("b") = 98
Asc("c") = 99
Asc("d") = 100
Asc("e") = 101
Asc("f") = 102
Asc("g") = 103
Asc("h") = 104
Asc("i") = 105
Asc("j") = 106
Asc("k") = 107
Asc("l") = 108
Asc("m") = 109
Asc("n") = 110
Asc("o") = 111
Asc("p") = 112
Asc("q") = 113
Asc("r") = 114
Asc("s") = 115
Asc("t") = 116
Asc("u") = 117
Asc("v") = 118
Asc("w") = 119
Asc("x") = 120
Asc("y") = 121
Asc("z") = 122

Ya que tenemos un valor numérico podemos convertirlo a binario fácilmente. Por ejemplo  la letra “a”, su valor ASCII es 97 que en binario sería: 1100001, teniendo un valor binario podemos aplicar el operador XOR, por ejemplo 1100001 XOR 101 (5 en decimal), efectuamos:
1100001
0000101
1100100
El resultado es 1100100, si este valor lo convertimos a decimal el resultado es 100 que es el código ASCII, si lo convertimos a texto plano nos daría la letra “d”. Entonces podemos decir que “a” XOR 5 es “d”, ahora bien si tenemos “d” y el patrón de cifrado que en este caso es XOR 5 obtendríamos “a”.
1100100
0000101
1100001
El resultado es 1100001, en decimal es 97 y su valor del código ASCII a texto plano es “a”.

Para crear una función en determinado lenguaje de programación primeramente crearemos el pseudocódigo, que sería:

1.- Convertir el mensaje de entrada en código ASCII.
2.- Iniciar ciclo hasta que N sea igual al número total de letras del mensaje.
3.- Asignamos el valor de la posición N, el resultado del valor de posición N XOR el valor del patrón de cifrado.
4.- Aumentamos N en uno y regresamos al ciclo.
5.- Convertimos de nuevo el mensaje que esta en código ASCII a texto plano.
Pasándolo a un lenguaje de programación el código sería:


Public Function XorCifrado(ByVal Cadena As String, ByVal Patron As Integer) As String
Dim N               As Integer
Dim Convertido()    As Byte
    Convertido = StrConv(Cadena, vbFromUnicode) ' Convertimos el mensaje
                                                ' en código ascii
    For N = 0 To UBound(Convertido())
        Convertido(N) = (Convertido(N)) Xor Patron 'Recorremos toda la
                                                'cadena y aplicamos el xor
                                                'asignamos el valor en la misma
                                                'cadena
    Next N
    XorCifrado = StrConv(Convertido, vbUnicode)
   
End Function
 















Su utilización sería:



Dim A As String
A = XorCifrado("hola", 6) ' Llamamos a la función con el
                        ' patrón de cifrado el numero 6
MsgBox A                'Mostramos el contenido de A
                        'que en este caso daría:
                        '”nijg”
A = XorCifrado(A, 6) 'Volvemos a llamar a la función con
                    'el mismo patrón de cifrado y el mensaje
                    'de salida
MsgBox A            'Nos vuelve a retornar "hola"
                                                                                                                                         
Esto es solo un ejemplo de un sistema de cifrado de cómo trabajan los programas y paginas web para proteger los datos del usuario, no importa el lenguaje en cual pueda ser implementado, ya que todos manejan el operador XOR. Existen muchos algoritmos de cifrado como por ejemplo: NOT, Base64, TEA, ROT, MD5, etc. La mayoría solamente trabaja con bits para hacer la conversión necesaria.

CONCLUSIÓN:

La criptografía es muy importante en la seguridad informática y muchos usuarios no se dan cuenta de esto, hacemos uso de esta inconscientemente cuando la usamos en cualquier página y programa que use una conexión o manejo de datos. Crear un sistema de cifrado puede ser tan complejo como nosotros queramos, podemos hacer desde lo mas simple (voltear la palabra al revés) hasta algo mas complejo (hacer un XOR), lógicamente entre mas complejo sea mas difícil será su descifrado de esta, para emplearlo en un lenguaje de programación simplemente basta saber lo básico de uno y tener un poco de imaginación y creatividad al elaborar el algoritmo usando las herramientas del lenguaje para ayudarnos.

BIBLIOGRAFÍA:

http://crypo.com/
http://es.wikipedia.org/wiki/Criptograf%C3%ADa

No hay comentarios:

Publicar un comentario en la entrada

Contador De Visitas Online

Contador De Visitas