• 沒有找到結果。

第 3 章 區塊鏈數位鑑識證據監管鏈平台系統設計

Development Kit 8

網⾴後端開發 Web

go-ethereum Geth v1.8.6

以太坊區塊鏈鏈運⾏環 境

https://geth.ethereum.

org/downloads/

java.security 密碼運算(橢圓曲線演 算法加/解密、簽/驗 章、HASH…) 發⾏ ECQV 憑證

Java JDK1.8 內建 javax.crypto Java JDK1.8 內建 bouncycastle jdk

v15on-1.54

jQuery 3.3.1 網⾴前端開發 https://jquery.com/

Bootstrap 4 網⾴前端開發 https://getbootstrap.co m/

資料庫 SQLite v3.10.0 儲存證據監管鏈資料 https://sqlitebrowser.o rg/

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

⾊個別管理⼀個以太坊節點,各節點下能建⽴多個⼀般帳⼾及⼀個負責產⽣區 塊的 Authority 帳⼾。在鏈下,五個⾓⾊間透過 RESTful Web Service 交換訊 息。

3-3. 聯盟區塊鏈架構設計

本研究假設參與區塊鏈證據監管鏈的各單位均採⽤ Web3 RPC 做為鏈上的 通訊協定,⽽鏈下的通訊協定採⽤ Web Service API。每個參加單位都需執⾏⾄

少⼀個以太坊節點同步鏈上資料,並佈建區塊鏈應⽤系統做鏈下的證據監管鏈 資料傳收及保存,結合成以太坊的聯盟鏈。此外,各參加單位的負責⼈在加⼊

節點前須向 CA 申請 ECQV 隱含式憑證,申請完後以該憑證的 ECDSA ⾦鑰 對在節點上註冊以太坊使⽤者帳號,註冊完後,申請⼈便使⽤數位鑑識證據監 管鏈平台。聯盟區塊鏈架構設計⽰意圖如下圖 3-1。

圖 3-1:聯盟區塊鏈架構設計

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

3-4. 數位鑑識證據監管鏈平台系統架構

區塊鏈數位鑑識證據監管鏈平台的系統架構如圖 3-2 所⽰,由「區塊鏈系 統」、「數位證據監管鏈應⽤系統」以及「應⽤系統連結閘道」三個主要部分 相互⽀援組成。

圖 3-2:區塊鏈數位鑑識證據監管鏈平台系統架構

(1) 區塊鏈系統(Blockchain System)

區塊鏈系統為區塊鏈機制運作的主系統,負責區塊的組建、鏈結以及智能合 約的部署、遞送等⼯作。本系統採⽤ PoA Clique 共識演算法,將製作好的區 塊,透過 Web3 RPC 通訊協定,遞送到所有參加單位的區塊鏈系統中,以確保 資訊即時同步。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(2) 數位證據監管鏈應⽤系統 (Digital Evidence Chain AP System)

數位證據監管鏈應⽤系統為 Web Server 應⽤系統,對外提供 RESTful Web Service API透過 HTTPS 與其他參加單位做鏈下資料的傳收,對內負責處理與 證據監管鏈作業流程、證據監管鏈表資料儲存、密碼運算等相關事務,詳細作 業流程⾒第 3-8 章數位鑑識證據監管鏈平台作業流程。另⼀⽅⾯,數位證據監 管鏈應⽤系統提供內部使⽤者介⾯供⽤⼾做證據監管鏈智能合約的建⽴、傳 遞、接收以及證據監管鏈歷史資料查詢,詳細介⾯操作⾒第 4 章區塊鏈數位鑑 識證據監管鏈平台應⽤系統操作說明。

理論上,在本數位證據監管鏈應⽤系統中,所有參加單位(即節點)的應

⽤系統作業流程應該都相同。

(3) 應⽤系統連結閘道 (AP Gateway)

因數位證據監管鏈應⽤系統要開放外部的使⽤者連線,在安控作業的考量 下,就必須透過 DMZ 區的應⽤系統連結閘道,才能連結使⽤內部網路的數位 證據監管鏈應⽤系統。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

3-5. 數位鑑識證據監管鏈平台智能合約說明

