Private key, Public key, Address trong Bitcoin là gì ?

0
86

Private key là gì ?

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

Private key Khóa riêng chỉ đơn giản là một số, được chọn ngẫu nhiên. Quyền sở hữu và quyền kiểm soát đối với khóa riêng là gốc của quyền kiểm soát người dùng đối với tất cả các khoản tiền được liên kết với địa chỉ bitcoin tương ứng. Khóa riêng được sử dụng để tạo chữ ký được yêu cầu chi tiêu bitcoin bằng cách chứng minh quyền sở hữu tiền được sử dụng trong giao dịch. Khóa riêng phải luôn được giữ bí mật, vì tiết lộ nó cho bên thứ ba tương đương với việc cho họ quyền kiểm soát bitcoin được bảo mật bởi khóa đó. Khóa riêng cũng phải được sao lưu và bảo vệ khỏi mất mát do tai nạn, vì nếu mất nó không thể lấy lại được và tiền được bảo đảm bởi nó cũng bị mất mãi mãi.

Dưới đây là 1 số đặc điểm của private key

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

Vậy thì về lý thuyết thì ta sẽ có 2256 (~1077) private key, nhưng thực tế thì Bitcoin sử dụng 1 chuẩn gọi là secp256k1ECDSA, 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 (~1077), 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 (~1077). Để so sánh thì có ước tính cho rằng có khoảng (~1047) phân tử nước và (~1018) 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à (~1080).

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ủ.

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

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.

Public key là gì ?

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.

Đây là đồ thị của hàm : y2 mod p = (x3+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

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

Address là gì ?

Address Bitcoin 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ÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây