elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: [1]
1  Seguridad Informática / Desafíos - Wargames / desafio diffie-hellman (log2 de grandes numeros) en: 6 Octubre 2015, 22:40 pm
Hola gente tengo un desafio para resolver de la facu y llegue al punto donde tengo todos los datos y ahora tengo que calcular el log2 X mod p para obtener el numero que busco (diffie-hellman) la primera parte la hice en java con BigInteger pero para dicho tipo de dato no tengo el log, asiq aqui me encutro bloqueado.
Como otro dato tengo que el numero "randomico"que elige bob es dado por un polinomo.

Alguna idea??

PD: el profesor dijo algo de que hasta en internet estaba para calcular los log dado los numeros pero no tuve suerte.
2  Programación / Programación C/C++ / multiplicacion de matrices rectangulares con pthreads en: 25 Septiembre 2015, 00:24 am
Hola gente, estoy un poco perdido, desarrolle un codigo C para multiplicacion de matrices con pthreads pero solo sirve para cuando las matrices son cuadradas o la cantidad de columnas son multiplos de la cantidad de hilos que le paso por argunmento, lo que tengo que desarrollar tiene que ser para cualquier matriz dada, pasando por argumento la cantidad de hilos.

Código
  1. #include <pthread.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include "../include/matrix.h"
  5. #include "../include/parser.h"
  6.  
  7. #define FILEIN_1 "in1.txt"
  8. #define FILEIN_2 "in2.txt"
  9. #define FILEOUT "out.txt"
  10. #define NOF_ARGS 2
  11.  
  12. MATRIX *MAT_ONE, *MAT_TWO, *MAT_OUT; // global matrixes to operate upon
  13. int NOF_PROC; // number of processes passed as argument via terminal
  14.  
  15.  
  16. void *multiplica(void *id) {
  17. unsigned long threadId = (unsigned long) id;
  18. fprintf(stderr, "threadId: %lu\n",threadId);
  19. int i,j,k;
  20. for (i = (threadId*(MAT_ONE->r/NOF_PROC)); i < ((threadId+1)*(MAT_ONE->r/NOF_PROC)); i++)
  21.  for (j = 0; j < MAT_TWO->c; j++){
  22.    MAT_OUT->matrix[i][j] = 0;
  23.    for (k = 0; k < MAT_ONE->c; k++)
  24.      MAT_OUT->matrix[i][j] += MAT_ONE->matrix[i][k] * MAT_TWO->matrix[k][j];
  25.  }
  26. pthread_exit(NULL);
  27. }
  28.  
  29.  
  30. int main(int argc, char *argv[]) {
  31.  
  32. int i,j,k,flag;
  33.  
  34. if(argc == NOF_ARGS) {
  35. sscanf(argv[1], "%d", &NOF_PROC);
  36. if(NOF_PROC < 0) {
  37. fprintf(stderr, "ERROR: invalid number of processes.\n");
  38. exit(EXIT_FAILURE);
  39. }
  40. }
  41. else {
  42. fprintf(stderr,
  43. "ERROR: invalid number of arguments. EXPECTS n : integer.\n");
  44. exit(EXIT_FAILURE);
  45. }
  46.  
  47.  MAT_ONE = MATRIX_new(parser_rows(FILEIN_1), parser_cols(FILEIN_1));
  48.  parser_matrix(FILEIN_1, MAT_ONE);
  49.  
  50.  MAT_TWO = MATRIX_new(parser_rows(FILEIN_2), parser_cols(FILEIN_2));
  51.  parser_matrix(FILEIN_2, MAT_TWO);
  52.  
  53.  if(!(MATRIX_is_multipliable(MAT_ONE, MAT_TWO))) {
  54.    fprintf(stderr, "ERROR: invalid matrixes sizes.\n");
  55.    exit(EXIT_FAILURE);
  56.  }
  57.  
  58.   MAT_OUT = MATRIX_new(MAT_ONE->r, MAT_TWO->c);
  59.  
  60.    pthread_t threads[NOF_PROC];
  61.    pthread_attr_t atributos;
  62.    pthread_attr_init(&atributos);
  63.    pthread_attr_setdetachstate(&atributos, PTHREAD_CREATE_JOINABLE);
  64.    pthread_attr_setscope(&atributos,PTHREAD_SCOPE_SYSTEM);
  65.  
  66.  
  67.    for (i = 0; i < NOF_PROC; i++){
  68.      flag = pthread_create(&threads[i], NULL, multiplica, (void *) (unsigned long) i);
  69.      if (flag)
  70.        exit(-1);
  71.    }
  72.  
  73.    for (i = 0; i < NOF_PROC; i++)
  74.      pthread_join(threads[i], NULL);
  75.  
  76.      for(k = 0; k < (MAT_OUT->r); k++)
  77.      {
  78.         for(j = 0; j < MAT_OUT->c; j++)
  79.         {
  80.            printf("%d ",MAT_OUT->matrix[k][j]);
  81.         }
  82.      printf("\n");
  83.      }
  84.  
  85.      UTILS_write_matrix(FILEOUT, MAT_OUT);
  86.      MATRIX_free(MAT_ONE);
  87.      MATRIX_free(MAT_TWO);
  88.      MATRIX_free(MAT_OUT);
  89.  
  90. return 0;
  91. }
  92.  

