系列 · 練習之道
可驗證公平的數字占卜:承諾—揭示密碼學如何讓電子起卦自證清白
擲三枚實體銅錢,公平性不證自明:錢離了你的手,剩下的交給重力,無人——包括你自己——挑選結果。數字起卦的難處在這裡:無論它的隨機數生成器實際上多麼誠實,你看不見它。一個應用原則上可以在你顯得焦慮時端出溫和的卦,在你興致平平時端出戲劇性的卦來留住你——而這一切看上去與偶然毫無分別。
對多數軟體,這只是個質量問題;對一件冥思法器,這是根基問題。一卦值得省思,前提是這個符號確實是落到你頭上的——而不是被任何人的演算法按"你該聽什麼"替你挑出來的。所以六門法器不請求信任,而是採用密碼學裡的承諾—揭示協議,讓每一次起卦的任何操縱都在事後可以被查出。
核心思路:先封緘,後行事
承諾—揭示的結構如同一隻火漆封緘的信封。事情開始之前,一方先寫下自己的那份內容,封好,把封緘的信封交給對方;等對方行動完畢,才啟封。封緘證明內容早已固定;時序證明它不可能是看了對方的行動之後才寫的。
密碼學的封緘物是雜湊函式——這裡用 SHA-256。它把任意輸入變成一段定長指紋,對我們要緊的性質有兩條:其一,單向——看到指紋,推不出輸入;其二,實踐上無碰撞——沒人能造出第二個輸入對上同一指紋。因此,公佈一個秘密值的雜湊,等於把自己鎖定在這個秘密上,同時對它一字不洩。
協議逐步走一遍
在六門起卦時,事情按這個次序發生:
一、伺服器承諾
儀式開始前,伺服器生成一個隨機值,稱為伺服器種子,並把它的 SHA-256 雜湊——承諾雜湊——先行發給你;種子本身保密。此刻,伺服器對這一卦的全部貢獻已經鎖死:日後種子若有一字之改,雜湊便對不上,而雜湊在你手裡。
二、你注入熵
你逐次點選擲幣,每次互動的精確時機——毫秒級——連同裝置熵,匯成客戶端種子。這一步的意義有兩重。在儀式上,它讓這一卦確屬於你:你的手、你的此刻、你不可復現的節奏參與塑造了結果,正如實體銅錢一樣。在密碼學上,它堵住最後的漏洞:伺服器無法預知你的點選時機,也就不可能預先挑一個能把你引向特定結果的種子。
三、結果由確定性運算匯出
銅錢的值由一次 HMAC(帶金鑰的雜湊)算出,輸入是伺服器種子、客戶端種子與本次佔問的唯一編號:
result = HMAC-SHA256(server_seed, client_seed + cast_id)
輸出的位元組按一條固定、公開的規則對映為一整卦的十八個錢面:六擲,每擲三枚,和數為 6、7、8 或 9,與實體三錢法分毫不差。此步之中不存在任何"選擇":兩個種子與佔問編號一經給定,卦象完全確定——而兩個種子,沒有任何一方能夠獨自控制。
四、伺服器揭示
爻既已成,伺服器公開伺服器種子。至此你手中齊備:擲前的承諾雜湊、擲後揭示的種子、你自己的客戶端種子,以及結果。
親手驗一卦
驗證只問兩個問題,皆可機械核對:
伺服器守約了嗎? 對揭示的伺服器種子做一次 SHA-256,與擲前收到的承諾雜湊比對。相符,即證明種子在你觸屏之前已經固定。
結果確由種子匯出嗎? 用揭示的種子、你的客戶端種子與佔問編號重算 HMAC,按公開規則對映,與你收到的爻比對。
寫成一頁明文,驗證長這樣:
已知:
承諾雜湊 = 9f2c41...a8 (擲前收到)
伺服器種子 = 71e0bd...3c (擲後揭示)
客戶端種子 = 448a19...e5 (來自你的互動)
佔問編號 = c_0192xyz
核對一: SHA256(伺服器種子) -> 9f2c41...a8 相符
核對二: HMAC-SHA256(伺服器種子,
客戶端種子 + 佔問編號) -> 對映爻值: 7 8 9 8 8 7
記錄爻值 : 7 8 9 8 8 7 相符
每一卦都永久儲存這組三元組,平臺的驗真頁會替你復算兩項核對——但要點恰恰是你不需要我們的頁面:任何語言、任何機器上的任何一個 SHA-256 實現,都會得出同一個答案。位元組對映的完整規範,關於頁有連結。
這對數字儀式為何要緊
工程之下有一個安靜的義理。占卜傳統向來看重隨機時刻的完整性——蓍草默數,銅錢當眾落地。隨機性是儀式的擔保:符號來自你意圖之外,而這正是它能作鏡子的原因——它照見的是你未曾選擇去看的東西。至於一擲如何化為省思——本卦、變爻、之卦——可看變爻指南。
一個可以被引導的數字卦,哪怕出於善意,也會以最壞的方式——無形地——毀掉這份擔保。承諾—揭示把骰子重新放回眾目之下。它同時也在防平臺自己:日後任何產品壓力都無法悄悄讓卦"更抓人",因為每一卦都是可審計的記錄,任何偏離都會以雜湊失配的形式浮出水面。
這一切並不使卦變得靈驗——本來也無人許諾靈驗。密碼學不能讓一卦為真;它能做到的,是讓這一擲乾淨——在你的問題與你的答案之間,可證明地無人插手——於是你在卦裡讀出的一切,都出自你的省思,而非他人的經營。
擲一卦,然後查它
理解承諾—揭示的最好方式,是先跑一遍再審一遍。帶一個真實的問題去六門起卦頁,擲前記下承諾雜湊,讀畢開啟驗真面板,看兩項核對逐一通過。前後一分鐘,此後每一次數字起卦的質地都會不同:不是信任,而是比信任更好的東西——不再需要信任。