散列與加密算法的幾處實(shí)際應(yīng)用場景

算法,包含

  • 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ī)怎么允許了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容