Hash摘要算法是密碼學(xué)算法中非常重要的一個(gè)分支,很多時(shí)候Hash也被稱作散列算法。通俗來(lái)講,它實(shí)現(xiàn)了如下功能:輸入不同長(zhǎng)度、不同內(nèi)容的數(shù)據(jù),經(jīng)運(yùn)算后生成長(zhǎng)度固定內(nèi)容唯一的數(shù)據(jù)。因其對(duì)輸入長(zhǎng)度無(wú)限制、摘要結(jié)果唯一且不可逆的特性,被廣泛應(yīng)用于數(shù)字簽名、數(shù)據(jù)完整性校驗(yàn)等領(lǐng)域。起到防抵賴、防篡改的功能。
Hash只是摘要算法的統(tǒng)稱,符合該特性的算法有多種,包括CRC32、MD5,SHA1等。CRC32算法出現(xiàn)時(shí)間較長(zhǎng),應(yīng)用十分廣泛,雖然其運(yùn)算速度快,但其摘要值為4字節(jié)(32位),在當(dāng)今大數(shù)據(jù)時(shí)代略顯不夠,出現(xiàn)摘要結(jié)果碰撞的可能性變大。SHA-1與MD5的最大區(qū)別在于其摘要比MD5摘要長(zhǎng)32比特。對(duì)于強(qiáng)行攻擊,產(chǎn)生任何一個(gè)報(bào)文使之摘要等于給定報(bào)文摘要的難度:SHA-1要高于MD5。產(chǎn)生具有相同摘要的兩個(gè)報(bào)文的難度:SHA-1也是要高于MD5。即SHA-1的抗攻擊性更強(qiáng)。因此雖然SHA-1的運(yùn)行速度比MD5稍慢,但我們更推薦使用SHA-1進(jìn)行數(shù)據(jù)摘要運(yùn)算。
LKT絕大多數(shù)加密都自帶SHA-1算法,我們并非一定要按照標(biāo)準(zhǔn)數(shù)字簽名那樣使用SHA-1算法,如果是版權(quán)保護(hù)防抄板的客戶,可以利用SHA-1對(duì)線路傳輸數(shù)據(jù)做防篡改保護(hù),舉例證明:MCU和加密芯片分別預(yù)置8字節(jié)密鑰KEY,MCU端還需要移植SHA-1算法(凌科芯安可提供源碼)。當(dāng)MCU要發(fā)送指令112233給加密芯片。發(fā)送前先對(duì)112233 + KEY進(jìn)行SHA-1運(yùn)算生成20字節(jié)數(shù)據(jù)A,然后將112233+A(注意不包含KEY)發(fā)送給加密芯片。后者接收到數(shù)據(jù)后,使用內(nèi)部自帶的SHA-1接口對(duì)接收到的112233+KEY進(jìn)行摘要獲得20字節(jié)數(shù)據(jù)B,如果A等于B,則證明MCU發(fā)來(lái)的112233為原始值,沒(méi)有被篡改。然后再對(duì)112233進(jìn)行解析并應(yīng)用到程序下一步運(yùn)行中。加密芯片返回?cái)?shù)據(jù)的時(shí)候,也可以做同樣操作,這樣MCU也可對(duì)接收到的數(shù)據(jù)做防篡改判斷。
如果數(shù)據(jù)加解密需求的客戶要應(yīng)用SHA-1算法就更為簡(jiǎn)單了,我們COS指令類的加密芯片,同樣支持SHA-1算法,受加密芯片通訊協(xié)議的限制,用戶每次最多能傳輸255字節(jié)數(shù)據(jù),因此大于255字節(jié)的數(shù)據(jù)要分次傳入加密芯片中,后者實(shí)時(shí)計(jì)算臨時(shí)摘要結(jié)果并丟棄輸入數(shù)據(jù),因此不必?fù)?dān)心芯片內(nèi)存溢出的問(wèn)題。
還有最后一點(diǎn)要提醒大家,SHA-1和其他摘要算法一樣,它并不是加密算法,所以不要拿它與3DES、AES、RSA等算法橫向?qū)Ρ取?