跳至主要内容

如何當預言家(但不說出你的預言)

· 閱讀時間約 4 分鐘

大部分人的直覺是:要證明自己說過什麼,就得「公開說出來」。但真的非得這樣嗎?

想像這個情境:你覺得你朋友 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 這種聽起來很專業的技術。