APT 系統的金鑰管理機制簡介~~~~

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

APT 系統的金鑰管理機制簡介~~~~

文章Lost-Angel » 週二 2月 27, 2007 12:08 am

有鑑於論壇上時常有人重複的提問關於 APT 的金鑰過期問題,且網路上的資料似乎也都只是簡單的幾行指令說明,看了一頭霧水搞不清楚狀況,在此小生將整個架構與流程做了簡單介紹,希望對於未來有需要的人有所助益。



前言:
在開放原始碼軟體的世界裡,任何人都可輕易取得軟體的原始程式碼並自行修改、編譯、散播,尤其是像 Debian 這類可以簡單的經由幾個簡單的按鈕、指令驅動龐大而複雜的 APT 系統進行全作業系統的套件升級、管理機制,安全性考量是一個非常重要的課題,因為沒有人希望下載回來安裝的軟體是被有心人士惡意篡改且穿插了惡意程式碼片段在其中。因此,Debian 的 APT 系統中引進了所謂的非對稱式金鑰加密、解密法以及 MD5 hash 演算法機制來增加其安全性,以確保從網路下載回來的軟體套件是可信任的。

數位簽章簡介:
簡而言之,文件發佈者會有一組相對應的金鑰(key),分別為公開金鑰(public key)以及私密金鑰(private key),公開金鑰顧名思義就是要公開散播給大家取得的,他是一大串體積大約 2k 左右的長碼,而私密金鑰則是只有文件發佈者才有的秘密鑰匙。發佈者每當要發佈時將原始文件(明文,plain text)以私密金鑰加密演算後變成密文(cipher text)再行傳送,接收方則可使用發佈者的公開金鑰對該文件進行解密演算方可得原始明文。在這過程中,不論使用於加密的私密金鑰或者用來解密的公開金鑰並非正確的話,接收端都無法正確的還原出原始文件,以達到資料來源可信任的目的。
然而,這個機制並非堅不可破,要從公開金鑰去反向推倒演算出私密金鑰是可行的,只是其所需的運算量非常龐大,可能需要超級電腦才有辦法在幾年內破解出,普通的個人電腦要解出可能運算到電腦變成古董了都還沒破解出來。因此,為了安全考量,通常金鑰組都會每過一段時間要淘汰掉重新產生一組新的來使用,這也是為什麼 APT 系統中時常都必須重新下載新的公開金鑰的緣故。

MD5 簡介:
這是一個單向的雜湊(hash)演算法則,可以輸入任意長度的資料,然後產生一串 128 位元的碼串,隨著輸入資料的內容、長度不同,所產生的碼串都會不一樣,而由所產生的碼串則非常難以還原回原始資料。因此只要原發佈者將該文件以 MD5 演算過後產生的 128 位元碼串公佈出來,接收端即可將收到的文件先以 MD5 演算後所產生的碼串來跟原發佈者的碼串進行比對,若兩者相同則表示文件內容確定為原發佈者的文件內容一致未被篡改。

APT 系統中的數位簽章機制:
由於使用金鑰加密、解密時,其流程中的密文體積以及演算過程的時間會隨著明文的體積成正比成長,因此在 APT 系統中將整個軟體套件進行金鑰加密、解密則顯的太過不切實際。所以在 APT 系統中軟體套件或原始碼本身都是以明文的方式存放於伺服器上並提供所有的 APT 的 Client 程式下載,套件維護者只會對軟體套件先進行 MD5 演算產生 128 位元的碼串,再針對該碼串進行金鑰加密。
接收端在進行套件清單更新時(apt-get update)會下載所有 deb 套件的 MD5 碼串以及其加密後的密文,此時 APT Client 則必須擁有該套件發佈者的公開金鑰才有辦法正確的將接收到的密文還原成 MD5 的碼串,還原出該碼串後即可跟下載回來的碼串進行比對以確定該 MD5 碼串是可靠的,之後再對所有下載回來要安裝的軟體套件進行一次 MD5 演算以產生一個新的碼串,並將新碼串拿來跟可靠的 MD5 碼串比對以確認軟體套件是未被篡改的。

在 APT 中管理金鑰:
以 root 身份使用以下指令可察看目前系統中的 APT 所持有公開金鑰列表:

代碼: 選擇全部
apt-key list


指令會產生很多行含有 xxxxx/xxxxxxxx 格式的資料,斜線前的那串碼是金鑰擁有者的 ID,斜線之後的八碼是金鑰指紋的末八碼。

由於公開金鑰是要公佈給大家任意取得的,因此一般而言都會有所謂的鑰匙伺服器(key server),上面專門存放大量的公開金鑰供取用,取用的方式就是指定該鑰匙的指紋(finger print),通常是該金鑰的最末 16 碼(或末八碼)。
當系統在進行套件清單更新時出現了類似 NO_PUBKEY xxxxxxxxxxxxxxxx 的錯誤訊息時,則表示有公開金鑰已過期或者是有新加入 apt 的 source 但未下載該對應之公開金鑰,而後面那串碼就是新的公開金鑰之指紋,只要使用以下指令即可從 key server 下載到該金鑰:

代碼: 選擇全部
gpg --keyserver hkp://wwwkeys.eu.pgp.net --recv-keys xxxxxxxxxxxxxxxx


gpg 是一套專門管理金鑰的系統,但是他和 APT 的金鑰管理系統是獨立開來的,因此下載到金鑰後還必須將他匯給 APT 才行,指令如下:

代碼: 選擇全部
gpg --armor --export xxxxxxxxxxxxxxxx | apt-key add -


之後在使用 APT 的金鑰列表指令應該就可看到新的公開金鑰了。

P.S. 小生才疏學淺,內容若有誤煩請前輩指點。
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週二 3月 06, 2007 1:06 am

Thanks a lot. It helps.
訪客
 

文章checko » 週五 3月 09, 2007 7:34 pm

請問"apt-key"這個command 是不是要到 "etch" 才有 ?
我在 sarge 都沒有這個command...
checko
可愛的小學生
可愛的小學生
 
文章: 56
註冊時間: 週一 8月 02, 2004 1:52 pm

文章flybird » 週三 3月 14, 2007 4:40 pm

下載:1 http://security.debian.org etch/updates Release.gpg [189B]
下載:2 http://security.debian.org etch/updates Release [24.3kB]
下載:3 http://ftp.tw.debian.org etch Release.gpg [189B]
下載:4 http://ftp.tw.debian.org etch Release [74.4kB]
下載:5 http://ftp.tw.debian.org etch/main Packages/DiffIndex [2038B]
下載:6 http://www.debian-multimedia.org etch Release.gpg [189B]
略過 http://security.debian.org etch/updates/main Packages/DiffIndex
已有 http://ftp.tw.debian.org etch/contrib Packages/DiffIndex
已有 http://ftp.tw.debian.org etch/non-free Packages/DiffIndex
下載:7 http://ftp.tw.debian.org etch/main Sources/DiffIndex [2023B]
下載:8 http://ftp.tw.debian.org etch/main 2007-03-13-0819.20.pdiff [4770B]
下載:9 http://www.debian-multimedia.org etch Release [5560B]
略過 http://security.debian.org etch/updates/contrib Packages/DiffIndex
略過 http://security.debian.org etch/updates/non-free Packages/DiffIndex
略過 http://security.debian.org etch/updates/main Sources/DiffIndex
下載:10 http://ftp.tw.debian.org etch/main 2007-03-13-0819.20.pdiff [4770B]
下載:11 http://ftp.tw.debian.org etch/main 2007-03-13-0819.20.pdiff [4770B]
下載:12 http://ftp.tw.debian.org etch/main 2007-03-13-0819.20.pdiff [1055B]
下載:13 http://ftp.tw.debian.org etch/main 2007-03-13-0819.20.pdiff [1055B]
已有 http://security.debian.org etch/updates/main Packages
已有 http://security.debian.org etch/updates/contrib Packages
已有 http://security.debian.org etch/updates/non-free Packages
略過 http://www.debian-multimedia.org etch/main Packages/DiffIndex
已有 http://security.debian.org etch/updates/main Sources
下載:14 http://www.debian-multimedia.org etch/main Packages [45.6kB]
下載:15 http://ftp.tw.debian.org etch/main 2007-03-13-0819.20.pdiff [1055B]
下載:16 http://ftp.tw.debian.org etch/main 2007-03-13-2008.39.pdiff [8308B]
下載:17 http://ftp.tw.debian.org etch/main 2007-03-13-2008.39.pdiff [8308B]
下載:18 http://ftp.tw.debian.org etch/main 2007-03-13-2008.39.pdiff [8308B]
下載:19 http://ftp.tw.debian.org etch/main 2007-03-13-2008.39.pdiff [596B]
下載:20 http://ftp.tw.debian.org etch/main 2007-03-13-2008.39.pdiff [596B]
下載:21 http://ftp.tw.debian.org etch/main 2007-03-13-2008.39.pdiff [596B]
讀取 169kB 用了 14s (11.6kB/s)


Etch 的 APT 機制似乎加了不少的新功能
.gpg DiffIndex .pdiff這些訊息就讓人很疑惑喔 :ooops:
以前並沒有這麼複雜
有那裡可取得這些功能的詳細解說呢?
車同軌、書同文,國方成!
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT

文章訪客 » 週三 3月 14, 2007 4:47 pm

可以去翻 debian mailing list :P

.gpg 當然是為了安全性,避免安裝到假的來源、假的套件。
.pdiff 是為了加快更新速度,不用每次都 download 完整的 Packages.gz

如果有常常更新的話,用 pdiff 是比較好的,既快又省網路資源。
如果偶爾才更新一次(例如我的 chroot build farm),也可以手動關掉 pdiff

Debian 遙遠將來的計畫是連 deb binary 也納入 binary diff,例如以後更新 gcin 只要更新 /usr/bin/gcin* 就好,manpage / gtab 等文件沒更動就不用重新安裝了。不過這個 binary diff 機致還很遙遠...:P

Etch release note 一定會有這些消息啦,也可以去找來看看,順便協助翻譯 :)
訪客
 


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客