Tải bản đầy đủ (.docx) (66 trang)

NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN TỬ CÔNG NGHỆ BLOCKCHAIN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.27 MB, 66 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN
TỬ CÔNG NGHỆ BLOCKCHAIN

Hà Nội, 2018

1


BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN
TỬ CÔNG NGHỆ BLOCKCHAIN

Hà Nội, 2018

2


MỤC LỤC

CÁC CỤM TỪ VIẾT TẮT


BIP-32
BIP-39
BIP-44
CKD

Bitcoin Improvement Proposals
32
Bitcoin Improvement Proposals
39
Bitcoin Improvement Proposals
44

Đề xuất cải tiến bitcoin 32
Đề xuất cải tiến bitcoin 39
Đề xuất cải tiền bitcoin 44

Childen key derivation

Hàm tạo khóa con

Elliptic Curve Digital Signature

Thuật toán chữ ký số

Algorithm

đường con elliptic

HD


Hierarachical Deterministic

Ví tất định phân cấp

PoW

Proof of Work

Bằng chứng xử lý

P2SH

Pay to script hash

Trả tới mã băm kịch bản

P2PKH

Pay to pubkey hash

ECDSA

P2P
Network
PBKDF2
RIPEMD16
0

Trả tới mã băm khóa công
khai


Peer-to-Peer Network

Mạng ngang hàng

Password-Based Key Derivation
Function 2
RACE Integrity Primitives

Hàm băm kéo dài khóa 2
Thuật toán mã hóa

Evaluation Message Digest
SHA-256 Cryptographic Hash

RIPEMD160
Thuật toán mã hóa

Algorithm

SHA256

UTXO

Unspent transaction outputs

Đầu ra chưa chi tiêu

Xprv


Extend Private Key

Khóa bí mật mở rộng

Xpub

Extend Public Key

Khóa công khai mở rộng

SHA256

DANH MỤC HÌNH VẼ
3


DANH MỤC BẢNG BIỂU

4


LỜI CẢM ƠN
Trong quá trình thực hiện và hoàn thiện báo cáo thực tập này, em xin gửi
lời cảm ơn chân thành nhất đến các thầy cô trong Khoa An toàn thông tin nói
riêng cũng như toàn thể các thầy cô của Học Viện Kỹ Thuật Mật Mã nói chung
đã cung cấp cho em những kiến thức quý báu trong suốt 5 năm học qua. Đặc
biệt cho em gửi lời cảm ơn sâu sắc nhất tới ThS. Nguyễn Thị Hồng Hà và KS.
Trịnh Khắc Linh đã dành nhiều thời gian vô cùng quý báu để định hướng và
tận tình hướng dẫn em cũng như tạo mọi điều kiện thuận lợi để em có thể hoàn
thành tốt nhất đồ án tốt nghiệp của mình.

Em xin chân thành cảm ơn!
SINH VIÊN THỰC HIỆN

Đặng Văn Quyết

5


LỜI NÓI ĐẦU
Thương mại trên Internet hiện nay hầu như chỉ dựa vào các cơ quan tài
chính đóng vài trò như các bên thứ ba đáng tin cậy để xử lý các thanh toán điện
tử. Trong khi hệ thống này hoạt động vẫn đủ tốt đối với hầu hết các giao dịch, nó
vẫn phải gánh chịu những điểm yếu cố hữu của mô hình dựa trên lòng tin. Ví dụ
như các vấn đề về chi phí giao dịch, thời gian xử lý, gian lận... Trong đó một tỷ lệ
gian lận nhất định phải được chấp thuận như điều không thể tránh khỏi. Các chi
phí này và những sự không chắc chắn trong thanh toán có thể tránh được bằng
cách sử dụng đồng tiền vật lý, nhưng không thể tồn tại cơ chế nào để thực hiện
thanh toán qua một kênh truyền thông mà không cần một bên được tín nhiệm.
Điều cần thiết chính là một hệ thống thanh toán điện tử dựa trên bằng
chứng mật mã thay vì tín nhiệm, cho phép hai bên bất kỳ tự nguyện giao dịch
trực tiếp với nhau mà không cần phải có một bên thứ ba đáng tin cậy.
Với việc phát minh ra bitcoin vào năm 2008, thế giới đã được đưa vào
một khái niệm mới mà hiện nay có khả năng cách mạng hóa toàn bộ xã hội. Đó
là điều hứa hẹn sẽ ảnh hưởng đến mọi ngành nghề, không chỉ giới hạn ở các lĩnh
vực tài chính, chính phủ và truyền thông. Một số mô tả nó như là một cuộc cách
mạng, trong khi một trường phái tư tưởng khác nói rằng nó sẽ là một sự tiến hóa
và phải mất nhiều năm nữa mới có được những lợi ích thiết thực từ blockchain.
Cuộc cách mạng đã bắt đầu; nhiều tổ chức lớn trên khắp thế giới đã chứng minh
bằng cách sử dụng công nghệ blockchain vì tiềm năng của nó đã được công
nhận đầy đủ. Tuy nhiên, một số tổ chức vẫn đang ở giai đoạn thăm dò sơ bộ

nhưng dự kiến sẽ tiến bộ nhanh hơn khi công nghệ ngày càng trở nên trưởng
thành. Đây là một công nghệ có ảnh hưởng đến các công nghệ hiện tại và có khả
năng thay đổi chúng ở mức cơ bản.
Khái niệm tiền điện tử hoặc tiền tệ kỹ thuật số không phải là mới. Kể từ
những năm 1980, các giao thức điện tử đã tồn tại dựa trên mô hình do David
Chaum đề xuất.

