現代人的生活都有使用到數位簽章(https://en.wikipedia.org/wiki/Digital_signature)。當你在進行網路購物的時候,網站背後是因為有數位簽章才能順利的逛網站。每天忙著寫 iThome 鐵人賽資訊科技作文比賽文章,這個網站背後得以運作順暢,也是需要數位簽章。有興趣可搜尋關鍵詞「certificate authority (CA)」。
又或是,比如說,我的個人網站有用 HTTPS,這個背後也是數位簽章的應用。有興趣了解可搜尋 SSL/TLS Certificates 和 Certificate Authority (CA)。另外像是一般生活常見的情境,下載軟體、發送 email 電子郵件等等也是如此。可以說數位簽章已經成為生活中不可或缺的一部分。
有些同學可能對數位簽章比較「無感」,那是因為一般人並不會特別研究,也不會特別在意背後的運作。這就有點像,不是醫學或科學相關系所的同學,也不一定會去額外花力氣、花時間,很仔細的研究每個器官、細胞怎麼運作。如果是對區塊鏈技術本身,保有好奇心的非一般人的同學,可能會想進一步了解數位簽章,甚至密碼學演算法。是很自然的事。畢竟學習區塊鏈技術的道路上,不可能不談密碼學。
平常生活中,需要用「簽名」或是「蓋章」的目的是什麼?其中一大目的是確認身份,利用簽名和蓋章,以確認這份文件確實就是你本人簽的,同時也表達了同意(consent),表示你同意和認同這份文件的內容。
舉例來說,當你去一家店要進行刷卡消費時,會感受到同意這個概念的存在。理想上,店員要在刷卡機上顯示出即將準備進行交易的這個金額數字,要請客人核對和確認,金額和他心裡想的是一致之後,得到客人的明示同意,下一步才會是感應信用卡。現在的店員,很有可能會說出,比如說,麻煩卡片放這邊(邊說邊指著刷卡機螢幕),類似這種的台詞。在客人還沒親眼看到交易金額顯示在刷卡機螢幕前,就要求客人的卡片直接放在機台螢幕上做感應。也就是在未取得消費者同意這個金額數字正確,確認消費者同意(自身願意)要執行這筆消費的情況下進行交易。
在這裡舉例,想表現的是,一般人可能現實生活中曾經遇到店員,他們可能對同意這個概念的理解不同。同一個概念,每個人的認知程度可能會有差異。有些店員可能為了加速結帳,在還沒有得到客人對這筆交易金額要刷多少錢的同意之下,就直接進行交易。當然這不能怪已經被要求八面玲瓏的店員們。可能員工訓練的時候,就已經沒有特別強調同意交易的這個步驟。甚至可能只有要求結帳要快速。而這一段落希望達到的目標是,希望能用一些例子,加強一般人對於同意和不同意的概念的理解。
另一個常見的現實生活情境是,如果你去逛一些歐洲網站,每次造訪這些外國網站時,就會立刻跳出來視窗問你說,網站會蒐集你的資料,這件事情,「你同意嗎?」。針對資料隱私,你決定「不同意」或「不接受」,那麼就可以按下通常藏在角落,非常小的小字,表達「不同意」或「不接受」。
法國網站通常會寫的字是,"Continuer sans accepter",英文直譯是 "Continue without accepting",表達「不接受」。換句話說,請繼續瀏覽網站,但網站的資料蒐集,並沒有得到我的同意。不少歐洲人對於資料隱私這一點很敏感,他們對於資料隱私保護和資料處理的意識較高,所以經常會需要向使用者詢問和確認蒐集資料是否 OK。這也是一種常見的同意或不同意、接受或不接受(自己的意願)的概念的表現。這張截圖是造訪 Europe 1 網站的時候,會跳出來視窗詢問訪客,是否接受或同意網站蒐集資料的畫面。
區塊鏈中的同意和不同意,大概是怎麼運作?數位簽章是使用者在區塊鏈交易中表達同意或不同意的方式。你同意從你的 EOA(externally-owned account) 發出這筆交易。或者,更精確的說,你同意你所簽章的訊息,這個訊息所代表的內容。數位簽章可達到同意的效果,來確認使用者的意向(intent)。只有你才有那把私鑰(private key),只有你擁有的這把私鑰才能簽出能夠通過驗證(verification)的簽章。
以太坊區塊鏈的交易(transactions)本身就是資料(data)。數位簽章的課本或教材講義,經常會說要對一個訊息做簽章,這裡的訊息(message)就是指交易資料。訊息的傳送,需要確認這個訊息是否來自使用者你本人的意志,是否真的擁有你本人的同意,所以會需要有數位簽章。
細節來看,區塊鏈中的數位簽章,關鍵的兩個動詞,一個是「簽章 sign」、一個是「驗證 verify」。數位簽章的核心概念是,私鑰(private key)對資料做「sign (簽章)」,而公鑰(public key)可以「驗證(verify)」簽章(signature)。如果成功驗證簽章,代表這筆資料是由擁有私鑰的人所同意產生的。
以太坊區塊鏈中的數位簽章,使用的是橢圓曲線的數位簽章演算法,ECDSA 橢圓曲線的數位簽章演算法,是 Elliptic Curve Digital Signature Algorithm 的英文簡寫。可參考維基百科的介紹:(https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)
區塊鏈技術上,之所以「難」就是因為他「難理解」。甚至我們可以說區塊鏈之所以「難用」,就是因為他難理解。區塊鏈的所謂的難用,個人觀察其中一大因素就是因為他的密碼學應用被應用的很「明顯」。也就是說,使用者可以在剛開始接觸 Web3 產品時,就能立刻感覺得到的。例如,錢包的使用,居然要求要一個使用者去保管這個錢包的公鑰、私鑰。你會感覺到密碼學的「存在」。如果存在感很高的話,很大的可能,這個產品很難用。反觀,一般常見的好用的 Web2 產品和服務,事實上並不會讓你感覺到你今天有應用到「密碼學」。