周三下午三點,一個程序員意識到.gitignore根本擋不住密鑰泄露。他在本地機器上運行了一個常規的依賴掃描腳本,結果發現所有寫在.env文件里的數據庫密碼、支付接口密鑰,都以純文本形式躺在硬盤上。任何一個能讀取你項目目錄的工具,都能把這些密鑰一字不差地拖走。
更糟糕的是,一旦誤操作執行了git add .,這些明文密鑰就會被永久釘在GitHub的提交歷史里。即使刪掉文件、強行推送覆蓋,克隆過倉庫的人只要翻一翻舊提交,就能找到那段完整的連接字符串。這位自述為Ahmad Raza的開發者決定自己動手解決這個問題。
![]()
他發布了dotlock,一個用Go語言編寫的終端界面加密密鑰管理工具。與通用的文件級加密不同,這款工具鎖定的對象就是.env文件本身。設計思路上,加密后的.dotlock文件存儲在項目目錄里,但內容是一段不可讀的密文二進制數據,沒有私鑰的情況下毫無價值。
操作流程被壓縮到極簡:進入項目目錄,執行dotlock set DATABASE_URL,系統會以掩碼方式提示輸入密鑰值,完成后再用dotloc命令或dotlock ui命令啟動終端管理界面。所有加密操作依賴的底層原語是age加密協議,該協議使用X25519密鑰協商機制與ChaCha20-Poly1305認證加密算法,和資深安全工程師選用的標準一致。沒有任何主密碼派生過程,不請求云端服務,不發送遙測數據,整個流程百分之百離線。
在終端界面里,左側面板展示不同的配置環境,比如開發環境、預發布環境、生產環境,右側面板列出對應的密鑰鍵值對。所有密鑰值默認以掩碼形式顯示。按下v鍵會臨時顯示明文,但僅持續30秒,時間一到自動復原為隱藏狀態。部署前可以執行一次密鑰對比,檢查各環境之間有無遺漏的變量,避免應用啟動時報錯。
實現這個30秒自動隱藏功能的邏輯,被設計成不需要time.Sleep調用,也不需要額外的協程。工具內部定義了一個secretReveal結構體,里面包含鍵名、密鑰值字節切片,以及一個過期時間字段。這個過期時間的計算方式就是當前時間加上30秒。在每一次界面渲染刷新時,系統會檢查當前時間是否已經超過這個過期時間點,如果超過了,就把字節切片清零并清除顯示內容。
整款工具的終端界面基于BubbleTea框架構建,這個框架采用Elm架構模式,將應用抽象為模型、更新函數和視圖三個部分。每一個按鍵行為是一條消息,計時器觸發也是一條消息,更新函數接收消息后返回一個新的模型狀態。根據Ahmad Raza的描述,技術難點反而不在加密部分,age庫已經把流程封裝得足夠簡潔,真正的挑戰在于讓這個終端界面邏輯跑通。
安裝方式有兩種,一是直接用go install github.com/ahmadraza100/dotlock@latest命令拉取,然后執行dotlock init初始化、dotlock ui進入管理界面。二是去GitHub的發布頁下載預編譯好的二進制文件,Mac、Linux和Windows三個平臺都有對應的發行版本。完整的源代碼、架構說明文檔以及安全模型都已放在github.com/ahmadraza100/dotlock上公開。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.