Pero ahora no se como modificarlo para poder hacerlo para cualquier tipo de matriz rectangular.
gracias!
3  Seguridad Informática / Criptografía / fuerza bruta AES modo ECB en: 21 Septiembre 2015, 01:43 am
Hola gente, ando en busca de otro par de ojos basicamente. Tengo que encontrar, a traves de una ataque de fuerza bruta, cual es la clave con la que fue cifrado el texto.
Me dieron un parte de la llave (11caracteres de 16) y tengo q hacer fuerza bruta sobre el resto, mi idea fue descifrar el texto con cada una de las llaves y ver si los caracteres que me dio como resultado pertenecen al rango ascii (se que el texto fue codificado en ascii). trabaje con cripto++ y mi codigo tarda muchas horas (unas 18 si lo hago en paralelo si no mas) cuando se que mis compañeros lo han podido hacer en menos.

aca les dejo el codgio
Código:
string decodifica(byte key[16], string hexa){
AutoSeededRandomPool prng;
string recovered="";
ECB_Mode< AES >::Decryption d;
try{
d.SetKey(key, 16);
CryptoPP::StringSource ss(hexa, true,
new CryptoPP::HexDecoder(
new CryptoPP::StreamTransformationFilter( d,
new CryptoPP::StringSink( recovered ), StreamTransformationFilter::NO_PADDING)));
}catch(const CryptoPP::Exception& e) {
cerr << e.what() << endl;
exit(1);
}
return recovered;
}

int valido(string aux){
int resul=1, h=0;
int tam=sizeof(aux);
int ac;
for(h=0;h<tam;h++){
if (!((int)aux[h]>0 && (int)aux[h]<257)){
resul=0;
h=25;
}
}
return resul;
}
int main(int argc, char* argv[])
{
byte key[16]={'K','e','y','2','G','r','o','u','p','2','1',' ',' ',' ',' ',' '};

string hexa1,hexa2,hexa3,hexa4,hexa5,hexa6,hexa7,hexa8,hexa9,hexa10,hexa11,hexa12,hexa13,hexa14,
hexa15,hexa16,hexa17, recovered, aux;
hexa1="D35A20289C43003A96AB32EA8556CCA6";
hexa2="D53D335BF8D2E51772743893113457CE";
hexa3="135648BEC5B8DB824965FA877EC683C2";
hexa4="A4D5FAAD25A0C83866721949B7F70504";
hexa5="E650333AFA48741C38E7B3A97A4936E7";
hexa6="4D3CFE5BC2A6AD8B82C253B98AF621DF";
hexa7="F99BC9752FF5B083858E1F4B9981B4A4";
hexa8="BB54DB4CAB1019F6769457C4F4F2B3FF";
hexa9="DE1932B09AAB1D101CDCF0216D629D17";
hexa10="6872F5DB771864533A0EEDBE2A1CC262";
hexa11="5816109CD62656B0573A03F2E7F2ACAE";
hexa12="DA538E5AADC720AD0D6C2ACC30A71BFA";
hexa13="C80F8D5FA7D9E6D94623311F1E7BB0C8";
hexa14="D3C00CABA5BB42C9AF1444D8B613DBB0";
hexa15="1963DD4D2897B7F15638F37C1E0D44FE";
hexa16="B3C4B6AB1566CD68F94E806957E04261";
hexa17="749F5A324D381008150710891496EFDF";


int i,j,k,l,m;
for(i=33; i<127; i++){
for(j=33; j<127; j++){
std::cout << (char)i << (char)j << "\n" << std::endl;
for(k=33; k<127; k++){
for(l=33; l<127; l++){
for(m=33; m<127; m++){
key[11]=(char)i;
key[12]=(char)j;
key[13]=(char)k;
  key[14]=(char)l;
key[15]= (char)m;
key[16]='\0';

aux.clear();
aux=decodifica(key, hexa1);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa2);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa3);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa4);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa5);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa6);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa7);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa8);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa9);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa10);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa11);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa12);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa13);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa14);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa15);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa16);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa17);
  if (valido(aux)==1){
  std::cout << "Esta es la llave: "<<key << std::endl;
  i=j=k=m=l=128;
  time_t tiempo = time(0);
  struct tm *tlocal = localtime(&tiempo);
  char output[128];
  strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
  printf("%s\n",output);
}
}
}}}}}}}}}}}}}}}}
}
}
}
}

std::cout << "fin de ejecucion - " << key << std::endl;

return 0;
}

como es ecb cada bloque es independiente por eso si el primer bloque pertenece al "rango" ascii pruebo con el seg.
No me dio resultado.

Me dieron la idea de desencriptarlo y volverlo a cifrar con cada una de las llaves pero eso no lo he podido hacer (porque eso me daria lo mismo, lo que me hace pensar no termine de entender la idea que me dieron.

Gracias
4  Seguridad Informática / Hacking / descifrar-fuerza bruta-aes-ecb [academico] en: 5 Septiembre 2015, 22:03 pm
Hola, soy nuevo en esto, estoy haciendo una materia de seguridad en la universidad y uno de los desafios es hacer un pequeño ejercicio de fuerza bruta para descubrir el mensaje, como informacion dispongo que se utilizo AES en modo ECB y conozco una parte de la llave pero debo averiguar los ultimos caracteres de la misma.
Puedo utilizar cualquier lenguaje para llevar a cabo la fuerza bruta.
La verdad no se por dode empezar, agradezco cualquier informacion orientadora.

Gracias
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines