Mô-đun tương tác với Blockchain

Một phần của tài liệu Ứng dụng blockchain vaf merkle tree để tăng cường bảo mật dữ liệu trong mô hình xác thực dựa trên thuộc tính người dùng (Trang 87 - 90)

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 hashsha(merkleP roof[i].value,hash)

10 else

11 hashsha(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

Một phần của tài liệu Ứng dụng blockchain vaf merkle tree để tăng cường bảo mật dữ liệu trong mô hình xác thực dựa trên thuộc tính người dùng (Trang 87 - 90)

Tải bản đầy đủ (PDF)

(122 trang)