本研究的聯盟鏈採⽤以太坊區塊鏈,⽤⼾端採⽤ go-ethereum 套件,共識 演算法為 Clique PoA ,智能合約的開發語⾔為 solidity 。因應證據監管鏈表 唯⼀性、不可分割的特性,採⽤ ERC721 Token 標準開發智能合約紀錄證據監 管鏈表所屬權的轉換。乃⼀個數位鑑識案件即建⽴⼀個智能合約,該智能合約 發⾏的每個 ERC721 Token 即代表該數位鑑識案件的⼀張證據監管鏈表。舉例 來說,若⼀個數位鑑識案件有三張證據監管鏈表,就須在區塊鏈上建⽴⼀個智 能合約,⽤該智能合約產⽣三個 ERC721 Token 。

此外,為了讓以 Java 開發的數位證據監管鏈應⽤系統能調⽤以太坊智能 合約,本研究透過 web3j 函式庫作為 Java 應⽤系統及 solidity 智能合約通訊 的媒介,使應⽤系統能透過 web3j 函式庫做智能合約的部署及智能合約函式的 調⽤。

函式庫的介⾯乃依 ERC721 Token 標準介⾯設計,包含:部署智能合約

(Deploy)、發⾏ ERC721 Token(Create)、取得 TokenID(GetTokenID)、

設定 Token 的特徵值(SetTokenURI)、取得 Token 的特徵值

(TokenURI)、查詢 Token 的持有者(OwnerOf)、授權 Token

(Approve)、Token 所有權移轉(Transfer)。以下說明本研究數位鑑識證據 監管鏈平台的智能合約函式功能及介⾯:

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(1) 部署數位鑑識案件以太坊智能合約(Deploy)

表 3-2:部署數位鑑識案件以太坊智能合約(Deploy)

函式名稱 deploy

功能說明 部署數位鑑識案件以太坊智能合約 web3j

interface

參數說明

In/Out 資料型態 參數名稱 說明

Out String contractAddress 已部署的數位鑑識案件智能合約位 址

範例程式

Out TransactionRecei

pt tr 執⾏本交易(Transcation)的

資料 tokanName 參數範例 {"caseID":"20180923C001",

"evidenceID":"20180923C001-001"}

範例程式

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(3) 取得證據監管鏈表的 Token ID (GetTokenID)

表 3-4:取得證據監管鏈表的 Token ID (GetTokenID)

函式名稱 getTokenID

功能說明 取得證據監管鏈表的 Token ID

web3j interface

參數說明

In/Out 資料型態 參數名稱 說明

In String tokenName 證據監管鏈表名稱(案件編號+證 據編號)

Out BigInteger tokenID 證據監管鏈表 ERC721 Token ID 範例程式

In String tokenMetaData

證據監管鏈表 ERC721 Token 的特

tokenMetaData 參數範例

