摘要:在公共場合中使用密碼,輸入過程可能被別人窺視,發生密碼被竊取的問題。該文從密碼設置本身出發,提出防止密碼在輸入過程中被竊取的三種解決方案,分別是在密碼前后添加引導碼、根據系統時間算密碼、根據隨機數算密碼等方案,并針對每一種方案,提出相應的編程方法。實踐證明在密碼輸入過程中,大大提高了密碼的安全性。
關鍵詞:密碼;防窺視;檢測程序
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)36-3044-03
Design of Testing Programs for Peep Preventing Codes
WEI Xi-jun
(Experiment and Training Center,Taizhou Teachers College,Taizhou 225300,China)
Abstract: Codes might be peeped and then plundered when input in public places. With combination of their setting this paper produces three solutions to the problem, namely, adding boot codes immediately before or after original ones、calculating codes according to the time of the system or calculating codes according to random numbers. Additionally, it suggests programming methods accordingly. These solutions prove to be of great help in enhancing the safety of codes in the process of inputting them.
Key words: code; peep prevention; testing program
現在的各種電子信息產品的密碼設計,注重密碼的復雜程度及加密傳輸存儲,而忽略了密碼的輸入過程,舉個例子:當你在銀行取款機上取款時,輸入密碼之前你都要環顧一下左右,以防別人窺視你輸入的密碼。那么有沒有辦法,設計這樣一種密碼,讓別人看著我輸入,他也無法知曉我的密碼呢?筆者就此問題,設計出如下三種解決方案,并就每種方案給出密碼檢測程序。
1 前后添加引導碼
1.1 思路描述
由于密碼的位數有限,別人容易記住,那么將密碼位數增加許多,別人不就記不住了。但是,增加了密碼位數,會讓使用者難以記憶,在輸入的過程中還可能出錯,給使用者增加了許多麻煩。假如我們不增加密碼的位數,而在密碼的前后增加一些隨機的不定長度的引導碼,讓窺視者不知道真正的密碼是從哪一位開始,這樣就解決了問題。密碼輸入形式如圖1:
1.2 程序設計
密碼檢測程序中,我們設計輸入的總位數為18位,密碼長度為6位,在VB編程中設計一個文本輸入框Text1和一個確認按鈕Command1,變量Tx1中保存已設定的密碼,程序如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
counter = counter + 1
'密碼檢測
If counter <= 18 Then
If coun < Len(Tx1) Then
If KeyAscii = Asc(Mid$(Tx1, coun + 1, 1)) Then coun = coun + 1 Else coun = 0
End If
Else
coun = 0
End If
'在文本框中顯示*
KeyAscii = 42
End Sub
Private Sub Command1_Click()
counter = 0
If coun = Len(Tx1) Then
Print\"密碼正確\"
Else
Print\"密碼錯誤\"
End If
coun = 0
End Sub
1.3 優缺點描述
該方案優點是前后加入的引導碼位數和內容是任意的,便于用戶輸入,熟練的用戶可以做到在輸入的過程中沒有停頓,增加了密碼的安全性。缺點是在輸入過程中如被視頻記錄,仍舊無法逃避密碼被破解的境遇,且總的輸入位數不能太多,否則會降低密碼安全性。
2 根據系統時間算密碼
2.1 思路描述
由于別人破解密碼需要時間,我們可以利用時間差,讓輸入的密碼具有時效性,在一段時間后,此密碼自行失效,再通過某種方法再生出新的密碼。無疑系統時間是我們再生密碼的最好種子。給用戶一種算法,在使用系統前,根據系統時間,預先算好密碼,再在系統中輸入。
2.2 程序設計
密碼檢測程序中,我們設計了一個文本輸入框Text2和一個確認按鈕Command2,還設計了一個定時器timer1,用以將實時時間在文本框中顯示給用戶,變量Tx2中保存根據實時時間計算得到的密碼,程序如下:
Private Sub Form_Load()
Text3.Text = Date \"\" Time
End Sub
Private Sub Text2_GotFocus()
Timer1.Enabled = False
Tx2 = Format(Mid$(Year(Now), 3, 2) + Month(Now) + (Day(Now) Mod 8) * 10, \"00\") _
Format((Hour(Now) Mod 10) * 10 + Hour(Now) Mod 9, \"00\") Abs(Minute(Now) - 30)
Text2.Text = \"\"
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
counter = counter + 1
'密碼檢測
If counter <= 18 Then
If coun < Len(Tx2) Then
If KeyAscii = Asc(Mid$(Tx2, coun + 1, 1)) Then coun = coun + 1 Else coun = 0
End If
Else
coun = 0
End If
'在文本框中顯示*
KeyAscii = 42
End Sub
Private Sub Command2_Click()
counter = 0
If coun = Len(Tx2) Then
Print\"密碼正確\"
Else
Print\"密碼錯誤\"
End If
coun = 0
Timer1.Enabled = True
Text2.Text = Date \"\" Time
End Sub
程序中,密碼是根據實時時間計算所得,計算方法根據用戶要求設定。由于每次使用時,都要計算密碼,增加了用戶使用難度,因此,既要考慮密碼的靈活性,又要降低密碼計算的復雜程度,密碼計算公式很重要。上述程序中,密碼由三部分組成,第一部分密碼根據年月日計算所得,第二部分密碼根據小時計算所得,第三部分密碼根據分鐘計算所得,用戶可以預先計算好前兩部分密碼,在輸入前只要計算機第三部分密碼,這樣就減少了計算密碼的麻煩。
2.3 優缺點描述
該方案除具有第一種方案的優點外,使密碼具有時效性,因而增強了密碼的安全性。但此方案仍舊具有第一種方案的缺點,破解者如在規定時間里快速作出反應,同樣有破解密碼的可能性。另外,此方案要求系統時間不能被人為修改,否則就失去了時效性。
3 系統給出隨機密碼種子
3.1 思路描述
前兩種方案降低了密碼被破解的可能性,但當別人完全記錄你輸入密碼的過程,仍舊可以輕松地破解你的密碼。那么,我們設計一個密碼系統,讓用戶每次輸入的密碼只能使用一次,這就解決了所有問題。具體做法是:給用戶一種算法,用戶每次使用系統時,系統顯示一個隨機數,用戶憑此隨機數用給定算法計算出密碼,由于系統每次產生的隨機數不相同,因而密碼也不相同。
3.2 程序設計
密碼檢測程序中,我們設計了一個文本輸入框Text3和一個確認按鈕Command3及變量Tx3。程序初始化時,在文本框中顯示一個六位的隨機數,用戶根據這六位數計算密碼并輸入。程序如下:
Private Sub Form_Load()
Randomize
Text3.Text = Fix((90000 * Rnd) + 100000)
End Sub
Private Sub Text3_GotFocus()
Tx3 = (Mid$(Text3.Text, 1, 1) + 5) Mod 10 _
(Mid$(Text3.Text, 2, 1) + 8) Mod 10 _
(Mid$(Text3.Text, 3, 1) + 4) Mod 10 _
(Mid$(Text3.Text, 4, 1) + 2) Mod 10 _
(Mid$(Text3.Text, 5, 1) + 1) Mod 10 _
(Mid$(Text3.Text, 6, 1) + 6) Mod 10
Text3.Text = \"\"
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
counter = counter + 1
'密碼檢測
If counter <= 18 Then
If coun < Len(Tx3) Then
If KeyAscii = Asc(Mid$(Tx3, coun + 1, 1)) Then coun = coun + 1 Else coun = 0
End If
Else
coun = 0
End If
'在文本框中顯示*
KeyAscii = 42
End Sub
Private Sub Command3_Click()
counter = 0
If coun = Len(Tx2) Then
Print\"密碼正確\"
Else
Print\"密碼錯誤\"
End If
coun = 0
Randomize
Tx3 = Fix((90000 * Rnd) + 100000)
Text3.Text = Tx3
End Sub
本例中,密碼計算方法是對隨機數的每位進行加權再求余,權值可以按用戶的要求進行設置,也可以將計算方法再進行個性化設計。在用戶輸入過程中,如能繼續顯示種子數,將更方便用戶計算輸入。
3.3 優缺點描述
此方案類似于某些銀行的網銀密碼系統,完全杜絕密碼重復利用的可能性。但也存在一個比較明顯的缺點,由于用戶要根據系統給出的隨機數計算密碼,算法簡單易于用戶使用,但保密性不夠,算法復雜用戶計算麻煩,但安全性高,所以應根據用戶要求,給出一個比較合理的個性化的算法。
4 結束語
該文僅討論了加強密碼輸入過程中的安全性,并針對解決方案進行編程測試,并沒有涉及到密碼的其它安全要求,實際應用中還要考慮諸多方面的安全因素,比如密碼的安全存儲,防暴力破解密碼,密碼檢測程序的反跟蹤等。
參考文獻:
[1] 辜川毅.計算機網絡安全技術[M].北京:機械工業出版社,2005.
[2] 駱娟,劉韜.Visual Basic 6.0實效編程百例[M].北京:人民郵電出版社,2002.
[3] 李鴻吉. Visual Basic 6.0中文版編程方法詳解[M].北京:科學出版社,2001.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文?!?/p>