隱私支付實作工作坊:從龍捲風現金到隱私池

Tornado Cash、Privacy Pool 等混幣器(Mixer)簡單入門

CC · COSCUP 2026

掃描取得今天的投影片

這場演講是什麼

看一看區塊鏈隱私支付的現況。

  1. 你會操作過一次混幣器。

  2. 看一下人們踩過什麼雷。

關於 CC

  • 2021~2024 開發零知識證明密碼學的應用

    • Semaphore: 通用匿名架構

    • MACI: 抗賄賂投票架構

    • ZkEVM: 改善區塊鏈驗算效率的技術

  • 現在做一些獨立研究:興趣包含區塊鏈相關的經濟研究、形式證明等。

  • 可以問我:以太坊 Ethereum 底層與密碼學

一場飯局

為什麼用隱私池?

%% fragment
flowchart LR
    ME(("👩 你的帳戶<br/>0xabcd…"))
    EX["🏦 交易所<br/>(KYC 看過你的護照)"]
    DEFI("🦄 Defi")
    NFT("🐵 NFT")
    ENS["🌐 ENS<br/>alice.eth"]
    DONATION("💝 捐款")
    POOL("Privacy Pools")
    NEW(("👩 新帳戶<br/>0x1234"))

    EX --> ME
    ME --> DEFI
    ME --> NFT
    ME --> ENS
    ME --> DONATION
    ME --> POOL
    POOL e1@==> NEW
    e1@{ animate: true }

混幣器原理

%% fragment
flowchart LR
    Pool["🌪️ 龍捲風現金"]
    D1(("😀 1"))
    D2(("😀 2"))
    D3(("😀 3"))
    W3(("🦸 3"))
    W1(("🦸 1"))
    W2(("🦸 2"))
    EX(("🏦 交易所"))
    D4(("👿 4"))
    W4(("🦸 4"))

    D1 -->|存款| Pool
    D2 -->|存款| Pool
    D3 -->|存款| Pool
    Pool -.->|提款| W3
    Pool -.->|提款| W1
    Pool -.->|提款| W2
    EX -->|遭竊| D4
    D4 -->|存款| Pool
    Pool -.->|提款| W4

2019 Tornado Cash 龍捲風現金

混幣器 + 白名單

%% fragment
flowchart LR
    Pool["🐟 隱私池 <br>🤨 ASP 管理白名單"]
    D1(("😀 1"))
    D2(("😀 2"))
    D3(("😀 3"))
    W3(("🦸 3"))
    W1(("🦸 1"))
    W2(("🦸 2"))
    EX(("🏦 交易所"))
    D4(("👿 4"))
    W4(("👿 4"))

    D1 -->|存款 ✅| Pool
    D2 -->|存款 ✅| Pool
    D3 -->|存款 ✅| Pool
    Pool -.->|提款| W3
    Pool -.->|提款| W1
    Pool -.->|提款| W2
    EX -->|遭竊| D4
    D4 -->|存款 ❌| Pool
    Pool ==>|怒退<br>(提款但暴露幣流)| W4

2025 Privacy Pools 隱私池 (ASP 審查,部分提款)

本日任務: Get in, Get out

flowchart LR
    A("💰 存款")
    B("⏳ 等待")
    C("🎯 提款")

    A ==> B ==> C

    style A font-size:28px
    style B font-size:28px
    style C font-size:28px

    classDef pulse fill:#f3e3dc,stroke:#993a31,stroke-width:2px,font-size:28px

本日使用: 2025 Privacy Pools 隱私池 (ASP 審查,部分提款)

理想上,等待時間最好是 一個月 以上。

進入隱私池

  • 模擬版 連結

    • 選擇連結錢包

    • 取得測試鏈的測試幣

  • 真實版(有錢包與以太幣者)

錢包(鑰匙圈)

flowchart LR
    AA("安裝錢包")
    A("💰 存款")
    B("⏳ 等待")
    C("🎯 提款")

    AA e1@==> A ==> B ==> C

    style A font-size:28px
    style B font-size:28px
    style C font-size:28px
    e1@{ animate: true }

    classDef pulse fill:#f3e3dc,stroke:#993a31,stroke-width:2px,stroke-dasharray:5 5,animation:mermaid-pulse 1.6s ease-in-out infinite
    class AA pulse