6


Các vấn đề cơ bản cần được giải quyết trong các hệ thống tiền điện tử là
trách nhiệm giải trình và ẩn danh. David Chaum đã giải quyết cả hai vấn đề này
trong bài báo cáo của ông vào năm 1984 bằng cách giới thiệu hai hoạt động mật
mã, đó là chữ ký mù và chia sẻ bí mật. Tại thời điểm này, có thể nói rằng chữ ký
mù cho phép ký một tài liệu mà không thực sự nhìn thấy nó và chia sẻ bí mật là
một khái niệm cho phép phát hiện vấn đề double spending (chi kép).
Sau khi các giao thức khác xuất hiện như Chaum, Fiat, và Naor (CFN),
chương trình e-cash đã giới thiệu tính ẩn danh và phát hiện chi kép. Thương hiệu
e-cash là một hệ thống cải tiến khác trên CFN, làm cho nó trở nên hiệu quả hơn.
Một khái niệm khác nhưng có liên quan được gọi là hashcash do Adam
Back giới thiệu vào năm 1997 là một hệ thống Proof of Work (PoW) để kiểm soát
e-mail rác. Ý tưởng khá đơn giản: nếu người dùng hợp pháp muốn gửi e-mail, thì
họ phải tính toán hàm băm để chứng minh rằng họ đã sử dụng một lượng tài
nguyên máy tính hợp lý trước khi gửi e-mail. Tạo hashcash là một quy trình tăng
cường tính toán nhưng không ngăn cản người dùng hợp pháp gửi e-mail vì số
lượng thư thông thường mà người dùng hợp pháp yêu cầu phải là khá thấp. Mặt
khác, nếu một spammer muốn gửi e-mail, thường là số lượng hàng nghìn, thì sẽ
trở nên không thể tính được hashcash cho tất cả các e-mail, do đó làm cho nỗ lực
gửi spam tốn kém; kết quả là cơ chế này có thể được sử dụng để ngăn chặn email
spam. Hashcash chiếm một lượng đáng kể tài nguyên máy tính để tính toán nhưng

dễ dàng và nhanh chóng xác minh. Việc xác minh được thực hiện bởi người dùng
nhận e-mail. Hashcash được phổ biến bởi việc sử dụng nó trong quá trình đào
bitcoin. Ý tưởng sử dụng các câu đố toán học hoặc các chức năng định giá để
ngăn chặn spam email ban đầu được giới thiệu vào năm 1992 bởi Cynthia Dwork
và Moni Naor. Sau đó, Adam Back đã phát minh ra hashcash độc lập vào năm
1997, trong đó giới thiệu việc sử dụng các hàm băm máy tính như PoW.
Năm 1998, b-money được giới thiệu bởi Wei Dai và đề xuất ý tưởng tạo
ra tiền điện tử thông qua việc giải quyết các câu đố toán học như hashcash. Nó
dựa trên mạng peer-to-peer, nơi mỗi nút duy trì danh sách các giao dịch của
chính nó.
7


Một ý tưởng tương tự khác của Nick Szabo được gọi là BitGold đã được
giới thiệu vào năm 2005 và cũng đề xuất giải quyết các câu đố toán học để khai
thác tiền điện tử. Năm 2005, Hal Finney giới thiệu khái niệm tiền mật mã bằng
cách kết hợp ý tưởng từ b-money và các câu đố hashcash nhưng nó vẫn dựa vào
một cơ quan tin cậy tập trung.
Trong năm 2009, triển khai thực tế đầu tiên của một cryptocurrency tên
Bitcoin được giới thiệu; lần đầu tiên nó giải quyết được vấn đề phân tán của sự
đồng thuận trong một mạng tin cậy. Nó sử dụng mật mã khóa công khai với
hashcash như PoW để cung cấp một phương pháp an toàn, kiểm soát và phân
cấp của phương pháp khai thác tiền điện tử. Sự đổi mới chính là ý tưởng của
một danh sách được sắp xếp của các khối bao gồm các giao dịch và mật mã bảo
mật bằng cơ chế PoW.
Nhìn vào tất cả các công nghệ nói trên và lịch sử của họ, thật dễ dàng để
thấy những ý tưởng và khái niệm từ các chương trình tiền điện tử và các hệ
thống phân phối được kết hợp với nhau để tạo ra bitcoin và cái bây giờ được gọi
là công nghệ blockchain.
Blockchain đầu tiên được phát minh và thiết kế bới Satoshi Nakamoto và

được hiện thực hóa vào năm sau đó như là một phần cốt lõi của Bitcoin, khi
công nghệ blockchain đóng vai trò như là một cuốn sổ cái cho tất cả các giao
dịch. Qua việc sử dụng mạng lưới ngang hàng và một hệ thống dữ liệu phân cấp,
Bitcoin blockchain được quản lý tự động. Việc phát minh ra blockchain cho
Bitcoin đã làm cho nó trở thành loại tiền tệ kỹ thuật số đầu tiên giải quyết được
vấn đề double spending (chi tiêu gian lận khi 1 lượng tiền được dùng 2 lần).
Công nghệ này của Bitcoin đã trở thành nguồn cảm hứng cho một loạt các ứng
dụng khác.
Nhận thấy, sự quan trọng của công nghệ blockchain nên đồ án đã lựa chọn
tìm hiểu đề tài về “Nghiên cứu đảm bảo an toàn ví tiền điện tử công nghệ
blockchain”. Để nghiên cứu hiểu rõ hơn về ứng dụng ví điện tử blockchain,
mục tiêu tìm hiểu về công nghệ blockchain, công nghệ ví blockchain. Đây là
công nghệ giúp cho việc giao dịch tiền điện tử được bảo mật bởi các thuật toán
8


