主頁 > 區塊鏈 > 那些被一行代碼蒸發1個億的智能合約,形式化驗證了解一下? | 人物志

那些被一行代碼蒸發1個億的智能合約,形式化驗證了解一下? | 人物志

2020-09-15 06:39:01 區塊鏈



「人物志」為區塊鏈大本營(ID:blockchain_camp)著力打造的人物欄目,以「趣味而不失專業,可讀而不失深度」為宗旨,每期邀請區塊鏈領域的頂級專家和開發者就行業、投融資、開發、案例、專案實踐等展開探討。

作為以太坊生態的核心,智能合約這幾年發展迅速。最早的智能合約,可以追溯到1995年,由密碼學家尼克薩博首次提出。智能合約在多方參與、復雜交易的場景中有明顯優勢。


然而,近期隨著智能合約安全問題的頻繁出現,智能合約的劣勢也愈發明顯,包括智能合約如何對物體資產進行控制,從而保證其有效地執行合約;以及如何保證代碼完全反應合約方的意志而不出現漏洞等。這些問題所引起的漏洞,使DAO、Parity、BEC等著名專案的市值幾乎一夜歸零。


再加上智能合約一旦上傳即公開且不可更改,因此現在的區塊鏈專案,對于安全性的需求更加迫切。


針對這些安全問題,成都鏈安科技嘗試將原本應用于軍工領域的「形式化驗證」方法,應用于智能合約安全審計。形式化驗證(formal verification)是基于數學建模方法對系統進行描述,通過形式化驗證,開發者可以對程式的安全性事先進行審查,排除邏輯漏洞和安全漏洞,從而保證合約的安全。

關于形式化驗證的更多細節,近日,我們采訪了鏈安科技創始人/CEO楊霞,就形式化驗證的現狀、原理以及市場情況作了深入探討。


以下是與楊霞對話實錄。


偶然打開的區塊鏈新世界大門

區塊鏈大本營:我了解到你的主要身份是電子科技大學的教授,在從事區塊鏈之前有怎樣的人生經歷?

楊霞:我從本科到研究生到博士,一直都在電子科技大學,而且是一路保送過來的,有人說我這是「坐飛機」(笑),之后就順理成章的留校當老師了。2012年9月開始做形式化驗證;2013年,我在美國一所大學的國際級安全實驗室以訪問學者身份作業和學習了一年。

我為什么要做形式化驗證呢?原因在于,我之前一直研究嵌入式作業系統的安全保障技術,別人就問我你怎么證明你的系統是安全的?是不是得找一個方法來證明?于是我開始探索對系統安全性和功能進行證明的方法,于是發現了形式化驗證方法。其實形式化驗證本來是一個很冷門的領域,受眾范圍也沒那么廣,所以基本都是在高校和研究所里在研究。我也將此技術應用于航天、航空、軍事等領域的安全關鍵軟體中。

區塊鏈大本營:作為教師,從教育作業到一個區塊鏈企業的創業者,是出于怎樣的貧訓?

楊霞:我接觸區塊鏈是2016年著名的DAO系統安全事件,其實那個時候真的沒有太在意。不過我有一個朋友在搞區塊鏈,他跟我說你搞形式化驗證,能不能去驗證一下智能合約的安全,比如針對Dao系統的安全事件。我覺得挺有趣的就去試了一下。那時候我們還沒有自動化的工具,只能靠人工進行代碼的形式化描述,然后去證明。最后發現,形式化驗證方法應用于智能合約安全審計效果不錯。

然后我又找來了一個IBM的捐款智能合約(當時的合約不多),也驗證了一下,發現了一個「Unchecked Send回傳值」的漏洞。所以我們當時覺得,在區塊鏈領域,形式化驗證是大有作為的。在去年9月,萬向組織的第三屆全球區塊鏈峰會上,主辦方邀請我做了一個「智能合約形式化驗證」的主題演講,當時引起了大家的關注。

不過那個時候,我們還沒有做自動化的工具,要靠人工來做。但人也會犯錯,我就想如何提高自動化的能力,減少人工參與度,并且兼容更多區塊鏈平臺。這就是VaaS平臺建立的原因。

區塊鏈大本營:請簡單介紹一下VaaS這個平臺。

楊霞:VaaS(Verification as a Services)作為第一個同時支持EOS和以太坊區塊鏈的高度自動化形式化驗證平臺,具有驗證效率高、自動化程度高、人工參與度低、易于使用、支持多個合約開發語言等優點。

主要用于對智能合約進行安全審計,通過對這種「軍事級」的安全驗證,以提高區塊鏈生態系統的安全性,同時,達到有效控制漏洞風險的目的。VaaS平臺的“一鍵式”形式化驗證工具,可精確定位到有風險的代碼位置和風險原因,有效的驗證智能合約或區塊鏈應用的常規安全漏洞、安全屬性和功能正確性,從而提高其安全等級。相關研究成果已申請軟體發明專利5項。

揭秘形式化驗證技術

區塊鏈大本營:形式化驗證跟傳統互聯網安全公司的做法有什么不同?

楊霞:傳統的互聯網安全公司是「以攻促防」,而我們是直接從代碼自身安全角度出發,來防止不安全事件發生。舉個例子,就像一個是西醫,有病的時候給你治病,而一個是中醫,強調自身抵抗力的提升,自己身體更健康了,就很難生病了。

區塊鏈大本營:形式化驗證的原理到底是什么?

楊霞:形式化驗證是一種基于數學和邏輯學的方法。具體來講,在智能合約部署之前,對其代碼和檔案進行形式化建模,然后通過數學的手段對代碼的安全性和功能正確性進行嚴格的證明,可有效檢測出智能合約是否存在安全漏洞和邏輯漏洞。該方法可以有效彌補傳統的靠人工經驗查找代碼邏輯漏洞的缺陷。形式化驗證技術的優勢在于,用傳統的測驗等手段無法窮舉所有可能輸入,而我們用數學證明的角度,就能克服這一問題。

區塊鏈大本營:能舉個例子進一步說明一下嗎?

楊霞:通過對合約檔案和和代碼進行形式化的建模,通過數學推理和證明的方式驗證智能合約的功能正確性和安全屬性。可以發現代碼的邏輯漏洞和安全漏洞,彌補人工方式對邏輯漏洞查找的不足。


以近期頻發的溢位類安全漏洞屬性檢查為例,如檢查代碼

int8 c=a+b

是否存在溢位漏洞,下面展示對這行代碼的功能正確性和安全屬性的證明程序。

 
首先,我們對整數型別建模,定義形式化規則:

Int8.repr: Z -> int8

該規則通過截取純數學整數(取值范圍從無窮小到無窮大)的低8位數值得到一個8位長度的機器整數。然后寫加法運算的形式化規范,如下:

{a:int8,b:int8} // 

設定代碼執行的前提條件,保證a和b的型別是8位有符號機器整數;


{c = a + b;} // 

加法運算的原始碼程式;


{(int8.repr(a+b)) /\ ((Int8.repr (a+b)) = (a+b))} ; // 

設定代碼正確執行的后置條件。


其中,(int8.repr(a+b))描述,

是為了證明代碼的功能正確性是否滿足,即需要證明源代碼是對a和b進行求和而不是求差或任何其他運算邏輯,并且將運算結果轉換為int8型別。此外,需要對是否溢位的安全屬性進行證明,因此添加后置條件:

((Int8.repr (a+b)) = (a+b))

因為一旦

a+b>int8.max_singed 或

a+b<int8.min_signed 都將導致

(Int8.repr (a+b)) ≠ (a+b)。


最后,根據前置條件證明代碼的執行是否滿足上述后置條件。如果產生一個不可證明結果,說明程式功能不正確,或者存在溢位安全漏洞。然后根據證明結果,對源程式進行分析修改,然后再重新證明,直到證明通過為止。我們采用這種數學的證明方式將代碼形式化描述為公式,并對其屬性進行同樣對其他邏輯漏洞和安全漏洞進行證明,基于此原理,我們實作了自動化的驗證工具,能夠方便、快速地驗證出代碼的功能正確性和安全屬性。