錢包(鑰匙圈)

  • 並不是管理你的錢

  • 而是管理你的私鑰

安裝流程

  • 到 ambire.com ,依照自己瀏覽器安裝擴展程式

  • 建立新帳戶 Create new account

  • 建立救援密語 Create Recovery Phrases

    • 要救援帳戶及資產使用

  • 設定解鎖密碼 Set Extension Password

    • 錢包在閒置時會自動鎖定

助記詞 Seed Phrases

私鑰是能產生巨大排列組合的資訊:可以是數字或文字、或助記詞。

密碼學利用「只有你知(Something you know)」的原理,保障資訊與資產安全。

存款 Deposit

flowchart LR
    A("💰 存款")
    B("⏳ 等待")
    C("🎯 提款")

    A e1@==> B ==> C

    style B font-size:28px
    style C font-size:28px
    e1@{ animate: true }

    classDef pulse fill:#f3e3dc,stroke:#993a31,stroke-width:2px,font-size:28px,animation:mermaid-pulse 1.6s ease-in-out infinite
    class A pulse

步驟

  • 連結網頁與帳戶:按 Connect Wallet

    • 選 Ambire (接著解鎖錢包)

    • 目的:能以該帳戶發送交易

  • 產生 Seed Phrase

    • 按 Continue with Wallet (需要錢包簽署兩次)

    • 下載救援密語

  • 按 Deposit

    • 輸入欲存款的金額,按 Confirm (錢包簽署交易)

  • 存款會在 Pending 狀態,等 ASP 審核通過

ASP 關聯集提供者

  • 關聯集(Association Set) :允許日後提款的白名單。

  • 關聯集提供者(Association Set Provider, ASP) :維護白名單的單位。

  • 怒退(Rage quit):被 ASP 拒絕,使用者可以提款但暴露幣流

等待 Wait

flowchart LR
    A("💰 存款")
    B("⏳ 等待")
    C("🎯 提款")

    A e1@==> B e2@==> C

    style A font-size:28px
    style C font-size:28px
    e1@{ animate: true }
    e2@{ animate: true }

    classDef pulse fill:#f3e3dc,stroke:#993a31,stroke-width:2px,font-size:28px,animation:mermaid-pulse 1.6s ease-in-out infinite
    class B pulse

思想實驗:匿名集(Anonymity set)有多大?

%% fragment
flowchart LR
    Pool["🐟 隱私池"]
    D1(("😀 1"))
    D2(("😀 2"))
    D3(("😀 3"))
    W1(("😀 1"))
    W2(("😀 2"))
    W3(("😀 3"))
    YOU(("😊 你"))
    YOUOUT(("😱 你"))

    D1 -->|存款| Pool
    D2 -->|存款| Pool
    D3 -->|存款| Pool
    Pool -.->|提款| W1
    Pool -.->|提款| W2
    Pool -.->|提款| W3
    YOU ==>|存款| Pool
    Pool ==>|提款| YOUOUT

    classDef danger fill:#f3e3dc,stroke:#993a31,stroke-width:2px,color:#281a03
    class YOUOUT danger

3 個人存款、3 個人提款——沒人猜得出哪筆對哪筆,這就是你的匿名集。接著你存款、馬上提款:這次池子裡只剩你一個人,存提款直接兜在一起,隱私瞬間歸零。

提款 Withdraw

flowchart LR
    A("💰 存款")
    B("⏳ 等待")
    C("🎯 提款")

    A ==> B e2@==> C

    style A font-size:28px
    style B font-size:28px
    e2@{ animate: true }

    classDef pulse fill:#f3e3dc,stroke:#993a31,stroke-width:2px,font-size:28px,animation:mermaid-pulse 1.6s ease-in-out infinite
    class C pulse

提款步驟

  • 按 Withdraw

    • 確認鏈、幣種

    • 選擇要提款的存款紀錄(PA-1 之類)

    • 提款地址:請用錢包產生全新地址

    • 金額可以部分提款。

    • 中繼者選項可以選預設的

    • 按 Review Withdrawal (再次檢查後,按 Confirm)

  • 等待零知識證明產出完成即可

提款的幕後機制

