昨天介紹了如果用非加密連線的TELNET協定連到PTT的話,可能會有資料外洩的疑慮,今天則要介紹另一個可以用加密連線來與伺服器互動的方法,就是安全外殼協定(Secure Shell,SSH)協定。
以下就來介紹如何使用加密的SSH連線與PTT伺服器互動。接下來我會以PuTTY來做連線範例,所以會需要使用UTF-8編碼來連到PTT,如果知道怎樣用Big5來連到PTT不會有亂碼的也歡迎分享一下,我還沒試到可以成功的方法。
首先,打開PuTTY,並輸入連線資訊,Host Name輸入bbsu@ptt.cc,Connection Type選擇SSH。
接著確認左邊目錄中Window>Translation的Remote character set是不是UTF-8,如果這邊不選UTF-8的話等一下看到的畫面就會有很大的機率是亂碼。
沒問題後就按下Open開始連線,並同樣的在帳號輸入iamtesting,密碼輸入password,那這次會收到怎樣的封包呢?
這次我們要觀察的是SSH協定的封包,所以在規則欄中輸入ssh後按下ENTER,就可以得到以SSH連線的封包清單。
接著來看看封包內容有什麼吧,在第一個封包點右鍵,並選擇Follow>TCP Stream。這是我們看到的封包就完全不一樣了。
一開始紅框的地方就可以看出雙方是使用SSH連線,從這裡也可以看出來我的PuTTY使用的SSH版本是SSH-2.0-PuTTY_Release_0.67,而PTT主機使用的SSH版本是OpenSSH_7.4p1,另外PTT主機則是Debian Linux系統。藍框的地方是雙方列出支援的各種加密方式,黃框的部分則是雙方開始進行迪菲-赫爾曼密鑰交換(Diffie–Hellman key exchange, D-H)的機制。
接續上一張圖,黃框的部分還是在進行D-H中,咖啡框的部分則是雙方已經產生了一把密鑰,而我的電腦通知PTT伺服器接下來我們都要用加密的方式來溝通囉!最後,咖啡框以後的就都是加密後的密文了,相信這些密文不只我看不懂,聰明的你們應該也看不懂。
補充說明,D-H是一種可以可以在公開管道建立一把密鑰的方式,而SSH就可以利用這種方式,簡單來講,雙方可以先在非加密的連線中雙方建立一個密鑰,接著雙方就可以利用這個密鑰來進行接下來的連線。接下來又要出動我精湛的小畫家畫風來解釋何謂D-H密鑰交換機制囉。
首先我們要先了解,這個機制的目的是要在非加密連線中,同時在雙方產生一把一樣的密鑰,而且必須符合不用透過非加密連線告知對方這個密鑰是什麼,這時我們請小美跟小明出場來幫我們解釋一下,請注意以下的步驟都只是要先產生一把雙方一樣的密鑰,跟流量加密本身還沒有關係。
首先在步驟一,小美跟小明利用公開管道告知對方一個公開的顏色(黃色),接著他們各自選了一個秘密的顏色不告訴對方,小美選了紅色,小明則選了藍色,並寫把公開顏色跟秘密顏色加在一起,於是小美得到了橘色,小明則得到了綠色。
在步驟二時,小美跟小明透過公開管道告訴對方自己加出來的顏色,小美告訴小明自己混出來的顏色是橘色,而小明告訴小美自己混出來的顏色是綠色。這個步驟有一個假設,就是要利用交換的顏色跟公開的顏色推測出秘密顏色是很困難的,因此就算有人竊聽到資訊也幾乎無法進行還原。
接著是步驟三,小美跟小明各自把交換的顏色再加上自己的秘密顏色,並得到最後的秘鑰顏色(咖啡色)。對於雙方來說,最後的到的這個秘密顏色都是由黃+藍+紅所組成的。
最後是步驟四,既然雙方有了共同的密鑰顏色,就可以在不用告知對方密鑰顏色的狀況下,利用此密鑰將接下來所有傳送的資訊進行對稱式加密。
順便一提,如果你是喜歡用網頁版瀏覽PTT(例如Chrome的套件)的朋友,也請記得使用加密連線,這部份明天會有進一步的介紹,也希望大家看完今天介紹完SSH連線的部分,能夠對於使用加密連線能有更深的認識,也請大家最好都使用加密連線來傳送任何資訊喔!
請問一下,如何得知咖啡框就是產生的密鑰@@?
不好意思,應該是我的描述比較不精確,咖啡框的部分是我的電腦通知PTT伺服器密鑰已經產生,而不是說咖啡框的內容是密鑰,謝謝。
喔喔 我的意思是倒數第二張圖黃框、咖啡框、無框全部的內文看起來都是.....亂碼,要怎樣判斷正在進行D-H中、通知伺服器密鑰產生、加密後的內文等。先謝謝你的回覆,你的文章很棒,繼續加油:D
你好,可以跟封包列表進行交叉比對來得知喔,封包列表(如第4張圖)的下方可以看到以16進位的編碼和ASCII編碼的方式呈現封包的原始內容,再拿ASCII的部分去跟倒數第2、3張的圖對照,就可以知道哪個部分是哪個封包的資料囉~
了解