公匙演算法 電子簽名

2022-03-05 20:06:45 字數 3143 閱讀 7632

非對稱加密是對稱加密「逆向思維」的結果,即「一把鎖對應兩把鑰匙」,任意一把加鎖,但必須由另一把開鎖。

公匙加密體制的通訊過程大致如下:

1、bob公開發布他的公匙;2、alice用bob的公匙加密明文得到密文並傳送給bob;3、bob用它從不公開的私匙對該密文解密。

儘管這次eve可以合法得到bob的公匙,卻無法對第2步截獲的密文加以解密,因為他沒有bob的私匙。

bob的公匙和私匙從何而來?為什麼公匙加密的檔案只有私匙才能解密?要搞清這兩個問題,必須回過頭來認識公匙加密的數學基礎:大數不可能質因數分解假說。

只能被1和本身整除的數叫質數,例如13,質數是無限的。得到兩個巨大質數的乘積是簡單的事,但想從該乘積反推出這兩個巨大質數卻沒有任何有效的辦法,這種不可逆的單向數學關係,是國際數學界公認的質因數分解難題。

r、s、a三人巧妙利用這一假說,設計出rsa公匙加密演算法的基本原理:1、讓計算機隨機生成兩個大質數p和q,得出乘積n;2、利用p和q有條件的生成加密密匙e;3、通過一系列計算,得到與n互為質數的解密密匙d,置於作業系統才知道的地方;4、作業系統將n和e共同作為公匙對外發布,將私匙d秘密儲存,把初始質數p和q秘密丟棄。

國際數學和密碼學界已證明,企圖利用公匙和密文推斷出明文——或者企圖利用公匙推斷出私匙的難度等同於分解兩個巨大質數的積。這就是eve不可能對alice的密文解密以及公匙可以在網上公布的原因。

至於「巨大質數」要多大才能保證安全的問題不用擔心:利用當前可**的計算能力,在十進位制下,分解兩個250位質數的積要用數十萬年的時間。並且質數用盡或兩台計算機偶然使用相同質數的概率小到可以被忽略。

公匙加密最大和唯一的問題是運算速度緩慢,理論上,對稱加密演算法的速度要比它快上了數百倍。

形象的說,公匙就是寫有bob名字、絕對堅固但特別笨重的郵箱,它可以放在任何地方,任何人都知道那是bob的,所有人都能從郵箱的縫隙中塞進紙條。但只有bob才有唯一的開鎖匙匙(私匙)。所以在上面的通訊過程中,eve即使得到裝有alice紙條的bob的笨重郵箱,也沒有任何意義。

至此,密匙的「帶內傳輸」問題解決了,也就解決了四個根本問題中的「保密」這一問題,但「不可否認」、「身份確認」 和「不被篡改」的問題又接踵而至:

既然誰都能塞進紙條,alice不承認有他落款的紙條是他寫的怎麼辦?

單向hash函式——實現身份驗證的幕後英雄

在公匙加密體系中,剩下三大任務任務都由「單向hash函式演算法」(下稱hash)來完成,由它配合公匙加密演算法,最終完成身份確認、不可否認和不被篡改工作。

和公匙加密不同,hash不是加密,只是函式;其作用不是生成密匙,而是生成報文的「數字指紋」。正是這種數字指紋實現了「驗證」、「不可否認」 和「不被篡改」。

hash函式的工作原理並不複雜:1、通過數學演算法,把未做處理的報文(不論是明文還是密文)轉換為不定長的待輸入字串,稱為預對映值;2、將預對映值再次轉換為定長(一般更短)的輸出字串,稱hash值,又叫訊息摘要(message digest),預對映值可任意長,但hash值總是定長;報文或預對映值有絲毫改動,則hash值完全不同。

所謂「單向」,是指不可能由hash值反推出預對映值或報文,但又不是加密,因為不存在解密的問題。正由於其單向,也就沒有了運算速度的障礙。舉個例子,就像一片玻璃(預對映值)很輕易就被打碎,但破碎的玻璃渣(hash值)卻不可能恢復到破碎前的狀態。

值得一提的是,最常用的hash演算法叫做md5(message digest 5),它的作者是羅納德·瑞斯特:rsa中的第一人。

這樣我們就可以綜合運用公匙演算法和hash演算法,對上述加密通訊過程重新設計乙個完整的解決方案:

1、alice首先以對稱演算法生成密匙k,並用k將明文d生成密文dc;2、alice用bob的公匙將對稱密匙k加密為kb,將dc和kb封裝;3、將封裝後的dc和kb 用hash算出hash值h,用alice的私匙加密為ha;4、將dc、kb和ha封裝為乙個資料塊傳送給bob。