%% fragment
sequenceDiagram
    participant User as 使用者
    participant Relayer as 中繼者
    participant Pool as 隱私池(鏈上)

    User->>Relayer: 產生證明
    Relayer->>Pool: 送出交易(付 gas)
    Pool-->>Relayer: 手續費
    Pool-->>User: 提款金額(到全新地址)

發送交易需要以太幣,有暴露幣流風險。因此有中繼者(Relayer)的設計。

重要:不要使用舊地址當提款地址

不然就失去使用隱私池的意義了!

提款地址一定要是全新的

零知識證明的部分

  • 像是一個比較智慧的數位簽章
    • 知道私鑰的人才有辦法簽
  • 簽章 + 區塊鏈合約檢查提款資格
    1. 屬於存過款的一員但不揭露你是誰
    2. 有在白名單內證明你不是壞人
    3. 尚未提過款不然你可以重複提款

回顧

隱私池這個專案怎麼樣? -- 美的部分

  • 非托管:沒有人能凍結你的資金

  • 開源:任何人都可以審計程式碼

  • 選擇性揭露:可以在不揭露身份的情況下證明合規

  • 怒退保障:被 ASP 拒絕可以安全取回資金

  • 部分提款:不用一次提取巨大的金額(龍捲風現金沒這功能)

隱私池這個專案怎麼樣? -- 醜的部分

  • ASP 是中心化信任點:ASP 決定誰是「乾淨」的。但作惡能力有限。

  • 法律地位仍不確定:應該政府和我們一樣困惑

  • 工具需要一定技術門檻:小閃失可能喪失隱私保證

  • 費用: 0xbow 收存款 0.5% ,中繼者收提款 0.1% ,以太幣存款手續費大約台幣 10 元有找。

今天我們做了什麼

  1. 安裝了一個新錢包(Ambire),備份助記詞

  2. 連上 Privacy Pool,存入一筆 ETH

  3. 等待(示範用,實際上要更久)

  4. 用中繼者,把錢提到一個全新地址

從頭到尾走過一次「打斷幣流連結」的完整流程。

額外建議

  • 視需求用 Tor Browser 或 VPN 連線

  • 忌諱:就你最特別

    • 選擇常見的金額(0.1 ETH,不要奇怪的數字)

    • 提款盡量小額,不要超越一般存款金額

Takeaway

  • 存款:

    • 有沒有找對網頁,檢查鏈與幣種都正確。

    • 注意匿名集大小

  • 等待:請耐心以星期或月為單位等待

  • 提款:確認提款地址是全新的。提款之後避免再與舊的帳戶有任何互動。

請小心保管自己的私鑰與救援密語。遺失密語等於遺失資產。

資源

Q&A

延伸討論

麻雀雖小五臟俱全

混幣器可以

  • 技術上,有所有隱私類應用的基本設計。研究混幣器,就能看懂其他應用了

  • 看到所有區塊鏈上所有的矛盾

    • 完全無法追蹤的金流是什麼樣的世界?好處與壞處是什麼?

    • 隱私這個價值是否可以無限上綱?在北韓駭客面前如何取捨?

    • 是否存在一個完全不需要治理的工具?

    • 隱私池讓 ASP 主導審查。雖然有怒退功能,但我們把治理的真空全部推到 ASP 上。

工具本身也有風險:開發者被捕

Tornado Cash 不只是技術問題,也是法律問題。

  • 2022 年:美國財政部制裁 Tornado Cash 合約

  • 2023 年:開發者 Alexey Pertsev 在荷蘭被捕,判刑超過五年

  • Roman Storm 在美國被定罪

Ethereum FAQ

在開始之前:什麼是「鏈」?

  • 每條區塊鏈都是一本獨立的帳本——Ethereum、Bitcoin、Solana 互不相通。

    • 可以當成不同的電腦

  • 「EVM 相容」的鏈(Ethereum、Base、Arbitrum…)共用同一套合約執行環境,錢包、工具可以直接沿用

    • 想像不同的電腦,但一樣的作業系統

  • 非 EVM 鏈(Bitcoin、Solana…)有自己的一套規則,錢包、地址格式都不一樣

原生代幣 vs 合約代幣

原生代幣(ETH/SOL)是協議內建、用來付 gas;合約代幣(ERC20/SPL)是別人在這條鏈上發行的代幣,兩者不是同一回事。今天工作坊存入 Privacy Pool 的,是 Ethereum 上的原生 ETH。