ref: https://dlorenc.medium.com/improving-tofu-with-transparency-da674aa2879d
本篇文章要介紹的是一種名為 TOFU 的認證機制,其全名為 Trust-On-First-Use.
要探討這個機制前,作者先列舉一個情境
假設你人要到火車站去找一個名為 Alice 的人交換手提箱,你要如何於火車站正確的找到 Alice?
# Nothing
最基本的情況就是你看到每個人都詢問,你是不是 Alice,但是任何人都可以說謊假裝自己是 Alice,因此惡意攻擊者跟 Alice
一樣都可以輕鬆回答你「我就是 Alice」,顯而易見這種機制基本上沒有辦法幫助我們找到 Alice,也沒有辦法分辨到底眼前的人是惡意攻擊者還是 Alice。
一種改善的機制就是 PKI (Public Key Infrastructure),該機制的概念是
1. 有一個第三方服務會發行相關的 ID 證件,該 ID 證件難以偽造 (譬如 Certificate Authorities)
2. 你信賴這個第三方服務
所以你到火車站之後,每遇到一個人就要求對方出示其 ID,並且請第三方服務幫忙驗證這個 ID 證件是否合法,透過這種概念來找到到底誰是 Alice。
這種機制運作起來沒有問題,唯一的問題就是找到一個可信任的第三方服務相對複雜且困難。
有沒有一種相對簡單又有點有效的機制? 就是本篇要探討的 TOFU
假設情境改成,今天需要頻繁的到火車站去找 Alice 交換行李箱,這件事情會重複非常多次。這種情境下,我們可以
記住第一次遇到號稱自己是 Alice 的那個人,接下來每次都找該人交易。
簡單來說就是,相信第一次遇到的人,並且記住該人的狀態與面貌,接下來每次交易都直接尋找上次熟悉的面孔。
網路世界來說,一個非常知名使用 TOFU 的軟體就是 SSH。
SSH 使用者第一次連線到遠方 Server 時會相信自己連接到的是正確的 Server,同時將 Server 本身的指紋資訊給存入到本地快取。
因此接下來每次連接到該 SSH 的時候,就直接比較 Server 的指紋是否一致來確定是否連線。
這個機制聽起來很可怕,不過對於這種「很難預測第一次連線的 Server 是誰的狀態」的情境是滿堪用的,畢竟不容易一開始就被偽裝攻擊。
另外一個使用 TOFU 機制的概念就是 supply-chain security,假設你要透過 Packager Manager 來使用不同版本的 Package
這種情境下系統要如何信任每次抓到的 Package 都是正確的?
透過 TOFU 的機制將每個 Package 的 Hash 值都存放 local,這種情況下就可以去比對第二次,第三次下載的內容是否一致。
不過對於 CI 環境下,要一直維持 local cache 實在不容易,因此 Trust-On-First-Use 就會演化成另外一種 Trust-On-Every-Use.
文章後續還介紹 golang 生態系的 go get 是採用何種機制去信任每次下載的 library,對於這篇文章有興趣的不要錯過
「golang for」的推薦目錄:
- 關於golang for 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於golang for 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於golang for 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於golang for 在 How to create generic or global context in golang for new relic ... 的評價
- 關於golang for 在 【Go语言初学入门中文教学】For循环- GoLang, for p.5 的評價
- 關於golang for 在 Golang for EulerProject - Gist de Github 的評價
golang for 在 軟體開發學習資訊分享 Facebook 的最佳解答
NT 370 特價中
使用 MySQL 掌握 SQL 高階查詢的實踐課程,以及將使用 Java & Golang 連線到 MySQL & PostgreSQL
https://softnshare.com/sql-for-developers-mysql-java-go-postgresql/
golang for 在 軟體開發學習資訊分享 Facebook 的最佳解答
NT 330 特價中
在資料科學和自然語言處理中使用 Golang 的實驗
從這 13 小時的課程,你會學到
✅ 在資料科學中使用 Golang/Go
✅ 用 Golang 進行自然語言處理
✅ 用 Golang 建構簡單的 Web 應用程式(GoFiber)
https://softnshare.com/go-for-data-science-and-natural-language-processing-golang/
golang for 在 Golang for EulerProject - Gist de Github 的推薦與評價
package main. /*. import "fmt". import "time". */. var MAX int = 1e7. // const MAX = 1e8. var Prime []int. var Isprime = make([]bool, MAX+1, MAX+1). ... <看更多>
golang for 在 How to create generic or global context in golang for new relic ... 的推薦與評價
... <看更多>