本發明涉及信息安全技術領域,特別是涉及一種零知識身份認證方法。
背景技術:
傳統口令認證均需要在服務器存儲用戶的口令或者其哈希值,用于通過匹配對比確認用戶的輸入是否正確,這種方法簡單易操作,是目前網絡中主流的口令認證方式,但該方法存在嚴重的漏洞,一旦服務器端由于操作不當或者遭到攻擊,導致服務器數據泄露,則用戶的口令將會被完全暴露,黑客便可以偽造用戶身份登錄該網站,同時由于人們使用習慣是不同網站的口令選取同一個,由此便導致用戶其他網站的信息也遭到泄露,對用戶的個人隱私造成極大的損失。
技術實現要素:
為解決上述問題,本發明提供了一種零知識身份認證方法,所述方法應用的系統包括服務器及與服務器通信連接的客戶端,所述服務器內存儲有已注冊用戶的相關信息,所述系統參數P為一個256比特大小的素數。所述方法包括如下步驟:
第一步:用戶在客戶端輸入身份標識。
第二步:服務器判斷用戶相關信息是否存在于服務器內,不存在則允許注冊,存在提示已經注冊,并跳轉到第五步,否則從第三步執行。
第三步:客戶端隨機選取口令x,并將其編碼成數據格式,計算z=gx*ID,g為由P確定的有限域Zp中的一個本原,ID代表用戶身份標識。
第四步:客戶端將(ID,z)發送給服務器對應用戶下進行存儲,提示用戶注冊成功。
第五步:客戶端產生隨機數r,并計算s1=gr,將s1發送給服務器。
第六步:服務器產生隨機數c,發送給客戶端。
第七步:客戶端計算s2=x*ID+r*c,計算s3=gs2,將s3發送給服務器;ID代表用戶的身份標識;x為用戶輸入的口令。
第八步:服務器計算s4=(s1)c*z,判斷s3是否與s4相等,相等則認證成功,否則認證失敗。
第九步:客戶端接收認證結果。
第一步至第四步屬于用戶用戶注冊階段。
第五步至第九步屬于用戶登錄認證階段
進一步的,身份標識為郵箱或者手機號或者用戶名。
進一步的,用戶在第五步中第七步中再次輸入口令。
本發明的有益效果為:
(1)認證服務器不存儲用戶的口令或者其哈希值,防止了服務器數據庫泄露對用戶口令造成的威脅。
(2)認證過程中沒有傳遞口令或者口令的某種變換,防止了通信信道竊取獲取用戶口令或者哈希值的可能。
(3)認證過程采用離散對數困難問題進行計算,相對于證書的認證效率較高。
附圖說明
圖1為用戶注冊流程圖。
圖2為用戶認證流程圖。
具體實施方式
本發明的設計構思為:用戶通過在服務器存儲一個不能直接用于認證的信息,繼而通過協議交互以及該認證信息完成用戶的身份認證,而服務器認證信息泄露后,敵手不能直接利用該信息進行用戶身份的認證,也是用戶不需要向服務器出示口令或者口令的哈希值便可以完成身份的認證。
本申請基于離散對數困難問題定義如下:
給定一個素數p和有限域Zp中的一個本原g,對于Zp上的整數b,尋找唯一的整數c,使得ac=b(mod p)。目前一般認為素數p取256比特時,該問題是難解的。
本發明所述方法應用的系統包括服務器及與服務器通信連接的客戶端。所述服務器內存儲有已注冊用戶的相關信息。所述相關信息包括用戶身份標識、經過變形后的口令數據。系統參數P為一個256比特大小的素數。
本申請的方法大致可分為注冊流程及認證流程。注冊流程主要是在服務器內存儲用戶相關身份標識及編碼后的口令數據,如圖1所示。認證流程則是用戶注冊后,由服務器端經客戶端對用戶進行認證,如圖2所示。
下面對整體流程描述如下:
第一步:用戶在客戶端輸入身份標識信息。
身份標識信息可以為郵箱或手機號或用戶名等。
第二步:服務器判斷用戶相關信息是否存在于服務器內,不存在則允許注冊,存在提示已經注冊,并跳轉到第五步,否則從第三步執行。
第三步:用戶輸入口令x,客戶段并將其編碼成數據格式,計算z=gx*ID,g為由P確定的有限域Zp中的一個本原,ID代表用戶輸入的身份標識。
本步驟實現了服務端不直接存儲用戶口令,且從Z無法解出x,有效的避免服務器口令信息泄露的隱患。
第四步:客戶端將(ID,z)發送給服務器對應用戶下進行存儲,提示用戶注冊成功。
第五步:客戶端產生隨機數r,并計算s1=gr,將s1發送給服務器。
第六步:服務器產生隨機數c,發送給客戶端。
第七步:客戶端計算s2=x*ID+r*c,計算s3=gs2,將s3發送給服務器;ID代表用戶輸入的身份標識;x為用戶輸入的口令。
第八步:服務器計算s4=(s1)c*z,判斷s3是否與s4相等,相等則認證成功,否則認證失敗。
第九步:客戶端接收認證結果。