30 (Tham khảo link: https://www.blockcerts.org/guide/ )
(1) Đơn vị phát hành (nhà trƣờng) gửi email mời ngƣời nhận (sinh viên) nhận chứng chỉ trên blockchain
(2) Ngƣời nhận (sinh viên) đồng ý lời mời và gửi lại địa chỉ jtjreen blockchain cho đơn vị phát hành (nhà trƣờng)
(3) Đơn vị phát hành (nhà trƣờng) băm chứng chỉ và đƣa lên blockchain
(4) Đơn vị phát hành (nhà trƣờng) gửi chứng chỉ cho ngƣời nhận (sinh viên)
(5) Ngƣời nhận (sinh viên) gửi chứng chỉ tới ngƣời xác minh ( nhà tuyển dụng)
(6) Ngƣời xác minh (nhà tuyển dụng) kiểm tra trên blockchain để xác minh chứng chỉ.
Một số đặc điểm của Blockcerts:
Hỗ trợ 2 nên tảng blockchain là Bitcoin và Ethereum Các thông tin cá nhân không đƣợc lƣu trên blockchain.
Các chứng chỉ đã đƣợc phát hành không thể chỉnh sửa đƣợc mà chỉ có thể thu hồi.
Chứng chỉ đƣợc thu hồi theo chuẩn Open Badges dựa vào danh sách thu hồi HTTP URI (HyperTex Transfer Protocol Uniform Resource Identifierj: là một chuỗi ký tự đƣợc sử dụng để xác định, nhận dạng một tài nguyên đƣợc sử dụng trong giao thức HTTP).
1 giao dịch trên blockchain sẽ chứa toàn bộ thông tin về lô chứng chỉ đƣợc phát hành. Và phí giao dịch tại thời điểm hiện tại là 0.27$ (Theo nguồn https://bitcoinfees.info/)
3.3. Yêu cầu của bài toán quản lý chứng chỉ
Hiện tại, hầu hết quy trình quản lý chứng chỉ của các tổ chức đào tạo tại Việt Nam sẽ nhƣ sau:
- Bƣớc 1: Quyết định và danh sách học sinh, sinh viên tốt nghiệp
- Bƣớc 2: Lập hồ sơ trình Bộ Giáo dục và Đào tạo duyệt cấp phôi bằng - Bƣớc 3: Tiếp nhận và Quản lí phôi bằng
- Bƣớc 4: In ấn văn bằng chứng chỉ
- Bƣớc 5: Trình ký duyệt văn bằng chứng chỉ - Bƣớc 6: Cấp phát và xử lí các bằng hỏng
- Bƣớc 7: Công khai dữ liệu cấp phát văn bằng trên website - Bƣớc 8: Quản lý văn bằng
31 Sau khi chứng chỉ đƣợc cấp cho ngƣời nhận, ngƣời nhận phải mang chứng chỉ gốc đến các cơ quan có thẩm quyền công chứng nếu muốn chia sẻ thông tin về văn bằng với bên thứ ba.
Bên thứ ba khi muốn xác minh tính đúng đắn của chứng chỉ phải liên hệ với đơn vị phát hành để kiểm tra rất mất thời gian và tiền bạc để thực hiện.
Một giải pháp về quản lý chứng chỉ đào tạo sử dụng công nghệ blockchain phải đảm bảo đƣợc các điều kiện nhƣ sau:
- Đảm bảo chứng chỉ khi đƣợc cấp phát ra phải đảm bảo an toàn về mặt thông tin.
- Cắt giảm nguồn lực và chi phí thực hiện, quản lý.
- Việc xác minh tính đúng đắn của chứng chỉ có thể thực hiện độc lập và không phụ thuộc vào đơn vị phát hành.
3.4. Mô hình thử nghiệm
Dựa trên các module của dự án, thực hiện mô hình thử nghiệm nhƣ sau:
Sinh viên
Hệ thống quản lý chứng chỉ tập trung Hệ thống quản lý Sinh viên
Hồ sơ sinh viên
Quản lý yêu cầu cấp chứng chỉ Tạo chứng chỉ Phát hành chứng chỉ Xác minh chứng chỉ Nhà tuyển dụng Hình 4: Mô hình thử nghiệm
Quy trình thực hiện nhƣ sau:
1) Các đơn vị đào tạo sẽ có một hệ thống quản lý thông tin Sinh viên, từ hệ thống này Sinh viên đủ điều kiện đƣợc cấp chứng chỉ sẽ yêu cầu đơn vị đào tạo cấp chứng chỉ cho mình. Hệ thống quản lý sinh viên sẽ thực hiện:
Yêu cầu ngƣời dùng nhập thông tin địa chỉ Ví của Bitcoin. Tổng hợp yêu cầu cấp chứng chỉ vào file excel
Tạo và gửi dữ liệu file excel làm đầu vào cho Hệ thống chứng chỉ tập trung xử lý
2) Hệ thống quản lý chứng chỉ tập trung sẽ thực hiện:
Tạo chứng chỉ định dạng các file .json (sử dụng module cert-tools). Ký chứng chỉ và phát hành chứng chỉ lên blockchain (sử dụng
32 Gửi dữ liệu các file chứng chỉ đã đƣợc phát hành cho Hệ thống quản
lý sinh viên.
3) Sinh viên lên hệ thống quản lý sinh viên để lấy file chứng chỉ và đƣa cho một bên thứ ba (nhà tuyển dụng) xác thực.
4) Nhà tuyển dụng sử dụng module xác thực cert-verifier để kiểm tra chứng chỉ có hợp lệ hay không.
3.5. Thực nghiệm
Phần này sẽ mô tả lại toàn bộ quá trình triển khai thực nghiệm của giải pháp Blockcerts trong việc quản lý chứng chỉ.
Môi trƣờng triển khai
OS Windows 10 Pro Python 3.7.2
Bitnami WAMP Stack 5.6.39 Rev. 0. Docker Version 2.0.0.2 (30215) Blockchain: Testnet
Công cụ dòng lệnh: Windows PowerShell
IDE: JetBrains PyCharm Community Edition 2018.3.2 Các địa chỉ Bitcoin Địa chỉ Nhà phát hành Public Address miggSiHgD6gJa6ED9SCrppQqMwtncUbmQL Private Key cURHoLU8oWEAA5ZtaFJxRBrhztGvsQzVvMSuf7WSQ4FQcDP5 Pr9S Địa chỉ ngƣời nhận Public Address mk39ervZywy6eU6o9v4JjvQYmYbyiTho2p mgD5QxRmpLK4eyrqAk7XMkq9MWZqGMeQMX moRPFTVL9BTiqZmDNYXbyANR4VM3P9yfGQ mzkiZ87P6ip9g6h45LtwW8i7V9tyxPhFXZ 3.5.1. Tổng hợp yêu cầu cấp chứng chỉ
Đây là quá trình đơn vị phát hành thu thập thông tin địa chỉ Bitcoin của ngƣời học để tạo ra một danh sách phục vụ cho việc phát hành chứng chỉ theo lô của đơn vị phát hành.
Để đƣợc cấp chứng chỉ, các sinh viên cần phải có một địa chỉ Bitcoin. Để tạo địa chỉ này, sinh viên có thể vào link sau
33 https://www.bitaddress.org/bitaddress.org-v3.3.0-SHA256-
dec17c07685e1870960903d8f58090475b25af946fe95a734f88408cef4aa194.h tml?testnet=true . Chi tiết địa chỉ Bitcoin đƣợc tạo minh họa trong Hình 5.
Hình 5: Tạo địa chỉ Bitcoin
Hình 6 mô tả một file tổng hợp yêu cầu cấp chứng chỉ của sinh viên
Hình 6: File yêu cầu cấp chứng chỉ roster_testnet_uet.csv
3.5.2. Tạo file chứng chỉ (module cert-tools)
3.5.2.1. Mô tả
Đây là công cụ dòng lệnh để thiết kế định dạng chứng chỉ, khởi tạo một lô chứng chỉ.
3.5.2.2. Cài đặt
Cài đặt môi trƣờng ảo để chạy Python o Download gói virtualenv
pip -p python3 virtualenv o Tạo môi trƣờng ảo cho project
cd $project_home virtualenv venv o Kích hoạt môi trƣờng
34 cd $project_home/venv/Scripts
Click activate.bat Sử dụng git để clone repository
git clone https://github.com/blockchain- certificates/cert-tools.git
Chuyển thƣ mục và cài đặt
cd cert-tools pip install . Tạo file conf.ini:
# issuer information
issuer_url = https://uet.vnu.edu.vn issuer_email = linhcoltech@gmail.com
issuer_name = University of Engineering and Technology issuer_id = http://127.0.0.1/issuer-uet.json
revocation_list=http://127.0.0.1/revocation.json
issuer_signature_lines={"fields": [{"job_title": "University
Issuer","signature_image": "images/issuer-signature.png","name": "Your signature"}]}
issuer_public_key=ecdsa-koblitz-
pubkey:miggSiHgD6gJa6ED9SCrppQqMwtncUbmQL
# certificate information
certificate_description = Hieu truong truong Dai hoc Cong nghe cap certificate_title = Bang tot nghiep thac sy
criteria_narrative=Cong nghe thong tin
badge_id = 23fec99e-e52e-4e76-848e-b04d27ed693f # images issuer_logo_file = images/logo.png cert_image_file = images/certificate-image.png issuer_signature_file = images/issuer-signature.png ################### ## TEMPLATE DATA ## ################### data_dir = sample_data
35 # template output directory
template_dir = certificate_templates template_file_name = test.json
############################## ## INSTANTIATE BATCH CONFIG ## ############################## unsigned_certificates_dir = unsigned_certificates roster = rosters/roster_testnet_uet.csv filename_format = uuid no_clobber = True ################### ## OTHER OPTIONS ## ###################
# whether to hash recipient emails, flag # hash_emails
# can specify an array of additional global fields. For each additional field, you must indicate:
# - the jsonpath to the field # - the global value to use
# additional_global_fields = {"fields": [{"path":
"$.certificate.subtitle","value": "kim custom subtitle"}]}
additional_global_fields = {"fields": [{"path": "$.displayHtml","value": "<h1>Some html code</h1>"}, {"path": "$.@context","value":
["https://w3id.org/openbadges/v2", "https://w3id.org/blockcerts/v2", {"displayHtml": { "@id": "schema:description" }}]}]}
# can specify an array of additional per-recipient fields. For each additional field, you must indicate:
# - the jsonpath to the field
# - the merge_tag placeholder to use
# - the csv column where the value (per recipient) can be found # additional_per_recipient_fields = {"fields": [{"path":
36 "evidence"}]}
# V1 only
# issuer_certs_url = http://certificates.issuer.org # where the certificates are hosted
Thực hiện tạo 2 file issuer-uet.json (để lƣu định danh của đơn vị phát hành), revocation.json (để lƣu danh sách các chứng chị bị thu hồi) tại đƣờng dẫn C:\Bitnami\wampstack-5.6.39-0\apache2\htdocs
File issuer-uet.json
Hình 7: File cấu hình issuer-uet.json
File revocation.json { "@context": "https://w3id.org/openbadges/v2", "id": "http://127.0.0.1/revocation.json", "type": "RevocationList", "issuer": "http://127.0.0.1/issuer-uet.json", "revokedAssertions": [ {
"id": "urn:uuid: 93019408-acd8-4420-be5e-0400d643954a ", "revocationReason": "Honor code violation"
}, {
"id": "urn:uuid:eda7d784-c03b-40a2-ac10-4857e9627329", "revocationReason": "Issued in error."
} ] }
37
3.5.2.3. Các công cụ
Sau khi cài cert-tools sẽ cung cấp 2 công cụ:create_certificate_template.py và instantiate_certificate_batch.py
create_certificate_template.py: là công cụ tạo ra file template của chứng chỉ
với những cài đặt đƣợc cung cấp trong file conf.ini
create-certificate-template -c conf.ini
instantiate_certificate_batch.py: là công cụ tạo ra file chứng chỉ của ngƣời
nhận theo template tạo ra ở script trƣớc và thông tin từ file .csv lƣu thông tin ngƣời nhận đƣợc tạo ra sau quá trình ở mục 4.3.1.
instantiate-certificate-batch -c conf.ini
3.5.2.4. Output
Đầu ra của quá trình này là những file chứng chỉ theo định dạng .json theo template đã đƣợc chuẩn hóa.
Hình 8: Đầu ra của quá trình khởi tạo chứng chỉ
3.5.3. Phát hành chứng chỉ lên blockchain (module cert-issuer)
3.5.3.1. Mô tả
Đây là quá trình phát hành chứng chỉ lên blockchain bằng cách tìm ra giá trị băm của lô chứng chỉ phát hành và đẩy lên trƣờng OP_RETURN của một giao dịch Bitcoin.
38
Hình 9: Tạo Merkle root của lô chứng chỉ
(Tham khảo https://github.com/blockchain-certificates/cert-issuer)
Hoàn toàn có thể thực hiện phát hành chứng chỉ dƣới dạng mỗi chứng chỉ là một giao dịch Bitcoin, nhƣng sẽ hiệu quả hơn nhiều khi thực hiện phát hành chứng chỉ theo lô. Đơn vị phát hành xây dựng một cây Merkle của băm chứng chỉ và phát hành giá trị gốc của cây Merkle (256 bit) lên trƣờng OP_RETURN trong giao dịch Bitcoin.
3.5.3.2. Cài đặt
Cài đặt Docker Version 2.0.0.2 (30215) Dùng git để clone repository
git clone https://github.com/blockchain- certificates/cert-issuer.git
cd cert-issuer
Tại thƣ mục cert-issuer, thực hiện build một bản container trên docker:
docker build -t bc/cert-issuer:1.1 . Sau khi build xong, thực hiện kiểm tra containerid:
docker ps –l
Hình 10: Kiểm tra ContainerID
Tƣơng tác với cointainer vừa build
39 Thực hiện sửa file cấu hình conf.ini trong đƣờng dẫn /etc/cert-
issuer/conf.ini issuing_address = miggSiHgD6gJa6ED9SCrppQqMwtncUbmQL chain=bitcoin_testnet usb_name=/etc/cert-issuer/ key_file=pk_issuer.txt unsigned_certificates_dir=/etc/cert-issuer/data/unsigned_certificates blockchain_certificates_dir=/etc/cert-issuer/data/blockchain_certificates work_dir=/etc/cert-issuer/work no_safe_mode
Thay giá trị của tham số:
o issuing_address: bằng địa chỉ Bitcoin của nhà phát hành o chain: loại blockchain sẽ triển khai ở đây là bitcoin testnet o usb_name: tên của đƣờng dẫn, thiết bị chứa private key của
nhà phát hành
o key_file: là tên file chƣa private key của nhà phát hành o unsigned_certificates_dir: đƣờng dẫn chứa những chứng chỉ
chƣa đƣợc phát hành
o blockchain_certificates_dir: đƣờng dẫn chứa những chứng chỉ đã đƣợc phát hành lên blockchain
o work_dir: thƣ mục lƣu chứng chỉ trong quá trình xử lý
Tạo file pk_issuer.txt tại đƣờng dẫn /etc/cert-issuer/ với nội dung cURHoLU8oWEAA5ZtaFJxRBrhztGvsQzVvMSuf7WSQ4FQcDP5 Pr9S
Copy chứng chỉ đầu ra của mục 4.3.2.4 vào thƣ mục /etc/cert- issuer/data/unsigned_certificates : docker cp ca3903a0-b49e-4ac6-88e7- a2c1495e56e1.json 8f60e18ed038:/etc/cert- issuer/data/unsigned_certificates docker cp 01463a59-c7dc-4b53-ae71- 4af8a223c6b9.json 8f60e18ed038:/etc/cert- issuer/data/unsigned_certificates docker cp 800a369f-efa2-4735-9a9d- 89787077fdf9.json 8f60e18ed038:/etc/cert- issuer/data/unsigned_certificates
40 docker cp 1822803c-6d76-464d-b20d-
57834fdc4645.json 8f60e18ed038:/etc/cert- issuer/data/unsigned_certificates
3.5.3.3. Phát hành chứng chỉ
Thực hiện lệnh bên dƣới:
cert-issuer -c /etc/cert-issuer/conf.ini Log của quá trình xử lý
WARNING - Your app is configured to skip the wifi check when the USB is plugged in. Read the documentation to ensure this is what you want, since this is less secure
INFO - This run will try to issue on the bitcoin_testnet chain
INFO - Set cost constants to
recommended_tx_fee=0.000600,min_per_output=0. 000028,satoshi_per_byte=250
INFO - Processing 4 certificates
INFO - Processing 4 certificates under work path=/etc/cert-issuer/work
INFO - Total cost will be 133500 satoshis INFO - Starting finalizable signer
WARNING - app is configured to skip the wifi check when the USB is plugged in. Read the documentation to ensure this is what you want, since this is less secure
INFO - Stopping finalizable signer
WARNING - app is configured to skip the wifi check when the USB is plugged in. Read the documentation to ensure this is what you want, since this is less secure
INFO - here is the op_return_code data:
ef3da16394c64206b0550715f7245676ea79e65579e96 86708bc5f40f1ce2441 INFO - Unsigned hextx=01000000018e271fa8474aa27cc0ff13cf13013 9c66693d3a61b87e889df2609f2970d26eb0000000000 ffffffff02a7efce00000000001976a91422bf4e32a70 aa5015cb3e6eac2454528628c2be588ac000000000000 0000226a20ef3da16394c64206b0550715f7245676ea7 9e65579e9686708bc5f40f1ce244100000000
INFO - Preparing tx for signing INFO - Starting finalizable signer
41 check when the USB is plugged in. Read the documentation to ensure this is what you want, since this is less secure
INFO - Stopping finalizable signer
WARNING - app is configured to skip the wifi check when the USB is plugged in. Read the documentation to ensure this is what you want, since this is less secure
INFO - The actual transaction size is 235 bytes INFO - Signed hextx=01000000018e271fa8474aa27cc0ff13cf13013 9c66693d3a61b87e889df2609f2970d26eb000000006b 483045022100e72a35f471e5e20de8d7e0a28f8c30646 54a1065262c2cbc03ee7bb050f7f975022046519b6b6c 0b63dfd396b2285910d9b7ed83637654794714056e1e8 149a4ba2c0121026e711471626a411ce1f617c487d92a a3ac9a6105a0279d219414f23cdd401ef8ffffffff02a 7efce00000000001976a91422bf4e32a70aa5015cb3e6 eac2454528628c2be588ac0000000000000000226a20e f3da16394c64206b0550715f7245676ea79e65579e968 6708bc5f40f1ce244100000000 INFO - Signed hextx=01000000018e271fa8474aa27cc0ff13cf13013 9c66693d3a61b87e889df2609f2970d26eb000000006b 483045022100e72a35f471e5e20de8d7e0a28f8c30646 54a1065262c2cbc03ee7bb050f7f975022046519b6b6c 0b63dfd396b2285910d9b7ed83637654794714056e1e8 149a4ba2c0121026e711471626a411ce1f617c487d92a a3ac9a6105a0279d219414f23cdd401ef8ffffffff02a 7efce00000000001976a91422bf4e32a70aa5015cb3e6 eac2454528628c2be588ac0000000000000000226a20e f3da16394c64206b0550715f7245676ea79e65579e968 6708bc5f40f1ce244100000000
INFO - verifying op_return value for transaction
INFO - verified OP_RETURN
WARNING - Caught exception trying provider <bound method
BlockrIOBroadcaster.broadcast_tx of
<cert_issuer.blockchain_handlers.bitcoin.conn ectors.BlockrIOBroadcaster object at
0x7f43d1882e48>>. Trying another.
Exception=Expecting value: line 1 column 1 (char 0)
42 INFO - Broadcasting succeeded with
method_provider=<bound method BlockExplorerBroadcaster.broadcast_tx of <cert_issuer.blockchain_handlers.bitcoin.conn ectors.BlockExplorerBroadcaster object at 0x7f43d1882cf8>>, txid=039b659f49bb383455bad0f12b7f2ffd951cc3c7 23136c60bda2792c67657bdd
INFO - Broadcast transaction with txid
039b659f49bb383455bad0f12b7f2ffd951cc3c723136 c60bda2792c67657bdd
INFO - Your Blockchain Certificates are in /etc/cert-issuer/data/blockchain_certificates
3.5.3.4. Output
Kết quả của quá trình này là 4 file chứng chỉ đã đƣợc ký và phát hành thành công lên blockchain testnet:
Hình 11: Đầu ra các chứng chỉ được phát hành
3.5.4. Xác minh chứng chỉ trên blockchain (module cert-verifier)
3.5.4.1. Mô tả
Đây là quá trình sau khi chứng chỉ đƣợc phát hành và chuyển đến cho ngƣời nhận. Ngƣời nhận chuyển cho bên thứ ba (thƣờng là nhà tuyển dụng) để thực hiện xác minh chứng chỉ.
Ngƣời nhận khi nhận chứng chỉ sẽ có các thông tin: Bitcoin transaction ID lƣu thông tin của MerkleRoot Giá trị Merkle root trên blockchain
Giá trị hash của chứng chỉ
Đƣờng dẫn của chứng chỉ tới Merkle root.
Quá trình xác minh sẽ thực hiện các tính toán để kiểm tra:
Giá trị băm của chứng chỉ có khớp với giá trị đƣợc lƣu trong chứng chỉ hay không
Đƣờng dẫn của chứng chỉ tới gốc Merkle có hợp lệ hay không Gốc Merkle đƣợc lƣu trên blockchain có khớp với giá trị đƣợc lƣu
chứng chỉ không
3.5.4.2. Cài đặt
43 git clone https://github.com/blockchain-
certificates/cert-verifier.git Cài đặt module cd cert-verifier pip install . 3.5.4.3. Xác minh chứng chỉ Thực hiện lệnh cd cert-verifier
Mở file verifier.py trong đƣờng dẫn E:\cert_verifier\cert-
verifier\cert_verifier thực hiện trỏ vào file chứng chỉ cần kiểm tra. Ví dụ cần check file chứng chỉ 01463a59-c7dc-4b53-ae71-
4af8a223c6b9.json
if __name__ == "__main__": if len(sys.argv) > 1:
for cert_file in sys.argv[1:]: print(cert_file) result = verify_certificate_file(cert_file) print(result) else: result = verify_certificate_file('../tests/data/2.0/ 01463a59-c7dc-4b53-ae71-4af8a223c6b9.json ') print(result) 3.5.4.4. Output
Trong trƣờng hợp chứng chỉ hợp lệ, các bƣớc kiểm tra chứng chỉ có giả mạo hay không, có hết hạn hay không, có bị thu hồi hay không và có đúng đƣợc cấp bởi nhà phát hành hay không đều pass.
Hình 12: Đầu ra chứng chỉ hợp lệ
44
45
3.6. Kết luận
Blockchain là công nghệ phân tán sử dụng các thuật toán mật mã học để đạt đƣợc các mục tiêu: bảo mật, xác thực, toàn vẹn dữ liệu và chống chối bỏ giao dịch. Từ các ƣu điểm đó mà blockchain ngày càng đƣợc ứng dụng trong nhiều lĩnh vực khác ngoài tài chính nhƣ giáo dục, y tế, nông nghiệp… Luận văn cung cấp một cái nhìn tổng quan về công tác quản lý chứng chỉ, công nghệ blockchain và về việc áp dụng công nghệ blockchain trong quản lý chứng chỉ. Đồng thời, luận văn cũng sử dụng giải pháp Blockcerts của MIT Media Lab để minh họa. Với những ƣu điểm của chứng chỉ số, giải pháp Blockcerts hoàn toàn có thể áp dụng tại những đơn vị đào tạo khi có định hƣớng rõ ràng về mặt chính sách trong lĩnh vực quản lý chứng chỉ trong đào tạo.
Luận văn chỉ dừng lại ở việc nghiên cứu lý thuyết và sử dụng một giải pháp sẵn có để minh họa. Khi triển khai vẫn còn tồn tại một số vấn đề liên quan tới việc đăng ký định danh cho nhà phát hành vẫn cần phải quản lý tập trung. Cho nên, để đƣa mô hình vào thực tế vẫn cần có các điều kiện tiên quyết nhƣ: định hƣớng quản lý chứng chỉ trong đào tạo của các cơ quan có