Nhập môn về Private key, Public key, Address trong Bitcoin.
Bitcoin
12
White

Trần Mỹ viết ngày 28/01/2018

Xin chào mọi người.

Thời gian ngắn gần đây mình có tìm hiểu 1 chút về Bitcoin và Blockchain, và để củng cố kiến thức thu nạp được mình quyết định tổng hợp lại ở bài viết này cũng như hi vọng sẽ có ích với các bạn có cùng quan tâm.

Mình hi vọng viết ở mức độ nhập môn, bất kỳ ai dân kỹ thuật đều có thể đọc hiểu được mà không cần kiến thức đặc biệt chuyên sâu.

Những kỹ thuật implement nên bitcoin mình thấy cũng khá rộng và phức tạp, ở bài viết này mình chỉ để cập đến Private key, Public keyBitcoin Address. Mặc dù với kiến thức ở 3 phạm vi này chỉ là phần nhỏ kiến thức về bitcoin, vẫn còn nhiều phần khác ta phải đề cập đến để hiểu cách bitcoin thực sự hoạt động, nhưng dù sao thì ta cũng không có cách nào khác là tìm hiểu từng phần một, và mình nghĩ những nội dung về phần này có thể coi như "Phần đầu của câu chuyện", từ đây ta có thể hiểu về các khái niệm khác như transaction, mining .... đơn giản hơn, và cũng hiểu được 1 phần về tính bảo mật của Bitcoin.

Nếu bạn là nhà đầu tư hoặc là người muốn tìm kiếm cơ hội kinh doanh với bitcoin thì mình nghĩ hiếu sâu về kỹ thuật bên trong bitcoin cũng không thực sự cần thiết. Có rất nhiều bài viết khái quát về tính chất của bitcoin trên internet mà mình nghĩ những bài viết này phù hợp hơn. Ở bài viết này mình nghĩ phạm vi trình bày về mặt kỹ thuật hơn, hi vọng đóng góp được 1 mảnh ghép làm sáng tỏ được cách hoạt động của bitcoin nói riêng và tiền ảo nói chung.

alt text

Một điều quan trọng nữa các bạn chú ý là là bản thân mình cũng mới tìm hiểu ở mức độ lý thuyết chứ cũng chưa xác nhận trên thực tế. Nếu có sai sót hi vọng nhận được góp ý.

Mục tiêu của bài viết

  1. Nắm được các khái niệm về Private key, Public key, Bitcoin Address
  2. Đánh giá được tính bảo mật trên cơ chế xây dựng nên các khái niệm trên và thuật toán tạo ra nó.

Giới thiệu về Bitcoin

alt text

Bitcoin là đồng tiền ảo đầu tiên trên thế giới, thành công nhờ công nghệ blockchain đằng sau nó cho phép xác thực được giao dịch bỏ qua được chi phí trung gian. Hiện nay bitcoin đã trở nên rất phổ biến và có lẽ không xa lạ với mọi người nữa. Có nhiều có nguồn trình bày chi tiết hơn, các bạn có thể tham khảo trên trang wiki.

https://en.wikipedia.org/wiki/Bitcoin
https://vi.wikipedia.org/wiki/Bitcoin

Khái niệm Bitcoin.

1 Bitcoin (Ký hiệu : BTC, XBT) là 1 digital currency (thể hiện được số hóa). Cũng giống như các loại tiền tệ khác, bản thân nó không có giá trị, mà giá trị nằm ở việc chúng ta đồng ý để trao đổi hàng hóa của mình với nó, và chúng ta tin rằng người khác cũng làm như vậy. Về mặt kỹ thuật, bitcoin không tồn tại ở 1 nơi cố định, mà bitcoin được xác định bằng các giao dịch dùng nó.

Thông tin về lượng Bitcoin của mỗi người nằm trong 1 ledger (cuốn sổ cái) mà cũng có thể gọi chính là 1 blockchain.
Ledge lưu các giao dịch mà nhờ vào đó ta tính được lượng bitcoin của 1 tài khoản là bao nhiêu.
Một blockchain là chuỗi các block lưu các facts, mà trong bitcoin đó chính là các giao dịch (transaction). Mình lấy Ví dụ đơn giản về ledger bitcoin ở dưới đây.

alt text

Và dựa vào đó ta tính được số BTC mà mỗi user cầm là :
A : 1
B : 0.25
C : 0.75

Bạn sẽ để ý rằng ở block ban đầu (còn gọi là genesis block) có đoạn là {} -> A : 2. Điều này thể hiện rằng 2 BTC này thuộc 1 loại giao dịch đặc biệt gọi là coinbase, có thể hiểu là A đã bỏ công sức để đào ra block đầu tiên, và phần thường cho A là 2 BTC đó.

Bitcoin có thể có được bằng 1 trong 2 cách sau :

  1. Giao dịch với người khác : ta dùng tiền mặt hoặc vật phẩm để đổi lấy btc của họ
  2. Đào bitcoin (mining) : Ta nhận được bitcoin từ 1 trong 2 nguồn là phần thưởng khi đào được 1 block (coinbase) hoặc là phí khi xác thực giao dịch của người khác (transaction fee).

Có thể mình sẽ trình bày cụ thể hơn ở 1 bài viết khác, ở bài viết này mình chỉ trình bày đến đây. Tiếp theo mình sẽ đề cập đến ví bitcoin (wallet)

Wallet (Ví)

Về khái niệm Wallet, nếu trong thực tế wallet là 1 cái ví vật lý bên trong có chứa thẻ creditcard, tiền, chứng minh thư..., Google Wallet thì là 1 cái ví được số hóa, còn Bitcoin Wallet thì cũng có thể hiểu đơn giản như Google Wallet - 1 cái ví điện tử - 1 chương trình giúp ta quản lý Bitcoin của mình. Nếu bỏ qua những xử lý bên trong của những phần mềm wallet và hỏi rằng điều gì không thể thiếu và làm nên 1 wallet thì đó là cặp private keypublic key, chúng xác định nên tính độc nhất của 1 wallet. Và vì public key là cái cần phải public cho cộng đồng biết để họ xác nhận giao dịch cho chúng ta, nên private key là cái quan trọng hơn và cần phải giữ bí mật.

alt text

Như sơ đồ trên đây, từ Private key ta có thể sinh ra được Public key, và từ Public key ta sinh ra được address (địa chỉ bitcoin). Nên thực tế ta chỉ cần biết Private key là đủ, public key ta có thể sinh ra từ nó được, mặc dù đảo ngược là không thể đánh giá mặt toán học.

Private key là thứ quan trọng nhất và không được để mất.

Vậy lần lượt chúng ta sẽ đi qua từng khái niệm.

1. Private key

Link offical : https://en.bitcoin.it/wiki/Private_key

Một private key trông như thế này, và luôn bắt đầu với 5 :

5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF

Các bạn có thể tham khảo về range và cách sinh private key trên trang offical ở trên hoặc ở đây và ở đây
Dưới đây là 1 số đặc điểm của private key

1.1. 1 private key là 1 số biểu diễn bởi 256 bit

Vậy thì về lý thuyết thì ta sẽ có $2^{256}$ (~$10^{77}$) private key, nhưng thực tế thì Bitcoin sử dụng 1 chuẩn gọi là secp256k1 ECDSA, và làm cho range nhỏ hơn 1 chút nhưng không đáng kể, range vẫn là 1 con số lớn nằm trong khoảng đó và làm cho việc đoán nó trở nên bất khả thi.

Giả sử ta là hacker, về mặt lý thuyết thì ta có thể tạo 1 script, cho nó chạy từ 1 cho đến (~$10^{77}$), sinh lần lượt ra public key và address tương ứng. Rồi kiểm tra xem trong đó có đồng nào không bằng cách nhập address vào đây , nếu có thì gửi vào tài khoản của mình.

Về lý thuyết thì ta có thể làm được như vậy, nhưng thực tế người ta cho rằng range của private key là quá lớn để có thể đoán (~$10^{77}$). Để so sánh thì có ước tính cho rằng có khoảng (~$10^{47}$) phân tử nước và (~$10^{18}$) hạt cát trên trái đất, và con số này còn là rất nhỏ so với range của private key, con số này có thể gần hơn với số thiên hà quan sát được là (~$10^{80}$).

1.2. Mất Private key, tài khoản sẽ thất lạc vĩnh viễn.

Vậy ta sẽ nghĩ đến là "Nếu chẳng may mình mất private key thì sao?", thì mình nghĩ điều đó đồng nghĩa với việc gần như không thể tìm lại được bằng cách suy luận từ pubic key, và bitcoin trong đó sẽ thất lạc vĩnh viễn. Thực tế ta cũng có 1 điều tra thể hiện rằng 1 phần số bitcoin tồn tại hiện nay là vô chủ, có thể có ai đó thực sự quên, hoặc là vốn dĩ họ đã không biết và giao hoàn toàn cho sàn giao dịch, và sàn giao dịch bị hack. Ở biểu đồ thể hiện thị phần nắm bitcoin ở 1 điều tra vào 10/2013, ta có thể thấy 4.1% lượng bitcoin được đánh giá là vô chủ.

alt text
Nguồn : http://www.businessinsider.com/927-people-own-half-of-the-bitcoins-2013-12

1.3. Sinh private key như thế nào.

Như mình đã nói ở phần trên, để 1 private key hợp lệ thì nó cần là 1 số biểu diễn dưới dạng 256 bit và thỏa mãn chuẩn secp256k1.
Kết hợp 2 yếu tố đó, ta có thể viết 1 script sinh ngẫu nhiên 1 số 256 bit trong khoảng từ
0x1
đến
0x1 to 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140
thì private key được coi như hợp lệ.

--> Đến đây ta có thể hiểu được độ bảo mật của bitcoin liên quan đến range của private key như thế nào.

Thường chuỗi 1 private key sẽ bắt đầu với 5, ví dụ như sau:

5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn

Có lẽ khái niệm Private key - 1 số 256 bit rất đơn giản. Thuật toán từ private key sinh ra public key và address sẽ phức tạp hơn 1 chút. Mình sẽ đề cập đến sau đây.

2. Public key

Công thức tính public key đơn giản hóa như sau :

Public_key = Private_key * G 
  • * ở đây có thể hiểu tương tự như phép nhân số học 2 * 2 = 4 , khác ở chỗ là đây có thể nói là 1 phép nhân hình học thì dễ hình dung hơn.
  • G là 1 giá trị cố định và đã biết được gọi là generation point và đây cũng là 1 điểm hình học.

Người ta đánh giá rằng tìm ra 1 thuật đoán đảo ngược suy luận được private key từ public key cũng khó tương đương với việc thử tất cả các giá trị của private key.

Vậy để hiểu về phép nhân hình học * ở trên, trước hết mình sẽ trình bày về đường cong hình học dưới đây.
alt text

Đây là đồ thị của hàm : $y^{2}$ mod p = ($x^{3} + 7$) mod p

Trong bitcoin p là giá trị rất lớn p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

Để dễ hình dung thì giả sử lấy p bằng 17, ta sẽ có được tương ứng cặp (x, y) = (1, 5) thỏa mãn hàm trên.

Tiếp đến mình đề cập đến 1 số tính chất của đường cong này như sau :

  • Điểm vô định (Point of infinity) : Tương tự như số 0 trong toán học, ta có 1 + 0 = 1 thì trong đồ thị này ta cũng có ý nghĩa của điểm vô định gần giống như vậy. Nếu P1 là điểm trên đường cong và P2 là điểm vô định thì P1 + P2 = P1.
  • Phép cộng : Cũng tương tự như phép cộng số học. Nếu trong số học ta có 1 + 1 = 2 thì trong đồ thị giả sử ta có 2 điểm P1, P2 nằm trên đường cong thì ta có P1 + P2 = P3 cũng là 1 điểm trên đường cong.

Về mặt hình học, trong trường hợp P1 + P2 = P3 ở trên thì ta sẽ có được P3 bằng cách nối 2 điểm P1, P2 tạo thành 1 đoạn thẳng. Đoạn thẳng này sẽ cắt đường cong tại duy nhất 1 điểm P3' (x, y) thì P3 sẽ là điểm đối xứng với nó qua trục x (x, -y)

Điểm vô định có 2 tính chất như sau :

  • Trường hợp mà P1, P2 là 2 điểm đối xứng với nhau qua trục x, thì đoạn thẳng nối chúng sẽ không cắt đường cong, và P3 lúc này được gọi là điểm vô định.
  • Trường hợp P1, P2 là cùng 1 điểm, thì đoạn thẳng nối 2 điểm này sẽ được kéo dài ra, tạo thành 1 tiếp tuyến với đường cong. Tiếp tuyến này sẽ cắt đường cong duy nhất 1 điểm P3', đối xứng với nó là P3. Và ta nói rằng P1 + P1 = P1 + P2 = P3. (Hoặc 2*P1 = P3)

Từ những khái niệm trên, ta đi đến định nghĩa về phép nhân

Với k là thừa số, ta có k * P = P + P + P + ... + P (k lần). Cũng tương tự như số học, khác là P ở đây là 1 điểm hình học.

Vậy đến đây ta sẽ quay trở lại với công thức tính public key ở trên.

Public_key = Private_key * G 

Trong công thức trên, G chính là 1 điểm trong đồ thị trên. Và vì G là điểm biết trước, chung cho tất các user, nên ta sẽ có :

Public_key chính là số lần nhân G với Private_key lần về mặt hình học

alt text

Giả sử G như trong hình vẽ trên, nếu private key là 2 thì ta sẽ có public key sinh ra chính là điểm 2G trên đồ thị.

Đến đây mình kết thúc định nghĩa về public key. Tiếp đến mình sẽ nói về Address

3. Address

1 Address là chuỗi ký tự bao gồm các chữ và số, dưới đây là sample 1 address. 1 address thường bắt đầu với số 1

 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

Bitcoin address mang ý nghĩa là "nơi nhận" trong 1 transaction. Ánh xạ trong thực tế, nó cũng giống như là địa chỉ nhà bạn gái khi ta đặt dịch vụ gửi hoa đến ngày sinh nhật, hay là địa chỉ gửi bưu kiện... Thường address là thể hiện của public key sau 1 lớp mã hóa, nhưng trong bitcoin cũng không nhất thiết là như vậy. Address có thể mang tính trừu tượng như "Gửi đến các nạn nhân hứng chịu cơn bão miên Trung" hoặc là Script (Pay-to-Script-Hash (P2SH)). Trong bài viết này mình sẽ chỉ đề cập đến address thể hiện cho public key.

So với tính toán public key từ private key ở trên thì dẫn xuất address từ public key, đơn giản hơn, mô tả ở công thức dưới đây.

 Address = RIPEMD160 (SHA256(public_key))
  • SHA256 : Thuật toán mã hóa Secure Hash Algorithm
  • RIPEMD160 : Thuật toán mã hóa RACE Integrity Primitives Evaluation Message Digest

Mặc dù có phần trình bày về address đến đây có hơi ngắn, nhưng mình nghĩ có lẽ đủ để có cái nhìn khái quát về address, và ta nắm được rằng address dẫn xuất từ public key, và trước đó nữa là private key.

Trong thực tế, để thuận tiện cho việc tính toán ở các node và dễ dàng lưu trữ, tránh nhầm lẫn, các khái niệm trên được mã hóa thêm 1 lớp nữa như dụ như Base58Check (Loại bỏ các ký tự 0, O, l, I), gắn thêm version, checksum.. Các bạn có thể tham khảo cụ thể hơn ở các tài liệu mình ghi dưới cuối bài.

Tổng kết

Bitcoin nói riêng và tiền ảo nói chung đang trở thành xu thế và lĩnh vực nóng trong thời gian gần đây, những kiến thức về chúng và blockchain có thể mở ra rất nhiều cơ hội mới. Hi vọng bài viết của mình có thể cung cấp cho các bạn 1 cách nhìn rõ ràng hơn trên góc độ kỹ thuật.

Ở bài viết tiếp theo mình hi vọng có thể viết về Blockchain.

Tham khảo

https://www.safaribooksonline.com/library/view/mastering-bitcoin/9781491902639/
https://coinsutra.com/bitcoin-private-key/
http://bitzuma.com/posts/six-things-bitcoin-users-should-know-about-private-keys/

Bài viết có thể có nhiều sai sót, hi vọng nhận được góp ý thêm từ các bạn.

TranMy 22-10-2017

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Trần Mỹ

9 bài viết.
85 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
38 9
XIn chào mọi người. Thời gian gần đây mình có tìm hiểu về blockchain và golang. Mình viết bài viết này với mục đích chia sẻ và tổng hợp những kiến...
Trần Mỹ viết 6 tháng trước
38 9
White
15 1
Xin chào mọi người. Đây là phần 2 trong bài viết về xây dựng blockchain đơn giản với golang của mình. Ở (Link) mình đã trình bày về việc xây dựng...
Trần Mỹ viết 6 tháng trước
15 1
White
14 2
Xin chào mọi người. Đây là phần 3 trong bài viết của mình về xây dựng blockchain với ngôn ngữ Go. Các bạn có thể có thể tham khảo 2 phần trước củ...
Trần Mỹ viết 6 tháng trước
14 2
Bài viết liên quan
Male avatar
17 0
Giới thiệu Bitcoin là gì? Bitcoin là tập hợp của nhiều khái niệm và công nghệ tạo nên thành phần cơ bản cho hệ thống tiền điện tử. Đơn vị tiền t...
Nguyen Quang Phuong viết 7 tháng trước
17 0
White
10 2
Xin chào mọi người. Đây là phần 4 trong bài viết của mình về xây dựng 1 blockchain đơn giản với ngôn ngữ Go. Các bạn có thể có thể tham khảo 3 ph...
Trần Mỹ viết 5 tháng trước
10 2
White
5 6
Ethereum đang chuyển từ Proof of Work sang Proof of Stake. (Link) (smart contract cho phép sử dụng Proof of Stake) vừa được cộng đồng Ethereum Dev...
Nam Doan viết 1 tháng trước
5 6
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
9 bài viết.
85 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!