Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: TheMasterCracker en 13 Marzo 2019, 01:51



Título: Libros sobre criptografía y esteganografía?
Publicado por: TheMasterCracker en 13 Marzo 2019, 01:51
Hola, como dice el titulo estoy buscando libros sobre criptografía, esteganografía y estegoanalisís, si alguien conoce alguno me seria muy útil, en criptografia busco aprender conceptos importantes y en que se basa por ejemplo código binario, hexadecimal, base64, etc. Y en esteganografia no he encontrado nada muy completo, solo definiciones y programas pero quisiera aprender procesos mediante los cuales poder esconder información en imágenes de manera precisa (sin usar un programa para hacerlo, crear una imagen directamente y esconder información en los pixeles por ejemplo). Gracias! 


Título: Re: Libros sobre criptografía y esteganografía?
Publicado por: El_Andaluz en 16 Junio 2019, 14:44
Aquí tienes algo de información sobre la Esteganografía:

http://www.egov.ufsc.br/portal/sites/default/files/esteganografia1.pdf (http://www.egov.ufsc.br/portal/sites/default/files/esteganografia1.pdf)


Título: Re: Libros sobre criptografía y esteganografía?
Publicado por: @XSStringManolo en 16 Junio 2019, 21:15
Puff hay una burrada de material.

Sobre como funcionan ciertos cifrados, buscan un manual para implementar el cifrado en un programa con cualquier lenguaje de programación. Así verás exactamente lo que se hace.

El cifrado texto a binario es muy simple.
Tienes dos sets de caracteres muy populares. Utf-8 y Ascii. Hay, muchos y muchas versiones.
Eso son tablas inventadas por alguien para representar las letras, numeros y símbolos con números.
Por ejemplo el caracter "espacio" se representa con el número decimal 32 en la tabla ascii.
https://elcodigoascii.com.ar/codigos-ascii/letra-a-mayuscula-codigo-ascii-65.html

Una vez transformamos nuestras letras, numeros y símbolos en cracteres...
Por ejemplo la palabra Hola.
H → 72   o →111  l → 108     a → 97

Una vez tenemos las letras representadas como números, podremos aplicarle cualquier algoritmo mátematico para tratar la información.

Por ejemplo a binario tienes la tabla binaria:
Con esa tabla puedes pasar de binario a decimal y de decimal a binario. Busca por google como hacerlo que te lo explicarán mejor. Pero solo es dividir el numero decimal entre los nuneros de la tabla mas grandes posibles empezando de izquierda a derecha y apuntando un 1 en los que puedas dividir. Lo haré con Hola.

Tabla →  128 64 32 16 8 4 2 1

H 72  →      0   1
72-64=8               0    0 1 0 0 0

72 → 01001000

Repitiendo este proceso con todos los numeros nos queda:
01001000 01101111 01101100 01100001

Esa es la representación de nuestras 4 letras en binario.

Para hexadecimal es lo mismo que usar números del 1 al 16. Pero en vez de usar 10 se usa A en vez de 11 se usa B... Etc Así hasta 16. Por qué se usa el hexadecimal? Porque 16 es precisamente divisible entre la tabla binaria. 1 2 4 8 16 y el resto de la tabla son múltiplos. Si intentamos esto con nuestro sistema decimal, las operaciones no van a dar exactas, van a tener muchos decimales, decimales periódicos con infinitas cifras...
Usando el Hexadecimal es más sencillo y rápido todo. Por eso se usa.

La tabla Binaria no es algo que se pusiese porque alguien quiso y ya. Son los valores máximos que puede alcanzar cada cifra.

1024 512 256 128 64 32 16 8 4 2 1
  
En la primer cifra por la derecha los valores posibles son 0 o 1.
En la segunda fila los valores son 2 o 0.
Y así infinitamente.

En esto no hai coincidencias. La arquitectura de sistemas y procesadores, el tamańo de los discos duros, etc. Suelen ser múltiplos de la tabla para que las operaciones den exactas.

