二步驟安全姓的金鑰問題

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

二步驟安全姓的金鑰問題

文章lortagery » 週六 6月 27, 2009 3:33 pm

apt-get 為了同時滿足安全性與效率,採用了二步驟的驗證。

步驟一:以 Release.gpg 來驗證 Release 的不可否認性。
步驟二:以 Release 中的指紋列表來驗證 DEB包 的正確性。

其中,Release 的內容就是每一個 DEB包 的指紋(MD5)。

問題:假設我從可靠的他處取得了 Release.gpg,但尚未取得 Release 而準備稍候來取得該檔案。那我該如何下達指令來確認 Release 的正確性呢?

問題背景說明:無法確認 http://ftp.de.debian.org/debian 此套件源是否被竄改或是被導向偽造網站。
lortagery
可愛的小學生
可愛的小學生
 
文章: 10
註冊時間: 週日 6月 07, 2009 5:50 pm

文章企鵝狂 » 週六 6月 27, 2009 8:24 pm

首先,去Debian的網站找到,他的GPG Key ID
http://wiki.debian.org/SecureApt

是這個55BE302B

然後
代碼: 選擇全部
gpg --keyserver subkeys.pgp.net --recv-keys 55BE302B
gpg --verify Release.gpg Release

gpg: WARNING: multiple signatures detected.  Only the first will be checked.
gpg: Signature made Sun May 24 01:28:27 2009 CST using RSA key ID 55BE302B
gpg: Good signature from "Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>"


所以你會看到這是被Lenny Sign 過的
代碼: 選擇全部
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 150C 8614 919D 8446 E01E  83AF 9AA3 8DCD 55BE 302B


但是55BE302B這個key沒有被可以信任的人sign過,所以,如果你相信wiki.debian.org上面的資料的話,才可以相信他簽出來的結果
http://news.bbc.co.uk/1/hi/world/asia-pacific/country_profiles/1285915.stm


Country profile: Taiwan
Map of Taiwan
Taiwan is the island which has for all practical purposes been independent for half a century, but which China regards as a rebel region that must be reunited with the mainland - by force if necessary.
企鵝狂
活潑的高中生
活潑的高中生
 
文章: 477
註冊時間: 週三 3月 31, 2004 11:13 am
來自: 台灣共和國

文章lortagery » 週日 6月 28, 2009 12:26 pm

問題一:http://wiki.debian.org/SecureApt 上寫的 GPG key ID
    和 ftp.de.debian.org 上的 Release檔案 似乎沒有關聯。
問題二:只取得 GPG key ID 有用嗎?
    私以為要取得 http://ftp.de.debian.org/debian 所給的公鑰才行。
小小問題還希望高手不吝解惑
lortagery
可愛的小學生
可愛的小學生
 
文章: 10
註冊時間: 週日 6月 07, 2009 5:50 pm

文章FourDollars » 週日 6月 28, 2009 4:36 pm

1. apt-key list 列出來的公鑰代表 APT 系統信任那些公鑰
2. 那些公鑰相對應的私鑰簽署 Release 檔案產生 Release.gpg 檔案
於是 APT 系統就可以透過公鑰跟 Release.gpg 來檢查 Release 的正確性
所以 APT 系統就可以認定 Release 裡面的 MD5/SHA1/SHA256 都是可以信任的
3. 透過可信任的那些 MD5/SHA1/SHA256 再去確認 Packages 檔案是否正確
如果 Packages 檔案的 MD5/SHA1/SHA256 符合就可以信任 Packages 裡面的內容都是正確的
4. 因為 Packages 內容可以信任,所以 Packages 裡面列出來的 deb 檔案的 MD5/SHA1/SHA256 也是可以信任的

於是不管在哪裡下載的 deb 檔案只要是通過以上的檢查 APT 系統就可以信任那個 deb 檔案

假設今天四元做了一個 deb 檔案並且產生 Release 跟 Packages 放在歐洲的某個伺服器上面
並且用我的私鑰簽署 Release 產生出 Release.gpg
後來企鵝狂覺得我的東西還蠻好用的可是每次網路都要連到國外去實在是很不方便而且速度又慢
於是幫我 mirror 了一份放到台灣的某個伺服器上面
之後在台灣這邊的網友想要使用我的 deb 檔案就去加企鵝狂幫我 mirror 在台灣的伺服器
所以台灣這邊的網友 lortagery 要先加入四元放在 subkeys.pgp.net 上面的公鑰 (也就是 apt-key list 上面所看到的)
這樣才能夠確認企鵝狂 mirror 的檔案是四元做的 deb 檔案
而不是企鵝狂自己做出來的 deb 檔案 (也許裡面還藏著後門程式想要害 lortagery)

最重要的東西就是那把公鑰是不是可以信任的公鑰~
FourDollars
懵懂的國中生
懵懂的國中生
 
