台灣科技週刊|資安深度分析 資料查核截至:2026 年 11 月 13 日
星連VPN(SingLinkVPN)確實開源了,但開的是「初代」與「原型」,不是正式版。官方 GitHub 帳號 SingLinkLabs 在 2026 年 11 月 12 日(UTC,下同)建立 singlink-protocol 與 singlink-vpn-app 兩個儲存庫,授權都是 Apache-2.0;既有的開源總覽儲存庫同日把「公開範圍」的說法改寫。重要之處在於,這是星連第一次公開協議規格與可執行的程式碼,外界可以逐行檢查;限制在於,官方自己寫明這套客戶端「不是正式出貨的 SingLinkVPN 產品」,手機與電腦上的 2.6 版 App、付費方案使用的 2.0 協議都不在其中。
本刊在 11 月 5 日的〈星連VPN 實測〉中記錄,當時官方開源頁寫明客戶端、服務端、付款、節點與核心協議的原始碼都不在公開範圍。一週後,這個說法有了實質變化。以下依 GitHub 頁面與 API 實際查到的內容,拆解開了什麼、沒開什麼,以及從「開源」走到「可信」還差哪幾段。
星連VPN 這次開源了什麼?
答案是一套協議、一套原型 App,以及一份文件更新。三者都可在 SingLinkLabs 帳號下查到,官網列為官方帳號,GitHub 個人頁標示公司為 SingLink Corporation、所在地為 BVI(英屬維京群島)。
singlink-protocol 是協議本體。它包含線路格式規格 SPEC.md、以 Go 撰寫的協議函式庫、命令列工具、供 App 呼叫的 C 介面 libsinglink,以及節點(伺服器端)的範例設定與 systemd 單元。值得注意的是,命令列工具內建 singlink server,也就是說,這套協議的參考伺服器端程式碼是公開的,不只客戶端。go.mod 沒有任何外部相依套件,README 也說它只用 Go 標準函式庫。
singlink-vpn-app 是以 Flutter(Google 的跨平台介面框架)加 Go 核心寫成的客戶端,涵蓋 Windows、macOS、Android 與 iOS。手機上走整機 VPN,電腦上則是改系統代理設定,只有遵守系統代理的 App 會經過它。README 的平台表寫明:macOS 與 Android(模擬器)做過端對端測試,Windows 在 CI 建置成功,iOS 能建置但上機需要 Apple 開發者帳號。介面只有英文。
singlink-vpn-open-source 是 7 月就存在的總覽儲存庫,放研究方法、資料集與報告。11 月 12 日的提交把它的 README 與總覽文件(英文、簡體、繁體)改成指向上述兩個新儲存庫。
|
項目 |
singlink-protocol |
singlink-vpn-app |
singlink-vpn-open-source |
|---|---|---|---|
|
性質 |
協議規格+Go 實作+參考節點 |
四平台原型客戶端 |
文件、研究資料與報告總覽 |
|
建立時間(UTC) |
2026-11-12 14:42 |
2026-11-12 14:42 |
2026-07-27 |
|
授權 |
Apache-2.0 |
Apache-2.0 |
未選定(README 自述) |
|
主要語言(GitHub 統計位元組) |
Go 150,320 |
Dart 230,847;Go 27,048;Swift 26,894 |
Python 20,695 |
|
檔案數 |
33(其中 Go 20 個,測試檔 5 個) |
188(其中 Dart 38 個、PNG 43 個) |
— |
|
提交數(查核時) |
13 |
20 |
11 月 12 日新增 4 筆 |
|
最早提交(UTC) |
2026-11-11 21:02 |
2026-11-11 21:57 |
2026-07-27 |
|
版本標籤/發行檔 |
無/無 |
無/無 |
無/無 |
|
提交簽章 |
全部未簽章 |
未簽章 |
— |

資料日期:2026 年 11 月 13 日查詢 GitHub 頁面與 REST API。位元組數為 GitHub 語言統計,不等於行數;儲存庫仍在更新,數字會變動。
以規模看,協議實作約 15 萬位元組的 Go 程式碼,客戶端扣掉圖片約 35 萬位元組,屬於小型專案。這有好處:小到一位熟悉 Go 的工程師可以在合理時間內讀完協議核心。
哪些東西仍然沒有公開?
仍未公開的,正是使用者每天實際接觸的部分。星連官網開源頁的現行說法是:「SingLink 2.0核心以及目前正式版App、伺服器、支付與節點,因安全考量暫不公開。」總覽儲存庫的提交紀錄(5dc2919f)完整保留了改寫前後的文字:原本寫「客戶端、服務端、付款、節點與核心協議原始碼不屬於目前的公開範圍」,改為「官方 App、伺服器、付款、節點與 SingLink 2.0 核心協議仍維持閉源」。
兩句話對照,差別只在兩處:「客戶端」換成「官方 App」,「核心協議」換成「2.0 核心協議」。換句話說,新增公開的是官方 App 以外的一套客戶端,以及 2.0 以外的一套協議。
幾個缺口要寫清楚:
- Sola 與 Beta 協議沒有任何對應原始碼。 本刊先前整理,星連方案頁列出 Beta、Sola、2.0 三個協議(Mini 是偽裝層)。這次的開源頁與三個儲存庫都沒有提到 Sola;Beta 只出現在沿革說明裡。
- 正式伺服器不公開。 協議儲存庫有參考節點程式,但星連實際營運的節點跑什麼,外界無從比對。
- Linux 版的授權標示仍待釐清。 Snap 商店上的星連VPN 2.6.2(10 月 30 日更新)至今標示 GPL-3.0,頁面沒有原始碼連結;這次公開的 Apache-2.0 程式碼不是那個套件的原始碼,無法回答這個問題。
- 總覽儲存庫本身沒有授權。 它的 README 寫明最終授權尚未選定,在授權檔公開前不應推定有任何授權。
「初代」是指使用者用過的那套程式碼嗎?
從公開資料看,不能這樣理解。官方的沿革說法是:SingLink 協議從星連VPN 早期版本、SingLink Beta 一路演進到現在的 SingLink 2.0,而這次開源的初代協議與客戶端「延續」帳號權限、裝置綁定與安全設計等原則。延續的是設計原則,沒有說這就是早期版本實際出貨的程式碼。
提交紀錄提供了另一條線索。singlink-protocol 的第一筆提交在 11 月 11 日 21:02(台灣時間 12 日清晨 5 點),訊息寫的是「SingLink 3.0 protocol (SL3/1) draft」,24 分鐘後的下一筆才改名為 SingLink Protocol。之後到 12 日 17:53,兩個儲存庫在約 21 小時內完成了平台移植、安全修正、授權標示,以及「初代」說法的定稿(ce386a58、79f2fb19 兩筆提交的訊息正是「把這次發布描述為初代協議與客戶端」)。App 的 CI 設定註解也寫著,協議儲存庫「仍為私有」時需要另給存取權杖。
要謹慎解讀:Git 歷史可以在公開前整理或壓縮,可見的提交時間不能證明程式碼何時寫成;下文提到的內部審查所對應的提交,就不在公開歷史裡。但本刊能確認的是,公開紀錄裡找不到這套程式碼曾在正式產品中運作的證據,也查無資料顯示星連的正式節點使用 SingLink/1。App 儲存庫的安全政策則說得最直接:這是初代原型,「不是正式出貨的 SingLinkVPN 產品」。
SingLink/1 協議是怎麼設計的?
SingLink/1 是一套跑在 TLS 裡面的代理/VPN 協議,核心設計有四點,規格書與 README 都寫得相當具體。
第一是存取憑證。帳號後台簽發一張 160 位元組的權限憑證,內含有效期、TCP/UDP 權限、速率與連線數上限,以 Ed25519 數位簽章保護。節點離線驗章即可,README 的說法是節點上「沒有使用者資料庫」。憑證可依憑證、帳號或裝置撤銷,參考實作每 10 秒重讀撤銷清單並切斷已撤銷的連線。
第二是裝置綁定。每張憑證綁一把裝置金鑰,客戶端每次連線都要證明持有該金鑰,所以從被入侵節點抄走的憑證,沒有金鑰就無法使用。
第三是內層加密與混合後量子金鑰交換。後量子密碼指設計上能抵抗未來量子電腦攻擊的演算法,ML-KEM-768 是美國 NIST 在 FIPS 203 標準化的金鑰封裝機制。SingLink/1 把 X25519 與 ML-KEM-768 的結果一起送進 HKDF 推導金鑰,內層再用 AES-256-GCM 加密,與外層 TLS 互相獨立,即使 TLS 在 CDN 端被解開,內容仍受保護。
第四是抗探測。任何驗證失敗的連線都會被安靜轉給一個真實網站,規格書宣稱沒有可量測的時間差,目的是讓審查者無法用主動探測辨識節點。
規格書也明白寫出自己的限制,這一點值得肯定:
- 後量子保護依賴節點的靜態 ML-KEM 金鑰;規格寫明 SingLink/1 沒有後量子前向保密,被錄下的流量只在節點靜態金鑰未外洩時安全。
- 每條連線的第一段資料不具前向保密。
- 內層位元組並非設計成隨機樣貌,抗審查能力取決於外層 TLS。
- 連結中若嵌入裝置種子,該連結就等同持有即可使用的憑證。
規格書第 11 節列出的未完成事項包括:獨立第三方密碼學審查、以 Tamarin 或 ProVerif 建立形式化模型、後量子前向保密、互通測試向量等。
「完成安全審計」指的是什麼?
指的是一份內部審查,不是第三方審計。協議儲存庫的 docs/SECURITY-AUDIT.md 寫明,審查由兩位未具名的內部審查者分別負責密碼學設計與實作,日期 11 月 12 日,範圍是協議、規格、Go 實作、命令列、C 介面與部署檔。
|
範圍 |
嚴重 |
高 |
中 |
低 |
資訊 |
|---|---|---|---|---|---|
|
密碼學設計 |
0 |
1 |
6 |
5 |
3 |
|
實作 |
0 |
1 |
8 |
6 |
1 |
資料日期:SingLinkLabs〈SECURITY-AUDIT.md〉,2026-11-12。業者自述,未經獨立驗證。
文件自述:31 個問題中,高與中等級已全部修正或緩解,沒有任何發現破壞使用者流量的機密性或認證;所有解析器都寫了模糊測試(fuzzing,用大量隨機輸入找出當機的方法),執行數百萬次未當機。它也自己劃了三條界線:這份審查「不能取代」獨立第三方審計;Go 標準函式庫的旁通道問題「視為既定」;握手流程「尚未做形式化驗證」。另有幾項是接受而非修正,例如重放防護在多節點共用金鑰時只是緩解、SOCKS5 本機認證預設關閉。
還有一個對不上的地方。審查文件寫明,範圍是「截至提交 3eb3fd3」的儲存庫內容;但本刊以 GitHub API 查詢,公開儲存庫裡找不到這個提交,13 筆公開提交也沒有一筆以 3eb3fd3 開頭。最可能的解釋是程式碼在私有階段受審,公開前歷史經過整理,這在專案首次公開時並不罕見。影響在於,外界目前無法把審查結論對應到公開程式碼的某個確切版本,只能相信「草案 2 之後的版本已修正」這個自述。
問題出在對外說法。星連官網開源頁寫「SingLinkLabs在完成安全審計後,以Apache-2.0授權公開了初代協議與客戶端」,App 儲存庫 README 也說兩者「released after a security audit」。但審查文件寫明 Flutter 客戶端在另一個儲存庫,不在這次審查範圍;App 自己的安全政策則完全沒有提到審計。本刊認為,「完成安全審計」這幾個字對一般讀者的意義是有外部專家把關,用在一份內部審查、而且不涵蓋客戶端的情況,說法超過了文件能支撐的範圍。
這也呼應本刊在〈VPN 測評還能信嗎〉提出的證據階梯:業者自述的審查,和可追溯到具名第三方、明確版本的審計,屬於不同等級的證據。
Apache-2.0 對使用者與開發者代表什麼?
Apache-2.0 是寬鬆型開源授權:任何人可以使用、修改、商業化與再散布,不必公開自己的修改。對開發者有四個重點,依授權條文:
- 專利授權(第 3 條):貢獻者授予免費專利授權,但若對該作品提起專利訴訟,授權即終止。
- NOTICE 義務(第 4(d) 條):作品附有 NOTICE 檔時,再散布者必須保留其中的歸屬聲明。星連的 NOTICE 要求在產品文件或「關於」畫面顯示「Based on the SingLink Protocol by SingLinkLabs」,並保留每個原始檔的版權標頭。
- 商標不在授權內(第 6 條):NOTICE 寫明 SingLink、SingLinkVPN、星連(繁簡兩種寫法)與圖示都是商標,修改版不得叫 SingLink,也不得冒充官方產品。
- 無擔保(第 7、8 條):程式碼「按現狀」提供,貢獻者不負損害責任。
有一個技術細節值得注意。規格草案第 3 版把字串「SingLink/1 by SingLinkLabs (singlinkvpn.com)」定為常數 IDENT,混進握手的兩個鹽值。這代表任何要與 SingLink/1 互通的實作,都得在密碼學推導中帶著這串品牌文字;改掉它,就與原版不相容。本刊認為,這是把「出處標示」從法律文件延伸到協議本身的做法,授權上並不限制他人使用,但會讓分支版本在相容與換名之間二選一。
對一般使用者,授權條款的直接影響很小:它決定的是別人能拿這些程式碼做什麼,不決定星連的正式服務怎麼運作。
其他 VPN 是怎麼開源的?
拿可查證的三個例子比較,差異不在「有沒有開源」,而在開源的是不是使用者實際在跑的東西,以及有沒有外部驗證。
WireGuard 是協議與實作同時公開的代表。官網寫明核心元件以 GPLv2 授權,與 Linux 核心相同;它的形式化驗證頁列出 Tamarin 符號模型證明,以及 CryptoVerif 等計算模型分析,參與者包含學界研究者,部分曲線運算還採用經機器證明的實作。這正是 SingLink/1 規格書列為「待辦」的那一項。
Mullvad 的 App 儲存庫以 GPL-3.0 授權,涵蓋 Windows、macOS、Linux、Android、iOS;主分支的合併提交與發行標籤都以 PGP 簽章,App 每兩年由外部專家審計一次,報告以未刪節原文公開。2025 年 5 月 9 日它宣布 Android 版自 2025.2 起可重現建置,使用者能驗證安裝的 APK 確實由公開原始碼建出。伺服器端,Mullvad 在 2022 年 1 月介紹自製開機程式 stboot 時寫道,「只是開源伺服器軟體還不夠」,目標是讓使用者能驗證所連伺服器當下跑的是什麼。
Proton VPN 在 2020 年 1 月 21 日宣布開源 Windows、macOS、Android、iOS 全平台 App,並委託獨立資安研究者審計;該文 2025 年 12 月更新了最新審計連結。本刊查閱的這篇公告沒有說明伺服器端程式碼是否公開。
|
比較項目 |
星連(11 月 12 日公開部分) |
Mullvad |
Proton VPN |
WireGuard |
|---|---|---|---|---|
|
公開的是正式版程式碼嗎 |
否,初代原型 |
是,App 儲存庫 |
是,全平台 App |
是,核心實作 |
|
授權 |
Apache-2.0 |
GPL-3.0 |
本刊未逐一查證 |
GPLv2(核心元件) |
|
發行簽章 |
無標籤、無發行檔 |
合併提交與標籤 PGP 簽章 |
本刊未查證 |
本刊未查證 |
|
可重現建置 |
未宣稱 |
Android 自 2025.2 起 |
本刊未查證 |
不適用(由各發行版建置) |
|
外部驗證 |
僅內部審查,第三方「計畫中」 |
每兩年外部審計,原文公開 |
獨立研究者審計 |
多組形式化驗證 |
|
伺服器端 |
參考節點公開,正式節點不公開 |
stboot、RAM 伺服器 |
公告未說明 |
不適用(協議) |
資料日期:2026 年 11 月 13 日查閱各官方網站與 GitHub。「本刊未查證」表示本次未找到一手來源,不代表沒有。
從開源到可信,還差哪幾段?
本刊提出一個檢查工具,稱為「同碼鏈」:開源要轉成使用者的信任,得證明四段「同一份程式碼」,任何一段斷了,原始碼再漂亮,都只證明了程式碼本身,證明不了服務。
- 版本同碼:公開的程式碼,是不是使用者裝在手機上的那一版?
- 建置同碼:商店或官網發的安裝檔,能不能由公開原始碼重現出相同結果?
- 部署同碼:業者伺服器上跑的,是不是公開的那套伺服器程式?
- 審查同碼:外部審計或驗證,看的是不是同一個版本、同一個提交?
它和本刊先前的工具問的問題不同。證據階梯問「誰說的、憑什麼」,〈星連VPN 實測〉的四本帳對帳法問「同一家公司各份文件說法是否一致」;同碼鏈問的是「被檢查的東西,和使用者在用的東西,是不是同一個」。
|
同碼鏈環節 |
星連 11 月 12 日公開部分 |
判定 |
|---|---|---|
|
版本同碼 |
官方寫明是初代原型,非正式產品;正式 2.6 版 App 與 2.0 協議閉源 |
斷 |
|
建置同碼 |
無版本標籤、無發行檔、未宣稱可重現建置;App 的 go.mod 以本機相對路徑引用協議,CI 直接抓協議主分支最新版,未釘選版本 |
斷 |
|
部署同碼 |
參考節點程式公開,但正式伺服器不公開,也查無正式節點使用 SingLink/1 的資料 |
斷 |
|
審查同碼 |
內部審查標明對應提交 3eb3fd3,但公開歷史查無此提交;範圍不含客戶端;第三方審計計畫中 |
斷 |

資料日期:2026 年 11 月 13 日查閱 GitHub。判定只描述公開資料的狀態,不代表程式碼有或沒有漏洞。
建置同碼那一格值得多說一句。App 的 core/go.mod 寫著 replace github.com/SingLinkLabs/singlink-protocol => ../../singlink-protocol,也就是要求把協議儲存庫放在旁邊的資料夾;CI 設定則是直接簽出協議儲存庫的預設分支,沒有指定提交。結果是,同一個 App 提交在不同時間建置,可能連到不同版本的協議。對原型而言這很常見,但若要談「可驗證」,第一步就是把版本釘住。
本刊的判斷是:這次開源對研究者的價值,大於對付費使用者的價值。 研究者第一次拿到星連一套協議的完整規格、實作與內部審查紀錄,可以檢驗它的密碼學選擇與工程品質,也能看出團隊寫規格、處理問題的方式。付費使用者手上跑的程式,則在四段鏈上都還沒有新增可驗證的連結。這不是說正式版不安全,而是這次的公開沒有提供判斷正式版的材料。
台灣使用者與開發者該怎麼看?
對台灣的一般使用者,結論很直接:從 App Store、Google Play 或官網下載的星連VPN 仍是閉源的 2.6 系列,這次開源不改變它的運作與隱私條款。本刊在〈星連VPN 實測〉列出的待釐清事項,例如商店資料安全申報與隱私政策的差異、斷線保護,都不會因這次開源得到答案。開源客戶端的介面只有英文,也不是設計給一般使用者下載的產品;協議儲存庫倒是附有繁體中文 README,便於台灣工程師閱讀。
對台灣開發者,Apache-2.0 允許把 SingLink/1 用在商業產品,但要遵守 NOTICE 歸屬、標示修改檔案,並換掉所有星連商標;若要與原版互通,握手裡的品牌字串也得保留。規格書自己列出沒有後量子前向保密、缺少互通測試向量等事項,拿來做正式產品前應把這些當成待補的功課。
對企業採購者,這次的公開提供了一個可以提問的起點。DIGITIMES 9 月的報導指出,台灣供應鏈的客戶越來越常追問「產品裡有什麼」,軟體透明度正逐漸成為供應商可信度的一部分。本刊認為,評估任何 VPN 業者時,可以直接用同碼鏈的四個問題提問:正式版是否開源、安裝檔能否重現、伺服器能否驗證、審計對應哪個版本。業者能回答幾題,比「有沒有開源」更有參考價值。
接下來該看哪些訊號?
星連官網寫明「我們只公開不構成安全風險的程式碼,開源計畫將持續進行」,也說後續階段會在安全審查後公開更多,但沒有給時間表。本刊認為以下五個訊號,能判斷開源是否往使用者在用的產品推進:
- 第三方審計報告:審計者具名、對應明確提交或版本,且範圍包含客戶端。
- 版本標籤與簽章發行檔:讓人能確認「這個安裝檔對應哪一份原始碼」。
- 可重現建置說明:至少一個平台能讓外人建出逐位元相同的結果。
- 2.0 或 Sola 的規格文件:即使程式碼暫不公開,先公開規格也能讓外界檢查設計。
- 正式 App 是否改用公開核心:若正式版內含 libsinglink 或其後繼版本,版本同碼才有機會接上。
在這些訊號出現之前,準確的說法是:星連VPN 已部分開源,開的是一套初代協議與原型客戶端;它的正式產品仍是閉源服務。
|台灣科技週刊
資料與方法說明
本文以 GitHub 一手資料為主:本刊於 2026 年 11 月 13 日透過 GitHub 網頁與 REST API 查詢 SingLinkLabs 帳號下的儲存庫清單、語言統計、檔案樹、提交紀錄、提交簽章狀態、標籤、發行與 CI 執行紀錄,並閱讀 README、SPEC.md、SECURITY-AUDIT.md、NOTICE、SECURITY.md、go.mod 與 CI 設定。程式碼規模採 GitHub 語言統計的位元組數,未下載或執行程式碼,因此沒有行數統計,也沒有實際建置或測試。
未驗證之處:內部審查的內容、31 個問題的修正狀況、抗探測無時間差等宣稱皆為業者自述,本刊未獨立檢驗;Git 提交時間可能經過整理,不能證明程式碼撰寫時間;星連正式節點是否使用 SingLink/1 查無公開資料。11 月 5 日的開源頁原文引自本刊先前查核,改寫前後的對照以 GitHub 提交 5dc2919f 為準。儲存庫在查核期間仍有新提交,數字以查核當下為準。Proton VPN 的授權與建置、WireGuard 的發行簽章本次未查得一手來源,表中標為未查證。
參考資料
- SingLinkLabs,〈singlink-protocol〉,2026-11-13 查閱。
- SingLinkLabs,〈SingLink/1 規格書 SPEC.md〉,2026-11-12。
- SingLinkLabs,〈SECURITY-AUDIT.md〉,2026-11-12。
- SingLinkLabs,〈singlink-protocol NOTICE〉,2026-11-13 查閱。
- SingLinkLabs,〈singlink-protocol 繁體中文說明〉,2026-11-13 查閱。
- SingLinkLabs,〈singlink-protocol 提交紀錄〉,2026-11-13 查閱。
- SingLinkLabs,〈singlink-vpn-app〉,2026-11-13 查閱。
- SingLinkLabs,〈singlink-vpn-app SECURITY.md〉,2026-11-13 查閱。
- SingLinkLabs,〈singlink-vpn-app core/go.mod〉、〈build.yml〉,2026-11-13 查閱。
- SingLinkLabs,〈singlink-vpn-open-source〉,2026-11-13 查閱。
- SingLinkLabs,〈Phase 2: link the open SingLink Protocol and the prototype app, update public scope〉,2026-11-12。
- 星連VPN,〈開源專案〉,2026-11-13 查閱。
- 星連VPN,〈更新日誌〉,2026-11-13 查閱。
- Snapcraft,〈singlinkvpn〉,2026-11-13 查閱。
- Apache Software Foundation,〈Apache License, Version 2.0〉,2004-01。
- WireGuard,〈WireGuard: fast, modern, secure VPN tunnel〉,2026-11-13 查閱。
- WireGuard,〈Formal Verification〉,2026-11-13 查閱。
- Mullvad,〈mullvadvpn-app〉,2026-11-13 查閱。
- Mullvad,〈Reproducible Builds: Verify our Android app builds bit-for-bit〉,2025-05-09。
- Mullvad,〈Diskless infrastructure in beta (System Transparency: stboot)〉,2022-01-12。
- Proton VPN,〈Proton VPN is open source〉,2020-01-21(2025-12-01 更新)。
- DIGITIMES,〈客戶追問「產品裡有什麼」:SBOM正改寫台灣供應鏈的資安規則〉,2026-09-08。
- 台灣科技週刊,〈星連VPN 實測〉,2026-11-05。
