InicioLinuxCriptografía y Encriptación en Linux en C y python+ataques

Criptografía y Encriptación en Linux en C y python+ataques

Linux9/30/2011
Hola, hice un mini programa en C que si le pasas un parametro en argv[1] te lo pasa a DES con la función crypt de UNIX...

Pero se preguntaran que carajo es todo esto? bien empezamos con lo basico,

Encriptar (cifrar) es básicamente aplicar una función matematica o un algoritmo de programacion a un conjunto de bits (ya sea un archivo o una cadena de caracteres) para provocar una salida ilegible

Desencriptar (Descifrar) es hacer el proceso inverso para obtener una funcion 'f tal que f = 'f y por lo tanto validar la autentificación si es el caso.

Criptoanalisis: se trata de apartir de un texto cifrado obtener un texto legible, mediante tecnicas dependiendo si es criptografia antigua o moderna , teniendo asi la busqueda de patrones y el clasico analisis de frecuencias (en el cual buscas la frecuencia de una letra en un mensaje dependiendo la frecuencia en la que aparece en el mensaje y en el idioma se puede predecir si es una a o una i o lo que sea , para esto es muy bueno una herramienta para windows llamada cryptool, con cifrados clasicos como rot-13 (cesar) los cifrados hebraicos vignere polimorficos ,etc.

Ataques
Para mas modernas se tiene las tecnicas de ataque de cumpleaños para las funciones de resumen o hash (en las cuales un mismo documento genera un hash el cual es one-way , o sea es irreversible y genera una cadena de longitud constante),el ataque de cumpleaños se basa en basicamente en la llamada la cual se deprende de que si generas en un hash de 128 bits para obtener una colision del mismo necesitarias 2^128 o mejor 2^(1*128/2) o sea 2^64 lo cual sigue siendo mucho , pero imaginen por ejemplo un hash de 40 bits como lo es el de algunos sistemas de DVD entonces necesitarias una fuerza bruta de 2^20 para obtener una colision que seria otro hash igual con un mensaje distinto lo cual lo hace muy favorable para un ataque por la debilidad del cifrado (dicho esto usar hashes de 512 en adelante si sos muy paranoico como yo )

Otro ataque interesante son las tablas rainbow que son tablas de hashes precomputados los cuales se comparan con el original, lo cual termina siendo un ataque de diccionario pero se agilizan los tiempos y se obtienen mejores resultados de performance

Sin embargo el hecho de la seguridad en los hashes ha sido puesta en duda por un par de matematicos chinos que han logrado romper los hashes MD5 crudo y sha-1 (Secure hash Algorithm de 160 bits en adelante) demostrando que ya no son utiles estos algoritmos, y por lo tanto abre una brecha enorme de seguridad en la web ya que md5 es casi el standard en algunos casos, la solución seria implementar un propio algorimo que sea lo suficiente mente rapido para este proposito uno de los grandes de la Criptografia Moderna y padre del algoritmo blowfish y Two Fish, ademas autor de varios libros como Practical Cryptography o el libro rojo de la criptografia Applied Cryptography el cual tiene una verson en creative commons si mal no recuerdo.
Bruce Schneider esta trabajando para la creación de un nuevo standard para funciones hash.
Sino mas practico combinar varios algoritmos de hash o sea hasear una palabra 2 veces
h(md5)+h(sha-1)


DES (Data Encryption Standard) es uno de los algoritmos del que mas se ha escrito asi que no me voy a meter a hablar del propio algoritmo de iteracion de bloques ni nada de eso.. lo que se puede agregar a modo de introduccion es que es un cifrado de bloque de bits el cual lo ideal es implementarlo uno mismo para aprender, volviendo a lo anterior el problema de este algoritmo es la longitud de 56 bits lo cual en la practica se puede romper en poco tiempo con las computadoras actuales, el cual es ideal para esto el software John the ripper por ejemplo, eligiendo el charset adecuado para ataques de fuerza brutaç

DES ya habia sido roto por el equipo diffie-helman alla por 1977, teoricamente aunque en la practica se construyo una computadora con la unica finalidad de romper este algoritmo a finales del siglo XX por lo cual se cambio el standard al AES (o sea el llamado algoritmo rinjdael en honor a las siglas de los que lo inventaron) y es un estandard actual.


En C de UNIX al igual que en Python existe la función crypt para hacer esta encriptacion que varia segun la salt que le pongas , siendo la salt el modificador para que cambie hasta 4096 veces la clave segun las combinaciones que se den, el problema que tiene esta función es que utiliza (si no se cambia) el algoritmo de encriptacion DES el llamado Data Encryption Standard, que es debil a un ataque de fuerza bruta (existen otros tipos de ataques teoricos como el criptoanalis diferencial y el criptoanalisis lineal pero parten de tener parte de la informacion conocida en texto plano (asi que en la practica es poco viable)


Dicho todo esto los códigos..

Acá el código en C:


/* 
* Para compilar: gcc -lcrypt DES -o DES
* Para ejecutar ./DES <PASSWORD_A_CIFRAR>
*/

#include <stdio.h>
#include <unistd.h> //libreria de constantes simbolicas
#define _XOPEN_SOURCE 
 
int main (int argc, char* argv[])
char *password; //puntero al string password (retorna la direccion del argumento value)
printf("El password en DES es: %snn", crypt (argv[1], "$6$"); // el parametro $6$ es un modificador "salt" de la funcion crypt() 
return 0;
}

Me baje el código fuente del comando passwd y por lo que parece cifra MD5 o SHA 256 o SHA 512 pero no se cual ..:s

Para mas información: man crypt


Aca el código en python:

#!/usr/bin/env python
# coding utf-8

import getpass
import crypt

semilla = 'sl'
pass_unix = getpass.getpass()

def login_user(semilla,pass_unix):
return crypt.crypt(semilla,pass_unix)

print login_user(semilla,pass_unix)


Saludos!



recomendacion a modo anecdotario.. no usar DES usar blowfish que esta disponible en suse por ejemplo o sino el viejo MD5

Para mas información de crypt en python:
 

Saludos
Datos archivados del Taringa! original
33puntos
1,826visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

t
tux_geek🇦🇷
Usuario
Puntos0
Posts2
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.