許澤峣,劉秋明,姚哲鑫,朱松挺,謝 敏
(1.江西理工大學(xué) 軟件工程學(xué)院,江西 南昌 330013;2.江西省防汛信息中心,江西 南昌 330009)
河道采權(quán)在拍賣過程中往往出現(xiàn)企業(yè)為中標而盲目高價投標[1],導(dǎo)致難以避免惡性競爭,并增加中標后非法偷采多采風(fēng)險[2],使后期河道采砂監(jiān)管困難。為使河砂開采權(quán)得到合理化出讓,減少非法開采對河道航運安全和生態(tài)環(huán)境造成的破壞,除建全相關(guān)法規(guī)和監(jiān)管制度外,拍賣方案設(shè)計十分關(guān)鍵。隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,傳統(tǒng)線下拍賣模式逐漸向線上轉(zhuǎn)移。線上拍賣可分為公開拍賣和密封拍賣,密封拍賣能有效保護拍賣的隱私性和安全性,應(yīng)用較為廣泛。王鑫等[3]利用身份群簽名方案和可驗證的秘密共享協(xié)議,設(shè)計了一個高效、安全的密封拍賣方案。該方案需要一個可信的第三方,然而在實際情況下可能存在不可靠的第三方,導(dǎo)致拍賣隱私數(shù)據(jù)泄露,破壞拍賣的公平性。曹剛[4]結(jié)合Bit 承諾與盲簽名技術(shù)提出的密封拍賣方案能有效避免第三方與他人合謀造成的隱私數(shù)據(jù)泄露問題,但拍賣過程依賴中心化的第三方。
近年來隨著區(qū)塊鏈技術(shù)的發(fā)展[5-6],一種去中心化和不可篡改的無第三方線上拍賣平臺得到了廣泛研究。彭燁等[7]利用并發(fā)簽名保護拍賣信息,結(jié)合區(qū)塊鏈上保證金思想設(shè)計了一個無第三方的密封拍賣協(xié)議;Xiong 等[8]提出一種基于區(qū)塊鏈上時間釋放加密的匿名密封投標拍賣方案,防止拍賣人與投標人竄通;李蓓等[9]提出一種基于區(qū)塊鏈智能合約的密封拍賣方案,利用Pedersen 承諾隱藏競拍價,通過零知識證明驗證結(jié)果;Li 等[10]設(shè)計一種基于以太坊的密封式拍賣智能合約,利用zk-SNARKs 零知識證明實現(xiàn)拍賣結(jié)果的可信驗證。然而,上述區(qū)塊鏈線上拍賣方案側(cè)重于考慮數(shù)據(jù)隱私保護對拍賣安全的影響,忽略了競拍者之間的惡性競爭問題,缺少對拍賣價的管控?;诘谝粌r格密封拍賣,容易導(dǎo)致競拍者為增加中標幾率,違背自身意愿出價[11],增加投機風(fēng)險等問題,難以使河砂開采權(quán)得到有效分配。為解決上述問題,設(shè)計了一種聯(lián)盟鏈拍賣智能合約,利用第二價格拍賣機制最優(yōu)出價策略,結(jié)合保證金思想和信用制度,激勵競拍者按照自身的真實意愿投標,約束不誠實的投標行為,防止盲目抬價引起惡性競爭,造成成交價過高的現(xiàn)象。
聯(lián)盟鏈是一種許可制區(qū)塊鏈[12],多個參與方組成去中心化聯(lián)盟[13]。區(qū)塊鏈賬本共識由指定節(jié)點完成,具有嚴格的訪問控制。鏈上數(shù)據(jù)只允許獲得許可的聯(lián)盟成員訪問,安全性高,兼具去中心化特性和高效率,適合多方參與的采砂許可拍賣場景。
智能合約為執(zhí)行和驗證數(shù)字合同的計算機程序,允許在無第三方環(huán)境下進行可信交易。區(qū)塊鏈去中心化、不可篡改、過程透明和可溯源等特點使智能合約可信賴[14]。利用智能合約可實現(xiàn)無第三方、去中心化的可信拍賣流程。
第二價格密封拍賣又稱“維克里拍賣”[15],與第一價格類似,競拍者提交密封投標,出價最高者中標,但只需要支付第二高價。這種拍賣方式具有激勵相容性,在信息不對稱時的最優(yōu)出價為自身對待拍物的真實估價[16]。中標后支付第二價是對競拍者說真話的獎勵,促進其展現(xiàn)真實投標意愿,防止故意抬價投標的問題。但第二價格機制對拍賣環(huán)境要求較為嚴格,在實際過程中可能會出現(xiàn)具有無視價格損失、惡意出價等不誠實行為的競拍者破壞拍賣秩序。為此,利用信用制度和保證金約束投標出價,規(guī)范拍賣行為,可使第二價格機制有效發(fā)揮作用。
現(xiàn)有的一些區(qū)塊鏈拍賣方案雖去除了第三方,但要求拍賣方打開密封標書來計算拍賣結(jié)果。不誠實的拍賣方可能會泄露真實投標價以謀取利益,對后續(xù)拍賣的公平性造成不利影響[17]。本文使用改進的密封方案[18]加密投標價,使加密數(shù)據(jù)保持原數(shù)據(jù)的大小關(guān)系,因此可直接比較加密投標價來計算拍賣結(jié)果,消除不可信因素,防止投標結(jié)果泄露。
主要過程為:①設(shè)競拍者的真實出價為pi,F(xiàn)n(pi)為二進制位數(shù)計算函數(shù)為競拍者持有的秘密數(shù),Ui=為加密價。其中,α和β是拍賣時由智能合約隨機生成并秘密保存的正小數(shù),α≠β;②投標結(jié)束后智能合約公布最高加密價和第二加密價;③競拍結(jié)束后,由第二價出價人公布真實出價和αi,再由智能合約公布β;④驗證若,則可證明公布的是正確投標價。反解加密價是離散對數(shù)困難問題,在未知β的情況下,難以偽造投標價pi使驗證通過。
利用區(qū)塊鏈上的可信智能合約實現(xiàn)拍賣任務(wù),執(zhí)行過程受到多方監(jiān)督和背書,拍賣方和競拍者只負責(zé)提供數(shù)據(jù)和驗證結(jié)果,消除不可信第三方和區(qū)塊鏈下不可靠程序造成的影響。為增強對拍賣的監(jiān)管[19],融入監(jiān)管方共同參與拍賣過程。三者分別作為獨立組織,共同構(gòu)建去中心化拍賣環(huán)境,拍賣結(jié)果需要三方節(jié)點共同背書。每個實體組織維護獨立的證書頒發(fā)機構(gòu)(Certificate Authority,CA),用于頒發(fā)各自實體對象的身份授權(quán)。獲得授權(quán)才能調(diào)用智能合約參與拍賣,可防止偽造和多重身份,保護拍賣的公平性與安全性。拍賣實體關(guān)系如圖1所示。
Fig.1 System model圖1 系統(tǒng)模型
(1)拍賣方。進行拍賣的政府部門或其他實體,負責(zé)公布拍賣信息及制定拍賣限制策略等。
(2)競拍者。采砂許可競買者,注冊身份并獲得初始信用值后才具備拍賣參與資格。
(3)監(jiān)管方。負責(zé)對拍賣進行監(jiān)管,以及為新注冊競拍者提供信用值的初始評估服務(wù)。
利用區(qū)塊鏈的不可篡改特性,將所有拍賣數(shù)據(jù)上鏈存儲。智能合約實行嚴格訪問控制,任意數(shù)據(jù)更改將留下痕跡,以防止拍賣過程中數(shù)據(jù)被惡意篡改[20]。將秘密數(shù)等拍賣隱私數(shù)據(jù)存儲在聯(lián)盟鏈私有數(shù)據(jù)集中,限制外部訪問權(quán)限,避免在拍賣過程中被泄露,破壞拍賣的公平性。拍賣數(shù)據(jù)類型主要有以下幾種:
(1)競拍者信息。bidder_info={bidder_ID,bidder_CA,credit_tab,credit_value}。用于保存競拍者身份授權(quán)后的基本信息及信用情況,包含競拍者ID、身份授權(quán)、初始信用評估表、競拍者信用值等信息。
(2)拍賣詳情。auc_view={auc_ID,auc_details,start_time,end_time,min_pirce,max_price,limit_credit}。拍賣方創(chuàng)建拍賣時公布,記錄待采砂許可詳細情況和拍賣規(guī)則等,競拍者可據(jù)此進行投標,包含拍賣ID、拍物信息、起止投標時間、拍賣底價、最高限制價、準入信用值等。
(3)拍賣信息。auc_info={auc_ID,secret_a,secret_b,k_up,k_low,res_price,R}。智能合約創(chuàng)建的鏈上私有數(shù)據(jù)集,不允許外部訪問,用于保存拍賣生成的秘密參數(shù)和拍賣方提供的調(diào)節(jié)參數(shù)、保留價等信息。
(4)拍賣日志。auc_log={log_ID,auc_ID,record_project,log_content,timestamp,log_type}。用于記錄投標詳情、處罰情況、拍賣結(jié)果和驗證信息,包含拍賣ID、記錄對象、日志內(nèi)容詳情、時間戳、日志類型等信息。
為避免中標者無法履行承諾的情況,充分了解其可信度,需要根據(jù)競拍者自身條件和拍賣行為兩方面進行評估。自身條件用于衡量競拍者資金、技術(shù)、社會信用等,監(jiān)管方可根據(jù)實際情況靈活評估,再將其保存至區(qū)塊鏈上的競拍者信息中。智能合約在拍賣時對競拍行為進行評估,根據(jù)監(jiān)管方給出的權(quán)值將二者合并為信用評估表,再使用模糊層次分析法(Fuzzy Analytic Hierarchy Process,F(xiàn)AHP)計算信用值[21]。競拍者信用評估表如圖2所示。
Fig.2 Credit evaluation form圖2 信用評估表
拍賣方每次發(fā)布拍賣時設(shè)定最高限制價Pmax,提供警戒區(qū)間(klow,kup),智能合約生成隨機警戒價R=Random(klow,kup)·Pmax。當(dāng)競拍者出價pi>R時,視為惡意出價,智能合約降低信用評估表中衡量此行為指標的值。當(dāng)pi≥Pmax時,判斷為嚴重的惡意出價,將信用值清零。若出現(xiàn)簽名錯誤、拒絕支付、提交虛假驗證參數(shù)等違規(guī)行為,將對應(yīng)指標置零。評估表變更后,將重新計算信用值。低于準入值則投標失效,出價相同則信用值高者獲勝。
拍賣總流程可分為拍賣準備、提交投標和公布結(jié)果3個階段。拍賣方發(fā)布拍賣詳情,競拍者根據(jù)區(qū)塊鏈上發(fā)布的拍賣進行投標,智能合約驗證投標價和簽名的合法性,投標結(jié)束后自動計算拍賣結(jié)果,通知第二價投標者提交真實投標價和秘密數(shù)。拍賣結(jié)束后,各參與者可根據(jù)拍賣日志上的信息驗證拍賣結(jié)果。拍賣總體流程如圖3所示。
Fig.3 Overall auction process圖3 拍賣總體流程
智能合約通過向外部暴露部分接口實現(xiàn)與拍賣各實體交互以及對鏈上數(shù)據(jù)的訪問控制,如表1所示。
Table 1 Smart contract external interface表1 智能合約外部接口
拍賣準備階段如圖4 所示,競拍者從授權(quán)中心注冊獲得基于橢圓曲線密碼學(xué)的公私鑰對作為身份授權(quán)[22]。為保證拍賣安全,調(diào)用智能合約時需要驗證用戶身份,數(shù)據(jù)上鏈需要用私鑰生成數(shù)字簽名進行數(shù)據(jù)留痕。監(jiān)管方評估競拍者條件,通過GRPC 協(xié)議調(diào)用AddCreditTab接口上鏈存儲,該過程會觸發(fā)智能合約完成信用值的初始計算。
拍賣方以JSON 格式將拍賣底價、保留價、最高價、警戒區(qū)間和數(shù)字簽名等信息作為參數(shù),調(diào)用合約CreateAuction接口發(fā)布一次拍賣。智能合約驗證簽名,隨機生成密封方案的兩個全局秘密參數(shù)α、β和隨機警戒價,與保留價和警戒區(qū)間一起保存在拍賣信息中,再將其余信息組成拍賣詳情公布上鏈。獲得信用值的競拍者可以進行投標。
Fig.4 Auction preparation圖4 拍賣準備
投標階段如圖5 所示,競拍者調(diào)用智能合約QueryAuc接口查看拍賣,再調(diào)用EncryptPrice接口提交真實投標價。在該過程中,智能合約先判斷競拍者信用值是否高于此次拍賣的準入值,未達要求則禁止投標,再分析投標價,低于拍賣底價或高于最高限制價時投標被駁回,清零該競拍者信用值,并調(diào)用內(nèi)部接口CreatePunishLog生成一條記錄處罰內(nèi)容的日志存儲到區(qū)塊鏈上。內(nèi)部接口只能由智能合約調(diào)用,對外部不可見。若投標價高于隨機警戒價而未超出最高限制價,則根據(jù)其超過隨機警戒價的多少減少惡意出價指標的評分,再生成一條相應(yīng)的處罰日志上鏈。若投標價在正常區(qū)間內(nèi),則返回加密投標價和秘密數(shù)。隨機警戒區(qū)間存儲在鏈上外部無法訪問的拍賣信息中,由合約隨機生成警戒價,防止拍賣方泄露警戒值,與競拍者共謀破壞拍賣公平。
Fig.5 Bidding stage圖5 投標階段
收到加密價和秘密數(shù)后,競拍者在客戶端通過安全哈希函數(shù)H(x)生成加密價的哈希值,再使用私鑰對哈希值數(shù)字簽名,使投標不可否認。將加密價和簽名作為密封投標發(fā)送給智能合約,智能合約先判斷是否在規(guī)定投標時間內(nèi),否則投標無效,再打上時間戳,調(diào)用CreateBidLog內(nèi)部接口封裝成一條拍賣投標日志發(fā)布上鏈。投標成功后,競拍者需在規(guī)定時間內(nèi)繳納保證金,未繳納者投標無效并降低信用值,保證金在競拍結(jié)束后退還。
如圖6 所示,投標結(jié)束后自動觸發(fā)拍賣結(jié)果計算內(nèi)部接口ComputeResult,智能合約首先篩選出信用值達標的合法投標,驗證投標加密價與對應(yīng)簽名是否匹配。驗證失敗的競拍者定義為非誠實的,降低信用值并取消此次競拍資格。然后對比加密價,出最高價的投標者中標,并選擇第二高價作為成交價。若最高出價有多個,信用值最高者中標。調(diào)用內(nèi)部接口PublishResult在鏈上發(fā)布一條結(jié)果公布日志。智能合約計算拍賣結(jié)果時無需解密投標數(shù)據(jù),保護了競拍者的出價隱私。拍賣結(jié)果需要拍賣方、競拍者、監(jiān)管方三方節(jié)點共同背書,任意節(jié)點篡改結(jié)果都將無法通過驗證,從而保證拍賣公平、可靠。
Fig.6 Posting results圖6 公布結(jié)果
拍賣結(jié)果公示后,智能合約通知第二價投標人公布真實投標價和秘密數(shù),并使用秘密參數(shù)β驗證是否正確。驗證成功后,通過內(nèi)部接口CreateVerifyLog將β和第二價投標人提交的驗證參數(shù)公布上鏈。若第二價投標人拒絕提交驗證參數(shù),會以扣除保證金和降低信用值作為懲罰,將保留價作為最終成交價。任意拍賣參與者通過QueryLog接口查詢拍賣日志即可自行驗證拍賣結(jié)果的準確性。最后,智能合約更新拍賣詳情中的中標者、中標價,將拍賣標記為結(jié)束狀態(tài),釋放保證金。后期監(jiān)管方可重點監(jiān)管受到拍賣處罰的低信用值中標者,提高監(jiān)管效率。
基于Hyperledger Fabirc1.4 聯(lián)盟鏈架構(gòu)搭建去中心化拍賣平臺,使用Golang 語言開發(fā)智能合約和客戶端。實驗設(shè)備為一臺筆記本電腦,搭載12GB 內(nèi)存、Intel Core i5 雙核處理器、CentOS7 操作系統(tǒng),運行一臺雙核3GB 內(nèi)存的虛擬機。區(qū)塊鏈環(huán)境中搭建有1 個排序節(jié)點、3 個組織,每個組織擁有2 個peer 節(jié)點,通過Docker 容器獨立運行。每個組織設(shè)立一個CA,對等節(jié)點使用CouchDB 狀態(tài)數(shù)據(jù)庫。
經(jīng)過一段時間的拍賣測試,智能合約運行穩(wěn)定,拍賣各個環(huán)節(jié)都能正確運行。表2 記錄了一次拍賣的部分投標情況。執(zhí)行對象為投標用戶,日志類型PROPOSAL 代表合法投標的提交日志,VETO 代表禁止投標的懲罰日志。
圖7 展示了拍賣結(jié)果公布日志的記錄內(nèi)容,圖8 為中標價驗證日志的記錄內(nèi)容。拍賣日志均以JSON 格式結(jié)構(gòu)化存儲在區(qū)塊鏈狀態(tài)數(shù)據(jù)庫中。
Table 2 Auction bidding situation表2 拍賣投標情況
Fig.7 Auction results release log圖7 拍賣結(jié)果公布日志
Fig.8 Winning bid verification log圖8 中標價驗證日志
圖9 展示了某次拍賣加密價、競拍者信用值與投標價的關(guān)系。共25 位競拍者,初始信用值都設(shè)為最高值1。從拍賣底價100 開始遞增投標,拍賣隨機警戒值為233,最高限制價為300,警戒區(qū)間為[0.75,0.85],準入信用值為0.8。
Fig.9 Relationship between crypto price,credit value and bid price圖9 加密價、信用值與投標價的關(guān)系
投標價經(jīng)密封算法加密后被映射為精度為12 位的正小數(shù)加密價,并在底價和最高限制投標價內(nèi)保持遞增關(guān)系。低于隨機警戒價投標的競拍者不會承受信用值損失,但投標價超過隨機警戒值時,競拍者信用值會隨著投標價增加而降低,到達0.625 時因觸及行為考量指標下限而停止下降。信用值低于準入信用值0.8 的競拍者投標無效,投標價低于底價禁止投標,高于最高限制價則信用值清零。
實驗結(jié)果表明,競拍者故意抬價或惡意出價都可能導(dǎo)致信用值損失。因此,在未知他人投標時最好的投標價是自身的真實估價。本次實驗的中標價為250,未達到調(diào)節(jié)上界255,實現(xiàn)投標價限制。在真實環(huán)境中,投標價高于隨機警戒值時,信用值可能會直接降低到準入限制以下,因此不誠實投標將承受很大風(fēng)險。若競拍者按照真實的心理估價投標,根據(jù)第二價格拍賣原則,中標后僅需支付第二高價,即使不中標也不會承擔(dān)任何損失。
拍賣各階段的平均響應(yīng)時間如圖10 所示。系統(tǒng)各階段的響應(yīng)時間均為毫秒級,能夠滿足日常需求。拍賣準備和投標階段是由參與者獨立調(diào)用合約實現(xiàn)的,響應(yīng)時間不會隨著投標人數(shù)的增加而增長。結(jié)果公布過程需要對比和校驗一次拍賣的全部投標數(shù)據(jù),再驗證第二價投標人提供的驗證參數(shù),因此耗時相對較長。系統(tǒng)最大的開銷為結(jié)果公布時依次對投標簽名的驗證。
本方案能夠滿足線上拍賣的以下安全要求:
(1)正確性。投標價加密后仍保持原有的大小關(guān)系。通過加密價得出的最高價和次高價與真實投標出價一致,符合拍賣原則,保證了正確性。
(2)公平性。競拍者的惡意行為會使信用值降低,拍賣結(jié)果通過去中心化執(zhí)行的智能合約得出。拍賣全過程公開在區(qū)塊鏈中,保證了拍賣的公平性。
Fig.10 Average response time of each stage圖10 各階段平均響應(yīng)時間
(3)密封性。投標價經(jīng)加密后上鏈保存,拍賣過程不進行解密,拍賣結(jié)束后只公布成交價,避免了大量投標信息泄露后被分析利用,影響拍賣公平。
(4)不可否認性。投標需要投標者簽名,數(shù)據(jù)上鏈后無法被篡改,因此競拍者無法否認其出價。
(5)可驗證性。拍賣參與者可通過拍賣日志了解拍賣的真實情況,并驗證拍賣結(jié)果是否準確。
(6)不可偽造性。競拍者必須獲得準入許可和信用值。投標時需要驗證簽名,身份難以偽造。拍賣結(jié)果由智能合約計算得出,且公開可驗證,無法偽造。
本文融合信用管理機制設(shè)計了基于第二價格的區(qū)塊鏈拍賣智能合約,有效防止了競拍者故意抬價和惡意出價造成拍賣成交價失控的情況。鼓勵競拍者投標與自身意愿相匹配,使資源分配更加合理。實驗結(jié)果表明,無第三方的區(qū)塊鏈平臺及智能合約計算拍賣能夠有效保護投標數(shù)據(jù)的隱私性,并保證拍賣安全。為保證拍賣過程平穩(wěn),使智能合約對投標價作出準確判斷,以及防止保留價過低引起競拍者串謀,拍賣方如何設(shè)定合適的保留價和調(diào)節(jié)參數(shù),需要結(jié)合現(xiàn)實情況作進一步分析。