巨頭來抄怎么辦?不怕!


區塊鏈大本營:形式化驗證平臺的競爭門檻是什么?如何防止被巨頭抄襲?

楊霞:一個是門檻比較高,其他人想進來的話可能也不是短期就能進來的,在形式化驗證領域,需要有多年的積累。

另外,我認為行業不排斥更多人進來啊,大家在里面都找到各自的位置,市場不是一家就能做完的,誰做的更好,誰做的更快,誰就能占據更多的會場份額。我們已經研制了高度自動化的區塊鏈形式化驗證平臺,申請多項專利,也跟知名企業開展了合作,例如比原鏈、布比、火幣等。我們對自己的產品有信心,只有高度自動化的智能合約安全審計才能保障審計的準確性和效率。


區塊鏈大本營:在這一領域,目前有哪些公司跟你們有競爭關系,區別在哪?

楊霞:目前國內還沒有采用形式化驗證的方法進行智能合約安全審計的,我們是第一家,因為我們起步較早。


區塊鏈大本營:你認為從技術角度來看,形式化驗證在國內外的差異是否存在?

楊霞:技術上來講,差別不大。中國人的優勢是做事很拼,整個區塊鏈領域,我們的技術發展程度跟國外的差異都不大。而在安全方面,我們這樣的公司瞄準的比國外更早,積累也更多。比如我們率先做出了同時支持以太坊和EOS的自動化合約審計工具。


區塊鏈大本營:在研發這套系統的程序中,你們遇到的最大的技術挑戰是什么?你們是如何應對的?

楊霞:對于我們來講,最麻煩的就是區塊鏈的驗證跟傳統的作業系統等軟體的形式化驗證不一樣,區塊鏈存在的問題是,多個區塊鏈平臺,而且存在于多種智能合約開發語言,甚至有的區塊鏈平臺,提供多種合約開發語言。這是最大的挑戰。


關于應對,只能是一個坑一個坑的去填。雖然我們也做了一個中間的框架層,能更快速的對各個平臺的支持,但還是有一些技術的作業要一個個去完成。比如換一個平臺之后,要去跟平臺適配,為了把我們的工具移植到更多的平臺,還是有很多作業要去做。


開發者,別讓小白錯誤毀了大生意


區塊鏈大本營:在你們接手的專案中,比較典型的安全漏洞有哪些?

楊霞:目前看來,還是小白級的錯誤居多。比如BEC的那個溢位漏洞。還有就是之前爆出來的以太坊平臺資深的漏洞,比如短地址攻擊,以及拒絕服務攻擊等。這些漏洞通過形式化驗證都能找出來。


區塊鏈大本營:既然平臺都那么不安全,我們該怎樣看待這些問題?

楊霞:安全是多方面的,智能合約就不說了,80%都有安全問題;還有DApp層面的,比如前段時間爆出的BiYong漏洞,用明文傳送用戶資訊。剩下一個就是平臺自身的安全漏洞了。


就像Windows系統一樣,用的人越多,爆出的漏洞越多,被補上的就越多,但其實背后意味著這個平臺逐步變得更安全。就像以太坊,大家每天都在罵不安全,但大家都還在用。


區塊鏈大本營:下一步你們有哪些打算?

楊霞:下一步我們會建立技術社區,讓所有開發者共同來建立一個安全的區塊鏈生態,把它做得更好。同時,我們將支持更多的區塊鏈平臺,解決更多的區塊鏈安全問題,為行業提供更多的安全服務。


區塊鏈大本營:最后一個問題,請以創業者的身份,對那些想要入門區塊鏈的人說幾句心里話。

楊霞:其實我最想說的就是,大家要踏踏實實地靜下心來做點實事,戒驕戒躁。可能這感覺有點像老師在說教(笑)。區塊鏈是很有意思的一個技術,我將會堅定的把這條路走下去,因為我相信堅持做下去的人會取得最終的勝利!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/43588.html

標籤:區塊鏈技術

上一篇:【視頻NO.57】潘芳琳——廣告狂人放棄百萬年薪,All in 區塊鏈!

下一篇:+++browser-solidity 無法編譯?+++

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more