文章: 188
註冊時間: 週五 8月 01, 2003 12:47 am

文章FourDollars » 週日 6月 28, 2009 4:41 pm

BTW 去看看 /var/lib/apt/lists 底下的東西
FourDollars
懵懂的國中生
懵懂的國中生
 
文章: 188
註冊時間: 週五 8月 01, 2003 12:47 am

文章企鵝狂 » 週日 6月 28, 2009 11:28 pm

換句話來說,如果有一天你拿到一個號稱是我寫的軟體,也記得要來確認一下我的公鑰是什麼。免得裡面有四元寫了要害你的後門,哈哈

:-D
http://news.bbc.co.uk/1/hi/world/asia-pacific/country_profiles/1285915.stm


Country profile: Taiwan
Map of Taiwan
Taiwan is the island which has for all practical purposes been independent for half a century, but which China regards as a rebel region that must be reunited with the mainland - by force if necessary.
企鵝狂
活潑的高中生
活潑的高中生
 
文章: 477
註冊時間: 週三 3月 31, 2004 11:13 am
來自: 台灣共和國

Re: 二步驟安全姓的金鑰問題

文章ronmi » 週二 6月 30, 2009 11:06 am

以下只是為了方便理解而簡化的說明,與公鑰演算法背後的精神、apt檢查的細節略有出入

Key ID就是公鑰的身分證,所以企鵝兄所言,可以這樣解讀
「lenny團隊的公鑰,在subkeys.pgp.net這裡的身分證字號是55BE302B」

那麼,現在你已經取得了「真正的debian團隊的公鑰」
凡是能通過這個公鑰檢查的東西,不論他是純文字檔也好,是包好的套件也好
你可以相信這個東西一定是debian團隊的產品

Release.gpg和公鑰搭配,可以用來檢查Release這個檔
若apt的檢查不過,預設的狀況下apt會給你一個錯誤訊息告訴你檢查失敗
換句話說,Release.gpg是用來檢查這個Release檔是不是debian官方團隊所釋出的
而Release裡面記載了各個套件的一部份檢查訊息,這個檢查也是apt會自動做的,一樣預設會出現錯誤訊息

所以整個apt的自動檢查流程是這樣的
1.用Release.gpg+公鑰檢查Release檔
2.用Release檔裡的md5 checksum檢查套件
3.用公鑰檢查套件

再次重申:
你不需要管 Release.gpg檔 / Release檔 / 套件檔 是哪抓來的
ftp.de.debian.org也好,a.b.org也可以
只要他能通過公鑰的檢查,那就一定是debian官方釋出的東西
這些檢查apt都會自動去做,你需要擔心的只有「有沒有奇怪的公鑰混在你信任的金鑰列表(apt-key)裡面」

範例:
我將abc.def.org加入sources.list中,我的apt-key裡面只有lenny的公鑰,我確定apt的設定檔中沒有將公鑰驗證的警告訊息關閉,安裝時apt也沒有出現有關公鑰的錯誤訊息,那麼我安裝的一定是lenny的官方套件,不是什麼阿撒布魯的東西

回到你的問題
lortagery 寫:apt-get 為了同時滿足安全性與效率,採用了二步驟的驗證。

步驟一:以 Release.gpg 來驗證 Release 的不可否認性。
步驟二:以 Release 中的指紋列表來驗證 DEB包 的正確性。

其中,Release 的內容就是每一個 DEB包 的指紋(MD5)。

問題:假設我從可靠的他處取得了 Release.gpg,但尚未取得 Release 而準備稍候來取得該檔案。那我該如何下達指令來確認 Release 的正確性呢?

問題背景說明:無法確認 http://ftp.de.debian.org/debian 此套件源是否被竄改或是被導向偽造網站。


不論你是從哪裡取得Release.gpg和Release檔,只要Release配合公鑰運算後能與Release.gpg相符,那麼「Release.gpg和Release兩個檔案都是真的」
這個檢查是apt自動會做的,你不需要下達任何指令
如果你硬是要手動驗證一下,請man gpg

至於確認某套件源是否被竄改或是被導向偽造網站
如上所言,只要你確定
1.apt-key裡面沒有奇怪的公鑰
2.apt的設定沒有關閉公鑰相關的錯誤訊息
3.安裝的時候apt沒有顯示錯誤訊息
那麼你一定是裝到正版的debian套件


突然想到一個可能更好理解的比喻:
假設你逛夜市,看到某個地攤在賣m$的windoz xp
你看了看,盒子上的產品封條完整,你也確定上面的防偽貼紙是真的
雖然這是地攤,雖然老闆大特價1元賣你,一切的一切都很像是假貨
但你還是可以確定你買到了正版的windoz