{"ECQVCert":"MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE/bgTe1Q85VRa3j

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(5) 取得證據監管鏈表 Token 的特徵值(TokenURI)

表 3-6:取得證據監管鏈表 Token 的特徵值(TokenURI)

函式名稱 tokenURI

功能說明 取得證據監管鏈表 Token 的特徵值 (憑證及簽章)

web3j interface

參數說明

In/Out 資料型態 參數名稱 說明

In BigInteger tokenID 證據監管鏈表 ERC721 Token ID

Out String tokenMetaData

證據監管鏈表 ERC721 Token 的 特徵值

本研究的 Token 特徵值為 ECQV 憑證及以私鑰對證據監管鏈表 JSON 物件做 ECDSA 簽章的簽 章值,以 HEX 編碼

範例程式

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(6) 取得 Token 持有者的 Account Address(OwnerOf)

表 3-7:取得 Token 持有者的 Account Address(OwnerOf)

函式名稱 ownerOf

功能說明 取得證據監管鏈表 Token 持有者 Account Address

web3j interface

參數說明

In/Out 資料型態 參數名稱 說明

In BigInteger tokenID 證據監管鏈表 ERC721 Token ID Out String tokenOwnerAddr Token 持有者的 Ethereum Node

User Account 位址 範例程式

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(7) 將 Token 授權給指定 Account(Approve)

表 3-8:將 Token 授權給指定 Account(Approve)

函式名稱 approveTokenWithMetadata

功能說明 1. Token 的持有者將 Token 授權給指定 Account 2. 僅 Token 的持有者才可能對該 Token 執⾏ Approve

web3j interface

參數說明

In/Out 資料型態 參數名稱 說明

In String userAccount Token 接收⽅的 Ethereum Node User Account 位址 In BigInteger tokenID 證據監管鏈表 ERC721

Token ID Out TransactionRecei

pt tr 執⾏本交易(Transcation)的

資料 範例程式

函式名稱 transferTokenWithMetadata

功能說明 Out TransactionRecei

pt tr 執⾏本交易(Transcation)

的資料 範例程式

RESTful Web Service API包含:取得 Node 資訊(GetNodeInfo)、傳送證 據監管鏈表(TransferEvidenceChain)、接收證據監管鏈表

(ReceiveEvidenceChain),以下說明本 Web Service API 的傳收內容及範例:

(1) API URL 說明

表 3-10:API URL 說明

API API 接⼝ URL MethodHTTP

1 GetNodeInfo https://{URL}/GetNodeInfo.service POST 2 TransferEvidenceChain https://{URL}/TransferEvidenceChain.service POST 3 ReceiveEvidenceChain https://{URL}/ReceiveEvidenceChain.service POST

(2) API 欄位格式說明

表 3-12:取得 Node 資訊(GetNodeInfo)

GetNodeInfo

功能說明 取得證據監管鏈接收⽅的憑證及Node資訊

欄位 格式 允許空值 說明

GetNodeInfo Request

apAccount string 否 傳送⽅帳號(同 ECQV 憑證申請名稱)

GetNodeInfo Response

apAccount string 否 接收⽅帳號(同 ECQV 憑證申請名稱)

GetNodeInfo Request 範例 {"apAccount":"User1"}

GetNodeInfo Response 範例

{"ECQVCert":"MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE/bgTe1Q85VRa3jlz

(4) 傳送證據監管鏈表(TransferEvidenceChain)

表 3-13:傳送證據監管鏈表(TransferEvidenceChain)

TransferEvidenceChain

功能說明 傳送⽅將證據監管鏈表加密後傳給接收⽅

欄位 格式 允許空值 說明

TransferEvidenceChain Request

caseID string 否 案件編號

evidenceID string 否 證據編號

encConext string 否 以 sessionKey 加密的 「證據 監管鏈表」本⽂ (context) ,

mode,PKCS#5 padding context Object 否 「證據監管鏈表」本⽂

contractAddr string 否 數位鑑識案件 Ethereum 智能 合約位址

senderNodeAddr string 否 傳送⽅Ethereum 節點 User Account Address

tokenID int 否 證據監管鏈表 ERC 721 token

token approve 的 Transaction block number

若尚未 approve 初始值為 -1 transferBlockNo int 否 「證據監管鏈表」ERC721

token transfer 的 Transaction block number

若尚未 transfer 初始值為 -1 contextHash string 否 「證據監管鏈表」本⽂,經正

規化再以 SHA-256 計算出 Hash 值,以 Hex 編碼

TransferEvidenceChain Response

statusCode int 否 回應代碼,"0000"代表成功,

其他代碼表⽰失敗

statusMessage string 否 回應代碼說明,"OK"表⽰成 功,其他表⽰失敗

TransferEvidenceChain Request 範例 {"caseID":"20180923C001",

"evidenceID":"20180923C001-001",

"note":"any message"}

encContext 明⽂範例

TransferEvidenceChain Response 範例 {"statusCode":0,

"statusMessage", "OK"}

(5) 接收證據監管鏈表(ReceiveEvidenceChain)

表 3-14:接收證據監管鏈表(ReceiveEvidenceChain)

ReceiveEvidenceChain

功能說明 接收⽅將證據監管鏈資料解密後回傳結果給傳送⽅

欄位 格式 允許空值 說明

ReceiveEvidenceChain Request caseID string 否 案件編號

evidenceID string 否 證據編號

transferBlockNo int 否 接收⽅接收「證據監管鏈表」ERC721 token 的 Transfer transaction block number

若拒絕接收則為 -1 ReceiveEvidenceChain Response

statusCode int 否 回應代碼,"0000"代表成功,其他代碼表⽰失 敗

statusMessage string 否 回應代碼說明,"OK"表⽰成功,其他表⽰失 敗

ReceiveEvidenceChain Request 範例 {"caseID":"20180923C001",

"evidenceID":"20180923C001-001",

"transferBlockNo", 1234}

ReceiveEvidenceChain Response 範例 {"statusCode":0,

"statusMessage", "OK"}

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

3-7. 數位鑑識證據監管鏈平台資料庫設計

數位鑑識證據監管鏈平台採⽤ SQL Lite 關聯式資料庫,共有 ForensicsCase(案件資料表)、ForensicsEvidence(證據資訊資料表)、

ForensicsEvidenceChain(證據監管鏈資料表)以及 ForensicsNodeInfo(節點資 料表)四個資料表。ForensicsCase 與 ForensicsEvidence 為⼀對多關聯;

ForensicsEvidence與 ForensicsEvidenceChain 為⼀對多關聯,資料庫實體關聯圖

(ERD)如圖 3-3 ,以下說明資料表的欄位:

圖 3-3:數位鑑識證據監管鏈平台資料庫 ERD 圖

(2) 案件資料表(ForensicsCase)

表 3-16:案件資料表(ForensicsCase)

資料表名稱 ForensicsCase 資料表說明 儲存案件清單

欄位 資料型態 PK/FK 說明

forensicsCaseID integer PK Forensic Table 流⽔號 caseID text FK 案件編號

contractAddr text 數位鑑識案件 Ethereum 合約位址

(3) 證據資訊資料表(ForensicsEvidence)

表 3-17:證據資訊資料表(ForensicsEvidence)

資料表名稱 ForensicsEvidence

資料表說明 儲存數位證據鑑識資訊(EvidenceInfo)

欄位 資料型態 PK/FK 說明

forensicsEvidenceID integer PK ForensicsEvidence Table 流⽔號 forensicsCaseID integer FK Forensic Table 流⽔號

evidenceID text 證據編號

tokenID integer Ethereum ERC 721 token smart contract address

organization text 受查機關名稱 subject text 證據名稱

receiveDate text 搜集⽇期,格式:yyyy/MM/dd onSiteForensics text 現場鑑識⼈員

(4) 證據監管鏈資料表(ForensicsEvidenceChain)

表 3-18:證據監管鏈資料表(ForensicsEvidenceChain)

資料表名稱 ForensicsEvidenceChain

資料表說明 儲存數位證據的證據監管鏈紀錄(Evidence Chain)

欄位 資料型態 PK/FK 說明

evidenceChainID integer PK ForensicsEvidenceChain Table 流⽔號 forensicsEvidenceID integer FK ForensicsEvidence Table 流⽔號 dataAndTime text ⽇期及時間,格式:yyyy/MM/dd

HH:mm:ss recoveredBy text 部⾨交付⼈員 receivedBy text 部⾨接收⼈員 purposeOfTransfer text 交付⽬的

approveBlockNo integer ethereum approve transaction 的 block number

transferBlockNo integer ethereum transfer transaction block number

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(5) 節點資料表(ForensicsNodeInfo)

表 3-19:節點資料表(ForensicsNodeInfo)

資料表名稱 ForensicsNodeInfo

資料表說明 儲存以太坊節點的使⽤者資訊

欄位 資料型態 PK/FK 說明

forensicsNodeID integer PK ForensiceNodeIndo Table 流⽔號

nodeType integer

node 業務別:

1為受查單位;2 為蒐證單位;3 為鑑識實 驗室;4 為警政單位;5 為司法單位 nodeCN text node 的 Common Name

nodeName text node 的中⽂名稱

serverIP text node 的 Web Service IP ECQVCert text node 的 ECQV 憑證

nodeAddr text node 的 Ethereum account address

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

3-8. 數位鑑識證據監管鏈平台作業流程

數位鑑識證據監管鏈平台的作業流程分成四⼤部分,描述傳送⽅透過本區 塊鏈平台將產⽣好的證據監管鏈表傳送給接收⽅,接收⽅亦透過區塊鏈平台接 收該證據監管鏈表,⽽傳收雙⽅各⾃擁有以太坊節點、應⽤系統以及資料庫,

數位鑑識證據監管鏈平台的作業流程分成四⼤部分,描述傳送⽅透過本區 塊鏈平台將產⽣好的證據監管鏈表傳送給接收⽅,接收⽅亦透過區塊鏈平台接 收該證據監管鏈表,⽽傳收雙⽅各⾃擁有以太坊節點、應⽤系統以及資料庫,

相關文件