說實話,我第一次看到這三個縮寫擺在一起,以爲它們是同一道題的三個答案,比誰快、比誰安全,選一個就完事。後來才明白,把它們放一起排名,就像問"錘子、螺絲刀、扳手哪個最好用",答案取決於你手上是釘子、螺絲,還是螺栓。
它們各自解決的,其實是三個被混爲一談的問題。
第一個問題是:我想證明某件事爲真,但證明它要用到的數據很敏感,我不想給你看。銀行想向監管說明"這筆交易合法、授權無誤、沒有重複",卻不願把金額和收付款方攤在賬本上。這種證明爲真、但不攤開數據的需求,是 ZK 的主場。它的妙處在於,保證來自數學,而不是"我答應你我不看";拿到驗證密鑰的監管或審計能覈驗結論,卻碰不到底層數據。代價也實在:它擅長證明數據的性質,卻不擅長讓好幾方在誰都沒有完整數據時一起算,而且比明文更喫算力。第二個問題不一樣:數據我根本不能解密,可我還得在它上面做運算。兩家機構做券款對付,各自把成交條款加密提交,結算系統要在不解密任何一方的前提下判斷雙方說的是不是同一筆,然後才交割。這是 FHE 的領域,能在密文上直接算、算出密文結果。聽着像魔法,但它現在很慢,比明文運算慢好幾個數量級,做不了實時高頻結算。(Zama 在 2025 年底證明了它在特定場景能落地,可"特定場景能用"離"機構級規模結算能用"還有距離。)它還有個更麻煩的地方:傳統 FHE 裏,一把密鑰同時管着"能看"和"能動",沒法只給審計一個只讀權限,這在受監管的世界裏很彆扭。第三個問題又不同:我要跑一段邏輯,速度得快,還不能讓提供機器的人偷看裏面在算什麼。銀行想在共享設施上跑自己的私有撮合引擎,不想讓對手方和設施方看到邏輯本身。這時候上 TEE,把代碼關進處理器裏的一個硬件黑箱,外面誰都讀不到。它最大的好處是快,接近原生性能,複雜邏輯、大數據都扛得住。但它把信任換了個地方:你得信芯片廠商。硬件出漏洞、供應鏈被動手腳,機密性就崩了(Intel 的 SGX 就出過被記錄在案的問題)。而且它是黑箱,你只能拿到"這段代碼確實跑過"的認證,卻沒法獨立驗證它到底幹了什麼。對講究"可證明合規"的機構,這個依賴挺要命。