Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: AlbertoBSD en 6 Abril 2016, 01:59 am



Título: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 6 Abril 2016, 01:59 am
Bueno como es noticia desde hace unas horas para algunos usuarios, whatsapp en sus nueva actualizacion acaba de anunciar que implementara cifrado end-to-end.

El documento explicando todo el proceso esta disponible para su lectura en

https://s3-eu-west-1.amazonaws.com/uploads-eu.hipchat.com/83000%2F605209%2FM79CMVvVjjbGFRx%2FWhatsApp-Security-Whitepaper.pdf (https://s3-eu-west-1.amazonaws.com/uploads-eu.hipchat.com/83000%2F605209%2FM79CMVvVjjbGFRx%2FWhatsApp-Security-Whitepaper.pdf)

En general usan un par de claves Curve25519

agregare algunos comentarios en lo que tenga mas oportunidad.

TEMA REPETIDO

LEER: https://foro.elhacker.net/noticias/whatsapp_ya_es_100_seguro_con_cifrado_end_to_end-t450517.0.html


Título: Re: Whatsapp criptografia End-to-End
Publicado por: Br1ant en 6 Abril 2016, 03:16 am
WhatsApp... Facebook... espera. ¿Los de Facebook están implementando anonimato en la comunicación del teléfono verde?

Muy bien, carajo, ¿dónde está el truco?


Título: Re: Whatsapp criptografia End-to-End
Publicado por: PalitroqueZ en 6 Abril 2016, 03:43 am
Al fin, un poco de seguridad para el whatsapp.

 ;-)


Título: Re: Whatsapp criptografia End-to-End
Publicado por: MCKSys Argentina en 6 Abril 2016, 04:21 am
Para los que saben poco de crypto (como yo): Curve25519 (https://en.wikipedia.org/wiki/Curve25519)

Según lo anterior, están usando Double ratchet (https://en.wikipedia.org/wiki/Double_ratchet) (ver Usage).

Saludos!


Título: Re: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 6 Abril 2016, 06:02 am
Algo que se me hizo interesante y a la vez un poco tonto fue la parte para validar las Llaves.

Dice el texto:
Citar
Verifying Keys

WhatsApp users additionally have the option to verify the keys of the other users with whom they are communicating so that they are able to confirm that an unauthorized third party (or WhatsApp) has not initiated a man-in-the-middle attack. This can be done by scanning a QR code, or by comparing a 60-digit number.

The QR code contains:

1. A version.
2. The user identifier for both parties.
3. The full 32-byte public Identity Key for both parties.

When either user scans the other’s QR code, the keys are compared to ensure that what is in the QR code matches the Identity Key as retrieved from the server.

The 60-digit number is computed by concatenating the two 30-digit numeric fingerprints for each user’s Identity Key

To calculate a 30-digit numeric fingerprint:
1. Iteratively SHA-512 hash the public Identity Key and user identifier 5200 times.
2. Take the first 30 bytes of the final hash output.
3. Split the 30-byte result into six 5-byte chunks.
4. Convert each 5-byte chunk into 5 digits by interpreting each 5-byte chunk as a big-endian unsigned integer and reducing it modulo 100000 .
5. Concatenate the six groups of five digits into thirty digits.

Iteratively SHA-512 hash the public Identity Key and user identifier 5200 times.

Por que 5200? Siendo que a  sha512 no le han encontrado colisiones por que ese numero incluso el sha512 de una texto unas cuantas veces digamos 5 seria suficiente en fin.

 :silbar: :silbar:

Aqui dejo un codigo de como seria el calcular 5200 veces el sha512 de un texto dado usando la libreria libgcrypt
Código
  1. /*
  2. Twitter @albertobsd
  3. cc -o iterative_sha512 iterative_sha512.c `libgcrypt-config --cflags --libs`
  4. */
  5.  
  6. #include<stdio.h>
  7. #include<gcrypt.h>
  8.  
  9. int main() {
  10. unsigned char *buffer,*digest,*temp = NULL;
  11. register int i = 0,j;
  12. buffer = calloc(64,sizeof(unsigned char));
  13. digest = calloc(64,sizeof(unsigned char));
  14. memset(buffer,'A',64);
  15. while(i < 5200) {
  16. gcry_md_hash_buffer(GCRY_MD_SHA512,digest,buffer,64);
  17. printf("sha512: ");
  18. j = 0;
  19. while(j < 64) {
  20. printf("%.2x",digest[j++]);
  21. }
  22. printf("\n");
  23. temp = buffer;
  24. buffer = digest;
  25. digest = temp;
  26. i++;
  27. }
  28. free(buffer);
  29. free(digest);
  30. }
  31.  
  32.  

Aqui un pedacito de la salida (las ultimas lineas)

Código:
sha512: 4f86b77580f55fdb90493042738915127aaa4fa2f1302a52b647b7a179b9c49b06f3cf67d0b1cc6e50dc7519bbb30c207b87be46eb60c8c78da0a18be7ee7b7a
sha512: 08726cc621866ffce20525d3e06d369aa73efae405d452ecdb426dfa00784637b2d0287e8702c50853741c34aac4768765d2e8395188351e9c5b5c6793d4759b
sha512: 16687e52fd941f0ccd8f70ce64c6802688c135482ec01c03e16cf0bb60490774b86ffab6fc7d19b65a22519d38807ee5b88277847a875f011c05ea2f47ae7e3b
sha512: bc83d85641f7588c15a023f8fe3617baacc67a758d148829ea8e10e3123d684f710b7d085de99fea5be9913db9a67145d181de39d7b19fc664780477f5e2253b
sha512: 13bd175d39ab444f808a09dc49a823f76720a36a48bf8e1f321ba9a16303325003fb41fb80d40fd2a82cf8c2904168dc6160491e0be48ef60a6e8ed63137ee4f
sha512: 36d743bb4e26669d09c96e4f82213105f5d34e4fcbcb7e5d385bf278b30e2083d9d8dfd9516a28e5e4096078a5ee7ab160da16aff39c19062eddfce4282190d7
sha512: dee957067e6ca41113242e06e9a42532c0806a577fb665ed6d9e45a8f60762ab0c8c4511ef720a0edaf3758cf40bf6f85e10237f2821ec3213451b8aa34a3a2f
sha512: fd3172c5314f26e48a6f94d243e428be4bb28379c5536e943fa33c8a7b87564c46b23359dc113f547b21f64a6b8ca3d8b655f4f743c533aeffd84c38f10ceced
sha512: a2c5ce5e4342863ca31dfbf0ff204d94636fd2da00c539df97ab6ce193791c5dd4a4136686ef7e37ca25c547fe12cea80192f06c1e6c33450e730f73a9d170ba
sha512: 467bb8f325dcb319ebfb9f60464a4d54cf4078fc3c5ad8ee70ab214e999a2fb39873d430a51cb96e5ca2929d8c485105b3095463f4790ba4709deb425512cb2e
sha512: 82776272e658cbc37b73258da6d5283baa027f85c27ee1538c47aaccde688ee510652e2e47fb8bcfa7eb02f3797bfffa44cf20f9274f401d8668467632459928
sha512: 5387ba3de50479e2b15c466d0bec62252bccaace8a207c53d5591283fb799ef7d1480aebdefeaff30e92436633d519e9a494d3db6a578e1da84b452372aa1b71

Ahora pense que seria algo tardado pero al parecer es bastante rapido
WhatsApp... Facebook... espera. ¿Los de Facebook están implementando anonimato en la comunicación del teléfono verde?

Muy bien, carajo, ¿dónde está el truco?

Creo que whatsApp esta motivado por 2 cosas.

*Sus principales competidores ya implementaban cifrado end-to-end y estan perdiendo usuarios.

Telegram por ejemplo se me hace mejor que whatapp, tiene tambien autodestrucion de mensajes, stickers y una API para poder programar bots y un largo etc..

*El caso del FBI vs Apple

Aunque el FBI encontrara metodos alternos para acceder al iphone. Apple se mantuvo firmo y demostro que una Organizacion gubernamental puede terminar por no acceder a los datos cuando un buen sistema de cifrado esta implementado.


Título: Re: Whatsapp criptografia End-to-End
Publicado por: PalitroqueZ en 6 Abril 2016, 21:43 pm
Citar
*Sus principales competidores ya implementaban cifrado end-to-end y estan perdiendo usuarios.

hasta Line creo que empezó cifrando su mensajería.

a mi me gusta más Line que whatsapp, pero por donde vivo no es popular.




Título: Re: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 6 Abril 2016, 22:55 pm
hasta Line creo que empezó cifrando su mensajería.

a mi me gusta más Line que whatsapp, pero por donde vivo no es popular.

La verdad Whatsapp gano mucho terreno. Frente a otros que ya existian incluso ve el Google Hangouts que en su momento era Talk

Por lo que estoy leyendo del protocolo este manda el mensaje cifrado con AES256 y firmado por HMAC256 esto es y lo que manda cifrado con la llave publica, es a lo que entiendo el Message Key.

Por se se me haria inseguro por no decir otra palabra mandar el Message Key en texto plano para que en el remoto caso de alguien intercepte ese paquete tenga acceso a la clave de descifrado.

La lectura no indica este punto claramente o por lo menos yo no lo he visto o no lo entiendo al 100

Segun yo se manda lo siguiente:

Código:
<Message Key>
<CLAVE: 32 Bytes clave de decifrado AES256><HMAC: 32 Bytes firma HMAC><IV: 16 bytes Vector de Inicializacion para el modo CBC del mensaje cifrado>
</Message Key>
<Message>
Mensaje cifrado con AES256  con la clave "CLAVE" en modo CBC con el vector de de inicializacion "IV"
</Message>

Donde en teoria se manda el "Message Key" cifrado con la llave publica.


Título: Re: Whatsapp criptografia End-to-End
Publicado por: engel lex en 6 Abril 2016, 23:21 pm
la llave publica es para ser pasada en plano, no tiene sentido protegerla XD para protegerla solo harías una llave publica de una llave publica...

la llave publica es como mandar un candado abierto, solo puede ser usada para cerrar el mensaje... no puede hacerse más nada con ella


Título: Re: Whatsapp criptografia End-to-End
Publicado por: MinusFour en 6 Abril 2016, 23:31 pm
Algo que se me hizo interesante y a la vez un poco tonto fue la parte para validar las Llaves.

Dice el texto:
Iteratively SHA-512 hash the public Identity Key and user identifier 5200 times.

Por que 5200? Siendo que a  sha512 no le han encontrado colisiones por que ese numero incluso el sha512 de una texto unas cuantas veces digamos 5 seria suficiente en fin.

 :silbar: :silbar:

La técnica se llama key streching:

https://en.wikipedia.org/wiki/Key_stretching

Y es algo que utiliza bastante para KDF:

https://en.wikipedia.org/wiki/Key_derivation_function

Por ejemplo, PBKDF2 o bcrypt.


Título: Re: Whatsapp criptografia End-to-End
Publicado por: elezekiel en 7 Abril 2016, 01:02 am
whatsapp es de codigo abierto? que pregunta tonta pero no lo se jaja
ademas como aseguran que no hay copias de mensajes por si acaso?? no les creo nada solo pantalla  ;-)


Título: Re: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 7 Abril 2016, 01:18 am
la llave publica es para ser pasada en plano, no tiene sentido protegerla XD para protegerla solo harías una llave publica de una llave publica...

la llave publica es como mandar un candado abierto, solo puede ser usada para cerrar el mensaje... no puede hacerse más nada con ella

Claro, cuando se genera un PAR de llaves una es publica y la otra privada. La llave publica se envia a las personas con las que te quieres comunicar entiendo eso y si la llave publica se tranmite en texto plano

Tengo muy claro eso.

Ahora si leemos la documentaion El Message Key contiene un total de 80 de los cuales esta didivido en 3 secciones.

  • 32 bytes AES password
  • 32 bytes HMAC
  • 16 bytes IV

Entonces eso solo compone el Message Key.
El mensaje Cifrado es otra parte de la Data enviada y de nada serviria mandar algo cifrado si tambien vamos a mandar la llave en los 80 bytes anteriores. Recordemos que AES es un sistema para cifrado simetrico.

Y por lo tanto supongo que esos 80 bytes se mandan cifrados con criptografia asimetrica..

Insito en esto por que estoy programando un projecto con necesidades similares y me gustaria tomar las mejores ideas, no se tal vez no me explico bien y/o estoy omitiendo algo en la lectura o en mis bases criptograficas. Omito cosas con mucha facilidad.

Whatsapp no es de codigo abierto.


Título: Re: Whatsapp criptografia End-to-End
Publicado por: engel lex en 7 Abril 2016, 02:10 am
pero es que hace toooda la transmision asimetrica es muy pesada, lo que hace incluso el https es que establece una clave común al azar muy pesada para in cifrado simetrico (fb usa AES128, google y nosotros chacha 20) pasas la clave por asimetrico (RSA, ECDHE) y luego cifras con la clave que pasaste cambiando el IV...

que te asegura esto?
si pasas todo asimetrico cifrando byte a byte no solo consumirás mucho procesador, sino que estás pasando una pista de la clave una vez por byte... eventualmente será vulnerable... (la petición http se repite una y otra vez y es la misma XD solo tienes que hacer una conversión lineal, ya sabes cuales simbolos representan la "h", la "t", la "p" entre otros que se repiten XD)
si es simetrico, pasas todo por un cifrado de stream preparado para no ser predecible (aqui entra el iv que "cambia" la contraseña cada vey listo para ser de descifrado rapido

si, el cifrado pasa la contraseña, pero así funciona :o

fijate el post de cifrado rsa en python (https://foro.elhacker.net/buscador-t427548.0.html), puedes meter los bytes que quieras en el mensaje y siempre serás los mismos

pero en aes (si está bien implementado) (https://www.infoencrypt.com/)
tengo estos 3 mensajes, clave 123
Código:
K7xGlZ3okW+uE4jiqTt0jE4FGkSwRRUKC9maBAHdsXl8A8+7bZVX/mp85Rmkf2EV
Código:
vmd1WLXCAEI1YMaAWvtQsyf6/1Bsiuw5cYTo8jedjGNOW0hgmsvjbcELP/jjBE1S
Código:
2zybZUeUJZ8cdGncA+1VczXAJUw7nx4WN3YQcW6BV+SxmSy9K802ATQBJXtSYkE6
y las 3 son el mismo mensaje


Título: Re: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 7 Abril 2016, 04:41 am
pasas la clave por asimetrico (RSA, ECDHE)

Tu mismo lo dices pasas la "clave" por asimetrico y ya una vez descifrada con tu clave privada pasas a descifrar lo que pasastes por AES256 o por chacha20 o el algoritmo que acordaran


tengo estos 3 mensajes, clave 123
Código:
K7xGlZ3okW+uE4jiqTt0jE4FGkSwRRUKC9maBAHdsXl8A8+7bZVX/mp85Rmkf2EV
Código:
vmd1WLXCAEI1YMaAWvtQsyf6/1Bsiuw5cYTo8jedjGNOW0hgmsvjbcELP/jjBE1S
Código:
2zybZUeUJZ8cdGncA+1VczXAJUw7nx4WN3YQcW6BV+SxmSy9K802ATQBJXtSYkE6
y las 3 son el mismo mensaje

Claro por el IV o por el modo de empleo del del AES o también puede cambiar dependido si es modo CFB, CBC etc..

En lo que tenga un chance publicare un ejemplo en C.




Título: Re: Whatsapp criptografia End-to-End
Publicado por: engel lex en 7 Abril 2016, 05:44 am
ahh! es que todo pasa en claro? yo estoy asumiendo que el Message Key pasa por asimetrico! :s


Título: Re: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 7 Abril 2016, 07:24 am
ahh! es que todo pasa en claro? yo estoy asumiendo que el Message Key pasa por asimetrico! :s

Era mi duda, yo asumo que pasa por asimetro al igual que tu y con las claves publicas Curve25519 lo decifran. En la lectura no lo especifican, me imagino que lo dan por hecho.

Bueno ya que nos quitamos la duda teóricamente todo esta bien.

Acabo de hacer un programa en C usando libgcrypt para ejemplicar esto.

El programa hace lo siguiente.
  • Crea un archivo llamada AAAA.txt de 512 bytes lleno de AAAAAAAAAA's para ejempliciar el plain text.
  • Genera un par de llaves RSA (Parte tardada)
  • Guarda las claves creadas en archivo en archivo para su posterior uso
  • Genera apartir de la llave publica y algunos otros datos 5  "Key Message" para fines didacticos solo usaremos el ultimo
  • usa el campo pass del KeyMessage para cifrar el AES en modo CBC con el iv correspondiente
  • Guarda la salida en un archivo llamada AAES.txt

Todavia no me queda muy claro como utilizar HMAC pero leyendo la API y los RFC correspondientes aprendere.

Muestro la salida y al final el codigo del programa que la produce.

Archivo >>>>>>>>AAES (https://drive.google.com/file/d/0B_URQvsxUYjQdHNjYnhmYzhtZzQ/view?usp=sharing) <<<<<<<<<<<de salida

Código:
Key df9701195198737faf7c163298704e2c5b583532cf8fc20595c8512b5b65e8db2ef1683d4e7399132d719a38cdf14b32d100a73e84f338ae4d8c43dc43c408222e2278d005332bca737d55b5a7a24897
Key b858d2f07d002deeb2afd730078b8f38904725e37f98d31dd15c11a404e22777c1813ea5982db9324e9fc8f85b60720fa709f62baaab81034f9090cf4ad37609858b5d5c7b285f8f0baf241fcd405c28
Key 4df7986bfb598832b552860e7e03bb67a661c75d6a571656ac6b5e31ea60755f984964eafaf78e79e83a66589c2993dd7fc67de37467c6c3e56a565e8167305271079d6902c6cbfdd7ee8c3799d58b79
Key a8d81e45dfcec1e6cb5b9be014626311f42c38f88ceb6f4ef6494d4c7281c92c0e92cdc6cb296231322909b8634af89b15807235b7fcd27c7103e4df89e6163cf809a342ce4004145e3d7f19643d2133
Key 420341bb215e4393c4fb364ed05331bb4ab51e81355d767fe7ac4fe33012c15fcc66740840cc8b0981a9d6e98b925f408e9c16e0b559993b368fb749f337bae3dfe9797fdced844f1d227dbce12bda05



Algunas funciones del programa fueron implementadas de forma rapida y puede fallar.

Código
  1. /*
  2. twitter: @albertobsd
  3. cc -o ejemplos ejemplos.c `libgcrypt-config --cflags --libs`
  4. */
  5.  
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<string.h>
  9. #include<gcrypt.h>
  10.  
  11. void libgcrypt_init();
  12. int createRSA_4096(char *prefix,char *bufferPkey);
  13. unsigned char *my_kdf(char *passphrase,size_t passphraselen,unsigned int iterations,size_t keysize);
  14. int encrypt(char *buffer,char *pass,char *iv,int length);
  15.  
  16.  
  17.  
  18. typedef struct str_KeyMessage {
  19. unsigned char pass[32];
  20. unsigned char hmac[32];
  21. unsigned char iv[16];
  22. }*KeyMessage;
  23.  
  24. int main() {
  25.  
  26. FILE *archivo = NULL;
  27. char *buffer = NULL;
  28. char *pkey = NULL;
  29. char *digest = NULL;
  30. unsigned char *key = NULL;
  31. int length,i,j;
  32. buffer = calloc(512,1);
  33. if(!buffer) {
  34. printf("calloc\n");
  35. exit(0);
  36. }
  37. memset(buffer,'A',512);
  38. archivo = fopen("AAAA.txt","w");
  39. if(!archivo) {
  40. printf("calloc\n");
  41. exit(0);
  42. }
  43. fwrite(buffer,1,512,archivo);
  44. fclose(archivo);
  45. libgcrypt_init();
  46. pkey = calloc(2048,1);
  47. length = createRSA_4096("UsuarioA",pkey);
  48. j = 0;
  49. while(j < 5) {
  50. key = my_kdf(pkey,length,1024,80);
  51. if(!key) {
  52. printf("my_kdf\n");
  53. exit(0);
  54. }
  55. printf("Key ");
  56. i = 0;
  57. while(i < 80) {
  58. printf("%.2x",key[i]);
  59. i++;
  60. }
  61. printf("\n");
  62. j++;
  63. }
  64. KeyMessage km = (KeyMessage)key;
  65. encrypt(buffer,(char*)km->pass,(char*)km->iv,512);
  66. archivo = fopen("AAES.txt","w");
  67. if(!archivo) {
  68. printf("fopen 2");
  69. exit(0);
  70. }
  71. fwrite(buffer,1,512,archivo);
  72. fclose(archivo);
  73.  
  74. }
  75.  
  76. void libgcrypt_init() {
  77. if(!gcry_check_version(GCRYPT_VERSION)) {
  78. fprintf(stderr,"libgrypt version mismatch %s\n",GCRYPT_VERSION);
  79. exit(0);
  80. }
  81. gcry_control(GCRYCTL_SUSPEND_SECMEM_WARN);
  82. gcry_control(GCRYCTL_INIT_SECMEM,1638,0);
  83. gcry_control(GCRYCTL_INITIALIZATION_FINISHED,0);
  84. if(!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P)) {
  85. fprintf(stderr,"libgrypt has not been initialized\n");
  86. exit(0);
  87. }
  88. }
  89.  
  90. int createRSA_4096(char *prefix,char *publickey) {
  91. FILE *p;
  92. FILE *s;
  93. gcry_sexp_t rsa_parms = NULL;
  94. gcry_sexp_t rsa_keypair = NULL;
  95. gcry_sexp_t rsa_skey = NULL;
  96. gcry_sexp_t rsa_pkey = NULL;
  97. gcry_error_t err = 0;
  98. int temp = 0;
  99. char *nombre_p,*nombre_s;
  100. size_t length = 2048;
  101. size_t offset = 0;
  102. char *bufferkey;
  103. nombre_p = calloc(strlen(prefix) + 2,sizeof(char));
  104. nombre_s = calloc(strlen(prefix) + 2,sizeof(char));
  105. sprintf(nombre_p,"%sp",prefix);
  106. sprintf(nombre_s,"%ss",prefix);
  107. err = gcry_sexp_build(&rsa_parms, NULL, "(genkey (rsa (nbits 4:4096)(rsa-use-e 1:1)))");
  108. if(err) {
  109. fprintf(stderr,"gcry_sexp_build: failed to build\n");
  110. fclose(stderr);
  111. exit(0);
  112. }
  113. err = gcry_pk_genkey(&rsa_keypair, rsa_parms);
  114. gcry_sexp_release(rsa_parms);
  115. if(err) {
  116. fprintf(stderr,"gcry_pk_genkey: failed to genkey\n");
  117. fclose(stderr);
  118. exit(0);
  119. }
  120. rsa_pkey = gcry_sexp_find_token(rsa_keypair, "public-key", 0);
  121. rsa_skey = gcry_sexp_find_token(rsa_keypair, "private-key", 0);
  122. gcry_sexp_release(rsa_keypair);
  123. bufferkey = calloc(length,sizeof(char));
  124. if(bufferkey == NULL) {
  125. fprintf(stderr,"unable to alloc memory\n");
  126. fclose(stderr);
  127. exit(0);
  128. }
  129. offset = gcry_sexp_sprint(rsa_pkey,GCRYSEXP_FMT_CANON,bufferkey,length);
  130. gcry_sexp_release(rsa_pkey);
  131. p = fopen(nombre_p,"w");
  132. if(p == NULL) {
  133. fprintf(stderr,"unable to create file\n");
  134. fclose(stderr);
  135. exit(0);
  136. }
  137. temp = offset;
  138. memcpy(publickey,bufferkey,offset);
  139. fwrite(bufferkey,sizeof(char),offset,p);
  140. fclose(p);
  141. memset(bufferkey,0,length);
  142. offset = gcry_sexp_sprint(rsa_skey,GCRYSEXP_FMT_CANON,bufferkey,length);
  143. gcry_sexp_release(rsa_skey);
  144. s = fopen(nombre_s,"w");
  145. if(s == NULL) {
  146. fprintf(stderr,"unable to create file\n");
  147. fclose(stderr);
  148. exit(0);
  149. }
  150. fwrite(bufferkey,sizeof(char),offset,s);
  151. fclose(s);
  152. memset(bufferkey,0,length);
  153. return temp;
  154. }
  155.  
  156. unsigned char *my_kdf(char *passphrase,size_t passphraselen,unsigned int iterations,size_t keysize) {
  157. gpg_error_t err;
  158. unsigned char *bufferkey = NULL;
  159. char *salt = NULL;
  160. bufferkey = calloc(keysize,1);
  161. salt = calloc(8,1);
  162. gcry_randomize(salt,8,GCRY_VERY_STRONG_RANDOM);
  163. err = gcry_kdf_derive(passphrase,passphraselen,GCRY_KDF_ITERSALTED_S2K,GCRY_MD_SHA512,salt,8,iterations,keysize,bufferkey);
  164. if(err != 0) {
  165. free(bufferkey);
  166. free(salt);
  167. return NULL;
  168. }
  169. else {
  170. free(salt);
  171. return bufferkey;
  172. }
  173. }
  174.  
  175.  
  176. int encrypt(char *buffer,char *pass,char *iv,int length) {
  177. gcry_error_t err = 0;
  178. gcry_cipher_hd_t aes_hd;
  179. gcry_cipher_open(&aes_hd, GCRY_CIPHER_AES256,GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_SECURE);
  180. err = gcry_cipher_setkey(aes_hd, pass, 32);
  181. if (err) {
  182. fprintf(stderr,"gcry_cipher_setkey(): could not set cipher key\n");
  183. fclose(stderr);
  184. exit(0);
  185. }
  186. err = gcry_cipher_setiv(aes_hd, iv, 16);
  187. if (err) {
  188. fprintf(stderr,"gcry_cipher_setiv(): could not set cipher initialization vector\n");
  189. fclose(stderr);
  190. exit(0);
  191. }
  192. err = gcry_cipher_encrypt(aes_hd, (unsigned char*) buffer, length, NULL, 0);
  193. if (err) {
  194. fprintf(stderr,"gcry_cipher_encrypt(): unable to encrypt file\n");
  195. fclose(stderr);
  196. exit(0);
  197. }
  198. err = gcry_cipher_reset(aes_hd);
  199. gcry_cipher_close(aes_hd);
  200. return err;
  201. }
  202.  
  203.  
  204.  



Título: Re: Whatsapp criptografia End-to-End
Publicado por: xv0 en 7 Abril 2016, 10:53 am
No me creo nada tiene que tener algun truco, deberas dejaran conexiones cifradas a las masas y ellos no sabran leerlas? Pero quien se cree eso?, ademas sabiendo el alto nivel de paranoia que hay con las agencias que ya todo el mundo conoce.

El que quiera anonimato que busque otra cosa no Whatsapp.

Un saludo.

P.D: Ayer aparecio la noticia en el telediario, me hizo mucha gracia lo que dijeron xD.


Título: Re: Whatsapp criptografia End-to-End
Publicado por: AlbertoBSD en 7 Abril 2016, 14:02 pm
Comparte la noticia para nos de gracia tambien a nosotros.

Whatsapp a sido muy criticado por su falta de seguridad, desde aquellos dias que podias ver los mensajes en texto plano entre otras cosas.

whatsapp podria a ver detectado una disminucion de usuarios y se puso las pilas en ese tema.
El caso de FBI vs Apple demostro que las organizaciones gubernamentales no pueden hacer mucho contra un sistema criptografico bien implementado.

Ahora whatapp solo ofrece seguridad mas no anonimato, todavia quien esta hablando con quien..

para anonimato los sistemas no deberian de pedirte un numero que te identifique.


Título: Re: Whatsapp criptografia End-to-End
Publicado por: xv0 en 8 Abril 2016, 00:29 am
El caso de FBI vs Apple demostro que las organizaciones gubernamentales no pueden hacer mucho contra un sistema criptografico bien implementado.

No se yo no pondria la mano en el fuego, y mas con una aplicacion como esta. Este tema se me torna como el de las VPN "privadas" que no guardan direcciones, logs etc...

Deberas creen que si comometen algun delito, y les lleva a ese servicio, la empresa cargara con el lio de la gente? Con esto pasara igual.

No es posible. Y los servicios que no colaboran cierran, lei sobre un caso de mensajeria de correo que lo cerraron por lo mismo pero ahora no recuerdo.


.Ahora whatapp solo ofrece seguridad mas no anonimato, todavia quien esta hablando con quien..

para anonimato los sistemas no deberian de pedirte un numero que te identifique.

Con anonimato lo puse en el contexto de "no saber que dice el mensaje" no sobre la direccion de dicha persona, fallo mio.

Un saludo.


P.D: La noticia, tiene que estar es reciente, ya la pondre, pero nada especial el tipico telediario.