5.2 Các thành phần chính của kiến trúc
5.2.2 Mô-đun tương tác với Blockchain
Để có thể lưu trữ và truy xuất dữ liệu trên Blockchain một cách nhanh chóng và hiệu quả cần có một mô-đun chịu trách nhiệm tương tác với mạng lưới Blockchain thông qua các hợp đồng thông minh (hợp đồng này được triển khai lên mạng lưới Blockchain dưới quyền sở hữu của nhà cung cấp dịch vụ, hoặc dưới quyền sở hữu của người dùng).
Hình 5.6: Mô-đun tương tác với Blockchain
Như mô tả trong Hình 5.6, thông qua địa chỉ của hợp đồng thông minh trên mạng lưới Blockchain hệ thống cũng như người dùng có thể gọi những chức năng của hợp đồng này nhằm lưu cũng như truy xuất thông tin một cách dễ dàng nếu có quyền thao tác.
5.2. Các thành phần chính của kiến trúc
Hợp đồng thông minh của nhà cung cấp dịch vụ CAP rovider thuộc quyền sở hữu của nhà cung cấp dịch vụ, và chỉ nhà cung cấp dịch vụ mới có quyền gọi các phương thức nhằm cập nhật thông tin trên hợp đồng. Các phương thức chính của hợp đồng này bao gồm:
• addT rustedU ser(userId,userEOA,userCA)nhằm lưu trữ địa chỉ hợp đồng cũng như địa chỉ chủ sở hữu của người dùng.
• verif ySignature(message,signature,signer) nhằm xác thực chữ ký của người dùng.
• verif yAnswer(userAnswer,merkleP roof,merkleP roof) nhằm xác thực câu trả lời của người dùng.
Hợp đồng thông minh của người dùng CAU ser thuộc quyền sở hữu của người dùng, và chỉ người dùng mới có quyền gọi các phương thức nhằm cập nhật thông tin trên hợp đồng. Các phương thức chính của hợp đồng này bao gồm:
• setP roof(merkleP roof,merkleP ath,signature) nhằm cập nhật thông tin hồ sơ của người dùng.
• getP roof() nhằm truy xuất thông tin hồ sơ của người dùng.
Giải thuật 5 mô tả chức năng xác thực chữ ký verif ySignature của người dùng trên hợp đồng thông minh của nhà cung cấp dịch vụ CAP rovider nhằm kiểm tra xem câu trả lời có chính xác được gửi từ người dùng hợp lệ của tài khoản hay không, thông quá đó có thể chống được phương pháp tấn công phát lại và chống thoái thoát.
Để quá trình xác thực người dùng luôn luôn sẵn sàng và nhằm phòng chống tấn công từ chối dịch vụ vào tiến trình xác thực. Quá trình xác thực câu trả lời của người dùng sẽ được thực hiện ngay trên mạng lưới Blockchain thông qua lời gọi chức năng verif yAnswer của hợp đồng thông minh CAP rovider. Chức năng này được mô tả thông qua Giải thuật 6 bên dưới với các giá trị đầu vào bao gồm: Mã người dùng, câu trả lời đã được băm, bằng chứng dữ liệu tương ứng và chữ ký của người dùng. Nếu chữ ký hoặc câu trả lời không hợp lệ thì chức năng này sẽ trả về giá trị "sai"và khi đó yêu cầu truy cập vào hệ thống của người dùng sẽ bị từ chối.
5.2. Các thành phần chính của kiến trúc
Algorithm 5: Verify Users Signature
Input: bytes32 message,bytes signature,addresssigner, Output: boolean isValid
1 FunctionverifySignature(message, signature, signer):
2 Given data message and signature, invokerecoverSigner(message, signature) to get the address of user sign the messageaddressFromSig
3 returnaddressF romSig==signer
4 FunctionrecoverSigner(message, signature):
5 require
6 signature.length == 65 // Require correct length
7 declare
8 bytes32 r
9 bytes32 s
10 uint8 v
11 assembly
12 r←mload(add(sig, 32))
13 s←mload(add(sig, 64))
14 v←byte(0, mload(add(sig, 96)))
15 if v <27then
16 v+ =27
17 require
18 v==27 orv==28 // Signature version not match
19 addressaddr←ecrecover(prefixedHash, v, r, s);
20 returnaddr
Algorithm 6: Verify Users Answer
Input: uint4 userId,bytes32 hashAnswer,bytes merkleProof,bytes signature Output: boolean isValid
1 FunctionverifyAnswer(userId, userAnswer, merkleProof, merkleRoot, signature):
2 Given data userId, invokegetUserAddress(userId) to get Users External Owned AccountuserEoa
3 if notverifySignature(userEoa, hashAnswer, signature)then
4 return False
5 declare
6 bytes32 hash←hashAnswer;
7 fori←0to merkleP roof.length by1do
8 if merkleProof[i].position.left then
9 hash←sha(merkleP roof[i].value,hash)
10 else
11 hash←sha(hash,merkleP roof[i].value)
12 Given data userEoa, invokegetMerkleRoot(userEoa) to get Merkle Root merkleRoot
13 returnhash==merkleRoot
5.2. Các thành phần chính của kiến trúc