密碼學(xué)基礎(chǔ)
標(biāo)簽: Blockchain
Hash
Hash (哈?;蛏⒘校┦侵笇⑷我忾L度的二進(jìn)制值映射成為一個(gè)固定長度的二進(jìn)制值的算法。Hash算法的輸出在實(shí)際應(yīng)用中也被稱為數(shù)字摘要。
? ~ echo Alex |md5sum
94ece31088521b259c6dde987cee743a
一個(gè)好的hash算法通常有如下特性:
- 正向快速:給定明文和 hash 算法,在有限時(shí)間和有限資源內(nèi)能計(jì)算出 hash 值。
- 逆向困難:給定(若干) hash 值,在有限時(shí)間內(nèi)很難(基本不可能)逆推出明文。
- 輸入敏感:原始輸入信息修改一點(diǎn)信息,產(chǎn)生的 hash 值看起來應(yīng)該都有很大不同。
- 沖突避免:很難找到兩段內(nèi)容不同的明文,使得它們的 hash 值一致(發(fā)生沖突)。
沖突避免有時(shí)候又被稱為“抗碰撞性”。如果給定一個(gè)明文前提下,難以找到碰撞的另一個(gè)明文,稱為“弱抗碰撞性”;如果難以找到任意兩個(gè)明文,發(fā)生碰撞,則稱算法具有“強(qiáng)抗碰撞性”。
常見的HASH算法有 MD5,SHA1,SHA2等,其中前2者已被認(rèn)為不安全。
加密/解密
現(xiàn)代加密算法的典型組件包括:加解密算法、加密密鑰、解密密鑰。其中,加解密算法自身是固定不變的,一般是公開可見的;密鑰則往往每次不同,并且需要保護(hù)起來,一般來說,對(duì)同一種算法,密鑰長度越長,則加密強(qiáng)度越大。
根據(jù)加解密的密鑰是否相同,算法可以分為對(duì)稱加密(symmetric cryptography)和非對(duì)稱加密(asymmetric cryptography)。兩種算法的對(duì)比如下:
| 類型 | 特點(diǎn) | 優(yōu)點(diǎn) | 缺點(diǎn) | 常見算法 |
|---|---|---|---|---|
| 對(duì)稱加密 | 加密和密鑰相同或可推算,通常用于大量數(shù)據(jù)加密的場景 | 速度快 | 需要提前提供密鑰 | DES,3DES,AES |
| 非兌成加密 | 加密/解密密鑰無關(guān),通常用于數(shù)字簽名以及密鑰協(xié)商過程 | 無需提前提供密鑰 | 計(jì)算效率低 | RSA,ElGammal,橢圓曲線系列算法 |
數(shù)字簽名
數(shù)字簽名的用于確保消息 不可偽造 以及 不可抵賴,這寫特性是通過非對(duì)稱加密算法實(shí)現(xiàn)。數(shù)字簽名的基本流程如下圖:

消息驗(yàn)證碼(MAC)
MAC 是指在通信雙方已經(jīng)通過一定的密鑰交換算法共享了對(duì)稱加密密鑰后,發(fā)送方將消息的Hash值使用對(duì)稱密鑰加密計(jì)算得到的,用于確保消息 不可偽造 ,但是無法確保不可抵賴,基本流程如下圖:
