#
TEXTO
AUTOR
INDICE
1
Wireless
2
Wardriving is not a crime
3
Introduccion al XSS :: bug en [IMG] (BBcode)
4
Binario: técnicas criptográficas y esteganográficas
5
Instalando y Configurando Tincd
6
El Número de Oro
7
Como sacar adelante una página web personal
8
Libreria QT

 


Binario: técnicas criptográficas y esteganográficas
1
Aplicado a técnicas criptográficas y esteganográficas
2
Operaciones aritméticas
1
MÓDULO Y SIGNO
2
COMPLEMENTO A 1 (C-1)
3
COMPLEMENTO A 2 (C-2)
4
EXCESO A 2^n-1
5
REPRESENTACIÓN EN COMA O PUNTO FIJO
6
REPRESENTACIÓN EN COMA FLOTANTE
3
PRÁCTICAS


Técnicas criptográficas y esteganográficas con binario

(Aplicado a técnicas criptográficas y esteganográficas)(arriba)

La finalidad de este manual es poder ayudar a todos los que empiezan, como yo, en esto de los retos; creo que una de las cosas que más me han ayudado a empezar es el binario(lenguaje-máquina), quizás no sepas lo que es, pero seguro que has leído en la firma de algún usuario lo siguiente: ‘Sólo hay 10 tipos de personas: Las que saben binario y las que no.’ Esto no significa que haya 10 tipos de personas, si te fijas en las tablas de abajo podrás observar que 10 en binario es igual a 2 en ASCII, en binario solo tenemos dos números, 0 y 1. Así que si solo tenemos dos números, las posibilidades de hacer criptos serán mucho más reducidas y menos complicadas que en octal, decimal, hexadecimal, ASCII ... o cualquier otro entre los cuales podríamos introducir todo tipo de códigos creados por usuarios.

Se denomina bit a la unidad mínima de información que se puede representar, es decir, un 0 o un 1, , los grupos de 4 bits se denominan nibbles.

B2= {0, 1}

- Con 1 bit sólo podemos representar 2 estados: 0, 1.
- Con 2 bits podemos representar cuatro estados: 00, 01, 10, 11.
- Con 3 bits podemos representar 8 estados: 000, 001, 010, 011, 100, 101, 110, 111.
- ...
- Dependiendo del número de bits que se utilicen, conviene tener presente la siguiente fórmula:

Nº de estados = 2^número de bits

Veamos algunas equivalencias entre los siguientes sistemas:

BINARIO
HEXADECIMAL
DECIMAL
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


Habitualmente, en los criptos utilizaremos el binario para conseguir caracteres del código ASCII (256 caracteres). Lo primero que te aconsejo es que busques una tabla de código ASCII, puedes encontrar una realizada por mi en éste E-zine. El código binario lo empezaremos a ver con unas lecciones básicas:

La fórmula que podemos utilizar para cualquier sistema de numeración es:

…X2 * B^2 +X1 * B^1 +X0 * B^0…

(X=Números B=Base)

Para pasar de binario a decimal debemos saber que tenemos que tener(habitualmente) 8 bits (0`s y 1`s) y según la posición de éstos bits su valor irá en orden ascendente o descendente dependiendo del sitio por el que empecemos a contar(derecha o izquierda). Valores:

Posición:
Valor:
128
64
32
16
8
4
2
1

En binario se empieza a contar de derecha a izquierda y todos se van multiplicando * 2(1=20, 2=21, 4=22, 8=...), las posiciones es el lugar donde van los 0`s y 1`s(los 0`s indican que NO hay que contar ese valor y los 1`s nos indican las posiciones que SI tenemos que contar) y los valores son su correspondiente valor en ASCII. Ahora veremos unos ejemplos:

- El número 34.567 en el sistema decimal se representaría de la siguiente manera:

3*104 + 4*103 + 5*102 + 6*101 + 7*100

- El número 10010 en el sistema binario se representaría de la siguiente manera:

1*24 + 0*23 + 0*22 + 1*21 + 0*20

Podemos observar que los dos sistemas son similares, pero en decimal tenemos 10 números y en binario 2. Para pasar de decimal a binario debemos ir restando al número que queremos convertir de mayor a menor valor, siempre guiándonos por el valor y su posición en la tabla, 1, 2 , 4, 8, 16, 32, 64, 128, 256....por ejemplo el número 325= 256 + 64 + 4 +1, por lo que se representaría así: 101000101.

Para pasar de binario a hexadecimal debemos agrupar los bits de cuatro en cuatro, y mirar en la tabla de correspondencias que tienes en el principio su valor en hexadecimal. El proceso contrario, pasar de hexadecimal a binario sería al revés, una vez tenemos el valor en hexadecimal, comprobamos en la tabla de correspondencias cual es su valor en binario. Recordemos que el sistema hexadecimal El sistema hexadecimal es la utilización de 16 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A , B, C, D, E, F, de ahí que el sistema sea de base 16. También decir que el sistema hexadecimal está basado en el sistema binario, binario en la potencia 4.

Para pasar de binario a octal debemos agrupar los bits en grupos de 3(en éste caso la longitud del código binario debe ser un múltiplo de 3), el sistema octal es la utilización de 8 dígitos(0, 1, 2, 3, 4, 5, 6, 7), es decir, en base 8. El sistema octal, como el hexadecimal, está derivado del binario, binario en la potencia 3. su conversión es directa según la siguiente tabla:

BINARIO
OCTAL
000
001
010
011
100
101
110
111
0
1
2
3
4
5
6
7

Ejemplo:

Binario:
001
101
011
100
000
Octal:
1
5
3
4
0

Para pasar de octal a binario, es exactamente igual de simple pero en orden inverso.

Hagamos unos ejemplos, queremos saber como son en binario los siguientes números:

El nº 5:

128: es mayor que 5, ponemos -> 0
64: es mayor que 5, ponemos -> 0
32: es mayor que 5, ponemos -> 0
16: es mayor que 5, ponemos -> 0
8: es mayor que 5, ponemos -> 0
4: es menor que 5, ponemos -> 1 *
2: es mayor que 1, ponemos -> 0
1: es igual que 1, ponemos -> 1

El número 5 en binario es : 00000101

* Si es igual también se pone 1 y las demás posiciones se completan con 0`s. Si el número como en este caso es menor que el que queremos pasar a binario lo que debemos hacer es restarlo 5-4=1 y para las siguientes posiciones trabajar con ese valor.

El nº 48:

128: es mayor que 48, ponemos -> 0
64: es mayor que 48, ponemos -> 0
32: es menor que 48, ponemos -> 1 (48-32=16)
16: es igual a 16, ponemos -> 1 (El resto lo completamos con 0`s)
8: -> 0
4: -> 0
2: -> 0
1: -> 0

El número 48 en binario es: 00110000

El nº 249:

128: es menor que 249, ponemos -> 1 (249-128= 121)
64: es menor que 121, ponemos -> 1 (121-64= 57)
32: es menor que 57, ponemos -> 1 (57-32= 25)
16: es menor que 25, ponemos -> 1 (25-16= 9)
8: es menor que 9, ponemos -> 1 (9-8= 1)
4: es mayor que 1, ponemos -> 0
2: es mayor que 1, ponemos -> 0
1: es igual a 1, ponemos -> 1

El número 249 en binario es: 11111001

El nº máximo que se puede representar es 255(11111111) y el mínimo 0(00000000).

Después de explicar en qué consiste el código binario y de haber visto unos ejemplos, creo que conviene practicar con algunos ejemplos más, pero éstos los realizarás tú.

Nº 184
Nº 57
Nº 201
00101011
10101010
00000001

Y todos los que tú quieras ponerte...

 

Operaciones aritméticas:(arriba)

