═══ 如何當預言家(但不說出你的預言) ═══ 2025 年 12 月 21 日 · 閱讀時間約 4 分鐘 ┊ 純文字版 [1] 大部分人的直覺是:要證明自己說過什麼,就得「公開說出來 [2]」。但真的非得這樣嗎 ? 想像這個情境:你覺得你朋友 A 跟她的男友 B 一定很快就會分手,大概撐不過三個月。 但如果你現在就講出來,場面會超級尷尬 [3],更糟的是 A 可能會為了你證明你是錯的而 硬是不分手。但如果你什麼都不說,等他們真的分手了才說「我早就知道」,你又會被說 是在馬後炮。 有沒有一種方法,既能留下預測的證據,但又不用現在就當烏鴉嘴呢? 當然有,為你介紹雜湊演算法(hash function)。 ◆ 雜湊演算法?​ 簡單來說,雜湊演算法可以把任何資料──文字、檔案、甚至是莎士比亞全集──轉換成一串 「固定長度的亂碼」。我們把這串亂碼叫做「Hash 值」或「Hash」。 Hash 有三個重要的特性: • ➡️ 單向性:光憑 hash 無法回推原本的內容。 • 🦄 獨特性:內容只要改一個字,hash 就「完全不同」;不是差一點點而已,是整串完 全都不一樣。 • ⚓ 穩定性:同樣的內容必定會產生同樣的 hash。 ◆ 實作:如何當預言家(但不說出你的預言)​ ・📝 第一步:寫下預測並加密語​ 首先,寫下你的完整預測,然後加上一個隨機密語。例如: 我預測 A 和 B 會在三個月內分手,蛋餅真好吃 這個密語很重要喔,如果是預測簡單的事情的話(例如「明天會下雨」),別人有可能用 暴力法把所有常見的預測都算一遍 hash,看哪個符合。但加上「蛋餅真好吃 [4]」這種莫 名其妙的話,別人就很難破解了。 ・💻 第二步:算出 hash 值​ 接下來,用某種雜湊演算法(比如 SHA256)算出這段文字的 hash 值。我們就會得到以下 亂碼: db77338108358d283acdaf185118a82c625f626b163ca21b0326d98959173cf3 ・📢 第三步:公開 hash 值​ 把這串 hash 值公開。寄給朋友、寫在部落格上 [5],或是發在社群媒體,但別說出原始 訊息喔! 這是我的預言: db77338108358d283acdaf185118a82c625f626b163ca21b0326d98959173cf3 三個月後揭曉! 看到 hash 的人完全無法知道你在預測什麼。但你已經證明了你此時做了這個預測,且無 法更改內容。 ・✅ 第四步:驗證預測​ 三個月後,A 和 B 真的分手了。這時你公開完整訊息: 我預測 A 和 B 會在三個月內分手,蛋餅真好吃 這時大家可以自己驗證,把這段話丟進同樣的 SHA256 算法。複製以上的訊息,貼進下面 的文字框驗證看看(你也可以實驗看看,只要訊息有一點點不一樣,hash 值就會完全不一 樣): 輸入任何文字: [ ] [ ] [ ] [ ] 如果算出來的 hash 跟三個月前公開的那串一模一樣,你就成功證明了「你早就知道」! 因為 hash 的特性,要找到另一個恰好會產生同樣 hash 的訊息幾乎是不可能的,這就是 你確實做了預測的鐵證。 ◆ 優雅地預測未來​ 這個方法的厲害之處,在於它的風險不對稱:如果猜對了,你有證據證明自己早就看穿一 切;如果猜錯了,反正沒人知道原文是什麼,也沒辦法打你臉 [6],就當作沒這回事吧! 而且,因為沒有公開預言內容,所以不用擔心預言本身會影響到事件結果。更棒的是,當 你三個月跳出來說「我早就算到了」,除了可以展示你的先見之明,還能順便炫耀 [7]你 懂 SHA256 這種聽起來很專業的技術。 ── 連結與圖片 ── [1] https://wiwi.blog/blog/hash-prophecy.txt [2] https://wiwi.blog/blog/dont-share-your-plan.txt [3] https://wiwi.blog/blog/silence.txt [4] https://wiwi.blog/blog/ignore-your-neighbors.txt [5] https://wiwi.blog/blog/blogblog-club.txt [6] https://wiwi.blog/blog/marconi-was-wrong.txt [7] https://wiwi.blog/blog/countersignaling.txt