Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eberfalu2

#1
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
Gracias por la respuesta, ahora tengo una segunda version con Mutex, pero tengo algunos problemas, pero esta mucho mejor, gracias por las recomendaciones, la idea es para matrices bien grandes y probarlo en una pc de 8cores pero es solo un laboratorio de la facultad para practiar hilos por lo que si o si lo tengo que desarrolar con eso..
#3
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.


#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include "../include/matrix.h"
#include "../include/parser.h"

#define FILEIN_1 "in1.txt"
#define FILEIN_2 "in2.txt"
#define FILEOUT "out.txt"
#define NOF_ARGS 2

MATRIX *MAT_ONE, *MAT_TWO, *MAT_OUT; // global matrixes to operate upon
int NOF_PROC; // number of processes passed as argument via terminal


void *multiplica(void *id) {
unsigned long threadId = (unsigned long) id;
fprintf(stderr, "threadId: %lu\n",threadId);
int i,j,k;
for (i = (threadId*(MAT_ONE->r/NOF_PROC)); i < ((threadId+1)*(MAT_ONE->r/NOF_PROC)); i++)
 for (j = 0; j < MAT_TWO->c; j++){
   MAT_OUT->matrix[i][j] = 0;
   for (k = 0; k < MAT_ONE->c; k++)
     MAT_OUT->matrix[i][j] += MAT_ONE->matrix[i][k] * MAT_TWO->matrix[k][j];
 }
pthread_exit(NULL);
}


int main(int argc, char *argv[]) {

int i,j,k,flag;

if(argc == NOF_ARGS) {
sscanf(argv[1], "%d", &NOF_PROC);
if(NOF_PROC < 0) {
fprintf(stderr, "ERROR: invalid number of processes.\n");
exit(EXIT_FAILURE);
}
}
else {
fprintf(stderr,
"ERROR: invalid number of arguments. EXPECTS n : integer.\n");
exit(EXIT_FAILURE);
}

 MAT_ONE = MATRIX_new(parser_rows(FILEIN_1), parser_cols(FILEIN_1));
 parser_matrix(FILEIN_1, MAT_ONE);

 MAT_TWO = MATRIX_new(parser_rows(FILEIN_2), parser_cols(FILEIN_2));
 parser_matrix(FILEIN_2, MAT_TWO);

 if(!(MATRIX_is_multipliable(MAT_ONE, MAT_TWO))) {
   fprintf(stderr, "ERROR: invalid matrixes sizes.\n");
   exit(EXIT_FAILURE);
 }

  MAT_OUT = MATRIX_new(MAT_ONE->r, MAT_TWO->c);

   pthread_t threads[NOF_PROC];
   pthread_attr_t atributos;
   pthread_attr_init(&atributos);
   pthread_attr_setdetachstate(&atributos, PTHREAD_CREATE_JOINABLE);
   pthread_attr_setscope(&atributos,PTHREAD_SCOPE_SYSTEM);


   for (i = 0; i < NOF_PROC; i++){
     flag = pthread_create(&threads[i], NULL, multiplica, (void *) (unsigned long) i);
     if (flag)
       exit(-1);
   }

   for (i = 0; i < NOF_PROC; i++)
     pthread_join(threads[i], NULL);

     for(k = 0; k < (MAT_OUT->r); k++)
     {
        for(j = 0; j < MAT_OUT->c; j++)
        {
           printf("%d ",MAT_OUT->matrix[k][j]);
        }
     printf("\n");
     }

     UTILS_write_matrix(FILEOUT, MAT_OUT);
     MATRIX_free(MAT_ONE);
     MATRIX_free(MAT_TWO);
     MATRIX_free(MAT_OUT);

return 0;
}


Pero ahora no se como modificarlo para poder hacerlo para cualquier tipo de matriz rectangular.
gracias!
#4
Criptografía / fuerza bruta AES modo ECB
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

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
#5
Cita de: someRandomCode en  5 Septiembre 2015, 22:20 PM
Hmm, son muchos para hacer lo primero y mas facil que te iba a sugerir..
Sabes alguna palabra del mensaje de casualidad?
Porque una forma es tomar la llave, y el mensaje cifrado, y hacer fuerza bruta sobre los ultimos caracteres de la clave. Cuando conseguis una clave para utilizar, descifras el texto. Hasta que de algo con sentido.
Una vez por cada clave posible (es poco practico).
Claro esta, que si tenes idea de alguna de las palabras que hay en el mensaje, esto se puede automatizar.
De otra forma, ECB es Electronic Code Book es de las mas viejas, y haciendo analisis de patrones algunas propiedades se pueden encontrar del texto original sin saber la llave y a partir de ahi construirla.

Esta clase de desafios me encantan, si te gustaria contactarme privadamente te podria dar una mano.




Ahi me puse en contacto, muchas gracias  ;D ;D ;D ;D
#6
la clave tiene 16 caracteres, de los cuales tengo que averiguar los ultimos 5
#7
Hacking / descifrar-fuerza bruta-aes-ecb [academico]
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