Private & Public Key

Public key và private key là một phần không thể thiếu của Bitcoin và các loại tiền điện tử khác. Chúng cho phép bạn gửi và nhận tiền điện tử mà không yêu cầu bên thứ ba xác minh các giao dịch. Các khóa này là một phần của mật mã khóa công khai (PKC). Bạn có thể sử dụng các khóa này để gửi tiền điện tử của mình cho bất kỳ ai, ở bất kỳ đâu, bất kỳ lúc nào. Public key và private key khớp với nhau như một cặp khóa. Bạn có thể chia sẻ khóa công khai của mình để nhận giao dịch, nhưng khóa riêng của bạn cần phải được giữ bí mật. Nếu bất kỳ ai có quyền truy cập vào private key của bạn thì họ cũng sẽ có quyền truy cập vào bất kỳ loại tiền điện tử nào được liên kết với các khóa đó.

 

Public key cho phép bạn nhận các giao dịch tiền điện tử. Nó là một mật mã được được tính từ Private key bằng phép nhân đường cong elliptic không thể đảo ngược. Mặc dù bất kỳ ai cũng có thể gửi giao dịch tới Public key, nhưng bạn cần Private key để “mở khóa” chúng và chứng minh rằng bạn là chủ sở hữu của tiền điện tử nhận được trong giao dịch. Public key có thể nhận các giao dịch thường là một địa chỉ, đây chỉ đơn giản là một dạng rút gọn của Public key của bạn. Do đó, bạn có thể thoải mái chia sẻ Public key của mình mà không cần lo lắng.

2.1. Điểm yếu & điểm mạnh của Public Key

Điểm mạnh

  • Tính bảo mật: Chỉ những người nhận được ủy quyền mới có thể đọc các tin nhắn được mã hóa.
  • Tính xác thực: Người gửi có thể ký điện tử vào thư của họ để người nhận biết rằng ghi chú không bị thay đổi khi chuyển tiếp.
  • Không từ chối: Người gửi không thể phủ nhận họ đã viết nội dung thư sau này.

Điểm yếu

  • Dễ bị tấn công từ người trung gian: Một tin tặc có thể chặn một tin nhắn, thay đổi nó và đánh lừa máy tính chủ thực hiện một kết nối không an toàn. Khi điều đó xảy ra, tin tặc có thể đọc qua hầu hết mọi thông báo dành cho máy chủ của bạn.
  • Những thách thức về lập trình: Public Key có thể khó hiểu và khó thực hiện từ đầu, nhưng may mắn thay cho các nhà phát triển, có rất nhiều thư viện có sẵn để xử lý các công việc nặng nhọc. Thư viện Mật mã và Mạng (NaCl) nổi tiếng cung cấp một API được gọi là API Box, giúp xử lý mật mã khóa công khai trở nên đơn giản.
  • Mất khóa cá nhân: Nếu khóa cá nhân bị mất, việc truy cập vào dữ liệu sẽ trở nên khó khăn.
  • Man-in-the-middle (MitM) tấn công: Mã hóa Public Key có thể là mục tiêu cho các cuộc tấn công MitM. Thông thường có 2 cách chính để tin tưởng danh tính của một trang web là chứng chỉ bảo mật và mã hóa khóa công khai của nó. Nếu một trong hai yếu tố này bị xâm phạm, một bên độc hại có thể tự chèn vào kết nối giữa người dùng và  trang web, sau đó nắm bắt bất kỳ thông tin nào được gửi giữa hai bên.

Private Key là một định dạng chuỗi ký tự để kết nối với tài khoản, khá giống với mật khẩu của tài khoản ngân hàng. Private key cung cấp cho bạn khả năng chứng minh quyền sở hữu hoặc chi tiêu số tiền liên quan đến địa chỉ công khai của mình.

  • Mã nhị phân dài 256 ký tự.
  • Mã thập lục phân 64 chữ số.
  • Mã QR.
  • Cụm từ dễ nhớ.

3.1. Đặc điểm chính của Private Key

Private Key là 1 số biểu diễn bởi 256 Bit: 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à secp256k1 ECDSA và làm cho dãy số nhỏ hơn 1 chút nhưng không đáng kể, nó 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.

Mất Private Key, tài khoản của bạn sẽ bị thất lạc vĩnh viễn: Từ Private Key bạn có thể sinh ra được Public Key, và từ Public Key bạn sinh ra được address (địa chỉ Bitcoin). Tuy nhiên quá trình ngược lại là điều không thể.

Sinh Private Key như thế nào? Để 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.

 

Hai khóa Public key và Private key có liên quan với nhau về mặt toán học trên đường cong elip secp256k1. Private key là một số được tạo ngẫu nhiên được vẽ trên đường cong và Public key tương ứng là một điểm có liên quan trên đường cong đó.

Điểm thực sự thú vị của đường cong kỳ diệu này là nó tạo ra chức năng “trap door”. Nghĩa là khi chúng ta tạo điểm đầu tiên trên đường cong (Private key) thì điểm thứ hai tương ứng (Public key) sẽ dễ dàng tìm thấy nhưng không thể tìm thấy theo hướng ngược lại. Nếu bạn có Private key thì bạn luôn có Public key, nhưng nếu người dùng khác có Public key thì về mặt toán học, họ không thể làm ngược lại để tìm Private key của bạn.

