Giá trị Ký tự Giá trị Ký tự Giá trị Ký tự Giá trị Ký tự
0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 A 10 B 11 C 12 D 13 E 14 F 15 G 16 H 17 J 18 K 19 L 20 M 21 N 22 P 23 Q 24 R 25 S 26 T 27 U 28 V 29 W 30 X 31 Y 32 Z 33 a 34 b 35 c 36 d 37 e 38 f 39 g 40 h 41 i 42 j 43 k 44 m 45 n 46 o 47 p 48 q 49 r 50 s 51 t 52 u 53 v 54 w 55 x 56 y 57 z (Nguồn: Wikipedia)
Nguyên tắc biểu diễn số nguyên lớn x dưới dạng ký tự dựa trên bảng mã Base58 như sau:
- Bƣớc 1: kiểm tra x > 0 + Nếu x = 0 thì kết thúc.
+ Nếu x > 0 thì chuyển sang bước 2. - Bƣớc 2:
+ r = x%58 (0≤ r ≤ 57). Tra ký tự tương ứng với giá trị r trong Base58. Đẩy ký tự này vào ngăn xếp S.
+ x = x/58.
+ Quay lại bước 1.
CHƢƠNG 3: NGUYÊN LÝ HOẠT ĐỘNG CỦA HỆ THỐNG TIỀN ĐIỆN TỬ NGANG HÀNG BITCOIN
3.1. Mô tả hoạt động của hệ thống tiền điện tử ngang hàng Bitcoin 3.1.1. Định nghĩa các thành phần của hệ thống 3.1.1. Định nghĩa các thành phần của hệ thống
- A: là người sử dụng tiền điện tử Bitcoin để thanh toán khi mua hàng.
- B: là người bán hàng chấp nhận hình thức thanh tốn bằng tiền điện tử Bitcoin
- Địa chỉ số: là một chuỗi các ký tự được sử dụng để lưu trữ đồng tiền điện tử Bitcoin. Mỗi địa chỉ lưu trữ một đồng tiền với một giá trị nhất định.
- Ví: là tệp dữ liệu trên máy tính cho phép người dùng lưu trữ các địa chỉ số và sử dụng đồng tiền điện tử Bitcoin được lưu trong các địa chỉ số này để thanh tốn.
- Node mạng: là các máy tính trong hệ thống mạng ngang hàng, tham gia vào quá trình ghi nhận lịch sử giao dịch dùng chung.
3.1.2. Quy trình thực hiện thanh tốn trong hệ thống tiền điện tử ngang hàng Bitcoin Bitcoin
- Bƣớc 0: A mua hàng của B và đề nghị thanh toán cho B bằng tiền điện tử
Bitcoin.
- Bƣớc 1: B tạo địa chỉ số rồi gửi cho A để A chuyển đồng tiền vào đó.
- Bƣớc 2: A sử dụng ví lưu trữ địa chỉ số của đồng tiền mà A muốn dùng để
thanh toán cho B rồi tạo ra một giao dịch chứa các thông tin về bản thân và địa chỉ số mà B đã gửi. A công khai giao dịch này cho toàn bộ hệ thống.
- Bƣớc 3: Các node mạng tập hợp giao dịch của A và các giao dịch mới khác
trong cùng thời điểm vào một khối Block rồi cố gắng thực hiện việc ghi nhận khối Block này vào lịch sử giao dịch dùng chung.
- Bƣớc 4: Khi node mạng X là node đầu tiên ghi nhận thành công khối Block
này vào lịch sử giao dịch dùng chung thì X sẽ được hệ thống thưởng cho một đồng tiền Bitcoin mới vào địa chỉ số của X.
- Bƣớc 5: B nhận thấy giao dịch giữa A và B đã tồn tại trong lịch sử giao dịch dùng chung và tin rằng đó là giao dịch tin cậy thì chấp nhận thanh tốn của A.
Tuy nhiên, để hiện thực hóa quy trình thanh tốn trên, hệ thống tiền điện tử Bitcoin cần phải giải quyết triệt để năm vấn đề đã được đặt ra ở trên. Nội dung tiếp theo của luận văn sẽ trình bày các giải pháp mà Satoshi sử dụng để giải quyết năm vấn đề này.
3.2. Những giải pháp cho các vấn đề của tiền điện tử Bitcoin 3.2.1. Vấn đề tạo ra đồng tiền điện tử Bitcoin 3.2.1. Vấn đề tạo ra đồng tiền điện tử Bitcoin
Weidai đưa ra ý tưởng cơ bản đầu tiên để tạo ra tiền điện tử CryptoCurrency: “Bất kỳ ai trong hệ thống đều có thể tạo ra đồng tiền bằng cách tìm ra phương án
giải quyết một vấn đề tính tốn mà trước đó chưa ai tìm được và truyền phát phương án này tới mọi người trong hệ thống. Tuy nhiên cơng việc tính tốn này phải khó hoặc tiêu tốn một lượng tài nguyên nào đó và cũng dễ dàng xác định được chi phí trung bình bỏ ra để tính tốn. Lượng tiền mới được tạo ra tương ứng với chính chi phí trung bình kể trên” [13]. Satoshi dựa trên ý tưởng này đưa ra phương
thức tạo ra/phát hành đồng tiền Bitcoin mới bằng cách sử dụng Hashcash.
Hashcash được sử dụng trong hệ thống tiền điện tử Bitcoin bao gồm một chuỗi các bài tốn khó liên tiếp mà kết quả của bài toán này được sử dụng làm dữ liệu để giải bài toán kế tiếp. Bài tốn khó của Hashcash trong hệ thống tiền điện tử Bitcoin được Satoshi phát biểu như sau:
- Dữ liệu bài toán: hàm băm H (SHA-256); chuỗi bit s là chuỗi bit kết quả
của bài tốn khó liền trước; chuỗi bit c là giá trị node gốc của cây băm Merkle lưu trữ thông tin các giao dịch mới tại thời điểm đang xét; một số nguyên dương w.
Hình 3.1-Node gốc của cây băm Merkle lƣu trữ thông tin các giao dịch mới
- Yêu cầu bài tốn: tìm giá trị ngẫu nhiên hiện thời nonce (được biểu diễn
dưới dạng nhị phân là chuỗi bit x) sao cho w-bits đầu tiên của chuỗi bit kết quả H(H(s||c||x)) là w-bits 0 và nhỏ hơn một giá trị target cho trước. Chuỗi kết quả
H(H(s||c||x)) sẽ là chuỗi bit làm dữ liệu cho bài tốn khó kế tiếp.
Như đã phân tích, giá trị w và target quyết định độ khó của bài tốn trong
Hashcash, độ khó của bài tốn ảnh hưởng tới thời gian trung bình để các node tìm ra lời giải cho bài tốn. Do đó trong hệ thống tiền điện tử Bitcoin, hoạt động điều tiết quá trình phát hành tiền dựa trên việc lựa chọn và điều chỉnh giá trị w và target
theo quy tắc như sau:
- Đảm bảo thời gian trung bình một Block được ghi nhận vào chuỗi lịch sử giao dịch là 10 phút. Con số này chỉ đơn giản là chính sách lựa chọn của Satoshi vì Satoshi cho rằng nó phù hợp với thời gian các node mạng tìm hiểu về lời giải của bài tốn khó và các đặc tính của mạng ngang hàng như: băng thông và độ trễ... Trên thực tế có những Block mất ít hơn 10 phút và có những Block mất hơn 10 phút để được ghi nhận vào chuỗi lịch sử giao dịch. Các loại Cryptocurrency khác nhau lựa
Hash(Tx0) Hash(Tx1)) ............. Hash(Txn-2) Hash(Txn-1)
Hash01 Hash n-2, n-1
……………………………………………..
Hash Hash
chọn thời gian trung bình kể trên là khác nhau. Ví dụ: NameCoin: 10 phút; LiteCoin: 2.5 phút; Ripple: 3-5 giây; Terracoin: 2 phút…
- Sau 2016 Blocks thì hệ thống tổng kết lại lượng thời gian để ghi nhận 2016 Blocks. Nếu như lượng thời gian này ít hơn 2016*10 phút (khoảng 2 tuần) thì độ khó của bài tốn trong Hashcash được điều chỉnh tăng lên: tăng giá trị w và giảm giá trị target; cịn ngược lại thì độ khó của bài tốn trong Hashcash giảm đi tức là giảm giá trị w và tăng giá trị target [6].
Mỗi đồng tiền Bitcoin mới được phát hành khi một bài tốn khó trong Hashcash được giải quyết. Người được thưởng đồng tiền điện tử Bitcoin mới là người đầu tiên tìm ra lời giải của bài tốn khó trên và truyền phát lời giải của mình cho các node mạng trong hệ thống, đồng thời các node này chấp nhận lời giải đó. Cơ chế xác định người đầu tiên tìm ra lời giải, phương thức thưởng đồng tiền Bitcoin mới cho người này và sự thể hiện của các node mạng chấp nhận đối với lời giải này sẽ được trình bày trong nội dung sau.
3.2.2. Vấn đề xác định quyền sở hữu đồng tiền điện tử Bitcoin
Đối với đồng tiền giấy thông thường, quyền sở hữu được xác định đơn giản là việc nắm giữ hợp pháp của người sở hữu. Đối với tiền điện tử Bitcoin, để sở hữu một đồng tiền, người dùng cần có một địa chỉ số lưu trữ đồng tiền đó. Để tạo ra và sử dụng địa chỉ số này, người dùng cần có một cặp khóa bí mật Ks và khóa cơng khai Kv(xQ, yQ) của chữ ký số trên đường cong Elliptic (ECDSA).
Để mã hóa địa chỉ số, hệ thống tiền điện tử Bitcoin sử dụng một biến thể của Base58 là Base58Check. Về cơ bản, việc biểu diễn số nguyên lớn dưới dạng ký tự dựa trên Base58Check hoàn toàn tương tự như với Base58, tuy nhiên chuỗi kết quả được thêm một ký tự tiền tố được gọi là Version byte vào đằng trước [5].