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