Cách thức hoạt động của Public key và Private key trong giao dịch diễn ra như sau:

  • Giao dịch được mã hóa với Public key của người nhận và người nhận chỉ có thể được giải mã bằng Private key đi kèm.
  • Tiếp theo, giao dịch sẽ được ký. Điều này chứng minh rằng giao dịch chưa từng được sửa đổi. Người gửi ký điện tử vào giao dịch để chứng minh họ là chủ sở hữu của số tiền đó.
  • Cuối cùng, giao dịch sẽ được đưa lên blockchain. Các node trong blockchain sẽ kiểm tra và xác thực giao dịch tự động. Bất kỳ giao dịch nào chưa được xác thực sẽ đều bị mạng từ chối. Khi quá trình xử lý và xác minh đã hoàn tất thì giao dịch sẽ được phát trên sổ cái blockchain và không thể đảo ngược. Lúc này, tiền sẽ được gửi đến Public key của người nhận.

Ví dụ:

Nếu Alice muốn gửi cho bạn Bob 1 BTC, cô ấy cần lấy Public key của Bob và cần mã hóa nó với số BTC cô ấy muốn gửi. Tiếp đó Alice ký gửi điện tử và gửi giao dịch trên blockchain. Sau một quá trình mã hóa và xác thực, Bob sẽ nhận được số BTC mà Alice gửi. Bằng cách sử dụng Private key của mình, Bob có thể giải mã và sử dụng số BTC mà Alice gửi cho Bob.

Ví dụ cách thức hoạt động. (Nguồn: tienthuattoan.com)

Dù những kẻ tấn công có thể cố gắng xâm nhập máy chủ và ăn cắp BTC, nhưng chúng sẽ không thể thực hiện được vì chúng thiếu Private key để giải mã cho giao dịch. Chỉ Bob mới có thể giải mã giao dịch đó vì anh ấy là người duy nhất có Private key. Và khi Bob muốn chuyển lại BTC cho Alice thì anh ấy chỉ cần lặp lại quy trình, mã hóa BTC cho Alice với Public key của Alice.

Thuật toán và Cơ chế

Trong mã hóa public key, phải có hai khóa riêng biệt để mã hóa và giải mã. Private key chỉ dành cho chủ sở hữu, trong khi public key có sẵn cho bất kỳ ai. Cần có một khóa để truyền giữa hai bên liên quan đến mật mã khóa đối xứng. Cùng một private key được sử dụng để mã hóa và giải mã thông tin. Nó được chia sẻ giữa người gửi và người nhận một tin nhắn được mã hóa.

Hiệu suất

Cơ chế private key nhanh hơn nhiều so với public key. Đó là vì private key chỉ yêu cầu một khóa trong khi public key yêu cầu hai khóa.

Sự riêng tư

Private key được giữ bí mật và không được tiết lộ cho bất kỳ ai ngoài chủ sở hữu của ví. Sau khi bị mất, private key không thể khôi phục và tệp được mã hóa sẽ không thể sử dụng được. Thông thường, các khóa này rất khó nhớ vì nó liên quan đến các dãy số phức tạp. Tuy nhiên, sự an toàn của private key hoàn toàn phụ thuộc vào chủ sở hữu của nó. Đó là lý do tại sao phương pháp tốt nhất để giữ an toàn cho các private key của bạn là một thiết bị lưu trữ ngoại tuyến. Mặt khác, public key được mở cho tất cả người dùng và sẽ có khi tìm kiếm. Không có khả năng bị mất public key.

Chữ ký số

Nội dung web có thể được ký điện tử bằng private key và được xác minh bằng public keyi của người dùng. Điều đó giúp dễ dàng xác định người gửi tin nhắn trong mạng và xác nhận rằng danh tính đáng tin cậy đã gửi tin nhắn.

Chữ ký điện tử cung cấp các lợi ích bảo mật nhất định như:

  • Xác thực. Nó chứng minh nếu tin nhắn hoặc người dùng là hợp pháp hay không vì không thể giả mạo. 
  • Không phủ định. Người gửi tin nhắn không thể từ chối chữ ký sau khi giao tiếp.
  • Toàn vẹn. Chữ ký đóng vai trò đảm bảo rằng thông điệp đã nhận không bị thay đổi.

Mã hóa và Giải mã

Nội dung được mã hóa bằng public key của người dùng và chỉ có thể được giải mã bằng private key của nó. Đó là cách duy nhất để chuyển đổi thông điệp trở lại.

Mã hóa cung cấp các lợi ích bảo mật sau:

  • Sự riêng tư. Không thể truy cập trái phép. Bảo mật đạt được bằng cách sử dụng kprivate key mà chỉ chủ sở hữu biết chứ không ai khác.
  • Toàn vẹn. Quá trình mã hóa với public key bảo mật đảm bảo rằng tin nhắn nhận được không bị thay đổi.

Mật mã public key được sử dụng trong một số lượng lớn các giao thức và định dạng dữ liệu, được thực hiện bởi một loạt các ứng dụng và phần mềm hệ thống. Điều đó bao gồm giao thức SSL, SSH, tệp PDF được ký kỹ thuật số, OpenPGP, S / MIME,… Nó được áp dụng rộng rãi cho các chương trình phần mềm, chẳng hạn như trình duyệt, để đảm bảo kết nối an toàn trong các mạng không an toàn. Mật mã không đối xứng tạo thành cơ sở cho thuật toán blockchain, tạo thành cơ sở cho tất cả các loại tiền điện tử.