

(2022年4月8日) 智能合約是將合約條文程式化並寫進區塊鏈中。有別於傳統合約,它無需第三方介入,當滿足合約條件時,程式便會自動執行合約,而且無法更改。過住有一些保安事故與智能合約有關,牽涉利用智能合約的程式設計漏洞。因此,香港生產力促進局轄下的香港電腦保安事故協調中心(HKCERT)指出,不論是開發或使用智能合約時都要小心謹慎,以免程式執行結果與預期不同,同時要理解當中潛在的風險及相應的保安建議。
智能合約的起源
智能合約(Smart Contract)的概念由美國密碼學家兼電腦科學家Nick Szabo 於1994年提出,他提倡把合約數字化及程式化,意味著條款細則以數字形式鑲嵌在特定區域中。可是,在區塊鏈出現前的社會迴響不大。智能合約除了是區塊鏈的其中一項核心技術,亦是一種特殊協議。使用者可以把合約條文程式化寫進區塊鏈中。當滿足合約的一定條件後,便會觸發程式自動執行。以自動售賣機為例,售賣機的合容條件就是當投進了一定金額後,就會觸發程式執行出售一罐汽水。一切操作不涉及第三者及繁複手續,成本因而較少。
傳統合約與智能合約的差異
日常生活中,大家會時常接觸傳統合約,例如購買房屋時需要經過地產中介接洽、銀行財務審批,及律師服務等程序。傳統合約往往是以信任為基礎,牽涉第三方介入以作見證人,然後由簽署雙方各自履行合約上的義務,整個程序繁複和涉及額外費用。
智能合約的設計就是解決以上問題。除了可以省卻第三方的開支外,也能確保合約內容得以有效地執行。它是一項非以雙方信任為基礎的技術,而是建基於雙方協定的合約內容。由於智能合約被程式化後會寫進區塊鏈,而區塊鏈有著不能篡改的特性,加上智能合約設定的條件一被滿足,內容亦會即時自動執行,保障雙方利益及節省了時間成本。

來源:https://kustard.io/blog/are-smart-contracts-really-smart/ (只有英文)
因此,智能合約具有下列特性:
- 自動化 – 當條件符合便自動執行內容。
- 節省時間及成本低 -減少第三方的介入,從而減少當中牽涉的成本,例如時間成本及第三方開支。
- 可靠的 -內容被寫進區塊鏈。因此,是以合約內容為基礎,而非雙方的信任。
過去涉及智能合約的網絡保安事故
智能合約是由程式編寫而成,由以太虛擬機(Ethereum Virtual Machine)執行,很多保安事故都是因被黑客發現程式有漏洞有關。
2022年1月,有網絡保安公司的研究報告指出黑客透過創造欺詐代幣來引誘用戶購買。由於黑客利用智能合約的錯誤設置及代碼漏洞,然後騙取智能合約中的資金,例如利用下圖中的EmergencyWithdraw 函數從智能合約中進行了57次盜竊行為。


此外,報告亦提及下列四項代幣欺詐情況:
- 一些代幣在購買費達99%時,黑客在購買階段騙走所以資金;
- 一些代幣不允許買家轉售,只有代幣持有人可以轉售;
- 一些代幣在售價達99%時,黑客在銷售階段騙走所以資金;
- 一些代幣允許持有人創造更多代幣作銷售
2016年6月,智能合約平臺組織The DAO 由於在開發過程中代碼有誤,導致被黑客成功盜取約5,000萬美元的以太幣,犯案手法如下:

The DAO事件是一種「重入」(Reentrancy)攻擊,以下是攻擊程式碼的範例,手法類近The DAO該次事件。

「重入」攻擊範例: https://consensys.github.io/smart-contract-best-practices/attacks/reentrancy/ (只有英文)
以上例子可以看到當要用外部程式碼(external call) msg.sender.call.value(amountToWithdraw)(“”)前,沒有先將 userBalances[msg.sender] 重設為零,如果外部的是惡意程式,它便可以重覆調用 withdrawBalance(),不斷轉走相等於userBalances[msg.sender]數值的資產。
另外,2021年11月,黑客入侵多鏈去中心化交易所 MonoX,透過程式中的漏洞使智能合約把MONO 幣的價值提高,其後購買其他資產。最終MonoX 遭受3,100 萬美元的損失。
使用智能合約的注意事項
- 簽署智能合約時,要小心確認合約內容。若不確定簽署請求,應使用官方渠道聯絡平台技術支援;
- 如對智能合約不是太熟悉,可使用規模較大的交易平台上的官方智能合約進行交易;
- 交易後,立即檢查加密資產轉移數量是否正確、交易是否根據合約內容成功執行;
- 編寫智能合約時應參考最佳實踐指引,以避免常見的攻擊方式,如重入攻擊、阻斷服務攻擊等;
- 為智能合約進行保安評估或審計來檢查程式碼有否保安問題以便跟進。報告結果亦可供用戶查閱以增加透明度。
大家若想向HKCERT 報告與資訊保安相關的事故,例如惡意程式、網絡釣魚、阻斷服務攻擊等,可以透過網上表格:https://www.hkcert.org/zh/incident-reporting報告事故。如有其他資訊保安疑問,歡迎電郵至 [email protected] 或致電24小時熱線8105 6060 與HKCERT聯絡。
– 完 –
關於香港電腦保安事故協調中心
由香港生產力促進局管理的香港電腦保安事故協調中心(HKCERT),是本港的資訊保安事故協調中心,為本地企業及互聯網用戶提供資訊保安事故的消息和防禦指引、事故回應及支援服務,及提高保安意識。
HKCERT聯絡本地的組織,負責收集、發放訊息及協調保安事故應變行動。HKCERT 亦是全球保安事故協調中心組織 (Forum of Incident Response and Security Teams, FIRST) 及 亞太區電腦保安事故協調中心組織 (Asia Pacific Computer Emergency Response Team, APCERT) 的成員,與其他協調中心在跨境資訊保安事故上,交換情報和保持聯繫。
如欲了解更多詳情,請瀏覽HKCERT網頁:www.hkcert.org。
關於香港生產力促進局
香港生產力促進局(生產力局)是於1967年成立的法定機構,專業技術和知識涵蓋多個不和範疇,致力以世界級的先進技術和創新服務,驅動香港企業提升卓越生產力。生產力局作為科技創新、應用科技和價值創造的賦能者及促進者,利用工業4.0和企業4.0,加速香港再工業化發展;和時致力發展智能及綠色生活應用技術,全面促進香港成為國際創新科技中心及智慧城市。
生產力局是香港工商企業值得信賴的合作夥伴,提供全方位的創新方案,提升企業的資源效益,提升生產力和業務效率、減省營運成本,令企業在本地和國際市場中保持競爭優勢。生產力局致力為中小企和初創企業提供即時和適切的支援,應對瞬息萬變的營商環境,陪伴它們走上創新和轉型之路;並提供各類未來技能發展課程,目標壯大本地人才庫,讓企業掌握最新數碼及STEM技術,加強企業技能及提升市場競爭力。
此外,生產力局積極與本地工商界及世界級研發機構合作,開發應用技術方案,為產業創優增值。透過產品創新和技術轉移,成功推出多種由市場主導的專利技術和產品,發掘本地和國際市場在授權和技術轉移服務中的龐大商機。多年來,生產力局的世界級研發成果獲得廣泛肯定,屢獲本地及國際獎項殊榮。
如欲了解更多詳情,請瀏覽生產力局網頁:www.hkpc.org。