Algo que se me hizo interesante y a la vez un poco tonto fue la parte para validar las Llaves.
Dice el texto:
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.
Aqui dejo un codigo de como seria el calcular 5200 veces el sha512 de un texto dado usando la libreria libgcrypt
/*
Twitter @albertobsd
cc -o iterative_sha512 iterative_sha512.c `libgcrypt-config --cflags --libs`
*/
#include<stdio.h>
#include<gcrypt.h>
int main() {
unsigned char *buffer,*digest,*temp = NULL;
register int i = 0,j;
buffer
= calloc(64,sizeof(unsigned char)); digest
= calloc(64,sizeof(unsigned char)); while(i < 5200) {
gcry_md_hash_buffer(GCRY_MD_SHA512,digest,buffer,64);
j = 0;
while(j < 64) {
}
temp = buffer;
buffer = digest;
digest = temp;
i++;
}
}
Aqui un pedacito de la salida (las ultimas lineas)
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.