Base64, se escogio el número 64 de la tabla binaria porque 64 es el primer numero de esta tabla con tamaño suficiente para guardar letras minúsculas, letras mayúsculas y numeros.

Se usa Base32 para representar valores noncasesensitive es decir, que no se distinge entre mayúsculas y minúsculas.

Para pasar Hola a base64 necesitas pasar las letras a binario. Ya las tenemos y después necesitamos ubir todos los bits:

01001000011011110110110001100001

Ahora pillaremos los bits de 6 en 6:
 
010010 000110 111101 101100 011000 01


Por qué de 6 en 6? Porque el valor máximo posible de los 6 nuneros empezando por la derecha en la tabla suman 63. Miralo.

128 64 32 16 8 4 2 1
              1  1  1 1 1 1

Pasamos ese numero a decimal que es el valor máximo posible de un binario de 6 cifras.
32+16+8+4+2+1= 63
Pues si pasamos nuestro mensaje Hola despues de dividirle los bits de 6 en 6 tendríamos un mensaje en base63.

El problema es que no siempre te quedan conjuntos de 6 en 6 exactos
Si te fijas en nuestro binario dividio de 6 en 6 bits sobra 2 bits.
Pues ahí es donde entra el último valor EXTRA que añade al Base63 para formar el Base64.

Dependiendo de que cantidad de bits sobren de la division de 6 en 6 se representarán de una forma, o de otra.

Tienes la explicación de esta ultima parte del proceso en wikipedia si buscas en google BASE64 WIKIPEDIA

Ahora crearemos nuestra propia tabla/diccionario al igual que en ascii para represantar cada uno de esos 64 posibles valores numericos, con un caracter.
Normalmente se usa siempre el mismo diccionario. Pero te lo puedes inventar tu.
Por ejemplo puedes traducir el 000001 como la letra g si tu quieres.
Se utiliza siempre el mismo para poder comunicarnos todos bajo base64.

Este ejemplo que te estoy poniendo es muy básico. Hay otros standares que por ejemplo pillan los 8 primero bites y despues pillan los 4 siguientes que suman 12 y despues de 6 en 6.

Ahora solo tendríamos que pasar esas divisiones de 6 bits en 6 bits a su valor decimal. Ese valor decimal a nuestra tabla.

https://es.m.wikipedia.org/wiki/Base64    

010010 000110 111101 101100 011000 01
S                G          9           s                      Y      Q==

El = representan 2 bits de valor 0.

010010 000110 111101 101100 011000 010000
      S          G          9           s                      Y     Q = =

Se le añaden ceros al 01 para que también tenga 6 cifras.
Se usa el = para saber que si vamos a descifrar el base64 al texto real, esos 00 los tenemos que eliminar y que solo están ahí puestos para poder tratar matemáticamente los números y tenerlos divididos de 6 en 6.

La tabla usada es esta:
0    A    16    Q    32    g    48    w
1    B    17    R    33    h    49    x
2    C    18    S    34    i    50    y
3    D    19    T    35    j    51    z
4    E    20    U    36    k    52    0
5    F    21    V    37    l    53    1
6    G    22    W    38    m    54    2
7    H    23    X    39    n    55    3
8    I    24    Y    40    o    56    4
9    J    25    Z    41    p    57    5
10    K    26    a    42    q    58    6
11    L    27    b    43    r    59    7
12    M    28    c    44    s    60    8
13    N    29    d    45    t    61    9
14    O    30    e    46    u    62    +
15    P    31    f    47    v    63    /

Por ejemplo el primer binario que teniamos de 6 en 6 era el 010010.
En la tabla a decimal sería:
32 16 8 4 2 1
  0   1 0 0 1 0

Si sumas 16 y 2 te da 18. Que es la letra S mayúscula en la tabla.

Es difícil encontrar sitios en los que te expliquen esto así paso por paso con ejemplos. Yo toda la info la saqué de la wikipedia y de mis conocimientos de programación.
SG9sYQ==      

Te recomiendo que busques el Serpent. Es mi cifrado favorito y su implementación es una pasada.
https://es.m.wikipedia.org/wiki/Serpent