Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: AlbertoBSD en 10 Abril 2016, 16:01 pm



Título: Generacion de ID de llave publica
Publicado por: AlbertoBSD en 10 Abril 2016, 16:01 pm
Buen dia.

¿Cual es la mejor forma de generar un ID?

Les dejo mi metodo y si ustedes tienen otro podria ser muy didactivo explicarlo por aqui

En el proyecto en el que estoy trabajando necesita generar un ID por usuario que instale la aplicacion.

-Muiltiplataforma
-Comunicacion cifrada end-to-end (Lo que esta de moda)

En fin el programa genera  un unico par de claves RSA para la criptografia asimetrica y genero llaves aleatorias para la criptografia simetrica en fin...

Genero un sha512 iterativo N cantidad de veces (mas de 4000) del archivo de la clave publica y este devuelve 64 bytes. Esta es mi ID del usuario y en teoria  no deberia de repetirse nuca...  :rolleyes: :rolleyes: :rolleyes: :rolleyes:

Tal como lei en el documento de whatsapp ellos hacen una conversion solo de los ultimos 30 bytes de la clave y luego pasan cada 5 bytes a un entero sin signo y a ese entero le sacan modulo 100000.

Yo por mi parte copio de 8 en 8 bytes al entero sin signo:

Código
  1. int main() {
  2. int j;
  3. unsigned char *temp;
  4. unsigned long long t;
  5. temp = md_file(GCRY_MD_SHA512,"llavePublica");
  6. j = 0;
  7. printf("ID: ");
  8. while(j < 64) {
  9. printf("%.2x",temp[j++]);
  10. }
  11. printf("\n");
  12. printf("long long :%i\n",sizeof(unsigned long long));
  13. j = 0;
  14. t = 0;
  15. while(j < 8) {
  16. memcpy(&t,temp + (j*8),8);
  17. printf("%llu\n",t);
  18. t = 0;
  19. j++;
  20. }
  21. free(temp);
  22. }
  23.  

Salida:

Código:
ID: d97a302e486bd15f55d4a2e6f7eba511042b0ee4ae118596584393e002103dd65e9d1c822963d945e17d4c24d9b7b6ad0fd54a7a03acea32bf899e22c7c0576b
long long :8
6904417661492427481
1271681919760913493
10846094720439823108
15437512702239654744
5033163088490962270
12517394357567651297
3668933977383294223
7734862846543956415