AI 應用 / 資訊安全

API key 可以貼給 AI 嗎?|存進 Mac 鑰匙圈,讓程式自己去拿

我之前跟客戶說「現在的 AI 不會洩露密碼」,查證後發現這句只對一半。這篇修正那句話,並把我自己保管金鑰的做法攤開:key 不貼進對話,存進鑰匙圈,程式要用時自己去拿。

封面:咪卡把一把金色鑰匙從筆電的對話泡泡旁拿開,放進打開的黃銅保險箱

這篇在講什麼

用 AI 寫程式、接 AI 客服、串自動化,遲早會碰到 API key。最直覺的做法是把 key 貼進對話,讓 AI 自己填進去。這篇講為什麼不要這樣做,以及在 Mac 上怎麼讓 key 不經過對話:key 存進鑰匙圈,程式要用時自己去拿,再加上花費上限,萬一外洩也能把損失壓低。

適合誰
  • 用 AI 寫程式或接 AI 服務,被要求「請提供 API key」的人
  • 已經把 key 貼給過 AI,想知道要怎麼補救的人
  • 幫客戶規劃 AI 工具、要交代金鑰怎麼保管的顧問與接案者
你可以帶走什麼
  • 兩行終端機指令:把 key 存進鑰匙圈、再讓程式讀出來
  • 一段可以直接貼給 AI 的提示詞,讓它照這套規矩寫程式
  • 三道防線:花費上限、一個專案一把 key、懷疑外洩先停用
一頁總結:會漏的三個地方是貼進對話、AI 寫進程式、印在畫面上;三步驟是存進 Mac 鑰匙圈、程式自己去拿、交代 AI 不准讀 key;三道防線是設花費上限、一個專案一把 key、懷疑外洩先停用;貼過的 key 當作已外洩,馬上換新的
一頁總結

一、「AI 不會洩露密碼」,這句話我要修正

我之前跟客戶說過一句話:

「現在的 AI 不會洩露密碼,但人類自己很容易洩露密碼,所以人類就會甩鍋給 AI。」

回頭查證之後,這句話只對一半。

後半句有數據撐著。Verizon 每年的資料外洩調查報告(DBIR),2024 年版寫 68% 的外洩事件有人為因素,2025 年版改了計算方式,數字是 60%。這個數字算的是「事件裡有沒有人的參與」,被釣魚、密碼重複用、貼錯地方都算,不是專算密碼外洩,但足以說明人為因素在外洩事件裡佔了大宗。

前半句講太滿了。AI 也會讓密碼外洩,而且有些管道是你貼出去的那一刻就決定了。

這段是我自己講錯的地方放進來,是因為我猜不少人也這樣跟別人說過。

二、AI 怎麼讓 API key 外洩:三個常見管道

管道發生什麼事為什麼麻煩
貼進對話key 留在你的對話紀錄裡,也會送到服務商那邊處理,存多久要看各家政策你沒辦法確定它被刪乾淨,刪掉對話也一樣
AI 寫進程式你把 key 給了 AI 又沒交代清楚,它可能直接把 key 寫進檔案,接著被推上 GitHub一旦進了 git 紀錄,事後刪檔案,歷史版本裡還在
印在畫面上AI 測試時把 key 印出來確認,畫面上的文字又被記進對話你沒貼,它自己讀到了
輪播卡:咪卡拿放大鏡檢查,API key 會從三個地方漏出去:貼進對話、寫進程式、印在畫面上
三個會漏的地方

第二個管道有一份參考數字。資安公司 GitGuardian 的 2025 年報告,抽查約兩萬個有開 GitHub Copilot 的程式庫,6.4% 至少洩漏過一組密鑰,全體公開程式庫的平均是 4.6%。這是「有開 Copilot 的程式庫」的統計,只能說兩者一起出現,不能證明是 AI 造成的。但至少可以說:用 AI 寫程式,不會自動比較安全。

所以我現在的講法改成:

人很容易洩露密碼,AI 也會,而且貼給 AI 的密碼你沒辦法確定收得回來,所以乾脆不要讓 AI 知道。

三、讓 API key 不經過對話:三個步驟

原則只有一句:key 放在 AI 看不到的地方,程式要用時自己去拿。

Mac 有兩個現成的東西剛好做這件事:

  • 安全視窗:輸入時畫面只顯示圓點或什麼都不顯示,你打的東西不會出現在對話裡。
  • 鑰匙圈(Keychain):Mac 內建的密碼保險箱,key 加密存在裡面,程式要用再來拿;第一次有新程式要拿時,Mac 可能會跳出視窗問你允不允許。
輪播卡:咪卡關上放著鑰匙的保險箱,金色管線接到代表程式的齒輪,對話泡泡被隔開,裡面看不到 key
key 存在鑰匙圈,對話裡看不到

第一步:把 key 存進鑰匙圈

打開「終端機」(按 Command+空白鍵,搜尋「終端機」),貼這行:

security add-generic-password -a "$USER" -s OPENAI_API_KEY -w

按 Enter 之後它會請你輸入密碼,這時把 key 貼上。畫面不會顯示任何字,這是正常的。如果它請你再貼一次確認,就再貼一次,按 Enter 就存好了。如果出現「已經存在」的錯誤,代表這個名字之前存過,要更新就在指令最後的 -w 前面加 -U。

