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