梁菲惜
(成都理工大學(xué)核技術(shù)與自動(dòng)化工程學(xué)院,四川成都,610059)
中國(guó)是網(wǎng)上支付使用大國(guó),根據(jù)《中國(guó)互聯(lián)網(wǎng)發(fā)展報(bào)告2018》顯示,到2017年底,中國(guó)網(wǎng)上支付用戶人數(shù)達(dá)5.31億,第三方互聯(lián)網(wǎng)支付金額達(dá)到143萬(wàn)億。從網(wǎng)銀支付到手機(jī)支付,互聯(lián)網(wǎng)支付已經(jīng)成為中國(guó)最主流的支付方式[1~2]。目前密碼泄露以病毒、黑客以及旁窺為主要原因。密碼泄露不僅會(huì)造成個(gè)人財(cái)產(chǎn)損失,某些平臺(tái)賬號(hào)的密碼泄露也可能造成他人的財(cái)產(chǎn)損失,如盜取社交軟件密碼騙取失主親友錢財(cái)。采用隨機(jī)鍵盤能有效地避免密碼旁窺和泄露,不僅能在公共場(chǎng)合避免密碼旁窺,也能有效防止通過(guò)記憶鍵盤點(diǎn)擊位置的木馬竊取密碼。當(dāng)前已經(jīng)有部分銀行采用隨機(jī)軟鍵盤的控件。
隨機(jī)鍵盤設(shè)計(jì)旨在通過(guò)密碼輸入鍵盤的隨機(jī)排列解決公共場(chǎng)合的密碼旁窺和泄露問(wèn)題。本設(shè)計(jì)主要達(dá)到兩個(gè)效果:一是使輸入鍵盤隨機(jī)排列,二是密碼匹配。基于以上目的,本設(shè)計(jì)采用STM32F103RCT6作為主要處理器,用于隨機(jī)數(shù)列產(chǎn)生和密碼匹配。產(chǎn)生隨機(jī)數(shù)列采用兩兩交換法,初始密碼存儲(chǔ)在EEPROM中,密碼鍵盤顯示采用迪文DGUS液晶屏。方案設(shè)計(jì)思路如圖1所示。
圖1 隨機(jī)鍵盤設(shè)計(jì)原理圖
單片機(jī)系統(tǒng)采用STM32F103RCT6。由法意半導(dǎo)體推出的STM32增強(qiáng)型系列STM32F103為高密度性能線的32位微處理器,其內(nèi)核為Cortex-M3,具有成本低廉、功耗較低、性能較好、集成度高、便于調(diào)試等優(yōu)點(diǎn),在醫(yī)療、工業(yè)、電子等領(lǐng)域得到廣泛應(yīng)用[3~4]。STM32F103RCT6最大處理速度為72MHz,兼有串行單線調(diào)試SWD和JTAG接口,具有5個(gè)串口,可與迪文DGUS液晶屏進(jìn)行串口通信控制;具有2個(gè)I2C接口,可掛載EEPROM進(jìn)行密碼存儲(chǔ)。STM32F103RCT6內(nèi)嵌晶振,為提高時(shí)鐘穩(wěn)定性,外接8M無(wú)源晶振和32.765K晶振。另連接復(fù)位電路和電源指示LED,引出JTAG接口,進(jìn)行下載和調(diào)試。
STM32F103RCT6工作電壓為 2V~3.6V,常用工作電壓為3.3V。由于USB供電為 5V,無(wú)法直接為其提供工作電壓。穩(wěn)壓芯片 AMS1117有可調(diào)電壓和多種固定電壓版,可選用3.3V固定電壓版為STM32供電,且電路簡(jiǎn)單。電源開(kāi)關(guān)使用自鎖按鍵,使電路板在上電時(shí)不用一直插拔電源線,通過(guò)自鎖開(kāi)關(guān)來(lái)控制電源的通電和斷電。
EEPROM可以即插即用,具有掉電數(shù)據(jù)不丟失的特點(diǎn)。AT24C02最大時(shí)鐘頻率400kHz,達(dá)到讀寫密碼速度;內(nèi)存容量250B,足夠初始密碼存儲(chǔ)空間;I2C通信方式節(jié)省I/O口且控制方便;工作電壓范圍為1.8V 至 6.0V,可直接使用與STM32相同的工作電壓供電。
圖2 DGUS的硬件結(jié)構(gòu)
DGUS是迪文科技推出的一款圖形服務(wù)軟件,是基于迪文屏K600+內(nèi)核設(shè)計(jì)的人機(jī)界面系統(tǒng)軟件,迪文DGUS屏就是基于該軟件設(shè)計(jì)的液晶顯示屏[5~6]。DGUS液晶屏為串口液晶屏,可支持CMOS、RS232、RS485三種電平通信方式,本次采用MINI DGUS液晶屏支持RS232通信方式。DGUS液晶屏支持SD卡,可使用畫圖軟件設(shè)計(jì)界面通過(guò)SD卡下載使用,使界面設(shè)計(jì)豐富和多樣化。其硬件結(jié)構(gòu)如圖2所示。
本設(shè)計(jì)中隨機(jī)數(shù)產(chǎn)生為0~9的隨機(jī)排列,以及26個(gè)字母的隨機(jī)排列。對(duì)于這兩種隨機(jī)排列均使用兩兩交換法,原理簡(jiǎn)單易操作,且隨機(jī)效果較好。將0~9以及26個(gè)字母分別隨機(jī)處理,在此以0~9的數(shù)字排列為例說(shuō)明。
(1)將0~9進(jìn)行順序排列;(2)利用隨機(jī)函數(shù)產(chǎn)生0~9中的兩個(gè)隨機(jī)數(shù)m、n;(3)將第m個(gè)數(shù)和第n個(gè)數(shù)進(jìn)行位置交換;(4)重復(fù)步驟②和步驟③X次,本設(shè)計(jì)中數(shù)字隨機(jī)序列中取重復(fù)次數(shù)X=20。由于產(chǎn)生的隨機(jī)數(shù)m、n可能重復(fù),因此實(shí)際進(jìn)行的位置交換次數(shù)可能小于20次,但一般不會(huì)低于10次,如此即可實(shí)現(xiàn)數(shù)字鍵盤的隨機(jī)排列,理論上可實(shí)現(xiàn)的不同排列為10!種。26個(gè)字母的隨機(jī)排列方法與此相同,適當(dāng)增加交換次數(shù)X即可。以X=10為例,對(duì)于0~9的隨機(jī)排列如表1所示。由表所示經(jīng)過(guò)10次兩兩交換以后,數(shù)字序列由[6,0,9,7,2,8,4,1,5,3]變?yōu)閇9,5,4,6,3,0,7,2,1,8],實(shí)現(xiàn)了隨機(jī)數(shù)列的效果。
表1 兩兩交換法示意圖(交換10次)
使用畫圖軟件設(shè)計(jì)顯示界面,如CorelDRAW軟件,調(diào)節(jié)圖片大小和分辨率至適應(yīng)屏幕;將設(shè)計(jì)好的顯示界面通過(guò)SD卡下載至DGUS屏,檢查顯示是否正確;STM32通過(guò)IIC通信將預(yù)設(shè)密碼存入EEPROM;在STM32中產(chǎn)生隨機(jī)數(shù)列,將DGUS屏與STM32進(jìn)行串口連接通信,并將隨機(jī)數(shù)列放入指定觸控區(qū)域;用戶輸入密碼并確認(rèn),STM32通過(guò)串口讀取用戶鍵入密碼;STM32讀取EEPROM預(yù)設(shè)密碼,并進(jìn)行比較;若用戶鍵入密碼與預(yù)設(shè)密碼一致,則通過(guò)串口使DGUS屏跳轉(zhuǎn)輸入正確頁(yè)面;若用戶鍵入密碼與預(yù)設(shè)密碼不一致,則跳轉(zhuǎn)輸入密碼錯(cuò)誤頁(yè)面,并點(diǎn)擊重新輸入[7~8]。系統(tǒng)流程圖如圖3所示。
本設(shè)計(jì)基于STM32和迪文DGUS屏的隨機(jī)鍵盤設(shè)計(jì),以STM32位主控制芯片,以迪文DGUS液晶屏為顯示器件,以兩兩交換法為核心算法,經(jīng)實(shí)際效果測(cè)試,隨機(jī)排列生產(chǎn)效果良好,能達(dá)到較好的隨機(jī)鍵盤效果。采用本設(shè)計(jì),可以有效解決在公共場(chǎng)合的密碼輸入旁窺問(wèn)題,可以有效防止在自動(dòng)提取款機(jī)上通過(guò)記憶鍵盤點(diǎn)擊位置的木馬竊取密碼。
圖3 系統(tǒng)流程圖