這時的eve有公匙演算法,有hash演算法,有alice與bob的公匙,唯獨沒有二人的私匙,所以在截獲資料塊後,可以分析出dc、kb和ha三個部份,其中dc是密文,沒有密匙k無法讀取;k又被bob的公匙加密成kb,沒有bob的私匙同樣無法讀取;雖然ha 可以由alice的公匙還原為h,但從h不可能反推出預對映值,所以對eve毫無意義。

bob收信後,只需簡單的對dc和kb再次用hash演算法算出hash值hb,並將它與ha比較,相同該資料塊真,不同則該資料塊假。如果為真,則bob用自己的私匙解密kb,

數字簽名——電子交易的全面解決方案

綜上所述,證書是乙個經ca數字簽名的包含公匙擁有者資訊以及公匙的檔案。事實上所有證書格式都是根據國際電信聯盟制定的x.509規範製作的。一張標準的證書包括:版本號;唯一序列號;簽名演算法名稱;ca名及其簽名;有效期;證書持有者姓名;證書持有者公匙。

以上我們通過對加密通訊的分析,知道數字簽名能既驗證,又簽名,其實它還只簽名,不驗證,作為公開宣告使用。眾所周知的是微軟在w2k以上版本推出的,針對視窗系統支援的外設公布數字簽名的舉措;另外,ie安裝好後第一次開啟網頁,如果網頁上有flash動畫,就會彈出乙個視窗,說這個控制項是macromedia inc公司簽名發布的,而該公司又是經過某著名ca認證了的,是可以信任的,並且下面還有乙個核取方塊,讓你永遠相信macromedia

inc公司的產品,以後再安裝就不需要提示了。如果你同意,這一資訊就記錄在「右擊ie圖示→屬性→內容→發行商」對話方塊中供檢視和管理;大家還能通過「右擊ie圖示→屬性→內容→證書」來看看證書到底是什麼樣子,你會發現,你居然有那麼多的證書!雙擊其中乙個,在「詳細資訊」選項卡中,可以看到公共密匙字串。

很多應用程式都配有加密狗,以前往往是列印串列埠盒的形式,而現在多採用usb的介面,這種應用是讓數字證書只驗證而不簽名,那裡面儲存了程式的某個hash值,程式啟動的時候會呼叫它,與程式內部的計算結果相比較,完全相同才能進入系統;而我們開通網上銀行或者網上**的時候的時候,客戶端必然會生成私匙,並提示讓你妥善保管,當我們以某個使用者名稱上網交易的時候,系統會針對這一私匙進行驗證,通過後才可能進行劃轉資金等操作,一旦有重灌系統,或使用者名稱變動等操作,私匙立即失效,從而確保使用者安全。

現在應該沒人懷疑「ca+證書」這種身份驗證方式了,但有人依然不屈不撓:最頂級ca的公匙又由誰來認證?

先有蛋,還是先有雞,這個問題恐怕只有全國人大開了會才能解決,說來有趣,按照目前技術上的機制:最頂級ca的證書是自簽名的,說白了,就是自己封自己為大王,並且100年有效(可以在上述ie屬性檢視)!當然理論上的前提是一定要得到大家的認可。話說到這裡,已經不是技術問題了。所以我們盡可稍安勿燥,靜候全國人大正式發布《電子簽名法》之後,一切就可「真相大白」了。

git 生成公匙私匙

直接 ssh keygen t rsa c qq.com 也行 git config global user.name 使用者名稱 使用者名稱隨便起!你能記住就行!沒報錯就接著來!git config global user.email 郵箱 沒報錯就是好訊息!然後執行生成公鑰和私鑰的命令 ssh ...

用公匙登入SSH

昨天用crt生成密匙對之後把公匙上傳到了伺服器,驗證可以登入之後,刪了密匙。對你沒看錯,刪了密匙只留下了公匙,再次登入的時候提示密匙不存在,這時候我竟然沒有認真看報錯資訊,大概看了一眼就以為公匙載入有問題,試著把公匙放到了另外的資料夾,還試了重啟crt,試了重啟電腦。最後才意識到可能是因為我刪了另外...

git生成公匙 秘鑰

1.執行 git bash 客戶端 輸入 cd sshcd ssh ls 這兩個命令就是檢查是否已經存在 id rsa.pub 或 id dsa.pub 檔案 2.git config global user.name 使用者名稱 3.git config global user.email 郵箱 ...