5.1. Tổng quan công nghệ và hạ tầng
5.1.1. Công nghệ
5.1.1.1. Blockchain Hyperledger Fabric
Do có liên quan đến các van dé bao mật và người dùng, công nghệ Blockchain
sử dụng cần phải riêng tư, yêu cầu các quyền han và phải hỗ trợ hợp đồng thông minh. Với những điều kiện đặt ra như vậy, những công nghệ Blockchain công khai (Public
blockchain) như EtherumỶ không phù hợp trong trường hợp này. Trong khi đó,
Hyperledger Fabric‘ là đủ điều kiện vì công nghệ blockchain được sử dụng là riêng
tư, cho phép định nghĩa và hạn chế các quyền cũng như hỗ trợ xử lý logic các hợp
đồng thông minh. Cụ thé, các hệ thống blockchain công khai là các hệ thống mở, bat
kỳ ai cũng có thể tham gia vào mạng. Ngược lại, các peer trong một mạng Hyperledger Fabric được thống nhất thông qua một nhà cung cấp dịch vụ thành viên
(Membership Identity Service). Dich vụ này được định nghĩa trong chính sách chứng
thực; chức năng chính là quản lý định danh (ID) của người dùng và xác thực người
tham gia vào mạng. Khác với những mạng blockchain truyền thống không thê hỗ trợ các giao dịch riêng tư và các hợp đồng bí mật, Hyperledger Fabric có khả năng cung cấp một hệ thống dam bảo tính minh bạch, xác thực, bảo mật và sở hữu kha năng kiêm toán cho những thành phần của bằng chứng số. Ngoài ra, các khối (blocks) mới trong công nghệ Blockchain Hyperledger Fabric được thống nhất thông qua một cơ chế đồng thuận thay vì sử dụng các giao thức như bằng chứng công việc (Proof of Work) hay băng chứng cô phan (Proof of Stake). Điều này giúp gia tăng hiệu năng
và giảm lượng năng lượng tiêu thụ.
3 Tham khảo: https://ethereum.org/en/developers/
* Tham khảo: https://hyperledger-fabric.readthedocs.io/en/release-2.2/
5.1.1.2. InterPlanetary File System (IPFS) Cluster
InterPlanetary File System° (IPFS) là một giao thức và mang ngang hang dé lưu trữ và chia sẻ dữ liệu trong một hệ thống tệp phân tán. Các File trong IPFS được lưu
trữ địa chỉ dựa trên nội dung thay vì vị trí. Khi một file được thêm vào mạng, IPFS
tạo một địa chỉ đa băm của file dựa trên nội dung của file và mã băm của khóa công
khai của một Node dé dam bảo rằng file được lưu trên mạng là duy nhất. IPFS tìm kiếm files thông qua định danh nội dung (Content Identifier - CID) thay vì tìm kiếm theo vị trí file được lưu trữ. IPFS loại bỏ việc trùng nội dung files bằng cách đảm bảo rằng các file có cùng nội dung sẽ chỉ được lưu một lần và chỉ có thê tìm kiếm thông
qua CID.
Có 2 loại mang IPFS là mạng công khai và mạng riêng tư. Tắt cả các files trong mạng IPFS công khai đều có thé truy cập bởi tat cả mọi người. Tuy nhiên bởi vì yêu cầu bài toán cần sự riêng tư cho các tô chức nên việc sử dụng mạng riêng tư thay vì mạng công khai được sử dụng để giới hạn mạng đối với một số thực thể nhất định. Mạng IPFS riêng tu (Private IPFS) bao gồm các peer node chia sẻ chung với nhau một khóa bí mật và chỉ giao tiếp với các node trong mạng đồng thời cũng không phản hồi với bat kỳ yêu cầu nào từ các node bên ngoài.
Bởi vì bản thân IPFS không cung cấp kha năng sao chép dữ liệu (data replication) giữa các node trong mạng nên chúng tôi sử dụng một ứng dụng giúp hỗ
trợ sao chép dữ liệu trong IPFS được gọi là IPFS-Cluster. IPFS-Cluster® là một ứng
dụng độc lập cùng với một ứng dụng khách CLI chịu trách nhiệm phân bổ, sao chép
va theo dõi các dữ liệu được ghim trên một cụm IPFS daemon. IPFS-Cluster sử dụng
thuật toán đồng thuận RAFT để điều phối, lưu trữ và phân phối các tập dữ liệu trên
các nodes tham gia.
> Tham khảo: https://docs.ipfs.io/
5 Tham khảo: https://cluster.ipfs.io/
47
5.1.2. Hạ tầng
Hạ tầng chính của hệ thống sẽ bao gồm 02 máy vận hành chính hạ tầng của hệ thống BbF và 01 máy giả lập hệ thống mạng SDN của tô chức.
Bảng 5-1 miêu tả tổng quan về vai trò và cấu hình của từng máy trong hệ thống.
Bảng 5-1: Cầu hình và vai trò của các máy
Cấu hình Vai trò Máy số 1 e 4CPU e Vận hành hệ thống mạng
Máy số 2 °
Máy số 3 °
se 8GB RAM
e 60GB Hard disk
e Hệ điều hành: Ubuntu
20.04 64-bit
2CPU
e 8GB RAM
e 30GB Hard disk
e Hệ điều hành: Ubuntu
20.04 64-bit
4 CPU
e 8GB RAM
e 40GB Hard disk
e Hé điều hành: Ubuntu
20.04 64-bit
e Xây dựng mang Blockchain.
Blockchain
Vận hành hệ thống lưu trữ File
phân tán IPFS Vận hành chương trình Blockcham API tương tác với blockchain và IPFS
Vận hành dịch vụ Web dựa trên MERN Stack
Gia lập môi trường mang SDN,
kiểm thử tan công nhằm tao bằng chứng số tự động trong bồi cảnh thực tế
Quy trình hiện thực hệ thống được trình bày theo thứ tự như sau:
e Xây dựng và triển khai hợp đồng thông minh.
e Xây dựng hệ thống lưu trữ File phân tán.
e Xây dựng lớp API tương tác với hệ thong mạng blockchain.
e Xây dựng dịch vụ Web.
e Xay dựng giao diện người dùng.
5.2. Xây dựng mạng Blockchain
Organization 1 - CA Organization 2 - CA
TLS-CA Identity-CA TLS-CA Identity-CA
Hình 5-1: Sơ đồ các thành phan mang Blockchain
Vì muốn thé hiện khả năng lưu trữ phân tán giữa các peer node và các tô chức khác nhau nên chúng tôi chọn xây dựng một mô hình đơn giản hai t6 chức (Orgl và Org2); mỗi tổ chức bao gồm là hai peer node (Hình 5-1). Tương ứng đối với các Peer Node là các số cái lưu trữ riêng biệt sử dung image của couchDB. Đây là cơ sở dữ liệu trạng thái của số cái. CouchDB là một kho lưu trữ đối tượng dưới dạng tài liệu;
49
CouchDB cho phép lưu trữ dữ liệu ở định dạng JSON, tạo ra các truy van JSON tới
dữ liệu và hỗ trợ truy van dựa vào chỉ mục (index).
Bên cạnh các Peer Node còn có các máy đóng vai trò là nhà cung cấp chứng chỉ CA cho các tổ chức. Nhà cung cấp chứng chỉ (CA) cho mỗi tô chức được tách
thành hai container riêng biệt. TLS-CA và Identity-CA. TLS-CA sẽ chịu trách nhiệm
phát hành các chứng chỉ TLS nhằm mục đích đảm bảo giao tiếp an toàn và bảo mật giữa các node trong tô chức (mạng Hyperledger Fabric riêng tư yêu cầu mọi giao tiếp trong mạng đều cần được mã hóa). Trong khi đó, Identity-CA được sử dụng để tạo ra các chứng chỉ làm định danh cho các thực thể trong tô chức như các peer node, quản
trị viên và người tham gia. Việc tách riêng một máy chủ TLS riêng biệt cho phép bảo
mật thông tin liên lạc bằng một chuỗi tin cậy (Chain of Trust) độc lập.
Các luồng giao dịch trong Hyperledger Fabric bình thường sẽ cần chữ ký của 3 thành phần trước khi thực hiện giao dịch. Đầu tiên là người gửi hay người dùng, đây
là những người thực hiện việc yêu cầu chứng thực, tạo các giao dịch và gửi cho
ordering. Thứ hai là các Peer, bên sẽ thực thi các giao dịch và tạo ra kết quả khi thực
hiện giao dịch. Các Peer ký vào kết quả thực thi dé chứng thực rang logic nghiệp vu
đã được thực thi chính xác. Cuối cùng là các Orderers với công việc sắp xếp các giao dịch, đặt các giao dịch vào trong các khối, sau đó ký để chứng thực răng đã đạt được
sự đồng thuận và cũng cho các peer có thể coi lệnh giao dịch này là lệnh cuối cùng
để các peer có thé cập nhật chính xác trạng thái số cái kip thời nhất. Nếu một định danh của một thực thê trong mạng thỏa mãn yêu cầu cho cả 3 vai trò trên thì sẽ có nguy cơ gây ra cuộc tan công Double Spend. Vì lý do đó, các node thực hiện vai trò Orderer sẽ được có riêng hai CA dé cấp chứng chỉ TLS và định danh đồng thời cũng
sẽ được tách riêng biệt ra một tổ chức khác với hai tổ chức còn lại.
5.2.1. Cài đặt môi trường
Các thành phần trong mạng Blockchain đều được vận hành và khởi chạy trên nên tảng Docker container. Docker container là một runtime environment cho phép đóng gói toàn bộ mã nguồn và chạy một ứng dụng độc lập dé triển khai sản phẩm
được nhanh chóng và đáng tin cậy. Docker container được khởi chạy từ docker
container image là một gói phần mềm nhẹ, độc lập, bao gồm tat cả mọi thứ cần thiết
để chạy một ứng dụng như: code, runtime, system tools, system libraries và settings.
Các máy của mạng Blockchain sử dụng công nghệ Docker container để chạy các image của các thành phần trong mạng. Công việc cấu hình và thiết lập các biến
môi trường và nơi lưu trữ cho các container trước khi chạy được thực hiện trong một
file cầu hình docker-compose.yaml. Trong đó mạng giao tiếp giữa các container sẽ
có tên là “forennet.com”. Danh sách các container được trình bày tại Bang 5-2.
Bang 5-2: Danh sách container trong mạng Blockchain Hyperledger Fabric
Tén container Vai tro Image Port
tls-ca.orderer TLS-CA cho các orderer hyperledger/fabric- 7052
Node ca
fls-ca.org1 TLS-CA cho các node hyperledger/fabric- 7053
thuộc tổ chức 1 ca
tls-ca.org2 TLS-CA cho các node hyperledger/fabric- 7054
thuộc tổ chức 2 ca
rca.orderer Identity/Root-CA cho các hyperledger/fabric- 7062
thực thể của Orderers ca
rca.orgl Identity/Root-CA cho các hyperledger/fabric- 7063
thực thé của tô chức 1 ca
rca.org2 Identity/Root-CA cho các hyperledger/fabric- 7064
thực thé của tổ chức 2 ca couchdb_peerl.orgl Số cái lưu trữ cho Peer 1 hyperledger/fabric- 5984
thuộc tô chức 1 couchdb couchdb_peer2.orgl Số cái lưu trữ cho Peer 2 hyperledger/fabric- 6984
thuộc tô chức 1 couchdb couchdb_peerl.org2 Số cái lưu trữ cho Peer 1 hyperledger/fabric- 7986
thuộc tô chức 2 couchdb
51
couchdb_peer2.org2 Số cái lưu trữ cho Peer 2 hyperledger/fabric- 8984
thuộc tô chức 2 couchdb peerl.org1 Peer Node 1 của tổ chức 1 hyperledger/fabric- 7082
peer
peer2.org1 Peer Node 2 của tổ chức 1 hyperledger/fabric- 7084
peer
peerl.org2 Peer Node 1 của tổ chức2 hyperledger/fabric- 7092
peer
peer2.org2 Peer Node 2 của tổ chức 2 hyperledger/fabric- 7094
peer
ordererl.orderers Orderer Node 1 của tô chức hyperledger/fabric- 7072
Orderers orderer
orderer2.orderers Orderer Node 2 của tô chức hyperledger/fabric- 7073
Orderers orderer
orderer3.orderers Orderer Node 3 của tô chức hyperledger/fabric- 7074
Orderers orderer
5.2.2. Xây dựng các máy CA, Peer Node và Orderer Node trong mang
Công việc đầu tiên khi bắt đầu xây dựng mạng là khởi chạy các container CA
dé thực hiện việc khởi tạo các chứng chỉ TLS, các chứng chỉ định danh cần thiết cho các node Peer và Orderer. Việc tạo chứng chỉ cần thông qua 2 bước là đăng ký thông tin định danh với CA và ghi danh dé CA cấp phát chứng chỉ. Có tat cả 6 CA tương ứng với 3 tô chức (Org1, Org2 và Orderer). Những chứng chỉ được CA cấp được liệt
kê như sau:
e tls-ca.orderer: cung cấp chứng chi TLS cho Orderer Node 1, Orderer
Node 2, Orderer Node 3.
e tls-ca.orgl: cung cấp chứng chi TLS cho Peer Node 1, Peer Node 2
thuộc tô chức 1.
e tls-ca.org2: cung cấp chứng chi TLS cho Peer Node 1, Peer Node 2
thuộc tổ chức 2.
e_ rca.orderer: cung cấp chứng chỉ định danh (Identity) cho Orderer Node
1, Orderer Node 2, Orderer Node 3 và Admin cho tô chức Orderer.
e rca.orgl: cung cấp chứng chỉ định danh (Identity) cho Peer Node 1, Peer
Node 2 và Admin thuộc tổ chức 1.
e rca.org2: cung cấp chứng chỉ định danh (Identity) cho Peer Node 1, Peer
Node 2 va Admin thuộc tổ chức 2.
Sau khi đã có được các chứng chỉ cần thiết từ CA, các Peer node sẽ được triển khai và cho khởi chạy. Bời vì mỗi peer đều cần có một số cái riêng nên trước khi vận hành các Peer node thì phải cho khởi chạy các container số cái trước. Container chạy
số cái cho các Peer node được chọn là CouchDB vì đây là cơ sở dữ liệu cho phép lập
mô hình dữ liệu trên số cái dưới dạng JSON và đưa ra cac truy vấn dựa trên giá tri của di liệu giúp cho việc truy van hiệu quả hơn và cho phép truy van tập dữ liệu lớn. Các container của Peer node sẽ được định nghĩa các biến môi trường để cài đặt như cau hình kết nối với cho số cái, cau hình sử dung chứng chi TLS, các thuật toán sử dụng cũng như địa chỉ và port lắng nghe yêu cầu.
Thành phần cuối cùng trong mạng Blockchain cần được khởi chạy là các Orderer Node. Các orderer node đều yêu cầu một khối đặc biệt gọi là khối khởi nguyên (genesis block) của các Orderer. Đây là khối đầu tiên của kênh hệ thống (system channel) bởi vì nó là khối chứa các cấu hình cơ bản cho mạng. Kênh hệ thống
là một kênh đặc biệt do quản trị viên của các orderer quản lý. Khối khởi nguyên chứa các thông tin về hệ thống mạng như các tổ chức tham gia, các chính sách và cài đặt
cho dich vu Ordering. Khối khởi nguyên của hệ thống được tạo ra bằng công cụ configtxgen và một file câu hình tên là configtx.yaml chứa tat cả các cài đặt về kênh
hệ thống, kênh riêng tư, danh sách tô chức được phép tạo kênh, chính sách kiểm soát truy cập,... Sau khi đã có được khối khởi nguyên thì các container cho các Orderer
node sẽ được khởi chạy va sẵn sang hoạt động.
53
5.2.3. Xây dựng kênh riêng tư
Sau khi đã xây dựng được các thành phan trong mạng, dé các node trong mạng giao tiếp với nhau an toàn, bí mật và riêng từ thì một kênh riêng tư cần được tạo ra
và cho phép các node tham gia vào kênh. Các cài đặt cho kênh riêng tư cũng được
thực hiện tai file configtx.yaml. Cu thé, file configtx.yaml chứa những thông tin sẽ
được dùng khi cải đặt kênh như sau
e Tên của kênh: Forensic Channel.
e Các tô chức tham gia vào kênh: Org] và Org2.
e Dich vụ Ordering: bao gom 3 Orderer node (ordererl.orderers
orderer2.orderers, orderer3.orderers) và thuật toán đồng thuận sử dụng
là thuật toán RAFT. RAFT là một dịch vụ CFT (Crash Fault Tolerant)
ordering dựa trên việc trién khai giao thức Raft. RAFT tuân theo mô hình
“Leader and Follower” khi một trong số các orderer node được chọn làm leader và những quyết định của leaders được sao chép bởi các orderer
node còn lại trong kênh.
e Chính sách của kênh: sử dụng chính sách mặc định của Hyperledger
Fabric.
Việc xây dựng kênh Forensic Channel cũng cần một genesis block. Việc tạo kênh sẽ do một peer (thuộc một tô chức trong danh sách các tô chức được cho phép tạo kênh) thực hiện. Peer node | từ tổ chức 1 sẽ sinh ra một giao dịch tạo kênh từ file configtx.yaml. Peer node 1 sau đó sẽ gửi giao dịch này đến cho dich vụ Ordering. Những thông tin khởi tạo ban đầu cho kênh có trong giao dịch này được dịch vụ Ordering sử dụng dé tạo ra genesis block cho kênh. Sau khi đã có genesis block, kênh
Forensic Channel sẽ tự động được tạo. Tuy nhiên, lúc này chưa có peer node nào
tham gia vào kênh. Các peer node từ các tổ chức muốn tham gia vào kênh thì cần phải được cung cấp genesis block từ peer node 1 thuộc tô chức 1.
Sau khi đã cho cả cả 4 peer từ 2 tổ chức tham gia vào kênh, quá trình tạo kênh riêng tư hoàn tat. Lúc này quá trình hiện thực hệ thống bước sang giai đoạn tiếp theo: Xây dựng các hợp đồng thông minh.
5.3. Xây dựng và triển khai hop đồng thông minh
Trong hợp đồng thông minh có 3 đối tượng được lưu trữ chính trong sô cái đó
là đối tượng người tham gia (Participant), đối tượng vụ án (Case) và đối tượng bằng chứng (Evidence). Các hợp đồng thông minh (hay còn gọi chaincode đối với Hyperledger Fabric) sẽ được viết trên ngôn ngữ Golang.
5.3.1. Xây dựng cấu trúc dữ liệu và phương thức của đối tượng người
tham gia
Participant
ParticipantiD string Email string FullName string Affiliation string
Gender string
Birthday string
Case List [Istring
CaseAdminList [Istring
OwningEvidenceList [string MyAttributes Ostring
Hình 5-2: Cấu trúc dit liệu người tham gia
Đối tượng người tham gia chính là dữ liệu của người dùng tham gia vào mạng (Hình 5-2). Người dùng được lưu trong số cái với chỉ mục là ParticipantID. Bên cạnh những thông tin cá nhân như tên, email hay tổ chức mà người đó tham gia (Affiliation), đối tượng người tham gia còn có các giá trị liên quan đến các đối tượng
khác như danh sách vụ án mà người đó tham gia (CaseList), danh sách vu án ma
người đó đang quản trị (CaseAdminList) và danh sách bằng chứng mà người đó sở
hữu (OwningEvidenceList). Ngoài ra còn có tập các thuộc tinh trong chứng chỉ hiện
tại của người dùng cũng sẽ được lưu vào đối tượng dé dé dàng kiểm tra tại đặc tính
55