防偽貼紙是公鑰,產品封條是檢查碼,那個可悲的windoz xp是套件
地攤的老闆是一個套件源,新光華是另一個套件源,官方套件源是M$總公司,台灣M$是官方mirror之一
ronmi
懵懂的國中生
懵懂的國中生
 
文章: 103
註冊時間: 週一 12月 05, 2005 2:31 am
來自: Taiwan

APT金鑰問題的公開感謝信

文章lortagery » 週二 7月 07, 2009 8:28 am

真的非常非常感謝大家給我的回應,真的非常感謝大家,有那麼多熱心的人願意幫助我。其中,我再特別感謝的就是 ronmi,因為他終於了解到我有多麼多麼多麼多麼的擔心網路安全的問題,即便只是很小的疑惑都會讓我戒慎恐懼。當然也非常感謝 企鵝狂 與 FourDollars,因為兩位也提供了很多的寶貴訊息。雖然說我對技術也是蠻有興趣的,但是當前的重點是網路安全的問題。現在,我終於了解到下面的事實:

1. 我可以隨意編輯 source.list 而不用擔心更新的 DEB 包藏禍心。
2. 我可以不用擔心 公司的網管人員 將我的連線 重新導向至惡意網址。
3. 我可以不用擔心 公司的網管人員 竄改我所要下載的內容。

只要

1. 我沒有隨意亂加不乾淨的鑰匙 (apt-key)
2. 我沒有關閉 apt-get 的示警功能


我就可以很安心的使用 apt-get update/upgrade 來更新我的電腦。即便

1. 我隨意的加入來源至 source.list 中。
2. 上層的網管人員 有企圖的、惡意的 想要重新導向網址或竄改連線內容。



特別感謝列表:企鵝狂、FourDollars、ronmi


最後我仍有一個很小的疑惑,為什麼 http://security.debian.org/http://ftp.de.debian.org/debian 兩者,所更新的內容不一樣?難道說後者的主人竟也持有 debian 的公開金鑰嗎?
lortagery
可愛的小學生
可愛的小學生
 
文章: 10
註冊時間: 週日 6月 07, 2009 5:50 pm

文章ronmi » 週二 7月 07, 2009 6:42 pm

ftp.de.debian.org 和 ftp.debian.org 裡面放的都是官方套件(當然,也都是debian團隊出的套件),只是伺服器的位置不一樣

security.debian.org 和 ftp.de.debian.org 裡面放的都是debian團隊包的套件,差別在套件內容: security 上的是安全性更新,而 ftp.de 則是放debian的各種軟體

其實你問的兩篇我都在講一樣的事,只是這回我講的方式似乎有對上你的頻率XD
ronmi
懵懂的國中生
懵懂的國中生
 
文章: 103
註冊時間: 週一 12月 05, 2005 2:31 am
來自: Taiwan

感謝大家

文章lortagery » 週四 7月 09, 2009 8:40 pm

心得一:相信 Release 與 Release.gpg 能夠確保 Release 的安全性,無論檔案來源來自於何處。如果網管人員意圖竄改內容的話,除非他能夠偽造 Release.gpg 或者是有能力在 Release 內加入垃圾內容以便符合 Release.gpg,而這是非常困難的。

心得二(問題):其實 APT 並非保證 DEB包 本身的正確性,而只是保證 Release 內容的正確性。但是 Release 的內容包含了三種指紋:MD5,SHA1,SHA256。不知道 APT 在實作上是否只檢查 MD5?如果 APT 只檢查 MD5 的話,那麼 DEB包 被竄改的風險會稍微高一點。但 APT 若把三者的指紋都檢查過的話,那被竄改的機率就真的是太低了,因為一個檔案要同時符合三種指紋的難度實在太高了。所以我想問 APT 在實作上是否同時檢查了三個指紋。
lortagery
可愛的小學生
可愛的小學生
 
文章: 10
註冊時間: 週日 6月 07, 2009 5:50 pm

文章企鵝狂 » 週四 7月 09, 2009 11:23 pm

/var/lib/apt/lists

你可以到這裡,找一個list, 修改一個package的 sha256, 然後嘗試安裝他看看, 如果通過, 再修改同一個的sha1, 然後再試md5...

如果連md5都過了...那就有問題了

Ubuntu都已經有sha256了,應該不會同時檢查三個,會檢查最強的那個。
其他保留是為了舊版的apt相容,apt 0.7.7之後才支援sha256。
http://news.bbc.co.uk/1/hi/world/asia-pacific/country_profiles/1285915.stm


Country profile: Taiwan
Map of Taiwan
Taiwan is the island which has for all practical purposes been independent for half a century, but which China regards as a rebel region that must be reunited with the mainland - by force if necessary.
企鵝狂
活潑的高中生
活潑的高中生
 
文章: 477
註冊時間: 週三 3月 31, 2004 11:13 am
來自: 台灣共和國


回到 debian misc

誰在線上

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