Diffie-Hellman密鑰交換算法
簡(jiǎn)而言之,Diffie-Hellman是一種確保共享密鑰安全通過不安全網(wǎng)絡(luò)的一種方法。包括AES加密算法在內(nèi)的對(duì)稱加密算法可以使用這種方式來交換加密密鑰。需要安全通信的雙方可以用這個(gè)方法確定對(duì)稱密鑰,然后可以用這個(gè)密鑰來進(jìn)行數(shù)據(jù)的加密和解密。但是請(qǐng)注意,這個(gè)密鑰交換算法只能用于密鑰的交換,而不能進(jìn)行消息的加密和解密。當(dāng)通信雙方確定了需要使用的密鑰后,要使用其他對(duì)稱加密算法來進(jìn)行實(shí)際的加密和解密操作。
還有一種匿名密鑰交換協(xié)議,即橢圓曲線Diffie-Hellman(ECDH)。通過橢圓曲線Diffie-Hellman (ECDH) 密鑰協(xié)商協(xié)議,兩個(gè)用戶可以創(chuàng)建共享的機(jī)密協(xié)議。他們可以在不安全的公共媒體上完成此操作,而不必事先交換任何私有信息。該共享機(jī)密協(xié)議通常用于派生密鑰材料。對(duì)稱算法(例如高級(jí)加密標(biāo)準(zhǔn)(AES)算法)可以使用這份密鑰材料來對(duì)后續(xù)消息進(jìn)行加密。

為什么需要ECDH密鑰交換算法?
即便是沒有ECDH,我們的AES加密算法依然可以正常工作。但問題就是,我們還需要自己去處理通信雙方的私鑰問題。因此,我們需要將密鑰硬編碼至.apk文件當(dāng)中,但此時(shí)的密鑰是可以通過對(duì)apk文件進(jìn)行反編譯來獲取到的。因此,為了避免這種情況的發(fā)生,我們需要使用ECDH密鑰交換算法來幫助我們進(jìn)行密鑰的交換操作。
其實(shí)這也很好解釋,假如現(xiàn)在A需要與B進(jìn)行通信,那么此時(shí)就要生成一個(gè)只有他們雙方自己知道的密鑰。當(dāng)A要與C(新的通信對(duì)象)進(jìn)行通信時(shí),又要單獨(dú)生成另外一個(gè)密鑰。這就是端到端加密的實(shí)現(xiàn)方式,你可以將其想象成一種通信專線的形式。也就是說,假如你要和一百個(gè)不同的人聊天,那么此時(shí)就會(huì)存在一百條私人通信信道。
WhatsApp是怎么做的?

WhatsApp也采用了相同的處理機(jī)制。這個(gè)目前世界上使用人數(shù)最多的即時(shí)通信服務(wù)已經(jīng)在他們的通信服務(wù)中引入了端到端加密技術(shù),而且?guī)缀跛械囊苿?dòng)設(shè)備都可以使用這項(xiàng)服務(wù),包括Android、iPhone、黑莓、諾基亞、以及WindowsPhone在內(nèi)。WhatsApp不僅會(huì)對(duì)每一條信息、每一張照片、每一個(gè)視頻、以及每一份文件進(jìn)行加密處理,而且還會(huì)對(duì)用戶的語音通話信息進(jìn)行加密。端到端加密可以確保只有通信雙方(即信息的發(fā)送方和接收方)能夠?qū)?shù)據(jù)進(jìn)行解密,即使是WhatsApp的開發(fā)人員也無法解密這些數(shù)據(jù)。