mã hóa khóa công khai, sử dụng chữ ký số và hàm băm để bảo vệ tính bí mật,
xác thực và toàn vẹn thông tin trong công nghệ blockchain.
Nội dung của đồ án tốt nghiệp gồm ba chương:
Chương 1: Tổng quan về công nghệ blockchain, bao gồm những hiểu
biết cơ bản về công nghệ blockchain như: định nghĩa, kiến trúc chung, các loại
blockchain, những lợi ích và rủi ro của công nghệ blockchain.
Chương 2: Công nghệ ví tiền điện tử blockchain, chỉ rõ được khái
niệm, chi tiết công nghệ ví, một số ứng dụng ví thường gặp, thực trạng an toàn
ví hiện nay.
Chương 3: Thực nghiệm mô phỏng ví đa chữ ký, triển khai ứng dụng
tạo địa chỉ, tạo giao dịch đa chữ ký 2 trong 5 khóa.
Do thời gian thực hiện đồ án tương đối ngắn hạn nên đồ án của em chắc
chắn sẽ không tránh khỏi những thiếu sót. Vì vậy em rất mong nhận được sự
đóng góp ý kiến của thầy cô để đồ án của em được hoàn thiện hơn.

Em xin chân thành cảm ơn!
SINH VIÊN THỰC HIỆN

Đặng Văn Quyết

9


CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN

1.1.

Tổng quan công nghệ blockchain

1.1.1.

Khái niệm Blockchain và một số khái niệm liên quan
Blockchain (chuỗi khối) là một cơ sở dữ liệu phân cấp lưu trữ thông tin

trong các khối thông tin được liên kết với nhau bằng mã hóa và mở rộng theo
thời gian. Mỗi khối thông tin đều chứa thông tin về thời gian khởi tạo và được
liên kết tới khối trước đó, kèm một mã thời gian và dữ liệu giao dịch.
Blockchain được thiết kế để chống lại việc thay đổi của dữ liệu: Một khi dữ liệu
đã được mạng lưới chấp nhận thì sẽ không có cách nào thay đổi được nó.
Blockchain phù hợp để ghi lại những sự kiện, hồ sơ y tế, xử lý giao dịch,
công chứng, định danh và chứng minh nguồn gốc. Việc này có tiềm năng giúp xóa
bỏ các hậu quả lớn khi dữ liệu bị thay đổi trong bối cảnh thương mại toàn cầu.
Một khối (block) đơn giản chỉ là một sự lựa chọn của các giao dịch được
nhóm lại với nhau để tổ chức chúng một cách hợp lý. Nó được tạo thành từ các
giao dịch và kích thước khối phụ thuộc vào loại thiết kế của blockchain đang sử

dụng. Một tham chiếu đến một khối trước đó cũng được bao gồm trong khối trừ
khi nó là một khối genesis. Một khối Genesis hay còn gọi là khối nguyên thủy là
khối đầu tiên trong blockchain đã được hardcoded tại thời điểm blockchain đã
được bắt đầu. Cấu trúc của một khối cũng phụ thuộc vào kiểu và thiết kế của
một blockchain, nhưng thông thường có một vài thuộc tính cần thiết cho chức
năng của một khối, chẳng hạn như tiêu đề khối, các con trỏ tới các khối trước
đó, tem thời gian, nonce, bộ đếm giao dịch, giao dịch và các thuộc tính khác.
Sổ cái phân tán (Decentralized Legder) là một cơ sở dữ liệu phân tán sử
dụng blockchain để ghi lại các giao dịch.

10


1.1.2.

Kiến trúc chung
Hình 1-1 dưới đây cho thấy cấu trúc chung của một hệ thống blockchain.

Hình ảnh mô tả theo tài liệu [10].

Hình 1- 1. Kiến trúc chung Blockchain
Lớp trên cùng đại diện cho tầng ứng dụng (Applications) có thể xây dựng
dựa trên sổ cái phân tán (Decentralized Ledger) được duy trì bởi mạng ngang
hàng (Peer-to-peer Network). Trong trường hợp của Bitcoin, các ứng dụng như
vậy rất đơn giản vì toàn bộ kiến trúc chỉ hỗ trợ chức năng đó là trao đổi bitcoin
cho mục đích thương mại hoặc đầu cơ. Ví dụ như là ví tiền Bitcoin (Bitcoin
wallet) được tạo ra để quản lý số lượng coin của người dùng. Trong khí đó hiện
nay, blockchain như Ethereum cho phép xây dựng những ứng dụng phức tạp hơn.
Khối Decentralized Ledger bao gồm nhiều chức năng đảm bảo rằng sổ cái
là duy nhất, có tính toàn cầu, vẫn giữ được sự thống nhất và chống gian lận. Cấu

trúc cơ bản của sổ cái là Blockchain, nơi các giao dịch được nhóm thành các
khối, mỗi khối lại liên kết với khối tiền nhiệm trước đó để tạo thành một chuỗi.
Giao dịch đại diện cho một số các trao đổi giá trị giữa các thành viên. Ví dụ
trong bitcoin là việc di chuyển số lượng bitcoin giữa các người dùng.
Quá trình nhóm các giao dịch vào một khối để được thêm vào khối tiếp
theo của blockchain hiện tại được gọi là quá trình đào (mining). Để đảm bảo sự
đồng thuận giữa tất cả các nút (node) trên blockchain là hợp pháp, một thuật toán
11


Proof of Work (PoW) được sử dụng như một cơ chế để chứng minh rằng một
người đào đã hoàn thành số lượng công việc cần thiết để tìm ra một khối mới.
Lớp cuối cùng của kiến trúc này là mạng ngang hàng với các loại nút
đóng vai trò khác nhau trong hệ thống. Để cập nhập và duy trì sổ cái phân cấp,
các nút này sẽ trao đổi các gói tin nhắn với nhau.
1.1.2.1.

Tầng ứng dụng (Applications)
Ví(wallet) là một ứng dụng phần mềm tạo và lưu trữ các cặp khóa bí mật

và công khai của người dùng. Ở mức khái quát, ví là ứng dụng đóng vai trò giao
diện người dùng chính. Ví kiểm soát quyền truy cập tiền của người dùng, quản
lý các khóa và địa chỉ, theo dõi số dư, tạo và ký giao dịch. Trên thực tế, ví không
chứa bất kỳ một đồng coin nào mà thay vào đó nó sử dụng các bản ghi trên cuốn
sổ cái phân tán để tạo ra một bức tranh dễ hiểu hơn về số lượng tiền của người
dùng. Hình 1-2 là ví dụ về giao diện ví bitcoin.

Hình 1- 2.Ví dụ ví Bitcoin
Để hiểu rõ hơn tại sao lại như vậy, đồ án sẽ đi chi tiết hơn ở phần giao dịch của
mạng blockchain bitcoin.

1.1.2.2.
a.

Sổ cái phân tán (Decentralized Ledger)

Người tham gia và giao dịch bitcoin
Cuốn sổ cái của bitcoin ghi lại trao đổi các giao dịch giữa người dùng trên

hệ thống Bitcoin. Hầu hết người dùng đều là cá nhân nhưng bitcoin không quan
tâm đến nhận dạng của họ. Số lượng bitcoin được gắn vào địa chỉ bitcoin và
được chuyển từ địa chỉ này sang địa chỉ khác trong một giao dịch.
12


Quyền sở hữu của bitcoin được thiết lập thông qua các khóa số, địa chỉ
bitcoin và chữ ký số. Các khóa số này thực ra không được lưu trữ trên mạng mà
do người dùng tạo ra và lưu trữ trong một file, hay một cơ sở dữ liệu đơn giản
chính là ví. Các khóa số trong ví của người dùng hoàn toàn độc lập với giao thức
bitcoin, và phần mềm ví của người dùng có thể tạo và quản lý chúng mà không
cần tham chiếu tới blockchain hay phải kết nối Internet. Khóa là nhân tố kích hoạt
nhiều thuộc tính của bitcoin, bao gồm kiểm soát giao dịch, tín nhiệm phi tập
trung, xác thực quyền sở hữu, và mô hình an ninh sử dụng bằng chứng mật mã.
Một địa chỉ bitcoin được tạo ra từ một cặp khóa bí mật và khóa công khai.
Khóa bí mật sẽ được phần mềm tính toán và tạo ra ngẫu nhiên (thường được tạo
ra từ phần mềm ví). Khóa công khai tương ứng được tạo ra bằng cách sử dụng
thuật toán mật mã dựa trên đường cong Elliptic (ECDSA/ECC), cho phép người
giữ khóa ký một cái gì đó với khóa bí mật và được kiểm tra bởi khóa công khai.
Địa chỉ bitcoin được tạo ra bằng cách lấy khoá công khai tương ứng của khoá bí
mật và băm nó hai lần, trước tiên với thuật toán SHA256 và sau đó với
RIPEMD160. Kết quả là băm 160 bit sau đó được bắt đầu với một số phiên bản

và cuối cùng được mã hoá bằng lược đồ mã hóa Base58Check. Địa chỉ bitcoin
dài 26-35 ký tự và bắt đầu bằng chữ số 1 hoặc 3 tùy thuộc cách sử dụng địa chỉ.
Địa chỉ bitcoin điển hình trông giống như một chuỗi được hiển thị ở đây:
1PkaJqaF7CNEov8UQaShdJM5hZMMg8vube
Mối quan hệ giữa khóa bí mật, khóa công khai và địa chỉ bitcoin được thể
hiện trong hình 1-3.

Hình 1- 3. Khóa bí mật, khóa công khai, địa chỉ bitcoin
Kết quả là các bitcoin liên quan đến một địa chỉ cụ thể được cho là “sở
hữu” bởi người nắm giữ khóa bí mật có thể ký các giao dịch và sử dụng lượng
bitcoin đó.
Giao dịch là cốt lõi của hệ sinh thái bitcoin. Giao dịch có thể đơn giản chỉ
bằng cách gửi một số bitcoin đến một địa chỉ này đến một địa chỉ bitcoin khác,
13


hoặc nó có thể khá phức tạp tùy thuộc vào yêu cầu. Mỗi giao dịch bao gồm ít
nhất một đầu vào (input) và đầu ra (output).
Đầu ra giao dịch là các khối tiền không thể chia tách, được ghi vào
blockchain và được toàn bộ mạng bitcoin công nhận là hợp lệ. Các nút đầy đủ
theo dõi tất cả các đầu ra hiện có, có thể có và có thể chi tiêu, hay còn gọi là các
đầu ra giao dịch chưa sử dụng, hay UTXO (unspent transaction outputs). Các
giao dịch mới có đầu vào sử dụng (chi tiêu) một hoặc nhiều đầu ra từ tập UTXO.
Ví dụ về tập UTXO ở hình 1-4 dưới đây.

