密碼學(xué)基礎(chǔ)
標(biāo)簽: Blockchain
Hash
Hash (哈嫌任螅或散列)是指將任意長(zhǎng)度的二進(jìn)制值映射成為一個(gè)固定長(zhǎng)度的二進(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 值看起來(lái)應(yīng)該都有很大不同。
- 沖突避免:很難找到兩段內(nèi)容不同的明文顿乒,使得它們的 hash 值一致(發(fā)生沖突)议街。
沖突避免有時(shí)候又被稱為“抗碰撞性”。如果給定一個(gè)明文前提下璧榄,難以找到碰撞的另一個(gè)明文特漩,稱為“弱抗碰撞性”;如果難以找到任意兩個(gè)明文骨杂,發(fā)生碰撞涂身,則稱算法具有“強(qiáng)抗碰撞性”。
常見(jiàn)的HASH算法有 MD5,SHA1,SHA2等搓蚪,其中前2者已被認(rèn)為不安全蛤售。
加密/解密
現(xiàn)代加密算法的典型組件包括:加解密算法、加密密鑰、解密密鑰悴能。其中揣钦,加解密算法自身是固定不變的,一般是公開(kāi)可見(jiàn)的漠酿;密鑰則往往每次不同冯凹,并且需要保護(hù)起來(lái),一般來(lái)說(shuō)炒嘲,對(duì)同一種算法宇姚,密鑰長(zhǎng)度越長(zhǎng),則加密強(qiáng)度越大摸吠。
根據(jù)加解密的密鑰是否相同,算法可以分為對(duì)稱加密(symmetric cryptography)和非對(duì)稱加密(asymmetric cryptography)嚎花。兩種算法的對(duì)比如下:
類型 | 特點(diǎn) | 優(yōu)點(diǎn) | 缺點(diǎn) | 常見(jiàn)算法 |
---|---|---|---|---|
對(duì)稱加密 | 加密和密鑰相同或可推算寸痢,通常用于大量數(shù)據(jù)加密的場(chǎng)景 | 速度快 | 需要提前提供密鑰 | DES,3DES,AES |
非兌成加密 | 加密/解密密鑰無(wú)關(guān),通常用于數(shù)字簽名以及密鑰協(xié)商過(guò)程 | 無(wú)需提前提供密鑰 | 計(jì)算效率低 | RSA,ElGammal紊选,橢圓曲線系列算法 |
數(shù)字簽名
數(shù)字簽名的用于確保消息 不可偽造 以及 不可抵賴啼止,這寫特性是通過(guò)非對(duì)稱加密算法實(shí)現(xiàn)。數(shù)字簽名的基本流程如下圖:
消息驗(yàn)證碼(MAC)
MAC 是指在通信雙方已經(jīng)通過(guò)一定的密鑰交換算法共享了對(duì)稱加密密鑰后兵罢,發(fā)送方將消息的Hash值使用對(duì)稱密鑰加密計(jì)算得到的献烦,用于確保消息 不可偽造 ,但是無(wú)法確保不可抵賴卖词,基本流程如下圖: