pdf文件的加解密及數字簽名技術(三)
讀取加密的pdf文件
前文說過,加密的pdf文件,其中的字串和流都是被加密的,要正確的解讀這些資訊,就要對其進行解密,解密就需要金鑰,那麼金鑰怎麼來呢?與加密時的情況稍稍不同,在加密字典中的o項和u項可以幫助我們計算金鑰,所以下面我們講解一下如何計算出解讀加密pdf文件內容所需的金鑰。
僅使用了許可權口令加密的pdf文件
如果乙個pdf文件加密時使用了使用者口令(user password),則在開啟pdf文件時必須要輸入口令才能計算出金鑰,這就是為什麼pdf閱讀器在開啟pdf文件時會彈出個對話方塊讓你輸入密碼了。如何判斷乙個加密的pdf文件是否使用了使用者口令呢?翻到pdf reference 1.7的127頁,演算法3.6。
演算法3.6
第一步,根據加密字典中r值的不同,使用演算法3.4或者演算法3.5用使用者口令計算出u項。
第二步,將計算出的u項與加密字典中已有的u項做個比較,如果相同,則使用者口令正確。
好,先用空口令嘗試用演算法3.6進行使用者口令校驗,如果通過,則說明該文件沒有使用者口令。沒有使用者口令的pdf文件,可以直接使用演算法3.2計算出全域性金鑰,計算所需要的一切我們都可以在pdf文件中找到:o項、p項、是否加密metadata。算出全域性金鑰再根據演算法3.1計算出物件的加密金鑰,按照加密字典中宣告的加密演算法(rc4或aes)進行解密操作就是了。需要一提的是,如果是aes演算法,則密文前128位是解密所需的iv,其後才是真正的密文,做解密程式的同學們請注意到這點。
但是根據規範,不提供許可權口令,則對該pdf的操作要符合加密字典中p項的限制,例如限制複製內容、限制列印等。不過前文說過了,不符合規範的pdf應用大把,畢竟內容已經完全解密了,怎麼操作完全看應用了。最惡劣的當屬各類pdf password remover之類的程式,會直接根據解密的內容重新生成乙個未加密的pdf文件,將加密資訊直接拋棄。
使用使用者口令加密的pdf文件
如果前述的演算法3.6對於空口令無法校驗通過,則說明該pdf文件有使用者口令,用演算法3.2就不能直接計算出全域性金鑰。我們就需要提供乙個口令供演算法3.6做校驗,校驗通過就可以使用演算法3.1計算出全域性金鑰從而解密文件了。
既使用了使用者口令又使用許可權口令的pdf文件
在實際中,如果乙個pdf文件經演算法3.6驗證使用了使用者口令,會彈出對話方塊要求使用者輸入口令。而在使用者提供了口令後,pdf閱讀器會優先判斷該口令是否是許可權口令,如果是,則解密文件並開放所有許可權。如果不是許可權口令,而是使用者口令,則解密文件並按照許可權設定限制使用者操作。如何驗證是否使用者口令,並僅用使用者口令計算出全域性金鑰前面已經講過了,那麼如何驗證許可權口令並計算出全域性金鑰呢?翻到pdf reference 1.7的128頁,演算法3.7。
演算法3.7
第一步,根據用演算法3.3的第一到第四步計算出乙個金鑰。
第二步,如果加密字典r項為2,依據第一步計算出的金鑰直接對o項使用rc4演算法解密。如果加密字典r項為3或更高,則要做20次以下操作:將第一步得出的金鑰,每位分別與迴圈計數器做異或(xor)操作,然後對o項(第一次迴圈時)或者上次迴圈得出的結果用rc4演算法進行解密。其實這就是演算法3.3第
六、七兩步的逆過程。只不過這個迴圈計數器不同於演算法3.3中的1至19,而是19至0。一直還原到演算法3.3第五步,看我們把什麼還原出來了?
第三步,第二步將會還原出使用者口令,使用使用者口令用演算法3.6做校驗,如果通過校驗,則說明許可權口令校驗正確。
好,既然計算出了使用者口令,根據演算法3.1,就可以得出全域性金鑰從而解密文件了。
寫在最後
自認為pdf使用標準口令加密、解密的全過程已經講得很清楚了,其實也沒什麼更多要說的了。根據本文,大家應該已經了解了使用標準口令加密的pdf文件的安全性其實也就那樣。雖然使用了使用者口令的pdf較難破解,但是想把pdf給人看,就必須得告訴人家使用者口令。口令如何分發,這在密碼學上是老問題了,隨著加密pdf一起傳送,顯然是愚不可及的辦法,同學們千萬不要幹這種事情,稍好點的辦法是郵件傳送pdf,用**告訴別人密碼。但是我預計對方顯然會把pdf文件儲存後再在同乙個目錄建立乙個文字檔案,名字叫「pdf密碼.txt」>_<。還有一點,如果使用者密碼設定得較為簡單,很容易被專用的軟體暴力破解。好,你跟我們說又不能存放在一起,又不能設得太簡單,我們按照你說的做。但萬一我們把這個十分複雜的使用者口令忘了,卻又沒記下來,怎麼辦?那我告訴你,神仙也很難救你了。看,這些都是標準口令加密的弊端。
要使用較高安全級別的加密方法,一種是使用acrobat的外掛程式功能自定義加密方法,但是閱讀這種pdf,需要額外安裝外掛程式。另一種是使用標準的數字證書加密的方式,它解決了金鑰分發與儲存的問題,以後我也許會專門寫文,介紹這種加密方式。
pdf文件的加解密就介紹到這裡,下篇文章我們將說說pdf文件的數字簽名技術。
加解密 數字簽名 證書 原理
說到加密,可能大家最熟悉的就是md5了。md5實際上只是一種雜湊運算,或者可以稱為單向的加密,即是說無法根據密文 加密後的資料 推導出明文 原資料 而我們下面要說明的,是在加密後可以進行解密 還原資料的。對於欲進行加密的物件,有的人稱為訊息,有的人稱為資料,有的人稱為資訊,為了避免混淆,在本文後面部...
資訊保安基礎 加解密和數字簽名
資訊保安已經是這個時代強烈注重的問題,所以,不管時個人還是企業,在設計自己的系統時,一定會加上資訊保安的機制。先說說基礎 1.什麼是對稱加密?簡言之,對於訊息的加密和解密,都是用同樣的金鑰,金鑰越大,加密越強,但是加解密過程就越慢。2.什麼是非對稱加密?非對稱加密,有一對金鑰 公鑰和私鑰 乙個金鑰加...
加密解密,數字簽名及證書
三重des desede 112和168兩種金鑰長度,抗窮舉能力顯著增強,但由於進行了多重des迭代,造成處理速度慢,效率不高 高階資料加密標準aes 128和192及256三種金鑰長度,搞窮舉能力強,速度比des系列加密快,為替代des系列加密演算法而生 訊息傳送方使用金鑰對明文加密,並將密文傳送...