Hình 1- 4. Ví dụ tập UTXO
Chi tiết một giao dịch thô được mô tả như ví dụ dưới đây:
{
"version": 1,
"locktime": 0,

"vin": [
{
"txid":
"7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
"vout": 0,

14


"scriptSig" :
"3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c
4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8
f6e3813[ALL]
0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc541
2336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.01500000,
"scriptPubKey": "OP_DUP OP_HASH160
ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"value": 0.08450000,
"scriptPubKey": "OP_DUP OP_HASH160
7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY
OP_CHECKSIG",
}

]
}

Đầu ra giao dịch bao gồm hai phần:



Một lượng coin nhất định
Một thách thức mật mã quyết định các điều kiện cần thiết để có thể
sử dụng đầu ra. Thách thức mật mã này nằm trong một ngôn ngữ
kịch bản, gọi là kịch bản khóa, hay một scriptPubKey.

Xem xét chi tiết giao dịch cụ thể sau, trong mã hóa JSON, đầu ra nằm
trong một mảng có tên là vout:
"vout": [
{
"value": 0.01500000,
"scriptPubKey": "OP_DUP OP_HASH160
ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY
OP_CHECKSIG"
15


},
{
"value": 0.08450000,
"scriptPubKey": "OP_DUP OP_HASH160
7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY
OP_CHECKSIG",
}


Có thể thấy, mảng vout của giao dịch này chứa hai đầu ra. Mỗi đầu ra
được xác định một giá trị và một kịch bản khóa.
Các đầu vào giao dịch xác định (tham chiếu) UTXO sẽ chi tiêu và cung cấp
bằng chứng sở hữu thông qua một kịch bản mở khóa, hay scriptSig. Để tạo một
giao dịch, ví chọn ra số các UTXO mà nó kiểm soát có đủ giá trị để thực hiện
khoản thanh toán được yêu cầu. Các đầu vào giao dịch là một mảng gọi là vin:
"vin": [
{
"txid":
"7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
"vout": 0,
"scriptSig" :
"3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c
4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8
f6e3813[ALL]
0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc541
2336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"sequence": 4294967295
}
]

Đầu vào này chứa 4 yếu tố:


Một ID txid giao dịch tham chiếu đến giao dịch chứa UTXO đang được



chi tiêu.

Một số thứ tự đầu ra (vout) xác đinh UTXO nào trong giao dịch đó đang
được tham chiếu đến.
16




Một scriptSig thỏa mãn các điều kiện đặt ra cho UTXO đó, mở khóa nó



để chi tiêu.
Một số tuần tự
Ngôn ngữ kịch bản giao dịch bitcoin được gọi là Script. Cả kịch bản khóa

đặt trong UTXO và kịch bản mở khóa đều được viết bằng ngôn ngữ kịch bản
này. Khi một giao dịch được xác thực, kịch bản mở khóa trong mỗi đầu sẽ được
thực thi cùng với kịch bản khóa tương ứng, để kiểm tra xem đầu vào đó có thỏa
mãn điều kiện chi tiêu hay không.
Kịch bản khóa (scriptPubKey) là một điều kiện chi tiêu đặt trong một đầu
ra: nó chỉ rõ các điều kiện phải được đáp ứng để có thể chi tiêu đầu ra đó trong
tương lai. Kịch bản khóa thường chứa một khóa công khai hoặc một địa chỉ
bitcoin (mã băm khóa công khai).
Kịch bản mở khóa là một kịch bản “giải đố”, hay thỏa mãn các điều kiện
do kịch bản khóa đặt vào đầu ra và cho phép chi tiêu đầu ra đó. Kịch bản mở
khóa là một phần của mọi đầu vào giao dịch. Thông thường, chúng chứa một
chữ ký số do ví của người dùng tạo ra từ khóa bí mật. Kịch bản mở khóa thường
được gọi là scriptSig, bởi nó thường chứa một chữ ký số
Bất kỳ một giao dịch nào được truyền lên mạng bitcoin thì đều được kiểm
tra tính hợp lệ của giao dịch. Một số kiểm tra như cú pháp, đầu vào và đầu ra,

kiểm tra khóa với ngôn ngữ kịch bản, kiểm tra số tiền,...Chỉ các giao dịch hợp lệ
mới được truyền lên để tránh các cuộc tấn công spam và từ chối dịch vụ.
Để ghi giao dịch hợp lệ vào sổ cái thì giao dịch sẽ được mã hóa và lưu
trong các block.
b. Cấu trúc block
Cấu trúc dữ liệu blockchain là một danh sách gồm các block giao dịch
được sắp xếp thứ tự. Các block được liên kết với nhau theo thứ tự, mỗi block
tham chiếu đến block trước đó trong chuỗi. Blockchain thường được hình dung
như một ngăn xếp theo chiều dọc, trong đó các block xếp chồng lên nhau và
block đầu tiên đóng vai trò là nền tảng của ngăn xếp.

17


Vì không có điểm trung tâm trong mạng bitcoin duy trì bản ghi cuối cùng
của các giao dịch, nên phải có một cách để các giao dịch hợp lệ được liên kết
vào cuốn sổ cái blockchain.
Bước đầu tiên trong quá trình ghi lại các giao dịch trong sổ cái là hành
động nhóm các giao dịch mới hợp thành một khối. Thu nhập các giao dịch mới
và tạo ra một khối có thể được nối vào blockchain là một hoạt động có thể tham
gia bởi tất cả người dùng khi có đủ khả năng tính toán. Nút thực hiện điều này
được gọi là thợ đào (miner), và hành động tạo ra một khối đáp ứng các tiêu chí
để gắn vào cuối của blockchain được gọi là quá trình đào (mining). Đồ án sẽ mô
tả làm thế nào đào trong nội dung dưới, ở đây sẽ tập trung vào cấu trúc của một
block. Hình 1-5 dưới đây là cấu trúc đơn giản của một block.

Hình 1- 5. Cấu trúc một block
Một block thông thường có 2 phần chính: header và danh sách các giao dịch.
Header chứa các thông tin dữ liệu như version, nonce, mã băm block trước
đó, tem thời gian, cây merkle, theo sau là một danh sách dài các giao dịch,

chiếm phần lớn kích thước của block. Mỗi block trong blockchain bitcoin chứa
một bản tóm tắt toàn bộ các giao dịch có trong block đó sử dụng một cây
merkle.
Một cây merkle là một cấu trúc dữ liệu được sử dụng để tóm lược và kiểm
tra tính toàn vẹn của những tập dữ liệu lớn một cách hiệu quả. Các cây merkle là
các cây nhị phân chứa các mã băm mật mã. Thuật ngữ “cây” thường được sử
18


dụng trong khoa học máy tính để mô tả cấu trúc dữ liệu phân nhánh, có gốc ở
trên và lá ở dưới như ví dụ hình 1-6.

Hình 1- 6. Cây merkle
Cây merkle được xây dựng từ dưới lên bằng cách băm các giao dịch theo
từng cặp cho tới khi chỉ còn một mã băm được gọi là gốc merkle (merkle root).
Các thông tin còn lại của phần header sẽ được sử dụng trong quá trình đà sẽ
được mô tả chi tiết ở phần quá trình đào và cơ chế đồng thuận.
Danh sách giao dịch bao gồm tất cả các giao dịch có trong block.
c.

Quá trình đào và cơ chế đồng thuận
Quá trình đào chính là cơ chế làm nền tảng cho thanh toán phi tập trung,

qua đó các giao dịch được xác thực và thanh toán. Quá trình đào là phát minh
tạo cho bitcoin trở nên đặc biệt, một cơ chế bảo mật phi tập trung là cơ sở cho
tiền điện tử ngang hàng.
Việc đào bảo mật hệ thống bitcoin và cho phép sự xuất hiện của đồng
thuận toàn mạng lưới mà không cần một cơ quan quyền lực trung tâm nào. Phần
thưởng cho công việc này gồm các đồng bitcoin mới được tạo ra và phí giao
dịch là một mô hình khích lệ nhằm hỗ trợ hoạt động của các thợ đào vì sự bảo

mật của mạng lưới, trong khi cũng đồng thời thực hiện việc cung ứng tiền tệ.
Các thợ đào xác thực giao dịch mới và ghi chúng vào sổ cái. Một block mới,
chứa các giao dịch xảy ra sau block cuối cùng, được “đào” trung bình mỗi 10
phút, từ đó bổ sung thêm các giao dịch vào blockchain. Các giao dịch trở thành
một phần của block và được thêm vào blockchain được coi là “đã được xác
19


nhận”, cho phép những chủ sở hữu mới của bitcoin có thể tiêu bitcoin mà họ
nhận được trong các giao dịch đó.
Các thợ đào nhận được hai loại phần thưởng cho việc cung cấp bảo mật
bằng việc đào: những đồng tiền mới được tạo ra cùng với mỗi block mới và phí
giao dịch từ tất cả các giao dịch trong block.
Để kiếm được phần thưởng này, các thợ đào phải cạnh tranh để giải quyết
một bài toán học khó khăn dựa trên một thuật toán băm mật mã. Giải pháp cho
vấn đề này được gọi là bằng chứng xử lý (Proof of Work), được bao gồm trong
block mới và đóng vai trò là bằng chứng cho thấy người đào đã có nỗ lực tính
toán rất lớn. Thuật toán PoW băm lấy một đầu vào dữ liệu (phần header) và tạo
ra một kết quả xác định. Với bất kỳ một đầu vào cụ thể, mã băm sẽ luôn luôn là
như nhau và có thể dễ dàng được tính và xác minh bởi bất cứ ai thực hiện cùng
một thuật toán băm.
Hàm băm SHA256 là hàm được sử dụng trong quá trình đào bitcoin.
Trong SHA256, với kích thước của đầu vào có độ dài bất kỳ thì kích thước đầu
ra luôn là 256 bit. Minh họa cho điều này bằng ví dụ sau, sử dụng mã hóa
SHA256 cho cụm từ “I am Satoshi Nakamoto”:
Input: I am Satoshi Nakamoto
Kết quả sau khi băm:
Output:
5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47
989e

Bây giờ, sẽ thêm các hậu tố vào cụm từ để thay đổi độ dài của input trên
sẽ nhận được mã băm khác nhau như bảng 1-1.
Bảng 1- 1. Mã băm khi thay đổi hậu tố
I am Satoshi Nakamoto9 →
I am Satoshi Nakamoto10 →

7007cf7dd40f5e933cd89fff5b791ff0…
c2f38c81992f4614206a21537bd634a...

I am Satoshi Nakamoto11
I am Satoshi Nakamoto12
I am Satoshi Nakamoto13
I am Satoshi Nakamoto14


7045da6ed8a914690f087690e1e8d66…
60f01db30c1a0d4cbce2b4b22e88b9b …
0ebc56d59a34f5082aaef3d66b37a66…
27ead1ca85da66981fd9da01a8c6816…






20


Số được sử dụng như là một biến trong một kịch bản như vậy được gọi là
một nonce. Nonce được sử dụng để thay đổi đầu ra của một hàm mật mã, trong

trường hợp này là để thay đổi giá trị SHA256 của cụm từ.
Để đưa ra một thách thức trong thuật toán này, có một mục tiêu được đặt
ra như sau: “tìm cụm từ tạo ra một mã băm bắt đầu bằng số 0”. Từ ví dụ trên, sẽ
thấy cụm từ “I am Satoshi Nakamoto13” tạo ra mã băm có bắt đầu là số 0, phù
hợp với tiêu chí đưa ra. Phải mất 13 lần tìm kiếm để tìm ra kết quả này. Như vậy,
độ khó của bài toán đặt ra sẽ phụ thuộc vào độ khó của tiêu chí đưa ra. Thợ đào
sẽ sử dụng sức mạnh tính toán để có thể tìm ra được đáp án. Kết quả thành công
cũng là bằng chứng xử lý, bởi vì nó chứng minh rằng các thợ đào đã xử lý công
việc để tìm ra nonce đó. Và kết quả này cũng sẽ được xác thực độc lập bởi bất
kỳ thợ đào nào khác vì giá trị băm sẽ không đổi. Sự đồng thuận sẽ xảy ra trên
toàn mạng lưới.
1.1.2.3.

Mạng ngang hàng (Peer to peer Network)
Bất kỳ máy tính nào cũng có thể là một nút Bitcoin. Tất cả yêu cầu của

một nút đầy đủ là có đủ không gian lưu trữ, sức mạnh tính toán và có thể liên lạc
với các nút khác thông qua hạ tầng Internet. Giao thức mạng Bitcoin cho phép
các nút đầy đủ đồng bộ và duy trì một mạng ngang hàng cho việc trao đổi block
và giao dịch. Nút đầy đủ tải về và xác minh mỗi khối và giao dịch trước khi
chuyển chúng lên các nút khác. Nó lưu trữ toàn bộ blockchain và có thể tạo
thành một nơi tra cứu lịch sử block cho các nút khác. Các nút có chứa chức năng
của nút đầy đủ nhưng không chứa toàn bộ block trên mà chỉ sử dụng phiên bản
rút gọn gọi là nút ngắn gọn. Nút gắn gọn này có thể là ví. Tất cả những người
tham gia hoạt động của mạng lưới sẽ giúp đảm bảo sự an toàn và tính sẵn sàng
cho mạng lưới.
1.1.3.
1.1.3.1.

Các phiên bản của Blockchain hiện tại

Blockchain 1.0
Được giới thiệu với việc phát minh ra bitcoin và cơ bản của tiền điện tử.

Ngoài ra, bitcoin được coi là dấu mốc để phân loại Blockchain 1.0 gồm các công

21


nghệ chỉ bao gồm tiền tệ mật mã. Tất cả các đồng coin tương tự và bitcoin được
phân thể loại này. Bao gồm các ứng dụng về thanh toán.
1.1.3.2.

Blockchain 2.0
Thế hệ 2.0 được sử dụng bởi các dịch vụ tài chính và các hợp đồng được

giới thiệu trong thế hệ này. Bao gồm các tài sản tài chính khác nhau, ví dụ như
các công cụ phái sinh, các lựa chọn, hoán đổi và trái phiếu. Các ứng dụng vượt
quá tiền tệ, tài chính và thị trường được bao gồm ở cấp này.
1.1.3.3.

Blockchain 3.0
Thế hệ thứ ba của blockchains được sử dụng để thực hiện các ứng dụng

ngoài ngành dịch vụ tài chính và được sử dụng trong các ngành công nghiệp có
mục đích chung như chính phủ, y tế, truyền thông, nghệ thuật và công lý.
1.1.4.

Các loại Blockchain
Dựa vào sự phát triển trong vòng vài năm qua, Blockchain có thể được chia


thành nhiều loại với các thuộc tính riêng biệt nhưng đôi khi là hỗ trợ cho nhau.
Blockhain có thể chia thành ba loại cơ bản như sau:
• Blockchain công khai: được phân phối mở và công bố công khai. Thông
tin giao dịch của blockchain là công khai. Để đảm bảo tính nhất quán của
hệ thống xác nhận các giao dịch, các ưu đãi về tài chính và các cơ chế
đồng thuận được nhúng vào hệ thống. Bởi vì chuỗi blockchain được công
bố cho toàn mạng nên những cải tiến chỉ được thay đổi khi có sự nhất chí
của toàn bộ hệ thống. Điều quan trọng là các dạng Blockchain công khai
có tiềm năng lớn để giảm chi phí.
• Blockchain riêng tư: được thiết lập và duy trì bởi các tổ chức tư nhân,
chỉ cấp quyền truy cập cho các bên có thẩm quyền. Các giao dịch được
xác minh trong Blockchain riêng tư và có thể được sửa đổi trong mạng
riêng đó, do đó cho phép các nhà khai thác sửa lỗi. Điều này sẽ không
được chấp nhận trong một blockchain công khai. Các blockchain riêng tư
có thể xác thực các giao dịch nhanh hơn trong vòng vài giây – bởi chúng
hoạt động trên các mạng được kiểm soát (không phải là tập trung) và được
tạo ra bởi ít máy tính hơn.
22


• Slidechain: là mạng phân cấp, peer-to-peer cung cấp các cải tiến hữu ích
(như bảo mật, rủi ro và hiệu suất) và chạy song song với một blockchain
chính. Ví dụ: slidechain cho phép các nhà phát triển các ứng dụng mới
một cách an toàn mà không gặp rủi ro. Sidechain cũng có thể được hình
dung như một cơ chế cho phép các phần sử dụng trong một blockchain
riêng biệt, được di chuyển trở lại chuỗi ban đầu nếu cần. Theo quy đươc,
chuỗi ban đầu thường được gọi là “chuỗi chính”, trong đó, những phần
thêm vào cho phép người dùng giao dịch bên trong chuỗi chính, có thể
được gọi là “sidechain”.
1.2.


Lợi ích của Blockchain
Nhiều lợi ích của công nghệ blockchain đang được thảo luận trong ngành

công nghiệp và được các nhà lãnh đạo tư tưởng đề xuất trên khắp thế giới trong
không gian blockchain. Mười lợi ích hàng đầu được liệt kê và thảo luận như sau:
1.2.1.

Phân cấp
Đây là một khái niệm cốt lõi và lợi ích của blockchain. Không cần phải có

một bên thứ ba đáng tin cậy hoặc trung gian để xác nhận các giao dịch; thay vào
đó một cơ chế đồng thuận được sử dụng để thống nhất về tính hợp lệ của các
giao dịch.
1.2.2.

Tính minh bạch và sự tin tưởng
Khi blockchain được chia sẻ công khai, mọi người có thể nhìn thấy những

gì đang có trên blockchain, điều này cho phép hệ thống được minh bạch và như
là một sự tin tưởng từ kết quả được xây dựng. Điều này có liên quan hơn trong
các tình huống như việc giải ngân vốn hoặc lợi ích mà cần phải hạn chế quyền
cá nhân.
1.2.3.

Tính bảo toàn
Một khi các dữ liệu đã được ghi vào blockchain, rất khó để thay đổi nó trở

lại. Nó không thực sự bất biến nhưng do sự thay đổi dữ liệu là cực kỳ khó khăn
và hầu như không thể, điều này được xem như là một lợi ích để duy trì một sổ

cái bất biến của các giao dịch.

23


1.2.4.

Tính sẵn sàng cao
Khi hệ thống dựa trên hàng ngàn nút trong một mạng ngang hàng, và dữ

liệu được nhân rộng và cập nhật trên mỗi nút, hệ thống trở nên có sẵn rất cao.
Ngay cả khi các nút rời khỏi mạng hoặc trở nên không thể tiếp cận, toàn bộ hệ
thống vẫn tiếp tục hoạt động, do đó làm cho hệ thống có tính sẵn sàng cao.
1.2.5.

Tính bảo mật cao
Tất cả các giao dịch trên một blockchain được bảo mật mật mã và cung

cấp tính toàn vẹn.
1.2.6.

Đơn giản hóa mô hình hiện tại
Mô hình hiện tại trong nhiều ngành công nghiệp như tài chính hoặc y tế

khá thiếu tổ chức, trong đó nhiều thực thể duy trì cơ sở dữ liệu riêng của họ và
chia sẻ dữ liệu có thể trở nên rất khó khăn do tính chất khác biệt của hệ thống.
Tuy nhiên, một blockchain có thể đóng vai trò như một sổ cái chia sẻ giữa các
bên liên quan, điều này có thể làm đơn giản hóa mô hình này bằng cách giảm sự
phức tạp của việc quản lý các hệ thống riêng biệt được duy trì bởi mỗi thực thể.
1.2.7.


Giao dịch nhanh hơn
Trong ngành tài chính, đặc biệt là các chức năng thanh toán sau thương

mại, blockchain có thể đóng một vai trò quan trọng bằng cách nó cho phép giải
quyết nhanh chóng các giao dịch vì nó không yêu cầu quá trình xác minh, đối
chiếu nguồn gốc bởi vì một phiên bản dữ liệu đã được đồng ý sẵn sàng có trên
sổ cái chia sẻ giữa các tổ chức tài chính.
1.2.8.

Tiêt kiệm chi phí
Vì không có bên thứ ba hoặc các nhà thanh toán bù trừ được yêu cầu trong

mô hình blockchain, điều này có thể loại bỏ ồ ạt chi phí đầu vào dưới hình thức
các khoản phí trả cho các nhà thanh toán bù trừ hoặc các bên thứ ba đáng tin cậy.
1.3.

Thách thức và giới hạn của Blockchain
Như với bất kỳ công nghệ nào cũng có những thách thức cần được giải

quyết nhằm làm cho hệ thống trở nên mạnh mẽ, hữu ích và dễ tiếp cận hơn.
Công nghệ Blockchain không phải là ngoại lệ; trong thực tế, rất nhiều nỗ lực
đang được thực hiện trong Học viện và Công nghiệp để vượt qua những thách
24


thức đặt ra bởi công nghệ blockchain. Một sự lựa chọn của những thách thức
nhạy cảm nhất được trình bày như sau:
• Khả năng mở rộng
• Khả năng thích nghi

• Quy chế
• Khả năng bảo mật ví
• Rủi ro của các pool đào
• Rủi ro trên các sàn giao dịch

25


×