PDF加密、解密內幕(一)- (PDF加密字典對象分析)

來源:互聯網
上載者:User
PDF加密、解密內幕(一)- PDF加密字典對象分析 0 幾個關鍵詞的說明PDF加密有兩個口令即:Owner(to set the pdf document Permission or change the permission) Password和User Password,在本文中翻譯為主(許可權)口令和使用者口令,我覺得許可權口令更好,因此就稱作許可權口令。檔案加密後會產生一個新的對象,encryption dictionaries Object,本文中以加密字典對象來說明。其中加密字典對象中的項稱為加密字典對象項。另外文中能以中文來說明的盡量以中文來說明,如果一些關鍵的英文詞沒有很好的中文對應詞我們還是保留原來的英文說法。 1 幾個常見的PDF安全問題最近經常有人問到幾個問題,是關於PDF加解密的,如果你對PDF規範比較熟悉,那麼有可能會覺得這這幾個問題很簡單甚至有些傻。但幾乎每個人都會有這麼一個階段,總是從無知到有知,再到無知,…,一個個輪迴。在文章的最開始我把問題給提出來,然後作一個簡單的回答,如果覺得這有助於你對PDF加解密的認識,那我會非常開心的如果你需要對PDF加密解密有更深入地瞭解和學習,那麼可以繼續關注系列文章。當然這些文章的大部分內容你都可以從PDF規範裡面找到,在這裡,我只是以我個人的理解協助大家可以更快地理解和應用。 ²        問:PDF 有那些密碼編譯演算法?PDF檔案採用的密碼編譯演算法目前在用的有兩種,RC4和AES。PDF的早期版本是通過RC4密碼編譯演算法對內容進行加密的,加密的長度為(40-128位)而從PDF1.6起,引入了AES密碼編譯演算法(128位),對應的閱讀器有ACROBAT7.0 。因此說PDF中的密碼編譯演算法是固定的,沒有其他第三種密碼編譯演算法。關於RC4和AES,你可以到相關網站找到答案,見參考資料。 ²        問:為什麼我的PDF 已經設定了使用權限設定,並且屏蔽了列印,但是為什麼別人可以很容易地破解?答::打個不恰當的比方,這隻是“防君子而非小人”。但是很多人都對PDF的使用權限設定產生誤解。認為作了使用權限設定就已經對檔案內容進行了加密而一定要輸入口令,其實不然,典型的例子有:http://www.kenwong.cn/post/how-to-use-gmail-to-break-pdf-restrictions.html。GMAIL這樣做確實是一個非常大的BUG,這是明顯違反PDF規範的,在這一點上GMAIL做的太不嚴謹,幸好它能及時作修正。PDF中的使用權限設定只是一串字元而已,用這些字元的某些位來表示PDF是否允許某個操作或者禁止某個操作,而只有許可權口令沒有開啟口令的情況下檔案雖然是加密了,但是可以通過加密字典對象和PDF產生加密金鑰的規則來得到加密金鑰(下一篇文章會詳細解釋),從而對檔案內容進行解密,如果你解密後把它另存新檔一個新的檔案,那麼就可以修改或去除這個字串和相關的資訊,那麼PDF檔案許可權就不受限制了。如果是要確保檔案內容加密,那隻有設定開啟口令。 ²        問:為什麼我設定了開啟口令,還被別人破解?答:如果你設定了開啟口令,那麼這個時候檔案內容是加密的。要開啟這類檔案是必須要得到加密口令的,這個時候如果還被破解的話,那很有可能是因為你設定的開啟口令太過於簡單,長度比較小的緣故,這樣的情況是可以通過窮舉來破解的,當然也可以使用口令字典來破解。那是通過怎樣來破解的呢?PDF檔案加密的時候,你輸入一個開啟口令,比如說是123456, 其實不是直接由你輸入的口令作為PDF加密內容的密鑰的,還需要有一個轉換過程才得到加密金鑰。而怎麼才能判斷你輸入的口令是否正確呢?那是因為在加密PDF檔案的時候會在PDF檔案中放入一個由開啟口令運算得到的HASH序列,當你輸入口令的時候就需要對你輸入的口令作一系列的運算而得到另一個HASH序列,如果兩個HASH序列一致,那麼就可以根據這個HASH序列和你輸入的口令產生解密密鑰開始解密,否則提示口令錯誤。這在我的上一篇文章《PDF加密模擬》中可以得到答案。 ²        問:什麼是ACROBAT 中自訂的Security Handler?答:PDF允許自訂Security handler,如果大家訪問過PDF電子書網站,那一定會明白這是怎麼一回事。一般的PDF電子書網站都會要求你下載一個PLUGIN(acrobat 或adobe pdf reader的外掛程式),在這個PLUGIN裡就會用到自訂的Security Handler。那這些新的PDF Security Handler是否使用了新的加密方法呢?當然不是,對PDF內容的加密還是使用RC4或AES,只是加密金鑰的產生方法不同。如果大家對這個感興趣,我也將給大家作一個比較全面的介紹。  2 一個PDF檔案加密 2.1 用ACROBAT7.0英文版給PDF檔案口令加密的過程:1)        開啟PDF檔案。2)        選擇菜單: File->Document Properties。3)        選擇Security選項卡。4)        在 Security Method一欄中選擇Password Security,點change Settings…按鈕,如: 5)        出現下面加密項設定對話方塊:   6)        首先選擇相容性,共有acrobat3.0, acrobat5.0,acrobat6.0和acrobat7.0,預設為acrobat5.0,即被實現PDF1.4規範的軟體支援。(本文我們就以此為例)7)        分別設定開啟口令和許可權口令,注意兩個口令不能一樣,我們在這個例子裡面將分別輸入111111和222222,當然你在實際應用中必須使用複雜的口令。8)        設定你準備給該PDF文檔讀者授予的操作許可權。9)        按OK按鈕後確認開啟口令和許可權口令,按OK。10)     文檔被加密。  2.2 加密後PDF檔案發生了什麼變化?  如果想知道PDF加密後發生了什麼變化,那麼最好的方法是找一個PDF檔案,然後對它進行加密,儲存後再用Ultra Edit開啟,這樣所有的變化都會一目瞭然。       將我文章最後的PDF檔案下載,如果你有ACROBAT的話,那麼按照我上面的流程作一加密,加密儲存後我們會發現檔案發生了變化。通過觀察你會看到PDF檔案尾部(trailer)發生了變化,加密前我們看到檔案尾為:trailer<< /Size 16 /Root 1 0 R /Info 2 0 R/ID [<14147840093798E8EDC491FC1B2F19A7><14147840093798E8EDC491FC1B2F19A7>]>> 加密後檔案尾變為:trailer<</Size 18/Prev 10226/Root 6 0 R/Encrypt 5 0 R/Info 3 0 R/ID[<14147840093798E8EDC491FC1B2F19A7><3F95D9F08175974E8A55871FCBB2F983>]>>明顯地,紅色部分是加密後增加的,說明加密字典對象的對象號為5.我們可以很容易找到以下的加密字典對象:5 0 obj<</Length 128/Filter/Standard/O(_憘穎祳>S8+E眝櫁-zE{/r脮<滲?/P -3392/R 3/U(v旐厺竌踜鎒h聨                )/V 2>>endobj其實這些加密字典對象項都是通過我們圖形介面輸入項產生的,那麼這些項都表達什麼意思呢? 下面的內容我們可以從PDF規範1.6中找到:/Length 密鑰的長度/Filter 產生密鑰的方法,就是前面說的security handler/O 是由使用者口令和許可權口令得到的,用來產生密鑰和驗證輸入的許可權口令/P 存取權限的標誌/R 標準加密的(standard security handler)的版本/U由使用者口令產生,用來驗證輸入的使用者口令或許可權口令,是否要提醒使用者輸入密碼/V  可選,用來指明加密的演算法。 當然加密字典還可能包含有其它項,但是這裡我不打算介紹每項可能的值和對應的意思,因為這不是PDF規範的中文翻譯,而是希望通過一系列的文章讓讀者能對PDF規範有個更好更快速地瞭解。接下來我們結合實際的例子來說明各個加密字典對象項表達的意思。 /Length 128 %密鑰的長度為128位/Filter/Standard %內建的標準加密引擎standard security handler,對應的操作是口令加密的第4步,即選擇Password Security/O(_憘穎祳>S8+E眝櫁-zE{/r脮<滲? %由使用者口令,許可權口令,和文檔ID產生的/P -3392 %許可權標誌見PDF規範/R 3%加密版本3,如果V為2或3, 那麼就屬於“版本3或更高”的範疇,在下一篇文章中我們要用到這個概念/U(v旐厺竌踜鎒h聨                )%由使用者口令得到,用來驗證使用者口令/V 2  %允許加密長度超過40位,在上述這個例子裡例子裡密鑰為128位  3 實現PDF加密需要回答的三個問題加密字典對象是通過我們對加密的方式的選擇和輸入的口令產生的,那每項的內容對PDF檔案的加密和解密都是有關係的,接下來我們最關心的問題是如何來實現對一個PDF檔案的加密?這個問題可以分解為四個小的問題: 1.         檔案的內容是如何被加密的?2.         加密金鑰是如何產生的?3.         上面的加密字典中的每一項是如何產生的?4.         加密字典和加密金鑰的關係? 接下來的文章我將告訴你所有的這幾個問題的答案。當然如果你要真正地寫一個實現PDF口令加密的程式,那麼還得參考PDF規範1.6。但是你覺得閱讀起來有困惑的地方,那麼我想下篇文章對你來說也會有協助的,也會詳細地告訴你如何通過編程來實現PDF檔案的口令加密。   參考資料RC4:http://www.rsasecurity.com/rsalabs/node.asp?id=2250AES:http://www.reference.com/browse/wiki/Advanced_Encryption_Standardhttp://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122newft/122t/122t13/ft_aes.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.