OPENAI_API_KEY 是這把 key 的名字,換成你自己好記的就行,例如 CLAUDE_API_KEY。

為什麼 -w 後面要空著:Apple 的說明文件寫,-w 放在最後不給值,系統會跳出提示讓你輸入,這也是它推薦的用法。如果把 key 直接打在指令裡(-w "sk-..."),那串 key 會被記進終端機的歷史紀錄。網路上不少教學是後面那種寫法,照抄要小心。

第二步:程式要用時,從鑰匙圈讀出來

security find-generic-password -a "$USER" -s OPENAI_API_KEY -w

這行會把 key 印在終端機上,所以是給程式在背後用的。不要在 AI 讀得到的地方跑它,包括 AI 的對話,也包括 AI 工具自己開的終端機。

第三步:把規矩交代給 AI

前兩步的指令你不用自己寫進程式。下次讓 AI 寫要用到 key 的程式,先貼這段:

API key 已經存在 Mac 鑰匙圈,名稱是 OPENAI_API_KEY。 程式要用時從鑰匙圈讀取。 不要叫我把 key 貼進對話,不要把 key 印在畫面上、寫進記錄檔或任何檔案。 你自己不要執行讀取 key 的指令,需要測試時寫好指令讓我自己跑。 如果真的需要 .env 檔,先把 .env 加進 .gitignore 再建立。

中間兩句是重點。少了「不要印在畫面上」,AI 測試時可能把 key 印出來確認,又回到上面的第三個管道;少了「你自己不要執行」,能在你電腦上跑指令的 AI 工具,還是有辦法去鑰匙圈把 key 讀出來。

用 Claude Code、Codex 這類 AI 工具的人要多注意一件事這類工具能在你的電腦上執行指令。鑰匙圈防的是 key 被寫進對話和檔案,它擋不住一個有權限執行指令的程式。所以上面那句「你自己不要執行讀取 key 的指令」一定要留著,Mac 跳出授權視窗時,也看清楚是哪個程式在要再按允許。
個資也能用同一套做法

四、就算 API key 外洩,也要把損失壓低

存進鑰匙圈是第一道。後面再加兩道,萬一哪天還是漏了,傷害也能壓低。

防線怎麼做要注意的地方
花費上限OpenAI 後台可以幫組織或專案設每月上限;Anthropic 可以幫工作區(Workspace)設每月上限OpenAI 要選「到上限就停止」,不然只會通知不會擋;Anthropic 的預設工作區不能單獨設
一個專案一把 key官網客服一把、自動化一把、測試一把哪把出事就只停那把,其他照常跑
懷疑外洩先停用第一個動作是到後台把那把 key 刪掉或停用,再產一把新的存回鑰匙圈先停 key 再改程式,順序不要反過來

如果你已經把 key 貼給過 AI:把那把 key 當作已經外洩,照上表第三列,到後台停用、產一把新的,這次存進鑰匙圈。

平台也有幫你擋一部分。GitHub 預設會擋下它認得出來的密鑰被推上公開程式庫;Anthropic 跟 GitHub 合作,Claude 的 key 如果出現在公開程式庫,會被自動停用。但 GitHub 無法辨識所有格式的密鑰,這些是最後一道網,不能當第一道。

金鑰為什麼要留給本人

五、只用網頁版聊天,根本不需要 API key

如果你只是在 ChatGPT、Claude 的網頁或 App 裡聊天,用的是訂閱帳號,不需要任何 API key。

會碰到 key 的,是你開始讓 AI 幫你寫程式、接客服、串自動化的時候。所以 AI 跟你要 key 的那一刻,就是該停下來想一想的時候:它要的其實是「程式能用到 key」,這件事用鑰匙圈就做得到。

第一次申請 API key 的人

六、網路上常見的 API key 保管建議,哪些可以照做

常見建議我的判斷
不要把 key 貼進 AI 對話照做。OpenAI 與 Anthropic 的官方說明都要你把 key 當密碼保管
存鑰匙圈時把 key 寫在指令裡(-w "sk-...")不要照抄。改成 -w 後面空著,讓系統跳提示
在 ~/.zshrc 加一行,每次開終端機自動把 key 讀進環境變數方便但有代價。在終端機裡跑的 AI 工具也讀得到,我建議程式要用時才讀
.env 檔一定要加進 .gitignore照做。推上 GitHub 之後再刪,歷史紀錄還在
設花費上限、一個專案一把 key、外洩先停用照做。

給你的 AI 讀的技術備忘(人可以跳過)

  • 存入:security add-generic-password -a "$USER" -s <名稱> -w(-w 置尾不給值會提示輸入,Apple man page 標為 recommended)
  • 更新既有項目:加 -U
  • 讀取:security find-generic-password -a "$USER" -s <名稱> -w(只輸出值,供程式擷取,勿在對話中執行)
  • 程式內讀取:以子程序呼叫上行指令取得字串,不寫入檔案、不 log
  • 若必須用 .env:先寫 .gitignore(.env、.env.*),範本檔用 .env.example 只放欄位名
  • 外洩處置:先在供應商後台 revoke,再重新產生、存回鑰匙圈,最後檢查帳單與用量紀錄

來源

追蹤我,分享一人公司 + AI 員工的應用技巧