應用密碼學

承諾方案

承諾方案是把猜測封進信封的數位版本:你現在對某個值承諾,稍後揭露,期間不能更改——但封好的信封不會向觀察者透露裡頭是什麼。它把一個動作拆成具約束力的「承諾」階段與可檢查的「揭露」階段。

兩項性質定義了它。隱藏性:承諾 c 不洩漏值 v 的任何資訊。約束性:你日後無法把 c 開成任何不同的值 v'。一個簡單的雜湊承諾是 c = H(v ‖ r),其中 r 是隨機致盲因子;揭露 (v, r) 後任何人都能重算並核對。這裡有個無法迴避的取捨——一個方案可以是完美隱藏且計算性約束,或計算性隱藏且完美約束,但無法兩者皆完美。雜湊承諾(大致上)是完美約束且計算性隱藏;Pedersen 則恰好相反。

承諾在區塊鏈中無所不在。承諾揭露式的投票與隨機性會先張貼雜湊、再揭露,使任何人都無法搶先得知他人的選擇;密封競標在截止前隱藏出價;機密交易對金額承諾;而多項式承諾——一位特化的近親——則坐鎮現代零知識證明與彙整的核心。致盲因子 r 至關重要:少了它,一個低熵的 v(譬如「是」/「否」或已知範圍內的價格)就能被直接從 c 暴力試出。

c = H(v || r)

沒有隨機 nonce 的雜湊承諾對小輸入空間並不具隱藏性——若 v 是是/否或已知範圍內的價格,攻擊者只需把每個候選值都雜湊一遍再比對。務必以高熵的 r 承諾 H(v ‖ r)。