距離310枚比特幣,你只差一步
2018年10月3日,一名匿名土豪在Reddit論壇上,發起了一個名為「比特幣挑戰(Bitcoin Challenge)」,宣布將310枚比特幣藏於下圖,只要破解密碼,誰就可以轉走圖中隱藏的310枚比特幣(按照比特幣最近幾日的平均價格,價值約1500萬人民幣),瞬間走上人生的一個小巔峰。
帖子發布後不到幾分鐘,各大新聞媒體網站和比特幣論壇爭相轉發。這個挑戰就像一針雞血,讓近日「死氣沉沉」的幣圈再次喧鬧起來,不論是小白還是技術大咖都加入了這浩浩蕩蕩的「奪寶」大軍。
看這架勢,不禁讓我想起了兩部電影《頭號玩家》和《達·芬奇密碼》的情節。在《頭號玩家》中,超級富豪(詹姆斯哈利迪)臨終前宣布,它在遊戲中設計了一個彩蛋,只要獲得三把鑰匙,就可以解開彩蛋,成為綠洲的繼承人。而在《達·芬奇密碼》中,哈佛大學宗教符號學教授羅伯特·蘭登在破案時,發現達·芬奇畫作中隱藏一系列神秘的符號,只要解開了這些符號,就能了解到歷史上許多未解之謎的真相。
而如今,區塊鏈和比特幣這個結合了加密學、密碼學等等先進技術的行業正在悄悄改變人們的生活。電影中的虛擬劇情,正悄然在比特幣的世界發生。
310枚比特幣的解謎挑戰
這次比特幣解謎挑戰一共分為4關,第一關0.1BTC,第二關0.2BTC,第三關0.31BTC,第四關310BTC。
第一關和第二關在帖子發布後的1天和5天後相繼被打破,而最難的一關也在今天10月11號,被人解破。目前第二關和第四關的解答者還沒有放出攻略,那我們先來看看第一關的破解思路。
首先,將圖片用GIMP打開,然後新建一黑一白兩個新圖層,並將「提取通道」設置為「Alpha」,最後將色階調至253到254中間,設置完成後會發現整個圖片只剩下了一行線與一個二維碼,這條線應該是對應一個2進位數字,而二維碼是一個網址。我們掃描這個二維碼會得到一個網址 https://bitcoinchallenge.codes/register-310/。進入這個網址之後,我們可以與發布者進行交流。
https://bitcoinchallenge.codes/register-310/ (二維碼自動識別)
然後,在最初的圖中,有一條比較明顯的線索,最明顯的一個線索,18個數字的九宮格。與此同時,在表格正上方,有一串隱藏的字元(圖中紅色圈處),OCT 2 2018,也就是20181002。如果將這一串數字作為一個Shift Key,將18宮格中的數字套進去,我們會得到下列這一串數字。我們可以很清楚的看到第一行有6個310,對應著310BTC。
除開第一行310的彩蛋(對應310枚比特幣),第二行第三行的構成形式很像16進位。我們將16進位轉化為10進位之後,可以得出下圖的12個數字。
12代表著什麼?相信許多資深的幣友已經察覺到了,助記詞的數量!用數字一一對應助記詞表(https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt)對應的助記詞。可以得出:
將助記詞輸入錢包地址(1446C8HqMtvWtEgu1JnjwLcPESSruhzkmV)之後,就可以提取第一關的獎勵0.1BTC啦!當然早就已經被一位解謎高手取走啦!
至於第二關和第四關是怎麼破解的,讓我們靜靜等待解謎高手們之後放出來的教程。
歷史上的比特幣解謎圖片
這並不是第一次比特幣解謎競賽,接下來,讓我們來回顧一下過往的幾次比特幣解謎大賽。
2015年,@coin_artist從莎士比亞的愛情長詩《鳳凰與斑鳩》中獲得靈感,創作了畫作《Torched H34R7S》,並將5個BTC的秘鑰藏在其中。
原作者將比特幣私鑰信息分兩部分藏在圖片中,一部分藏在四周的火焰中,一部分藏在右下角的彩帶中。
在2018年2月,終於被一對程序員夫婦所破解,下面是破解思路:
1. 將《鳳凰與斑鳩》中的一段長為24位的詩句「beauty, truth and rarity(美麗、真相和珍貴)」變形為「b34u7y, truth, and rarity」,然後加在錢包52位的明文私鑰前,合成76位的字元串。將這個字元串轉換為一個長為608(76*8)的二進位數字。
2. 將608位二進位數字與「變形秘鑰」做亦或運算得到一個新的608位二進位數字。
3. 設置一個長為6位的「變形秘鑰」011010按長短隱藏在這六條紅絲帶中。
4. 每個火焰有四個屬性:外焰顏色、內焰顏色、寬窄、長短。每個屬性的兩個特徵都可以用二進位0或1表示: 紅色外焰:0 黃色外焰:1 紫色內焰:0 綠色內焰:1 寬:0 窄:1 短:0 長:1。
將152個火焰按順序轉換為608位二進位數字後,用變形秘鑰轉換為原本的608位二進位數字,然後將二進位數字變為「b34u7y, truth, and rarity+52位明文私鑰」的字元串。減去前面的「b34u7y, truth, and rarity」就得到了私鑰。
除此以外,還有一些正在進行中的解謎遊戲,例如New Money, 下圖是一名洛杉磯藝術家用10萬塊樂高拼成的作品,其中含有價值約1W美元的多種加密貨幣。
(遊戲地址:https://andybauch.com/exhibitions/new-money)
有興趣的朋友可以嘗試一下。
通用的解謎手法
接下來,給大家科普一下幾個簡單的解謎手法,萬一就用上了呢!!!
1. 行列像素點置亂方法,
該方法將原圖中的像素信息進行了重新排布——置亂。通過一一對應的關係可以恢復原來的圖像,此時的秘鑰即為行列變換的映射向量Mchange和Nchange。
簡單的MATLAB程序如下:
clc,clear all,close all
Lena = imread(Lena512.bmp);
figure;imshow(Lena)
title(原圖)
[M,N] = size(Lena);
Rm = randsample(M,M);
Mchange = [1:1:M;Rm];
Rn = randsample(N,N);
Nchange = [1:1:N;Rn];
%打亂行順序
Lena (Mchange(1,:),:) = Lena (Mchange(2,:),:);
figure;imshow(Lena)
title(行加密後圖像)
%打亂列順序
Lena (:,Nchange(1,:)) = Lena (:,Nchange(2,:));
figure;imshow(Lena)
title(列加密後圖像)
%列變換還原
Lena (:,Nchange(2,:)) = Lena (:,Nchange(1,:));
figure;imshow(Lena)
title(列解謎後圖像)
%行變換還原
Lena (Mchange(2,:),:) = Lena (Mchange(1,:),:);
figure;imshow(Lena)
title(解謎後圖像)
2. Base64位解謎
最簡單的加密方式,沒有密鑰,這種方式只要讓別人拿到你的密文,就可以直接解謎,只能用來迷惑,一般情況下不單獨使用,因為真的並沒有什麼卵用~可以和其他加密方式混合起來,作為一層外部包裝。
import base64data = "abc"
#加密
m = Base64.encodestring(data)
print m #得到一個base64的值
#解謎
date = Base64.decodestring(m)
3. 進位之間的轉換。
比特幣的視覺謎題說到底還是基於程序和代碼的。那麼基於二進位的0和1兩個數字就顯得尤為重要。因此2進位,10進位,和16進位之間的轉換必然會涉及的。
在解謎過程中,我們也要注意不要被固有的邏輯所局限,有時候跳出思維框架,或者暮然回首,就能發現那個在燈火闌珊處的答案。
想要了解更多,歡迎各位關注我,加我v,拉你進社群交流!
推薦閱讀:
TAG:比特幣Bitcoin | 貨幣 |