于赫,楊宇
(長春大學電子信息工程學院,吉林長春,130022)
目前市場上在售的電子鎖為了壓縮成本而選擇一些仿制芯片和傳感器進行生產[1-2],且很多指紋鎖不對采集到的用戶生物信息進行加密,只是簡單的存儲在產品的芯片中,一旦用戶數(shù)據(jù)被竊取,會對用戶的信息安全造成極大的威脅[3]。本文設計的指紋密碼鎖通過指紋和密碼識別方式進行雙重保護,方便使用的同時又提高了安全性,具有一定的實用價值。
通過分析和對比各個模塊,綜合多方位的考慮,本設計選擇STC89C52 作為主控芯片;結合LCD12864 液晶顯示實時操作內容與提示;同時加入了指紋識別采集功能,能夠通過管理密碼進入進行添加和刪除指紋信息,密碼鎖的密碼等信息采用AT24C02 進行存儲;解鎖、修改密碼等操作采用矩陣鍵盤輸入??傮w系統(tǒng)方案見圖1。
圖1 系統(tǒng)總體設計方案
人體生物指紋信息采集模塊選用AS608,其具有高速DSP 處理能力,能采集與識別指紋。該模塊提取的指紋特征文件為256KB,模板文件為512KB。指紋圖像錄入用時不到0.5s,可在-20 ~40℃的環(huán)境下正常工作。存儲容量120/375/880枚,可控制指紋的采集、識別、刪除、添加等操作。RAM 內設置有圖像緩沖區(qū)與兩個個人生物指紋信息特征文件的緩沖區(qū),通過指令可以讀寫緩沖區(qū)里的數(shù)據(jù)。緩沖區(qū)中的資料斷電后不保存,當模塊重新上電復位后,模塊將會先自檢設備的握手口令有沒有被惡意修改,如果沒有,模塊就認為沒有必要驗證口令的需求,并進入到正常的工作狀態(tài),驗證口令在斷電后依然保存在FLASH 中。
本設計在指紋模塊采集完用戶的指紋信息數(shù)據(jù)后,會通過AES128 加密算法對用戶的個人生物信息進行加密,再將加密后的數(shù)據(jù)進行存儲,從根源上保護用戶的個人信息安全與隱私。
AES 加密算法在加密的過程需要經過十輪的重復和變換。加密大致步驟如下:①密鑰擴展;②初始輪;③重復輪,每一重復輪之中又包含著字節(jié)間的減法運算、行移位、列混合、輪密鑰加法運算等操作;④最終輪。最終輪與前九輪相比,沒有列混合這項操作。由于該算法是對稱的分組密碼體制,所以它解秘的過程就是上述操作步驟的逆運算。因為這些操作都可逆,所以按照倒推的方法進行運算就可計算得到初始的明文。加密和解密的過程中,每輪的秘鑰均由初始密鑰通過擴展運算得到。
AES 加密算法的本質是一種分組密碼,它加密前將需要加密的明文等分成長度相等的組,每次只對其中的一組數(shù)據(jù)進行加密,重復這個過程直至所有組加密完成。每個分組的只能是128 位,通過計算可以得知每個分組等于16 個字節(jié),平均每個字節(jié)為8 位。與明文分組不同的是,密鑰的長度可以有三種選擇,分別為128、192、256 位。不同長度的秘鑰所要完成的加密輪數(shù)不同,128 位密鑰需要10 輪加密,192 位密鑰需要12 輪加密,256 位密鑰需要14 輪加密,見表1。本設計使用的是AES-128,即密鑰長度為128 位,加密輪數(shù)為10 輪。
表1 AES 加密算法密鑰長度對應加密輪數(shù)
AES128 加密算法的加密過程要經過10 輪的字節(jié)替換、行位移、輪秘鑰加,外加9 輪的列混淆才能完成整個加密。前9 輪按照字節(jié)替換、行位移、列混淆、輪秘鑰加的順序對輸入的明文進行加密,第10 輪僅包含字節(jié)替換、行位移、輪秘鑰加三種變換。通過這大量的字節(jié)變換,僅能加密16 個字節(jié)的明文,若要加密全部128 位明文,則需要8 次這樣的加密計算。由于該算法是對稱的分組密碼體制,所以解密的過程就是上述操作步驟的逆運算。加密和解密的過程中,每輪的秘鑰均由初始密鑰通過擴展運算得到。
(1)輪密鑰加:在加密算法加密的過程中,每一輪的輸入與輪密鑰進行一次異或(當前分組和擴展密鑰的一部分按位進行異或運算)。
(2)字節(jié)替換:每一輪都需要進行一次字節(jié)的替換,通過預先設置好的S 盒完成一個字節(jié)到另外一個字節(jié)的映射(S盒與逆S 盒是一一對應的關系)。例如:字節(jié)24 替換后的值為S{x,y}=S{2,4}=36,再通過逆S 盒即可得到替換前的值,S-1{x,y}=S{3,6}=24。
(3)行移位:它的功能則是置換一個4x4 矩陣。操作方法:保持首行不變,第二行循環(huán)向左位移一個字節(jié),第三行循環(huán)向左位移兩個字節(jié),第四行循環(huán)向左位移三個字節(jié)。
(4)列混淆:列混淆是利用GF(28)域上算術特性的一個代替,作用是提供算法的擴散性。
主函數(shù)是程序的入口函數(shù),是完整程序中必不可少的一部分。在該函數(shù)的開頭一般會先對所使用的單片機以及一些外圍器件進行初始化和重新賦值一些變量,在主程序的設計中通常我們不會存放過多的代碼。具體需要使用到的代碼一般都是寫一個函數(shù)進行封裝,封裝后的函數(shù)可以在主函數(shù)進行調用,這樣的寫法既方便閱讀又方便后續(xù)修改。具體流程圖見圖2。
圖2 主函數(shù)流程圖
AS608 采用串口通訊協(xié)議與單片機進行通訊,用戶可以通過發(fā)送對應的數(shù)據(jù)包控制指紋模塊完成對應的功能。在控制AS608 指紋模塊搜索指紋的時候先發(fā)送采集指紋信息,然后等待采集完成后再發(fā)送指紋匹配指令,如果指紋匹配成功則返回成功,否則返回失敗。指紋搜索子函數(shù)流程圖見圖3。
圖3 搜索指紋子函數(shù)流程圖
本設計以單片機STC89C52作為密碼鎖監(jiān)控裝置的檢測和控制核心,采用矩陣鍵盤輸入的電子密碼和指紋密碼解鎖兩種解鎖方式。系統(tǒng)采用LCD12864 液晶顯示屏實時更新顯示信息,并設有修改密碼功能,在解鎖或修改密碼未確定時可以進行退格或重輸?shù)牟僮?。在指紋信息傳回存儲芯片前,采用AES128 加密算法對采集到的指紋信息進行加密,從而確保個人生物信息的安全性。