SUMA
RESTA
MULTIPLICACIÓN
DIVISIÓN
0+0=0
0+1=1
1+0=1
1+1=0; y nos llevamos 1.
0-0=0
0-1=1; y nos llevamos 1.
1-0=1
1-1=0
0*0=0
0*1=0
1*0=0
1*1=1
Si en la división, uno de los dos números tiene decimales en binario, al otro se le ponen los decimales que necesite( con ceros).


Una vez vistas las operaciones aritméticas, pasamos a ver otro tipo de representaciones con binario (ten en cuanto que el número de bits que utilizamos para cada dato numérico se le denomina: n).

Con estos ejemplos, creo que es suficiente para ver como funcionan, si hace falta pondré más o podéis buscar en Google. Las operaciones son similares a las del sistema decimal, lo único que hay que tener en cuenta las tablas de la suma, resta y multiplicación, lo demás no tiene apenas complicación, es algo sencillo y útil.

MÓDULO Y SIGNO

En este sistema de representación, el bit que está situado más a la izquierda representa el signo, y su valor será 0 para el signo + y 1 para el signo -. El resto de bits (n-1) representan el módulo del número. Suponemos que en principio los números no poseen parte decimal, por lo que la coma se supone implícita a la derecha.

Cambio de signo inmediato: sólo cambiar el bit de la izquierda.

El rango de representación (conjunto de números representables) es simétrico [-2^n-1 + 1, 2^n-1 – 1], ventaja: igual cantidad de números positivos que negativos, inconveniente: la ambigüedad de la representación del 0 ( 0 = 100000000.. o 0 = 000000000.... ) y la incapacidad de utilizarlos para circuitos programados para naturales.

Ejemplos:
Para n = 8 bits:

+015 = 00001111
-089 = 11011001
-007 = 10000111
+032 = 00100000
+125 = 01111101

El primer bit es el signo, los otros 7 se denominan módulo.


COMPLEMENTO A 1 (C-1)

Este sistema de representación utiliza el bit de más a la izquierda para el signo, correspondiendo el 0 para el signo + y el 1 para el -. Para los números positivos, los n-1 bits de la derecha representan el módulo (igual que en Módulo y signo). El negativo de un número positivo se obtiene complementando todos sus dígitos (cambiando ceros por unos y viceversa) incluido el bit de signo.

- Cambio de signo lógico: cambiar ceros por unos y unos por ceros.

- El rango de representaciones es simétrico [-2^n-1 + 1, 2^n-1 – 1] con la desventaja de la ambigüedad de representación del 0 ( 0 = 1111111... o 0 = 000000000...).

Ejemplos:
Para n = 8 bits:

+015 = 00001111
-089 = 10100110
-007 = 11111000
+032 = 00100000
+125 = 01111101

Primero hacemos el número positivo y luego cambiamos los bits en los números negativos. Los números positivos se quedan igual que en MS. Habitualmente se señala que está en Complemento a 1 poniendo C1 al lado del binario.


COMPLEMENTO A 2 (C-2)

Este sistema de representación utiliza el bit de más a la izquierda para el signo, correspondiendo el 0 para el signo + y el 1 para el -. Para los números positivos, los n-1 bits de la derecha representan el módulo (igual que en MS y C-1). El negativo de un número se obtiene en dos pasos:

1) Se complementa el nº positivo en todos sus bits (cambiando ceros por unos y viceversa), incluido el bit de signo, es decir, se realiza el C-1.
2) Al resultado obtenido anteriormente se le suma 1 (en binario), despreciando el último acarreo si existe.

Cambio de signo complicado: realizar un cambio de signo lógico (Complemento a 1) y sumarle 1 en binario.

El rango de representaciones es Asimétrico [-2^n-1 + 1, 2^n-1 – 1]. El cero es 0000000...000 (ventaja: una única representación para el cero).

Ejemplos:

Para n bits:

NÚMERO MS C-1 C-2
-022 00010110 11101001 11101010
-132 010000100 101111011 101111100
+032 00100000 00100000 00100000
+514 01000000010 01000000010 01000000010


