程曉 曾凱旋
摘要:當(dāng)前線下打卡方案眾多,但大多需借助如指紋打卡機(jī)等設(shè)備,小部分打卡方案依賴GPS定位與連接特定WIFI等,該類方案存在打卡數(shù)據(jù)易作偽等不足。區(qū)塊鏈技術(shù)已在生活中得到廣泛使用,本文提出了一種基于藍(lán)牙技術(shù)與區(qū)塊鏈技術(shù)的打卡方案,該方案具有適用場(chǎng)景多、適用范圍廣、數(shù)據(jù)防偽及防篡改等特點(diǎn)。
一、相關(guān)技術(shù)
1.1 藍(lán)牙技術(shù)
藍(lán)牙技術(shù)(BlueTooth)是一種無(wú)線數(shù)據(jù)近距離通信的技術(shù)規(guī)范,藍(lán)牙技術(shù)工作頻段為2.4GHz。藍(lán)牙技術(shù)已得到較大發(fā)展,藍(lán)牙5.0有效工作范圍可達(dá)300米,傳輸速度可達(dá)24Mbps。
1.2 區(qū)塊鏈技術(shù)
區(qū)塊鏈技術(shù)是一種去中心化的分布式計(jì)算方式,其本質(zhì)上是由分布式存儲(chǔ)方案、點(diǎn)對(duì)點(diǎn)傳輸技術(shù)、共識(shí)算法、加密算法等組合而成的體系。
區(qū)塊鏈系統(tǒng)中包含實(shí)用拜占庭容錯(cuò)算法、工作量證明算法、權(quán)益證明算法等共識(shí)算法。不同的區(qū)塊鏈系統(tǒng)可采用不同的共識(shí)算法,如比特幣網(wǎng)絡(luò)選擇了工作量證明算法,而以太坊使用了權(quán)益證明算法。
區(qū)塊鏈系統(tǒng)通常包含多種密碼學(xué)算法。在數(shù)據(jù)加密與簽名方向,區(qū)塊鏈系統(tǒng)通常選擇RSA等非對(duì)稱加密算法。在數(shù)據(jù)編碼中區(qū)塊鏈系統(tǒng)會(huì)使用哈希算法。
區(qū)塊鏈依據(jù)應(yīng)用場(chǎng)景可分為公有鏈、聯(lián)盟鏈、私有鏈等,從結(jié)構(gòu)上可分為單鏈與多鏈兩種結(jié)構(gòu)。
二、打卡方案設(shè)計(jì)
2.1 整體設(shè)計(jì)
本文所所述方案采用多鏈的結(jié)構(gòu)。任一打卡場(chǎng)景均有一條獨(dú)立的鏈用于打卡記錄,多條鏈之間以平行鏈的模式運(yùn)行。各鏈數(shù)據(jù)安全由其場(chǎng)景中的節(jié)點(diǎn)協(xié)調(diào),且均擁有獨(dú)立的區(qū)賬本。本方案是為線下打卡設(shè)計(jì),故各鏈之間擁有相同的共識(shí)機(jī)制。
用戶注冊(cè)后將獲得唯一的數(shù)字地址與密鑰對(duì),此后用戶可自行創(chuàng)建或加入打卡場(chǎng)景。一個(gè)場(chǎng)景被創(chuàng)建后,服務(wù)器將加入該鏈網(wǎng)絡(luò),并與鏈上所有節(jié)點(diǎn)建立P2P連接,但服務(wù)器僅作為鏈上的一個(gè)記錄者,其作用是儲(chǔ)存所有鏈數(shù)據(jù)。用戶節(jié)點(diǎn)則將其參與場(chǎng)景的鏈數(shù)據(jù)持久化在本地,但這并不代表服務(wù)器擁有特殊地位,其作用是提供可視化數(shù)據(jù)查詢的功能。
2.2 到場(chǎng)確認(rèn)機(jī)制
藍(lán)牙廣播技術(shù)具有范圍廣的特點(diǎn),本文基于上述特點(diǎn)設(shè)計(jì)了一種基于藍(lán)牙的到場(chǎng)確認(rèn)機(jī)制,當(dāng)用戶在某場(chǎng)地中開啟打卡,到場(chǎng)確認(rèn)機(jī)制流程如下:
1)與場(chǎng)地中其他設(shè)備利用藍(lán)牙互相掃描;
2)將掃描信息廣播至正在打卡的鏈網(wǎng)絡(luò)中。
用戶進(jìn)行某場(chǎng)地并開始打卡后,其設(shè)備將成為鏈網(wǎng)絡(luò)中一個(gè)節(jié)點(diǎn),并重復(fù)上述流程。隨著用戶位置的變化,該用戶將與不同用戶互相確認(rèn),任一用戶被掃描次數(shù)達(dá)到閾值時(shí),我們認(rèn)為他已到場(chǎng)。閾值由場(chǎng)地范圍、人員規(guī)模等動(dòng)態(tài)確定。
2.3 數(shù)據(jù)加密機(jī)制
本方案節(jié)點(diǎn)廣播數(shù)據(jù)均采用RSA加密,RSA算法是目前使用較廣泛、安全性也相對(duì)較高的非對(duì)稱加密算法.能實(shí)現(xiàn)加密、身份驗(yàn)證和數(shù)字簽名等功能,是一種典型的公鑰密碼體制。
節(jié)點(diǎn)加入任一場(chǎng)景時(shí),需先廣播自身公鑰至其他設(shè)備,亦會(huì)向其他節(jié)點(diǎn)請(qǐng)求公鑰。節(jié)點(diǎn)接收到其他設(shè)備的公鑰后,需將其持久化在本地,每個(gè)用戶均需妥善保管自己的密鑰。
本方案簽名過(guò)程如下,節(jié)點(diǎn)藍(lán)牙掃描到其他設(shè)備時(shí),使用自身公鑰對(duì)掃描數(shù)據(jù)簽名,然后將簽名與公鑰一同廣播致其他設(shè)備。設(shè)備收到廣播數(shù)據(jù),利用廣播中的公鑰對(duì)數(shù)據(jù)驗(yàn)簽,該過(guò)程可防止數(shù)據(jù)在傳輸中被篡改。
2.4 區(qū)塊結(jié)構(gòu)與生成機(jī)制
本方案中,任意場(chǎng)景有其獨(dú)立的鏈,每條鏈由多個(gè)區(qū)塊組成,區(qū)塊包含區(qū)塊頭與區(qū)塊體。區(qū)塊頭包含:前驅(qū)區(qū)塊哈希值、本區(qū)塊哈希值、本區(qū)塊生成時(shí)間等組成,創(chuàng)世塊的前區(qū)塊哈希值為0。區(qū)塊體由本輪打卡記錄組成,每條打卡記錄包含:用戶唯一編號(hào)、數(shù)字地址、設(shè)備MAC地址及被掃描次數(shù)等。本方案中,任意節(jié)點(diǎn)均可能成為打包節(jié)點(diǎn),因此各節(jié)點(diǎn)會(huì)統(tǒng)計(jì)各自緩沖區(qū)數(shù)據(jù),并按上述區(qū)塊結(jié)構(gòu)生成待選區(qū)塊,若節(jié)點(diǎn)被選舉為打包節(jié)點(diǎn),其待選區(qū)塊將被發(fā)布至鏈網(wǎng)絡(luò)中,反之其待選區(qū)塊將用于校驗(yàn)打包節(jié)點(diǎn)發(fā)布的新區(qū)塊。
2.5共識(shí)機(jī)制
比特幣網(wǎng)絡(luò)的共識(shí)機(jī)制時(shí)工作量證明機(jī)制(POW),該共識(shí)機(jī)制下新塊生成需消耗大量算力。以太坊已將其共識(shí)機(jī)制更換為權(quán)益證明(POS),權(quán)益證明的主要思想是:節(jié)點(diǎn)記賬權(quán)的獲得難度與節(jié)點(diǎn)持有的權(quán)益成反比,該機(jī)制在實(shí)現(xiàn)了與POW相同容錯(cuò)性的情況下,避免了大量無(wú)意義的計(jì)算,從而節(jié)約了算力與能耗。
本方案中,我們借鑒了POS機(jī)制,設(shè)計(jì)了本方案基于掃描確認(rèn)的共識(shí)機(jī)制,各節(jié)點(diǎn)已生成待選區(qū)塊后,需達(dá)成如下共識(shí):
1、各節(jié)點(diǎn)由鏈尾向前遍歷本輪打卡鏈,對(duì)參與本輪打卡的節(jié)點(diǎn)的歷史數(shù)據(jù)進(jìn)行統(tǒng)計(jì);
2、被掃描次數(shù)與打包次數(shù)之和最大的節(jié)點(diǎn)為打包節(jié)點(diǎn);
2、節(jié)點(diǎn)僅接受自己得出的打包節(jié)點(diǎn)發(fā)布的塊。
上述選舉打包節(jié)點(diǎn)的共識(shí)步驟中,鏈中所有節(jié)點(diǎn)向前遍歷的長(zhǎng)度應(yīng)由節(jié)點(diǎn)數(shù)與鏈長(zhǎng)度共同決定,一般情況下,只需向前遍歷50%的塊數(shù)據(jù)即可。該共識(shí)機(jī)制能有效節(jié)約算力,符合本方案的使用場(chǎng)景。但是與所有共識(shí)算法一樣,我們提出的共識(shí)機(jī)制無(wú)法保證選舉的打包節(jié)點(diǎn)具有唯一性,所以鏈依然存在分叉的風(fēng)險(xiǎn)。鏈分叉會(huì)影響數(shù)據(jù)的準(zhǔn)確性,因此我們需結(jié)合本方案的特點(diǎn),在極力避免同時(shí)主動(dòng)解決節(jié)點(diǎn)間的鏈分叉與數(shù)據(jù)紊亂。
2.6鏈同步機(jī)制
如上一節(jié)中所述,我們的共識(shí)機(jī)制不能完全避免鏈分叉的發(fā)生,而且本方案中大多數(shù)節(jié)點(diǎn)均為輕節(jié)點(diǎn),各節(jié)點(diǎn)數(shù)據(jù)一致無(wú)法得到保證。因此,我們?cè)O(shè)計(jì)了鏈同步機(jī)制,該機(jī)制步驟如下:1、新區(qū)塊生成之前,各節(jié)點(diǎn)須校驗(yàn)其當(dāng)前鏈數(shù)據(jù)的完整性;2、各節(jié)點(diǎn)廣播其鏈尾區(qū)塊哈希值;3、各節(jié)點(diǎn)統(tǒng)計(jì)接收到最多次的塊哈希值,將其視為完整鏈尾區(qū)塊,拋棄錯(cuò)誤區(qū)塊;4、當(dāng)本地不存在某些區(qū)塊時(shí),節(jié)點(diǎn)從其他節(jié)點(diǎn)同步區(qū)塊數(shù)據(jù)。
多數(shù)情況下,任一鏈上節(jié)點(diǎn)數(shù)不會(huì)太多,因此鏈同步數(shù)據(jù)量較少,故同步速度較快。上述機(jī)制下,本方案任一鏈中參與打卡的節(jié)點(diǎn)鏈將數(shù)據(jù)得到統(tǒng)一,非誠(chéng)實(shí)節(jié)點(diǎn)對(duì)其本地鏈的篡改都將被恢復(fù),這也是本方案防篡改的體現(xiàn)。
三、 總結(jié)與分析
本文提出了一種基于區(qū)塊鏈與藍(lán)牙技術(shù)的線下打卡方案,該方案通過(guò)節(jié)點(diǎn)之間藍(lán)牙掃描互相確認(rèn)到場(chǎng),并將打卡記錄保存至區(qū)塊鏈網(wǎng)絡(luò)中,能有效防止打卡數(shù)據(jù)篡改與偽造。
引用文獻(xiàn):
[1]蔡型,張思全.短距離無(wú)線通信技術(shù)綜述[J].現(xiàn)代電子技術(shù),2004(03):65-67+76.
[2]沈鑫,裴慶祺,劉雪峰.區(qū)塊鏈技術(shù)綜述[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2016,2(11):11-20.
[3]陳建華,黃道穎,張堯,張安琳,孫宏.計(jì)算機(jī)對(duì)等網(wǎng)絡(luò)P2P技術(shù)[J].計(jì)算機(jī)工程與應(yīng)用,2003(33):162-164+186.
作者簡(jiǎn)介:
程曉,女 (1998-)漢,河南省商丘市,本科
曾凱旋,男(1995-),漢,貴州省畢節(jié)市,本科