|
最近客戶(hù)又提了一個(gè)需求,這個(gè)需求不好搞,而且因?yàn)槌杀镜土,可能?huì)賣(mài)不上一個(gè)好價(jià)格,但是可以綁上我的板子一起賣(mài)。所以費(fèi)神費(fèi)力地幫客戶(hù)解決這個(gè)問(wèn)題。想了好久,才把一些原理的東西理順一點(diǎn)。
客戶(hù)想將上中下位機(jī)各部件做成一個(gè)整體,想替換成別人的設(shè)備就不能正常工作,要我開(kāi)發(fā)一個(gè)簽名認(rèn)證的設(shè)備。
因?yàn)槲业陌遄犹幱谥杏危B接的是設(shè)備,客戶(hù)的需求,是我的一個(gè)板子要識(shí)別8個(gè)左右的設(shè)備,我想,如果一個(gè)設(shè)備,搞個(gè)加密的EEPROM,嵌進(jìn)設(shè)備里就可以了,但是一個(gè)芯片要帶8個(gè)EEPROM,我好像搞不了。
那就換一個(gè)方案,用個(gè)SOP8的芯片,做個(gè)小板子嵌進(jìn)設(shè)備里,通過(guò)串口與主板通信,當(dāng)時(shí)想將認(rèn)證信息加密后,發(fā)送給我板子的單片機(jī),經(jīng)解密比對(duì)后,判斷設(shè)備是否是我客戶(hù)生產(chǎn)的。因?yàn)槭鞘褂昧舜谕ㄐ,發(fā)送的數(shù)據(jù)都是可以被截取,別人也可以偽造一個(gè)一模一樣的數(shù)據(jù)發(fā)送過(guò)來(lái)。
所以問(wèn)題就卡在發(fā)送的這個(gè)數(shù)據(jù)是什么,如果是序列號(hào),根本阻止不了別人偽造密文。在這個(gè)問(wèn)題上困擾了很久,后來(lái)在研究HMAC算法的時(shí)候,有人介紹過(guò)可以使用時(shí)間戳,可以防止別人偽造我們加密的信息。終于解決了我的問(wèn)題了,如果別人通過(guò)監(jiān)聽(tīng)我的串口通信,截取的信息因?yàn)槭羌用艿膶?shí)時(shí)時(shí)間戳,等他寫(xiě)好程序,再發(fā)給我上位機(jī)的時(shí)候,我板子芯片就能輕松判斷這是一個(gè)偽造的數(shù)據(jù),因?yàn)樗且粋(gè)過(guò)時(shí)的時(shí)間戳。
所以,簽名認(rèn)證中一個(gè)重要的內(nèi)容,加密信息的選取最好是選時(shí)間戳,然后經(jīng)過(guò)HMAC算法加密后,再發(fā)給驗(yàn)證芯片,經(jīng)解密后再驗(yàn)證芯片實(shí)時(shí)時(shí)間戳進(jìn)行比對(duì),如果差太多,肯定是偽造的,注意這里比對(duì)的方法是兩個(gè)時(shí)間戳相減的絕對(duì)值要小于一個(gè)范圍,才符合要求。這個(gè)范圍一般是通信及加、解密過(guò)程中的耗時(shí)。
|
|