EXCESO A 2^n-1

Este método de representación no utiliza ningún bit para el signo, con lo cual todos los bits representan un módulo o valor. Este valor se corresponde con el número representado mas el exceso que para n bits viene dado por 2^n-1.

Ejemplos:

Para n = 8 bits el exceso es de 2^8-1 = 2^7 = 128, con lo cual el número 13 vendrá representado por 13 + 128 = 141 (en binario); para el caso del número –13 tendremos –13 + 128 = 115 (en binario). Sus representaciones serían:

13 10001101
-13 01110011

En este caso el 0 tiene una única representación que, para n = 8 bits, se corresponde con 0 + 128 = 128.

0 10000000

El rango de representación es asimétrico [-2^n-1, 2^n-1 – 1]


REPRESENTACIÓN EN COMA O PUNTO FIJO

Su nombre viene de la posición en que se supone situado el punto decimal, que será fija. El punto fijo es utilizado para la representación de números enteros, suponiéndose el punto decimal implícitamente a la derecha de los bits. Tenemos tres formas de representar en coma fija:

- BINARIO PURO -

Se representa utilizando un conjunto de bits equivalente a una palabra o a una doble palabra, representando su valor en binario.

Supongamos un ordenador con una palabra de 32 bits, cuyo bit de más a la izquierda se utiliza para representar el signo (0 para el + y 1 para el -), siendo los 31 bits restantes los que representan el módulo o valor del número en complemento a 2. El rango de representación sería –2^31 , 2^31 –1

Representación del: 0 00000000000000000000000000000000
Representación del: 10 00000000000000000000000000001010
Representación del: -10 11111111111111111111111111110110

En ésta representación el punto decimal puede suponerse situado en cualquier otro lugar distinto al de la derecha de los bits, con lo que podremos trabajar con números reales.

Antes de empezar a explicar el decimal desempaquetado y empaquetado, tenemos que conocer el sistema de codificación BCD(Decimal Codificado en Binario) en el cual se basan ambos sistemas de representación.

En el sistema BCD cada cifra de un número decimal se representa por un conjunto de 4 bits, siendo la tabla de equivalencias entre ambos:

Cifra Decimal
BCD
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001

Ejemplo:

El nº 26 en BCD sería: [2 -> 0010] [6 -> 0110] = 00100110
El nº 54 en BCD sería: [5 -> 0101] [4 -> 0100] = 01010100

- DECIMAL DESEMPAQUETADO -

En este sistema de codificación decimal, un número decimal se representa de tal forma que cada una de sus cifras ocupa un octeto o byte. Cada uno de éstos octetos lleva en su cuarteto de la izquierda cuatro unos ( 1111 -> F en hexadecimal) denominados bits de zona, y en el cuarteto de la derecha, la codificación de la cifra en BCD, denominándose este cuarteto bits de dígito.

El cuarteto de la izquierda de la última cifra de número(cifra de las derecha) representa el signo del número, conteniendo 1100 para el signo + y 1101 para el signo – ( C y D en hexadecimal, respectivamente).

Ejemplos: los números 2004 y -1983 en decimal desempaquetado.

2 0 0 4
1111 0010 1111 0000 1111 0000 1100 0100
-1 9 8 3
1111 0001 1111 1001 1111 1000 1101 0011

Podemos observar que el cuarteto que determina el signo es el primer cuarteto de la última cifra. En hexadecimal serían: F2 F0 F0 C4 y F1 F9 F8 D3.

- DECIMAL EMPAQUETADO -

En este sistema de codificación cada cifra decimal de un cuarteto (se eliminan los bits de zona), salvo el primer octeto de la derecha que en su cuarteto también de la derecha lleva el signo con las mismas consideraciones que en el caso anterior (1100-C para el + y 1101 –D para el -).

Ejemplos: los números 2004 y –1983 en decimal empaquetado.

2 0 0 4
0010 0000 0000 0100
-1 9 8 3
0001 1001 1000 0011

Ahora, tenemos que poner el signo, al final de todo, para 2004 sería 1100 y para –1983 1101, tras lo cual podemos observar que se nos queda un cuarteto huérfano, así que añadimos al principio un cuarteto con ceros. Con lo cual quedaría así:

BINARIO HEXADECIMAL
2004 000000100000000001001100 02004C
-1983 000000011001100000111101 01983D


REPRESENTACIÓN EN COMA FLOTANTE

La coma o punto flotante surge de la necesidad de representar números reales y enteros con un rango de representación mayor que el que nos ofrece la representación en punto fijo y posibilitar al ordenador el tratamiento de números muy grandes y muy pequeños. Estas ventajas que nos ofrece la coma flotante traen como contraprestación una disminución(relativamente pequeña) en la precisión de los números representados.

En su representación se utiliza la notación científica o exponencial matemática en la que una cantidad se representa de la siguiente forma:

Nº = [mantisa] * [base de exponenciación]^[exponente]

Un número en esta notación tiene infinitas representaciones, de las que se toma como estándar la denominada normalizada, que consiste en que la mantisa no tiene parte entera y el primer dígito o cifra a la derecha del punto decimal es significativo (distinto de 0), salvo en la representación del número 0.

Ejemplos:

978.5 ->
9785 * 10^-1 = 978.5 * 10^0 = 97.85 * 10^1 = 9.785 * 10^2 = 0.9785 * 10^3
12.1 ->
121 * 10^-1 = 12.1 * 10^0 = 1.21 * 10^1 = 0.121 * 10^2

La representación normalizada en éstos casos en 0.9785 * 10^3 y 0.121 * 10^2 respectivamente.

La coma flotante en un ordenador sigue las siguiente reglas:

- El exponente se representa en uno de los siguientes sistemas de codificación: módulo y signo o exceso 2n-1, siendo siempre un número entero.

- La mantisa es un número real con el punto decimal implícito a la izquierda de sus bits, representada normalmente en uno de los siguientes sistemas de codificación: módulo y signo, complemento a 1 o complemento a 2.

- La base de exponenciación, es una potencia de 2 determinada por el fabricante del ordenador (2, 8 o 16).

 

PRÁCTICAS(arriba)

Codificar la palabra: Ejemplo

- Miramos en la tabla ASCII sus valores:

E -> 69
j -> 106
e -> 101
m -> 109
p -> 112
l -> 108
o -> 111

- y pasamos estos valores a binario:

01000101
01101010
01100101
01101101
01110000
01101100
01101111

Esto como comprenderéis, se debe complicar un poco más, ahora no sólo va a ser pasar de ASCII a binario, sino que modificaremos el orden y algunas cosas más.

- En este segundo ejercicio utilizaremos de nuevo la palabra Ejemplo, pero del revés: olpmejE y la pasamos a binario.

01101111
01101100
01110000
01101101
01100101
01101010
01000101

- Este mismo código binario lo vamos a utilizar para probar otros ejemplos; ahora modificamos el orden de los bits tres posiciones a la izquierda:

01111011
01100011
10000011
01101011
00101011
01010011
00101010

- Ahora sustituimos los 0`s y 1`s por su dígito inverso correspondiente:

10000100
10011100
01111100
10010100
11010100
10101100
11010101

- Podemos poner letras a los números(no confundir con el método Baconian):

ABBBBABB
ABBAAABB
BAAAAABB
ABBABABB
AABABABB
ABABAABB
AABABABA

Ahora vamos codificar otra palabra en binario pero en vez de por filas como hemos realizado anteriormente, por columnas, la palabra que usaremos será: Pila y la representamos en binario y en vertical.

0000
1111
0111
1000
0110
0010
0000
0101

- Con esto podríamos hacer algo similar a los anteriores ejemplos, cambiar el orden de los pasos, ahora haremos algo distinto. Seleccionamos cada fila haciendo parejas 1-2, 3-4, 5-6 y 7-8, para ponerlas en 4 filas de 8 bits.

00001111
01111000
01100010
00000101

- Ahora les ponemos números a los bits, por ejemplo, vamos a seguir la siguiente norma, ponemos números impares donde tenemos ceros y pares en los unos.

53916660
34628975
90695703
57339078

- Y para complicarlo aún más, vamos cogiendo los números de dos en dos y ponemos su valor en ASCII:

5[B<
“>YK
ZE9
9!ZN

¡¡¡ Ya tenemos otro cripto !!!


Y la cosa se puede complicar a gusto del que haga el cripto, cuanta más imaginación mejor ;). Habitualmente el código binario es fácil de desencriptar ya que es algo muy básico, también e de reconocer que algunos de los ejemplos no son nada habituales, pero igualmente factibles que los usados habitualmente. Una vez realizados algunos criptos y captada la idea de los criptos en binario, probemos con unos steganos:

Aunque la imagen se vea distorsionada, no tiene porque interferir en nuestra labor de descubrir el mensaje que hay oculto, en éste caso, igual que hacíamos con los criptos, he elegido la palabra Hispabyte, la he pasado a binario y le he asignado a los unos el color negro y a los ceros el blanco, por lo que tenemos una imagen de 8*9 pixels. ¿Cómo saber cual es el mensaje? Simplemente su stituimos los colores por ceros o unos, miramos su valor en la tabla ASCII y vamos anotando las letras hasta tener la palabra completa.

En un segundo ejemplo con steganos, vamos a buscar una imagen la cual admita el código binario con el mensaje que quere mos ocultar, aquí necesitaremos un editor hexadecimal para ver el código de la imagen:

Lo primero observamos el código de la imagen con el editor hexadecimal para comprobar que la imagen tiene un espacio vacío suficientemente grande para ocultar el mensaje:

Si miramos bien, podemos ver que hay unas líneas en las que sólo tenemos puntos o espacios, si miramos en el editor hexadecimal en la columna del medio veremos que esos puntos corresponden a 00, por lo que vamos a introducir el código binario.

Utilizaremos la frase: ‘Solo se que no se nada’ , en éste stegano pondré primero la frase y después el código binario, para que lo podáis ver ;). Evidentemente esto podría ser muy evidente y podríamos ocultarlo algo mejor cambiando los ceros y unos por otros símbolos o caracteres.

Ahora os dejo la imagen con el mensaje para que lo veáis:


Podéis observar que la imagen no se a distorsionado, ya que hemos utilizado el espacio que tenía libre. Si hubiésemos utilizado espacio ya utilizado, la imagen se distorsionaría, más o menos, en función del lugar que modifiquemos.

En éste manual, si has prestado atención, habrás comprendido cómo funciona el código binario, las distintas operaciones o representaciones, hemos visto el código binario aplicado a técnicas criptográficas y esteganográficas; y además ya tendrás una base para aplicarlo en tus próximos retos. Recuerda que el que hace los retos es el que conoce los métodos de sus criptos y tu función es descubrirlos J. Espero que haya el manual haya sido de tu agrado. Saludos y suerte con los retos.

NOTA DEL EDITOR: Recordad que teneis en vuestra disposicion las tablas ASCII que hizo ORCO666 aquiiiii. (arriba)

 

by ORCO666

[ ATENCIÓN: Toda la información y el software que pudieras encontrar aquí, únicamente está permitido utilizarlos con fines formativos, no haciéndonos responsables del mal uso, que por desconocimiento o malicia, se pudiera hacer. Tampoco nos responsabilizamos de los daños ocasionados por una utilización inapropiada o con fines delictivos. Con esta ezine no se pretende fomentar, ni la violencia, ni una conducta ilegal, sino dar a conocer el fascinante mundo de la informática, la electrónica y las telecomunicaciones. ]