本發(fā)明為一種信息輸入方法,尤其是一種信息輸入安全方法。
背景技術:
當前各種信息終端功能繁多,使用環(huán)境十分復雜,可以隨時隨地連接網絡,可以處理各種信息事務,比如個人電腦、智能手機等等,但由此也帶來各種各樣的信息安全問題,一旦有惡意程序,比如感染病毒或木馬,就很容易造成信息泄露或被盜用,特別是口令密碼等敏感信息,被盜用會對用戶造成嚴重的后果。為了保護密碼輸入的安全,也出現(xiàn)了各種密碼輸入保護措施,比如物理密碼鍵盤、輸入安全控件、輸入軟鍵盤等等,物理密碼鍵盤具備高度安全性,但其用于專用的高度安保系統(tǒng),并且需要專用的驅動,沒有一般的可用性,其它是比較通用的輸入安全措施,這些通用的輸入保護措施有一定的保護作用,但保護安全性不足,容易被破解,如何安全輸入信息,使得信息在輸入過程中不泄露,并且在一般終端設備上可以通用,在使用信息終端過程中,是難以解決的問題。
輸入安全控件,通常是指windows系統(tǒng)的密碼控件,又稱作低級鍵盤鉤子式密碼控件。在windows系統(tǒng)應用的正常輸入過程中,程序在接收用戶鍵盤的輸入時實際上是接收相應的wm_char消息,wm_char消息的產生過程需要如下幾個步驟:首先是系統(tǒng)中斷處理,其次是鍵盤驅動處理,然后是gui線程處理(gui即是圖形用戶界面,gui線程,即專門用來監(jiān)聽gui的特定線程,用于實現(xiàn)對用戶在圖形用戶界面上的操作的監(jiān)聽和響應。),最后是用戶程序獲取wm_char消息;依次為系統(tǒng)低級到高級的應用。系統(tǒng)中斷處理是,當用戶按下一個鍵時,系統(tǒng)產生鍵盤中斷irq,系統(tǒng)調用鍵盤中斷處理程序處理原始的鍵盤掃描碼生成數據結構,緩存數據。鍵盤驅動處理是,負責用鍵盤事件產生的數據生成一個按鍵消息wm_keydown,并且放入對應的gui線程的輸入隊列中。gui線程處理是,在消息循環(huán)中使用getmessage取出一個wm_keydown消息,然后如果該gui線程中使用了translatemessage處理這個wm_keydown消息,則會生成一個wm_char消息存入自身的post消息隊列。用戶程序獲取wm_char消息,用戶程序按鍵事件獲取wm_char消息,得到按鍵代碼virtualkeycode。如果作為一個攻擊者想要獲取用戶輸入的密碼,很簡單的做法就是截獲wm_char消息,攻擊者可以輕易地獲得一個原生密碼輸入框的所有wm_char消息,所以輸入安全密碼控件的目標就是讓攻擊者無法截獲wm_char消息,或者截獲到wm_char消息的時候這個鍵碼virtualkeycode是假的,而真正的鍵碼virtualkeycode已經被處理。保護wm_char消息的做法,一般是在得到wm_keydown這個消息的時候就進行,繞過系統(tǒng)后續(xù)的處理,先于系統(tǒng)計算出用戶按鍵的鍵碼virtualkeycode并保存,然后再返回一個修改過的wm_keydown消息,使得攻擊者即使截獲到wm_char消息,也不能得到真實正確的鍵碼virtualkeycode。要處理在系統(tǒng)生成wm_char消息之前就處理修改wm_keydwon,就必須要使用windows一種技術――低級鍵盤鉤子,wh_keyboard_ll。綜上所述,輸入安全控件就是在較高層級截獲和修改按鍵消息,使得更高層級的攻擊者截取的按鍵消息為假的按鍵消息,從而保護真實的鍵碼,從以上分析也可以看到,這種保護是很有限的,如果攻擊者在同層或更低層進行攻擊,比如鍵盤驅動層攻擊,輸入安全控件就起不到保護的作用。
輸入軟鍵盤是完全不使用鍵盤輸入,繞過鍵盤輸入從而避開針對鍵盤輸入的攻擊。輸入軟鍵盤是在屏幕上顯示一個虛擬的鍵盤,此鍵盤上的各個按鍵與真實的鍵盤不一樣,按鍵是隨機排列的,然后使用鼠標按鍵輸入,鼠標按鍵消息不包涵按鍵鍵碼信息,只包涵了鼠標按鍵時的屏幕坐標(x,y),使用映射算法通過屏幕位置坐標計算可以得到相應位置的按鍵,從而確定鍵碼。所以鍵碼由鼠標按鍵消息和映射算法或按鍵的位置確定,每次軟件盤的各個按鍵位置是隨機的,所以每次的映射算法也是不一樣的,攻擊者通常會截獲鼠標按鍵消息和對屏幕進行截屏以確定軟件盤各個按鍵的具體位置,所以通常還需要對鼠標按鍵消息進行保護和對截屏進行黑屏處理。由于軟件盤顯示在屏幕上,用戶的輸入操作是明顯可見的,所以在公共場所使用不安全。另外,鼠標按鍵消息和屏幕信息也難以從系統(tǒng)低層級進行有效的保護。
技術實現(xiàn)要素:
現(xiàn)有的安全輸入技術方法基本上都是對輸入信息進行較高層級的截取和變更,以保護輸入的信息安全,但沒有從所有層級進行有效的保護,其對輸入信息的保護很有限,容易受到各種攻擊,使得輸入信息的安全性不足。本發(fā)明使得輸入的信息與具體的按鍵無關,從根本上不需要保護按鍵信息,可以抵抗各種針對具體按鍵鍵碼的攻擊,保障信息輸入的安全。
本發(fā)明所采用的方案是,在信息輸入前,將需要使用按鍵鍵碼集的各鍵碼與時間段隨機進行關聯(lián),在等待輸入時,在每一關聯(lián)時間段的開始或整個時間段,以相應關聯(lián)鍵碼的不同特征提示用戶,表明此時間段所關聯(lián)的鍵碼,比如顯示與此時間段相關聯(lián)鍵碼所表示的圖形或字符信息,或者播放相關聯(lián)鍵碼所表示的聲音等,如果用戶在此時間段內進行按鍵輸入,即表示當前輸入的為當前時間段相關聯(lián)的鍵碼,與按鍵的具體鍵碼信息無關,用戶得到的輸入鍵碼與具體的按鍵無關,只與輸入當前時刻的具體關聯(lián)時間段相關,用戶輸入按鍵當前時刻時間段所關聯(lián)的鍵碼就是輸入的鍵碼,在不同的時間段進行按鍵,可以得到不同的鍵碼信息。比如需要輸入0至9之間的數字密碼信息,那么鍵碼集就是0至9之間的10個數字,如果每一個數字相關聯(lián)的時間段為1秒,那么整個鍵碼集所關聯(lián)的時間為10秒,隨機進行關聯(lián),每一秒時間段代表一個數字;如果是屏幕表示,可以在10秒的每一秒顯示代表各數字的不同信息,最簡單的就是,比如直接按隨機關聯(lián)順序顯示0至9個數字,在每一秒時間以箭頭指向相關聯(lián)的數字,如果在此一秒時間段內有按鍵輸入,就代表輸入的是箭頭所指向的數字;如果是聲音表示,每一秒關聯(lián)一個數字的語音,按隨機順序,在10秒的每一秒開始用語音播放相關聯(lián)的語音,當用戶聽到相應語音并輸入按鍵時,當前語音所關聯(lián)的數字就是輸入的鍵碼。本發(fā)明方案也有一個很大的缺點,輸入鍵碼需要花費的時間比較長,上面的例子中,輸入一個數字鍵碼最多需要10秒鐘。對于小的鍵碼集,比如0至9阿拉伯數字鍵,處理比較簡單,直接與時間段作相關聯(lián)即可,但對于比較大的鍵碼集,比如英文字母,如果直接進行時間段關聯(lián),輸入一個字母所需要的時間是令人無法接受的;一個簡化的方案是把輸入分成二步,首先把大的鍵碼集先分成更小的鍵碼集,小鍵碼集與時間段關聯(lián),這樣可以先選取小鍵碼集,然后再用小鍵碼集的各鍵碼與時間段直接關聯(lián),就可以輸入相應的鍵碼。如果存在攻擊者,他截取按鍵信息可以得到按鍵的消息和時間,但如果要想知道結果鍵碼,他必須得到該時刻與相應鍵碼所關聯(lián)的關系或表示,比如屏幕的表示;在輸入軟鍵盤方案,顯示的按鍵是隨機順序的,但顯示后是靜態(tài)的,只要做截屏或直接讀取內存就可以得到鍵碼的位置,本發(fā)明方案與此不同的是,關聯(lián)表示是動態(tài)的,屏幕顯示的表示,每個時間段會各有不同,即使攻擊者能夠截屏信息,一個截屏也不可能得到所有信息,而且本發(fā)明方案可能只在時間段的開始做表示,比如作短暫的箭頭指向或閃爍,如果攻擊者在用戶按鍵時截屏,可能什么有用的信息也得不到!如果攻擊者在整個輸入過程對屏幕信息進行記錄保存,那么記錄的屏幕信息數據將是巨量的,使得攻擊者難以實施;實際上我們也可以象輸入軟鍵盤一樣對屏幕信息采取保護措施,在輸入過程中對截屏信息進行黑屏處理。本發(fā)明方案由于輸入信息與具體按鍵的鍵碼無關,除了使用取消或刪除鍵更正錯誤輸入外,使用其他任意按鍵輸入的效果都相同,對于特別的應用也可以減少實際按鍵的數量;特別是對于嵌入式的硬件應用,其按鍵一般比較少,使用本發(fā)明輸入方案特別適合實際需要。
本發(fā)明的有益效果是,可以使得用戶輸入信息更加安全,可以有效地抵抗針對輸入的攻擊,并且使用極少的按鍵就可以進行信息輸入;當然,其缺點也是明顯的,就是輸入所需要的時間比較長。
具體實施方式
構造時間關聯(lián)的數字輸入安全控件。在接收輸入前,把數字0至9按隨機順序,包括“#”符號和每一個數字各關聯(lián)時間段0.5秒;有屏幕和聲音兩種表示方式,可以通過切換按鈕進行切換;屏幕表示方式時,在屏幕上顯示一行內容包括“#”符號和0至9按從小到大排列,其上按關聯(lián)順序在各時間段分別顯示指向各個數字的箭頭,每隔0.5秒切換指向關聯(lián)數字的箭頭,當有按鍵輸入時,當前指向的數字為輸入的鍵碼,如果指向“#”符號,代表輸入結束,如果有截屏操作,進行黑屏處理;聲音表示方式時,按關聯(lián)順序播放各關聯(lián)代表的語音,每隔0.5秒切換,按鍵輸入時,輸入鍵碼為當前語音所關聯(lián)的數字,如果是“#”符號,則表示輸入結束;如果輸入鍵是“esc”或“backspace”鍵,則取消上次輸入。