算法,包含
- SHA*
- MD5
- AES
- 橢圓曲線
場景1:比特幣挖礦
比特幣挖礦原理是,給定固定長度數(shù)據(jù)input
,要求算出另外一段數(shù)據(jù)coin
作為比特幣獎勵,使得SHA256(input+coin)
的結(jié)果,前面N個字節(jié)都是0,當(dāng)挖到礦coin
之后,再由coin
計(jì)算下一段輸入數(shù)據(jù)input
, 如此往復(fù)。
根據(jù)當(dāng)前挖礦的速度調(diào)節(jié)N,使得挖礦難度保持在一定的區(qū)間內(nèi)。
因?yàn)镾HA的不可逆,所以數(shù)據(jù)coin只能一個一個的遍歷,因?yàn)镾HA算法的CPU或者GPU都有并行計(jì)算的方法,所以顯卡可以挖礦,還出現(xiàn)了單獨(dú)為此設(shè)計(jì)的ASIC芯片。
這樣原本普通人可以挖礦的事情,現(xiàn)在都集中到礦場主去了,所以有了部分其它的幣,來避免算力集中的問題。
場景2:壓縮文件的密碼
RAR: 從RAR文件中可以找到兩段字節(jié)A和B,測試password,把A+password
進(jìn)行多次SHA256與md5,使得最終的結(jié)果和B相等則密碼正確
7z: 除了RAR這樣的機(jī)制外,還需要去實(shí)際解壓文件,使得解壓出來的CRC于7z中存放的CRC相等
具備并行計(jì)算的可能性
場景3:PDF密碼
從PDF文件中找到字節(jié)A和B,測試password,把A+password
作為input
進(jìn)行運(yùn)算得出B,則密碼正確,運(yùn)算過程如下
while (round_time < 64)
aes_result = AES(input)
n = (aes_result / 3)的余數(shù)
if n == 0: <-----此處的if決定了沒有辦法并行計(jì)算,因?yàn)闊o法預(yù)測分支
sha = sha256
else if n == 1:
sha = sha384
else
sha = sha512
input = sha(input)
if (ars_result.last > round_time - 32)
break;
在這個循環(huán)中,因?yàn)橛懈鶕?jù)余數(shù)來選擇SHA算法,所以沒有辦法并行計(jì)算
場景4:AirPlay協(xié)議
在數(shù)據(jù)傳輸之前的協(xié)商階段,采用了橢圓曲線加密和摘要,這是一個不同于RSA的只需要單方生成密鑰對公開公鑰,橢圓曲線需要雙方都生成密鑰對,并且明文交換公鑰,雙方都利用對方的公鑰,生成相同的share_key用于通信加密,意味著算法比較奇特,需要滿足
share_key = p(f(sec_key_a), pub_key_b) = p(f(sec_key_b), pub_key_a)
AirPlay協(xié)議不用RSA的原因是,傳輸過程沒有CA的幫助,無法知道有沒有中間人攻擊來偷窺或者修改數(shù)據(jù),否則就被發(fā)現(xiàn)投屏/鏡像的數(shù)據(jù)了。橢圓曲線秘鑰的交換過程,中間人無法算出c。
但是該算法依然無法解決投錯對象的問題,比如想投電視機(jī),結(jié)果投個冰箱,這需要了解airplay后,電視機(jī)怎么允許了。