Ứng dụng nền tảng blockchain trong bài toán quản lý nguồn gốc và đặc tính của dữ liệu mở

111 7 0
Ứng dụng nền tảng blockchain trong bài toán quản lý nguồn gốc và đặc tính của dữ liệu mở

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA DƯƠNG ANH THƯ ỨNG DỤNG NỀN TẢNG BLOCKCHAIN TRONG BÀI TỐN QUẢN LÝ NGUỒN GỐC VÀ ĐẶC TÍNH CỦA DỮ LIỆU MỞ Chuyên ngành: Khoa học máy tính Mã số: 60480101…………… LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 12 năm 2019 CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA –ĐHQG -HCM Cán hướng dẫn khoa học: ………PGS.TS Đặng Trần Khánh Cán chấm nhận xét 1: Cán chấm nhận xét 2: Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày 30 tháng 12 năm 2019 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: PGS.TS Nguyễn Thanh Bình TS Lê Hồng Trang TS Nguyễn An Khương PGS.TS Nguyễn Tuấn Đăng PGS.TS Huỳnh Trung Hiếu Xác nhận Chủ tịch Hội đồng đánh giá LV Trưởng Khoa quản lý chuyên ngành sau luận văn sửa chữa (nếu có) CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA………… ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Dương Anh Thư MSHV: 1770161 Ngày, tháng, năm sinh: 22/09/1991 Nơi sinh: Tp.Hồ Chí Minh Chuyên ngành: Khoa học máy tính Mã số : 60480101 I TÊN ĐỀ TÀI: ỨNG DỤNG NỀN TẢNG BLOCKCHAIN TRONG BÀI TỐN QUẢN LÝ NGUỒN GỐC VÀ ĐĂC TÍNH CỦA DỮ LIỆU MỞ II NHIỆM VỤ VÀ NỘI DUNG: • • • • • • • • • Xác định vai trò việc xác thực nguồn gốc bối cảnh liệu mở Các kỹ thuật quản lý thông tin nguồn gốc, đặc tính liệu mở Các sản phẩm công nghệ liên quan Nghiên cứu mô hình liệu mở có khả tích hợp : Các đặc điểm chung, vấn đề chưa giải Xác định đặc trưng mơ hình liệu mở, lựa chọn phương pháp phù hợp Đề xuất ứng dụng blockchain cho toán quản lý nguồn gốc đặc tính liệu mở Triển khai mơ hình blockchain có khả tích hợp với tảng liệu mở Mơ tả quy trình tích hợp giải pháp Giải vấn đề q trình tích hợp giải pháp III NGÀY GIAO NHIỆM VỤ : 11/02/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 08/12/2019 V CÁN BỘ HƯỚNG DẪN: Tp HCM, ngày tháng năm 20 CÁN BỘ HƯỚNG DẪN (Họ tên chữ ký) CHỦ NHIỆM BỘ MÔN ĐÀO TẠO (Họ tên chữ ký) TRƯỞNG KHOA….……… (Họ tên chữ ký) Lời cảm ơn Em xin cảm ơn thầy cô tổ mơn Khoa Học Máy Tính, thầy cô trường đại học Bách Khoa giảng dạy, gíup đỡ em suốt q trình học tập nghiên cứu Đặc biệt, suốt trình học thực đề tài, em nhận động viên bạn bè, đồng nghiệp người thân gia đình Đồng thời, e xin gửi lời cám ơn sâu sắc tới thầy Đặng Trần Khánh, với hướng dẫn khoa học thầy giúp em xây dựng kết khoá luận Hy vọng luận văn nhận ý kiến đóng góp hội đồng để nội dung ngày hoàn thiện Trân trọng cảm ơn! Tóm tắt luận văn Nền tảng liệu mở trở thành xu tất yếu trình phát triển hệ sinh thái đa ứng dụng Dữ liệu chia sẻ từ nhiều nguồn, tái sử dụng nhiều đối tượng nhiều ứng dụng khác nhau, từ đặt nhiều vấn đề tốn quản lý nguồn gốc đặc tính liệu Trong bối cảnh đó, blockchain tảng công nghệ nhận quan tâm giới, với tính chất đảm bảo bất biến, tính minh bạch, chế phân tán, với khả tự động hố khiến blockchain trở thành hướng đầy tiềm để giải vấn đề Luận văn trình bày mơ hình giải pháp tích hợp blockchain vào tảng liệu mở để giải vấn đề quản lý nguồn gốc đặc tính liệu mở Nội dung trình bày bao gồm nghiên cứu liên quan, chế tích hợp, quy trình hoạt động, mơ hình chuẩn giao tiếp tảng Đồng thời thực giải pháp cụ thể tảng liệu mở CKAN blockchain Hyperledger fabric Kết trình bày chi tiết nội dung luận văn cho thấy kết hợp mang tính logic hướng khả thi mang tính ứng dụng cao Giải pháp đề xuất mang tính tổng qt có khả mở rộng tương lai Nowadays, open data is a vital part as the most variety of resource input for many systems Data is originating from different sources and reused by many different applications under different purposes, thereby exposing several problems about managing data provenance and characteristic Meanwhile, blockchain is a new raising technology that gets a lot of attention around the world With its immutability, transparency, distributed mechanisms, and automation capabilities, using blockchain seems like a possible direction to solve these problems This thesis presents the model design of integrating blockchain into an open data platform to solve this issue The research involves some related studies, integration mechanism, operating procedures, showing the standard model of communication between two platforms and experimental real model with CKAN and Hyperledger Fabric The result shows that this combination is logical and a feasible direction of high applicability The proposed solution is general and scalable in the future LỜI CAM ĐOAN Tôi xin cam đoan luân văn trình bày kết nghiên cứu cá nhân tôi, không chép từ Nôi dung nghiên cứu tự tìm hiểu, phân tích cách trung thực, khách quan hướng dẫn khoa học PGS.TS Đặng Trần Khánh Tơi xin hồn tồn chịu trách nhiệm lời cam đoan DƯƠNG ANH THƯ MỤC LỤC MỤC LỤC MỤC LỤC HÌNH ẢNH I GIỚI THIỆU Giới thiệu toán Giải vấn đề Các toán khác bối cảnh liệu mở 3.1 Tính riêng tư liệu 3.2 Quyền sở hữu liệu 3.3 Kiểm tra đánh giá chất lượng liệu II CƠ SỞ TRI THỨC Siêu liệu nguồn gốc (data provenance) 1.1 Giới thiệu 1.2 Chuẩn siêu liệu nguồn gốc W3C PROV 1.3 Bảo vệ thông tin nguồn gốc liệu 13 Dữ liệu mở - Open Data 15 2.1 Giới thiệu 15 2.2 Các tảng liệu mở phổ biến 15 2.3 Tổng kết tảng liệu mở 19 Nền tảng Blockchain 21 3.1 Giới thiệu 21 3.2 Các ứng dụng blockchain vào thực tiễn 21 3.3 Phân loại Blockchain 23 3.4 Nền tảng Blockchain Hyperledger Fabric 24 Các giải pháp Blockchain liệu nguồn gốc giới 33 4.1 DataProv 33 4.2 ProvChain 34 4.3 Neisse et al 36 4.4 Using PROV and Blockchain to Archive Data health provenance 37 4.5 Tổng kết 39 III Nội dung giải pháp đề xuất 40 Định danh cổng thông tin - Portal 41 Cơ chế thu thập liệu xuất xứ hệ thống liệu mở 41 2.1 Chức mở rộng - Plugin 42 2.2 Công việc chạy - Background jobs 43 2.3 Kết hợp Plugin Background jobs 44 2.4 Tổng quát hoá 44 Cơ chế quản lý người dùng hệ thống liệu mở blockchain 45 3.1 Người dùng từ tảng liệu mở 46 3.2 Người dùng không thuộc tảng liệu mở 48 3.3 Quản lý lưu trữ định danh cổng thông tin người dung 49 Cơ chế thu hồi, cấp phát chứng cho người dùng bị định danh bị thay đổi 50 Cơ chế lưu trữ liệu mạng lưới blockchain 51 5.1 Mơ hình chung quản lý lưu trữ liệu 51 5.2 Quản lý lưu trữ liệu xuất xứ 52 Cơ chế xử lý tiếp nhận truy vấn liệu mạng lưới blockchain 53 Thiết kế hệ thống mạng lưới blockchain 55 Chuyển đổi chuẩn liệu nguồn gốc 56 Xây dựng ứng dụng khai thác liệu lưu trữ blockchain 56 10.Tích hợp thành phần tạo thành giải pháp hoàn chỉnh 57 11 Đánh giá khả giải pháp 57 IV HIỆN THỰC GIẢI PHÁP 59 Môi trường thực công cụ sử dụng 60 Thiết lập vận hành tảng CKAN 60 Xây dựng webhook plugin CKAN cho phép theo dõi thay đổi các đối tượng 62 API Endpoint cho phép đăng ký khởi tạo định danh cổng thông tin 62 Quá trình xử lý cho phép đồng hoá liệu từ hệ thống CKAN blockchain 64 API cho phép người dùng từ CKAN kích hoạt thơng tin định danh 65 API cho phép người dùng tạo thơng tin định danh tương tác trực tiếp với blockchain 65 Thiết lập, vận hành mạng lưới blockchain 65 Xây dựng Chaincode blockchain 67 Cấu trúc lưu trữ chung đối tượng 68 9.2 Logic xử lý chung tất chaincode 68 9.3 Cấu trúc lưu trữ thông tin xuất xứ 69 9.4 Chức cụ thể chaincode 70 10 Xây dựng API truy vấn blockchain 71 11 Xây dựng ứng dụng 72 12 Kiểm tra khả chống thay đổi tảng blockchain 72 13 Kết luận 74 V TỔNG KẾT 75 1.Tổng kết nội dung 75 2.Hướng phát triển 75 VI DANH MỤC TÀI LIỆU THAM KHẢO 76 VII PHỤ LỤC 79 I Phụ lục hình ảnh 79 Một số hình sau CKAN setup thành cơng vận hành 79 Ví dụ trình hoạt động Redis Queue task gửi liệu API 81 Các hình liên quan đến trình xây dựng ứng dụng 82 Các bước minh hoạ trình kiểm tra khả chống thay đổi hệ thống 87 II Một số đoạn mã minh hoạ 92 III Một số ví dụ API request payload 98 MỤC LỤC HÌNH ẢNH Figure 1: Mơ hình chung kiến trúc W3C PROV [2] 10 Figure 2: Ví dụ định dạng PROV-N 11 Figure Ví dụ định dạng PROV-XML 12 Figure Ví dụ định ạng PROV-O 12 Figure Kiến trúc chung CKAN [7] 16 Figure Kiến trúc tảng Socrata 17 Figure Các tảng blockchain Hyperledger 24 Figure Minh hoạ kiến trúc Hyperledger Fabric 25 Figure 10 Cấu trúc ghi hyperledger fabric 27 Figure 11 Mơ hình chứng hyperledger fabric 28 Figure 12 Tiến trình đồng thuận hyperledger fabric 31 Figure 13 Tiến trình xử lý DataProv 33 Figure 14 Minh hoạ hoạt động ProvChain [11] 35 Figure 15 Minh hoá cấu trúc liệu provenance file CDA 37 Figure 16 Kiến trúc giải pháp ứng dụng tảng blockchain vào lĩnh vực y tế 38 Figure 17 khái niệm cổng thông tin 41 Figure 18 Mối quan hệ Dataset Resources CKAN 42 Figure 19 Plugin CKAN cho phép theo dõi lifecycle đối tượng 42 Figure 20 Cơ chế đồng hoá CKAN kết hợp plugin background jobs 44 Figure 21 người dùng hỗ trợ giải pháp đề xuất 45 Figure 22 Minh hoạ trình người dùng từ tảng chủ động kích hoạt định danh blockchain 47 Figure 23 Người dùng khơng thuộc tảng tự đăng ký kích hoạt định danh cho riêng 48 Figure 24 Minh hoạ việc quản lý lưu trữ định danh thông tin người dùng blockchain49 Figure 25 Các bước thu hồi cấp phát định danh 50 Figure 26 Cấu trúc liệu lưu trữ blockchain 51 Figure 27 Dữ liệu nguồn gốc đối tượng lưu trữ thành chương 52 Figure 28 Các chaincode hệ thống 53 Figure 29: Chaincode tiếp nhận thơng tin từ giới bên ngồi, xử lý trả kết 54 Figure 30 Thiết kế hệ thống mạng lưới blockchain 55 Figure 31 Kết hợp thành phần giải pháp đề xuất 57 Figure 32 Cấu trúc vận hành thực nghiệm CKAN 61 Figure 33 Các bước xử lý cho trình đăng ký định danh cổng thơng tin 63 Figure 34 Cơ chế đồng hoá liệu từ CKAN vào blockchain thông qua queue 64 Figure 35 Cấu hình blockchain thực nghiệm 66 Figure 36 Minh hoạ docker vận hành 67 Figure 37 Ví dụ thông tin provenance lưu trữ thành công couchdb 70 Figure 38 code giao tiếp process nodejs python 72 Figure 39 Cấu hình kiểm tra chống thay đổi blockchain 73 Figure 40 Giao diện Web CKAN cho phép đăng ký người dùng 79 Figure 41 Màn hình tạo dataset 80 Figure 42 Màn hình thêm resource vào dataset 80 Figure 43 Redis queue task gửi liệu API 81 Figure 44 Màn hình login ứng dụng web 82 Figure 45 Danh sách dataset ngườời dùng 83 Figure 46 Thông tin Dataset từ blockchain 83 Figure 47 Thông tin liệu xuất xứ dataset định dạng PROV-JSON 84 Figure 48 Thông tin liệu xuất xứ Dataset định dạng PROV-N 84 Figure 49 Dữ liệu xuất xứ trực quan hố hình ảnh định dạng PDF 84 Figure 50 Thông tin lịch sử dataset qua phiên 85 Figure 51 Màn hình cho phép thêm mới, cập nhật dataset từ ứng dụng web 85 Figure 52 Màn hình cho phép upload, rút trích thơng tin file từ giao diện web 86 Figure 53 hệ thống sau thiết lập cho trình kiểm thử 87 Figure 54 bước kiểm tra hệ thống hoạt động thành công 87 Figure 55 thay đổi giá trị trực tiếp couchdb 90 Figure 57 Hệ thống blockchain hoạt động bình thường với nút cịn lại 90 Figure 58 Dữ liệu khôi phục từ thong tin node khác hệ thống 91 { "Key": "CAR5", "Record": { "colour": "purple", "make": "Peugeot", "model": "205", "owner": "Michel" } }, { "Key": "CAR6", "Record": { "colour": "white", "make": "Chery", "model": "S22L", "owner": "Aarav" } }, { "Key": "CAR7", "Record": { "colour": "violet", "make": "Fiat", "model": "Punto", "owner": "Pari" } }, { "Key": "CAR8", "Record": { "colour": "indigo", "make": "Tata", "model": "Nano", "owner": "Valeria" } }, { "Key": "CAR9", "Record": { "colour": "brown", "make": "Holden", "model": "Barina", "owner": "Shotaro" } } ] Bước 2: vào sở liệu couchdb Org1, thay đổi giá trị đối tượng có key CAR0, đổi giá trị colour = “CYAN” 89 Figure 55 thay đổi giá trị trực tiếp couchdb Bước 3: Thực giao dịch liên quan đến đối tượng có key CAR0 Figure 56 Giao dịch lỗi không đạt đồng thuận nút Kết không thực giao dịch, lỗi trả hệ thống không đạt đồng thuận, kết node bị thay đổi khơng giống với kết nút cịn lại Bước 4: Loại bỏ nút bị thay đổi khỏi mạng lưới, sau loại bỏ nút bị thay đổi, hệ thống hoạt động bình thường docker kill peer0.org1.example.com docker kill couchdb.peer0.org1 Figure 57 Hệ thống blockchain hoạt động bình thường với nút cịn lại Bước 5: Thiết lập nút với liệu từ nút hệ thống docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml up -d peer0.org1.example.com couchdb.peer0.org1 90 Figure 58 Dữ liệu khôi phục từ thong tin node khác hệ thống Bước 6: hệ thống hoạt động bình thường với nút khôi phục 91 II Một số đoạn mã minh hoạ Code trình theo dõi thay đổi đối tượng User # User event @event.listens_for(model.user.User, 'after_insert') def receive_after_insert(mapper, connection, target): WebhooksPlugin.notifyByWebHook('user/create', target) @event.listens_for(model.user.User, 'after_update') def receive_after_update(mapper, connection, target): WebhooksPlugin.notifyByWebHook('user/update', target) @event.listens_for(model.user.User, 'after_delete') def receive_after_delete(mapper, connection, target): WebhooksPlugin.notifyByWebHook('user/delete', target) Code xử lý có file upload - plugin đọc file từ datastore - rút trích thông tin tạo mã hash MD5 đặc trưng file def getHashOfResouce(jsonResource): resourceID = jsonResource['id'] site_user = toolkit.get_action('get_site_user')({'ignore_auth': True}, {}) res_dict, pkg_dict = get_resource_and_dataset(resourceID) resourceURL = res_dict['url'] headers = {} headers['Authorization'] = site_user['apikey'] response = get_response(resourceURL, headers) m = hashlib.md5() length = cl = None for chunk in response.iter_content(16 * 1024): length += len(chunk) m.update(chunk) file_hash = m.hexdigest() return file_hash 92 Code minh hoạ cho trình trích xuất liệu gửi Portal cho trình đồng hố def notify_hooks(resource, topic, site_url): if topic == 'resource/update' or topic == 'resource/create': hashOfResouce = getHashOfResouce(resource) resourceID = resource['id'] res_dict = toolkit.get_action('resource_show')(None, {'id': resourceID}) resource['file_hash'] = hashOfResouce resource['file_path'] = res_dict['url'] payload = { 'entity': resource, 'address': site_url, 'ckan': site_url, 'topic': topic } response = requests.post('http://localhost:3004/api/worker/callback', headers={ 'Content-Type': 'application/json' }, data=json.dumps(payload, cls=DateTimeEncoder), timeout=2) 93 Code minh hoạ xử lý queue API import { Processor, Process, OnQueueActive, OnQueueEvent, BullQueueEvents, OnQueueRemoved, OnGlobalQueueCompleted, OnGlobalQueueRemoved, } from 'nest-bull'; import { Job, DoneCallback } from 'bull'; import { Logger } from '@nestjs/common'; import { threadId } from 'worker_threads'; import { Workerservice } from './worker.service'; @Processor({ name: 'test_queue' }) export class WorkerQueue { private readonly logger = new Logger(this.constructor.name); } constructor(private readonly workerService: Workerservice) { @Process({ name: 'ckanUser', concurrency: }) processCkanUser(job: Job, callback: DoneCallback) { callback(null, this.workerService.handleCkanUser(job.data)) } @Process({ name: 'ckanOrg', concurrency: }) processCkanOrg(job: Job, callback: DoneCallback) { callback(null, this.workerService.handleCkanOrg(job.data)) } @Process({ name: 'ckanDataset' }) processCkanDataset(job: Job, callback: DoneCallback) { callback(null, this.workerService.handleCkanDataset(job.data)) } @Process({ name: 'ckanResource', concurrency: }) processCkanResource(job: Job, callback: DoneCallback) { callback(null, this.workerService.handleCkanResource(job.data)) } @OnQueueActive() 94 onActive(job: Job) { this.logger.log( `Processing job ${job.id} of type ${job.name} with data ${JSON.stringify(job.data)} `, ); } @OnQueueRemoved() onRemove(job: Job) { this.logger.log( `======= Removing job ${job.id} of type ${job.name} with data ${job.data} `, ); } @OnQueueEvent(BullQueueEvents.COMPLETED) onCompleted(job: Job, result) { this.logger.log( `Completed job ${job.id} of type ${job.name} with result ${job.returnvalue}`, ); job.remove() } } 95 Chaincode validate thông tin trước xử lý import { ChaincodeTx } from '@worldsibu/convector-platform-fabric'; import { ConvectorController } from '@worldsibu/convector-core'; import { User } from ' /user/user.model' import { BaseModel } from './baseModel.model'; export abstract class BaseController extends ConvectorController { public async validateCurrentSender() { // make sure current sender is valid user let listUserBySender = await User.query(User, { "selector": { "type": new User().type, "identities.0.fingerprint": this.sender, "identities.0.status": true } }) as User[] if (!listUserBySender || listUserBySender.length !== 1) { throw new Error('There is no valid or active credential available with current sender') } return listUserBySender[0] } public checkingIfPortalUser(user: User) { let userTypeAttribute = user.attributes.find(att => att.name === 'user_type'); let userType = userTypeAttribute ? userTypeAttribute.value : undefined return (!userTypeAttribute.expired) && userType === 'portal_user' } public checkingIfCasualUser(user: User) { let userTypeAttribute = user.attributes.find(att => att.name === 'user_type'); let userType = userTypeAttribute ? userTypeAttribute.value : undefined return (!userTypeAttribute.expired) && userType === 'casual_user' } public getUserType(user: User) { let userTypeAttribute = user.attributes.find(att => att.name === 'user_type'); let userType = userTypeAttribute ? userTypeAttribute.value : undefined return userTypeAttribute && !userTypeAttribute.expired ? userType : undefined } } 96 Chaincode query liệu từ couchdb thông qua mango query let listUseryFingerPrint = await User.query(User, { "selector": { "type": new User().type, "identities": { "$elemMatch": { "fingerprint": user.fingerprint } } } }) as User[] 97 III Một số ví dụ API request payload Create portal Endpoint : http://localhost:3003/api/portal/create Payload request { "name": "ckan platform", "description": "ckan platform opendata", "email": "ckanopendata@gmail.com", "domain": "http://ckanopendata:5000", "category": "opendata", "userPortalAssociate": { "username": "sysadmin", "apiKey": "047b8cd2-02d7-48dc-941e-d8553471fae7", "state": "active" } } 98 Kết trả { "ClientID": "635e0881a6b5559f918db761ed74422b205c69c8ae1218acc6caa08bd5d6d 84a", "ClientSecrect": "wgRfNzaNEjey", "name": "ckan platform", "identity": { "type": "X509", "mspId": "org1MSP", "certificate": " -BEGIN CERTIFICATE \nMIIERTCCA+ygAwIBAgIUImdnE/3PtqAwog0uCM0H+7c6gdIwCgYIKoZIzj0E AwIw\ncTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNV BAcTDVNh\nbiBGcmFuY2lzY28xGDAWBgNVBAoTD29yZzEuaHVybGV5LmxhYjEb MBkGA1UEAxMS\nY2Eub3JnMS5odXJsZXkubGFiMB4XDTE5MTEyODE4MDYwMFoX DTIwMTEyNzE4MTEw\nMFowVTE1MDMGA1UECxMsY2xpZW50LHVzZXIscGVlcix2 YWxpZGF0b3IsYXVkaXRv\ncixjYSxtZW1iZXIxHDAaBgNVBAMME2NrYW5fcGxh dGZvcm1fYWRtaW4wWTATBgcq\nhkjOPQIBBggqhkjOPQMBBwNCAASd1YmM78Gt GOza1iXajt9Uz9UfBgtY6eXWtWqB\nxeuKoRvwDMti4SgCw5vuQZbSlC6lumze 2MRCvvBfWQmfomVGo4ICfDCCAngwDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB /wQCMAAwHQYDVR0OBBYEFIxXIBWLYPh2LEuD\nh54K7FOCSBe5MCsGA1UdIwQk MCKAIPlWzpaKSaRVUz6XBFgPxTFmSZ8Za7U7A9uI\n7V6if7kBMIICCgYIKgME BQYHCAEEggH8eyJhdHRycyI6eyJhZG1pbiI6InRydWUi\nLCJjYXRlZ29yeSI6 Im9wZW5kYXRhIiwiZGVzY3JpcHRpb24iOiJja2FuIHBsYXRm\nb3JtIG9wZW5k YXRhIiwiZG9tYWluIjoiaHR0cDovL2NrYW5vcGVuZGF0YTo1MDAw\nIiwiZW1h aWwiOiJja2Fub3BlbmRhdGFAZ21haWwuY29tIiwiaGYuQWZmaWxpYXRp\nb24i OiIiLCJoZi5FbnJvbGxtZW50SUQiOiJja2FuX3BsYXRmb3JtX2FkbWluIiwi\n aGYuUmVnaXN0cmFyLkF0dHJpYnV0ZXMiOiIqIiwiaGYuUmVnaXN0cmFyLkRlbG Vn\nYXRlUm9sZXMiOiJjbGllbnQsdXNlcix2YWxpZGF0b3IsYXVkaXRvciIsIm hmLlJl\nZ2lzdHJhci5Sb2xlcyI6ImNsaWVudCx1c2VyLHBlZXIsdmFsaWRhdG 9yLGF1ZGl0\nb3IsY2EiLCJoZi5SZXZva2VyIjoidHJ1ZSIsImhmLlR5cGUiOi JjbGllbnQsdXNl\ncixwZWVyLHZhbGlkYXRvcixhdWRpdG9yLGNhLG1lbWJlci IsIm5hbWUiOiJja2Fu\nIHBsYXRmb3JtIiwicG9ydGFsIjoiY2thbiBwbGF0Zm 9ybSIsInJvbGUiOiJhZG1p\nbiJ9fTAKBggqhkjOPQQDAgNHADBEAiAj0dXWLL J8jj/GoMwDtNaOa+eaYb1ZWWeR\nfEsfNeKWawIgIWu/2zKLpz6l6lHPLY9m2i GwooBgAglA5/qXvj4eJ+M=\n -END CERTIFICATE -\n", "privateKey": " -BEGIN PRIVATE KEY \r\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUO2O69lzTG 91XPKG\r\nx6xdA8bllwUEERnd1yWkoiuLRIuhRANCAASd1YmM78GtGOza1iXa jt9Uz9UfBgtY\r\n6eXWtWqBxeuKoRvwDMti4SgCw5vuQZbSlC6lumze2MRCvv BfWQmfomVG\r\n -END PRIVATE KEY -\r\n" }, "fingerprint": "DE:80:DA:7F:8D:0F:17:9D:47:BD:BE:C2:61:2A:77:37:B2:D8:DF:C9" } 99 Endpoint cho phép người dùng từ CKAN kích hoạt thơng tin định danh Endpoint :http://localhost:3004/api/users/generateCertificate Payload request { } "apikey": "c9c74a14-9287-46a7-a530-2f736765317f", "email": "user1@gmail.com" Kết trả { "username": "user1@gmail.com", "password": "ffcb1c7ab09b6a2978e69909a6225336abd260e6cf02a8798262ccecb5d6f a38", "email": "user1@gmail.com", "fabricIdentity": { "type": "X509", "mspId": "org1MSP", "certificate": " -BEGIN CERTIFICATE \nMIIDIzCCAsmgAwIBAgIUTxEjIfS8QScwqqP5eDHKav6/I8swCgYIKoZIzj0E AwIw\ncTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNV BAcTDVNh\nbiBGcmFuY2lzY28xGDAWBgNVBAoTD29yZzEuaHVybGV5LmxhYjEb MBkGA1UEAxMS\nY2Eub3JnMS5odXJsZXkubGFiMB4XDTE5MTEyODE3MzEwMFoX DTIwMTEyNzE3MzYw\nMFowKTENMAsGA1UECxMEdXNlcjEYMBYGA1UEAwwPdXNl cjFAZ21haWwuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgUvblZGS Oacryq6hw3KnUnVrs8rt8IQh\n5Doqlgv/PnF26Jclj406DP4UlohXr6XoSsfr 9YtkVdgiCt535lHqb6OCAYUwggGB\nMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMB Af8EAjAAMB0GA1UdDgQWBBQzpMBleOQI\nYP4G8jYPq+vZxP3KZzArBgNVHSME JDAigCD5Vs6WikmkVVM+lwRYD8UxZkmfGWu1\nOwPbiO1eon+5ATCCARMGCCoD BAUGBwgBBIIBBXsiYXR0cnMiOnsiYWRtaW4iOiJm\nYWxzZSIsImhmLkFmZmls aWF0aW9uIjoiIiwiaGYuRW5yb2xsbWVudElEIjoidXNl\ncjFAZ21haWwuY29t IiwiaGYuUmVnaXN0cmFyLkF0dHJpYnV0ZXMiOiIqIiwiaGYu\nUmVnaXN0cmFy LkRlbGVnYXRlUm9sZXMiOiJjbGllbnQsdXNlciIsImhmLlJlZ2lz\ndHJhci5S b2xlcyI6ImNsaWVudCx1c2VyIiwiaGYuUmV2b2tlciI6InRydWUiLCJo\nZi5U eXBlIjoidXNlciIsInVzZXJuYW1lIjoiXCJ1c2VyMUBnbWFpbC5jb21cIiJ9\n fTAKBggqhkjOPQQDAgNIADBFAiEAzO4LP7/uGJ7uKVK6zhgfMTZV+zhBMmWI2Z vm\n+gBb89QCIGRGJRCYVAHGffuC83Np6RrBNCVfE4hU+WwO44hInvZ/\n END CERTIFICATE -\n", "privateKey": " -BEGIN PRIVATE KEY \r\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8OJ23yCSHo GmDhRD\r\ngvKcM+7sD+VOjIAG9fM8jW/iZ2qhRANCAASBS9uVkZI5pyvKrqHD cqdSdWuzyu3w\r\nhCHkOiqWC/8+cXbolyWPjToM/hSWiFevpehKx+v1i2RV2C IK3nfmUepv\r\n -END PRIVATE KEY -\r\n" }, 100 } "organization": [ "org1" ], "attributes": [], "id": 101 Endpoint cho phép đăng ký kích hoạt người dùng Endpoint: http://localhost:3004/api/users/createActivateUser Payload request: { } "about": "about user2", "name": "user_random_2", "fullname": "fullname user_random_2", "email": "user_random_2@gmail.com", "username": "user_random_2", "password": "123456789" Kết trả { "username": "user_random_2", "password": "8c69d3c6ae25cd33634f475d5142b3382ee7b730f2272d7cf37a9be3b8f4ea89", "email": "user_random_2@gmail.com", "fabricIdentity": { "type": "X509", "mspId": "org1MSP", "certificate": " -BEGIN CERTIFICATE \nMIIDHTCCAsOgAwIBAgIUQZW8d5Ft5297wk5xKHP2BUieo7QwCgYIKoZIzj0EAwIw\ncTELMAkGA1UEBhM CVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGDAWBgNVBAoTD29y ZzEuaHVybGV5LmxhYjEbMBkGA1UEAxMS\nY2Eub3JnMS5odXJsZXkubGFiMB4XDTE5MTEyODE5MDQwMFoXD TIwMTEyNzE5MDkw\nMFowJzENMAsGA1UECxMEdXNlcjEWMBQGA1UEAwwNdXNlcl9yYW5kb21fMjBZMBMG\n ByqGSM49AgEGCCqGSM49AwEHA0IABEGEm4MpsRwLGupv02a6ffUKhFzO2Suz7B1y\n0urNCXt7ktjutjQNK Ek5d73ss8megoyQC7i2Jg5ru2riwU1fXoyjggGBMIIBfTAO\nBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BA IwADAdBgNVHQ4EFgQUYWIaLlhGyk2G\nqZr9DyDis2om6wMwKwYDVR0jBCQwIoAg+VbOlopJpFVTPpcEWA/ FMWZJnxlrtTsD\n24jtXqJ/uQEwggEPBggqAwQFBgcIAQSCAQF7ImF0dHJzIjp7ImFkbWluIjoiZmFs\nc2 UiLCJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1lbnRJRCI6InVzZXJf\ncmFuZG9tXzIiLCJoZi5 SZWdpc3RyYXIuQXR0cmlidXRlcyI6IioiLCJoZi5SZWdp\nc3RyYXIuRGVsZWdhdGVSb2xlcyI6ImNsaWVu dCx1c2VyIiwiaGYuUmVnaXN0cmFy\nLlJvbGVzIjoiY2xpZW50LHVzZXIiLCJoZi5SZXZva2VyIjoidHJ1Z SIsImhmLlR5\ncGUiOiJ1c2VyIiwidXNlcm5hbWUiOiJcInVzZXJfcmFuZG9tXzJcIiJ9fTAKBggq\nhkjO PQQDAgNIADBFAiEAmP5Kmdqn9D6uE8EU8LZBkCl3bwr5AGDLG3BqKneYX64C\nICLcH2mQyDfkKzzHJ7WVH R5qn+iE2ANtU8FzC4v9uoqS\n -END CERTIFICATE -\n", "privateKey": " -BEGIN PRIVATE KEY \r\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgp2QBFhgv5CaRMrA6\r\nPv9xuG6hr8Z qHelHY+boNQwn+BuhRANCAARBhJuDKbEcCxrqb9Nmun31CoRcztkr\r\ns+wdctLqzQl7e5LY7rY0DShJOX e97LPJnoKMkAu4tiYOa7tq4sFNX16M\r\n -END PRIVATE KEY -\r\n" }, "organization": [ "org1" ], "attributes": [], "id": 2, "fingerprint": "18:E3:60:58:AD:57:45:5C:5B:0F:B0:1D:9C:0D:DD:7E:36:97:7E:78" } 102 LÝ LỊCH TRÍCH NGANG Họ tên: Dương Anh Thư Ngày, tháng, năm sinh: 22/09/1991 Nơi sinh: TP Hồ Chí Minh Địa liên lạc: 15 Nguyễn Thời Trung, Phường 6, Quận 5, Tp Hồ Chí Minh Q TRÌNH ĐÀO TẠO Đại học Sư Phạm Tp Hồ Chí Minh – Cử nhân Công Nghệ Thông Tin Cao học đại học Bách Khoa Tp Hồ Chí Minh – ngành Khoa Học Máy Tính Q TRÌNH CƠNG TÁC Lập trình viên Backend cơng ty WinbooksOnWeb Lập trình viên FullStack cơng ty Government Jobs VietNam Lập trình viên mobile cơng ty Yojee 103 ... Chuyên ngành: Khoa học máy tính Mã số : 60480101 I TÊN ĐỀ TÀI: ỨNG DỤNG NỀN TẢNG BLOCKCHAIN TRONG BÀI TOÁN QUẢN LÝ NGUỒN GỐC VÀ ĐĂC TÍNH CỦA DỮ LIỆU MỞ II NHIỆM VỤ VÀ NỘI DUNG: • • • • • • •... vực liệu mở cần phải giải • Nguồn gốc liệu • Quản lý đặc tính liệu Nguồn gốc liệu Phần lớn chế liệu mở chia sẻ thông qua internet, hồn tồn khơng có đảm bảo tính đắn tính khả dụng thơng tin Dữ liệu. .. định đặc trưng mơ hình liệu mở, lựa chọn phương pháp phù hợp Đề xuất ứng dụng blockchain cho toán quản lý nguồn gốc đặc tính liệu mở Triển khai mơ hình blockchain có khả tích hợp với tảng liệu mở

Ngày đăng: 04/03/2021, 20:45

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan