Skip to main content

· 9 min read

Keet 是一款新穎又好用的聊天應用程式,讓你可以和朋友直接進行視訊或文字聊天。以下是它的幾個亮點:

  • 超安全的聊天:透過端到端加密,只有你和朋友可以看到聊天內容,比 Line 更具隱私保障。

  • 清晰不卡畫的視訊:Keet 的視訊通話品質非常好,因為它不用伺服器,直接連接你和朋友的設備。當然你也可以只使用語音通話。

  • 快速傳大檔案:無論是高畫質照片還是影片,都可以輕鬆傳送,完全不壓縮畫質!

這些功能讓 Keet 很適合喜歡聊天、重視隱私或想用高品質視訊的你。

為什麼 Keet 比其他聊天 App 更安全?

一般聊天 App(例如 Line)大多使用伺服器來傳訊息(「伺服器 - 客戶端」(Server-Client)架構)。這意味著當你發送訊息時,訊息會先傳到伺服器(Server),然後再從伺服器傳送到你的朋友(Client)。這種方式看起來很方便,但也有一些風險:

  • 伺服器可能被駭客入侵:伺服器被攻擊後,訊息可能被偷走。
  • 隱私不安全:你的聊天記錄全都存在伺服器上,服務商或其他人可能會偷看或審查你的內容。
  • 帳號可能被封鎖:伺服器可以隨時停用你的帳號,讓你無法再使用 App。
  • 伺服器出問題就不能用:如果伺服器壞掉,所有人都會無法使用 App。
  • 運營成本高:伺服器需要很多錢來維護,可能會讓 App 的服務收費或廣告變多。

Keet 採用的是點對點(Peer-to-Peer, P2P)架構。直接連接你和朋友的裝置,訊息完全不經過伺服器。這種設計有以下好處:

  • 超高安全性:沒有伺服器,駭客就沒地方可以入侵。
  • 完全保護隱私:訊息經過加密,除了你和朋友,誰也看不到。
  • 帳號不會被封:因為沒有中央伺服器,沒人可以禁用你的帳號。
  • 少出問題:沒有伺服器就不用擔心伺服器掛掉,全都靠你的設備和網路運行。

總結來說,Keet 的 P2P 架構讓它比使用伺服器 - 客戶端架構的聊天應用程式更安全,因為它減少了訊息被竊取、隱私被侵犯和帳號被禁用的風險。

P2P 架構的挑戰

雖然 P2P 聽起來很棒,但它使用在即時通訊(IM)中時,也有一些問題需要克服:

  • 雙方要同時在線上:你和朋友必須同時上線才能聊天,跟現在的 App 不太一樣。
  • 使用者識別:當使用者透過多個設備發送訊息時,難以確保這些訊息都屬於同一個使用者。
  • 訊息可能延遲:如果網路不好,訊息可能傳得很慢,甚至傳不出去。
  • 傳檔案比較麻煩:如果朋友沒上線,你發送的檔案就無法即時傳過去。
  • 設備比較耗電:因為 P2P 要靠你的裝置處理訊息和檔案,可能會比較耗電和流量。

Keet 怎麼克服這些問題?

keet 的開發團隊 holepunch 很瞭解 P2P 架構的限制,因此結合了加密技術與 P2P,創造了一些厲害的技術來解決這些挑戰:

  • 解決「不在線就不能用」的問題:Keet 使用了 Blind-paring 和 Blind-mirror 技術,訊息或檔案可以先加密存到其他節點,等朋友上線時再處理。
  • 檔案可以一直存取:檔案會加密存放在某些節點,就算發送者離線,接收者還是可以下載。
  • 多設備同步很簡單:Keet 讓用戶用一組助記詞創建身份(ID),可以讓多個裝置共享聊天紀錄,也能刪除或編輯自己發的訊息。

解決「不在線就不能用」的問題

讓我們來看看 Blind-paring 和 Blind Mirror 的概念。

Blind-Paring 是一種透過加密技術來管理加入聊天室請求的方法。具體過程如下:

  • 請求保存:當使用者 A 想要加入某個聊天室時,這個請求會被加密並保存到某個 peer 上。
  • 管理者批准:當聊天室的管理者 B 上線時,可以對這個請求進行簽名批准。
  • 使用者加入:當使用者 A 上線時,經過批准的請求會允許 A 加入聊天室。

這些請求雖然保存在某個 peer 上,但這個 peer 並沒有 A 或 B 的金鑰,因此無法解密查看具體的請求內容。

Blind-Mirror 是 Blind-paring 的檔案版本。具體過程如下:

  • 檔案保存:當使用者 A 傳送了一個檔案後,這個檔案會被加密並保存到某些 peer 上。
  • 持續存取:即使使用者 A 離線了,這個檔案仍然能被其他人存取。
  • 隱私保護:保存檔案的 peer 沒有解密的金鑰,因此無法查看檔案內容。

這兩種技術都利用了加密技術來保護使用者的隱私和數據安全,確保即使數據保存在其他 peer 上,也無法被未授權的使用者查看。

解決多設備同步問題

在 P2P 架構中,每個 peer(節點)都是平等的。當使用者透過多個設備發送訊息時,如何確保這些訊息都屬於同一個使用者,並讓使用者能夠編輯或刪除來自不同設備的訊息呢?

Keet 借鑑了加密貨幣的技術,加入了 ID(身份)的概念。具體來說,Keet 使用了 24 個助記詞來創建一個唯一的身份(ID)。這些助記詞就像是一組密碼,能夠幫助識別和驗證使用者。

  • 身份識別:當使用者在不同設備上發送訊息時,這些設備都會使用相同的 ID 來確認身份。這樣,即使使用不同的設備,系統也能知道這些訊息來自同一個使用者。
  • 訊息管理:使用者可以編輯或刪除來自不同設備的訊息,因為所有訊息都與同一個身份(ID)相關聯。

總結

雖然 P2P 聊天 App 一開始會讓人感覺有些不方便,但 Keet 的新技術已經讓它更穩定、更好用。如果你想試試看更私密又安全的聊天方式,不妨下載 Keet 試試看!

我還建立了一個叫 「Taiwan 🇹🇼 用 Keet 了」的群組,歡迎來一起討論: 👉 點這裡加入


資訊公開:我目前負責 Keet Mobile 客戶端的開發,對架構設計有一些了解。Keet 使用的很多元件都是開源的,你可以在 https://github.com/holepunchto 查看,或看看我整理的 Awesome-pears,裡面有更多 P2P 應用程式喔!

對相關技術感興趣的朋友,也歡迎參考徵才訊息,歡迎 React Native 開發者加入。

· 7 min read

使用 Macbook Air M2 已一年,除了使用系統內建功能外,還得安裝一些便捷程式以提高使用效率。在此順道紀錄目前使用的應用程式。 延續去年的設定,做了一些改動。

半自動安裝

# xcode 命令行工具
$ xcode-select --install
$ brew install android-studio balsamiq-wireframes brave-browser dropbox fava gnupg gnu-sed hiddenbar itsycal java logseq microsoft-edge nvm ollama raycast slack starship steam surfshark the-unarchiver visual-studio-code yarn zsh

· 4 min read

先記錄下來手邊使用的工具,才有機會從繁雜中歸納出簡單的使用規則。

更新一下手邊常用的設備。

主要裝備

  • 💻 Apple Macbook Pro 13 M2 16GB RAM, 512GB SSD,作業系統:14.3

  • 📱 Sharp AQUOS Zero 6, Android 13, 6", Snapdragon 750G

  • 🎧 SHOKZ OPENRUN S803 (備用:SoundCore Liberty 3 Pro, Sony WI-1000)

  • U2F (兩步驟驗證): Ubikey 5 NFC, Ledger Nano S+

· 8 min read

遠端工作五年多,少了通勤,卻多了一些時間可以出門走走。且隨著世界的變化,未來的趨勢,我也開始嘗試許多不同的敗家投資。

雖然以下內容看似都是在花錢,但內在的邏輯是:身邊圍繞著自己喜歡的人事物,讓你每次接觸時都感到愉悅。常保身心健康也是對自己,對家人最好的投資。

此外,我覺得並不是買下來的東西才是投資。 有些東西你沒有購買,但是你也投資了充足的時間去研究,查看,最後得出不購買的決定。 這些都是投資的過程。

上次的投資敗家回顧直接更新在這一年的投資 (2022)

· 6 min read

Imgur

pie showData title 2021 消防機關水域救援統計 "浮屍": 312 "自殺": 211 "翻船": 112 "失足": 109 "戲水": 49 "垂釣": 37 "工作": 34 "其他": 26 "潛水": 17 "交通事故": 8 "戲水(浮具)": 6 "救人": 5

最近天氣炎熱。到水邊消消暑是很熱門的選擇。但是隨之而來在水域活動發生意外,而需出動救援的新聞也層出不窮。我很好奇到底是怎麼樣的狀況需要出動水域救援?救援的結果如何?使用 SUP / 獨木舟這樣的浮具親水,是否一樣危險?

於是我找到了政府開放資料平台上的「消防機關水域救援統計」。這邊可以取得各年份的救援統計資料。目前最新的資料只更新到 2021 年份,因此使用此資料進行統計(注意這份統計資料呈現的是在政府 2020 後宣告開放山林海域的狀況)。 (因為使用的圖表問題,手機版網頁需要橫著看,才會顯示分類細目。)