Basic — Sơ lược về ví (Wallet )

Thanh Polimi
11 min readApr 26, 2023

--

Giới thiệu

Chúng ta đã nói rằng về cơ bản blockchain là một cuốn sổ cái ghi lại các giao dịch. Về cơ bản một giao dịch là một bản ghi (record) ghi lai việc chuyển nhượng một tài sản từ một cá thể A (bên A) sang một cá thể B ( bên B). Mỗi cá thể đó sẽ có một định danh duy nhất và trong blockchain chúng được gọi là một địa chỉ (address)

Các địa chỉ là các định danh duy nhất được sử dụng trong một giao dịch trên blockchain biểu thị người gửi và người nhận.

Public key và Private key

Blockchain sử dụng mã hoá khoá công khai trong các thao tác liên quan đến giao dịch. Để có thể hiểu được mã hoá khoá công khai (public key cryptography) thì khái niệm đầu tiên cần hiểu là về ý tưởng của public key và private key :

  • Một khoá riêng tư ( private key ) như cái tên của nó là một chuỗi số được tạo ra một cách ngẫu nhiên và được giữ bí mật và riêng tư bởi người chủ sở hữu. Một khoa riêng tư cần được bảo vệ và không một truy cập trái phép nào được cho phép vào khoá đó, nếu không thì toàn bộ kế hoạch mật mã khóa công khai sẽ bị đe dọa vì đây là khóa được sử dụng để giải mã các thông điệp. Nó cũng tương tư như bạn lưu trữ password vào hòm thư của mình vậy, một khi password bị lộ thì toàn bộ thư tín riêng tư sẽ bị người khác truy cập và xem mất. Một khoá riêng tư có thể có chiều dài đa dạng tuỳ thuộc vào kiểu và lớp thuật toán được sử dụng. Ví dụ như trong RSA, về cơ bản một khoá gồm 1024 bit hoặc 2048 bit sẽ được sử dụng ( khoá với kích thước 1024 thực ra không còn được coi là an toàn và người dùng được khuyến nghị sử dụng khoá 2048 bit trong thực tế).
  • Khoá công khai (Public key) là thành phần được công khai của bộ khoá riêng tư- công khai. Trái với khoá riêng tư thì khoá công khai được công bố rộng rãi bởi người sở hữu khoá riêng tư. Bất cứ ai muốn gửi thông điệp được mã hoá đến người chủ sở hữu của public key có thể dùng chính public key đó để mã hoá và gửi. Không ai khác có thể giải mã vì chỉ có người sở hữu private key có thể giải mã được thông điệp sử dụng private key mà mình đang nắm giữ. Việc này cũng tương tự như bạn gửi email đến địa chỉ email của bạn mình (public key), và chỉ anh bạn của bạn có password (private key) để vào hòm thư nên có thể đọc được thông điệp của bạn. Người ta cũng dùng khoá công khai trong chữ ký điện tử bởi một văn bản được “ký” bằng khóa bí mật của người gửi có thể được xác nhận bới bất kỳ ai có khóa công khai của người gửi.

Mã hoá khoá công khai hay mã hoá không đối xứng là phương pháp mã hoá sử dụng 2 khoá liên quan với nhau về mặt toán học nhưng không hề giống nhau : public key và private key. Không giống như mã hoá đối xứng là hoàn toàn dựa vào một khoá duy nhất cho cả 2 thao tác mã hoá và giải mã, mã hoá không đối xứng sử dụng mỗi khoá cho mục đích riêng. Khoá công khai cho mục đích mã hoá và khoá riêng tư cho mục đích giải mã. Bởi vì về mặt tính toán là bất khả thi để tìm ra khoá riêng tư từ khoá công khai nên khoá công khai có thể được chia sẻ một cách tự do và cung cấp cho người dùng một cách thức tiện lợi để mã hoá thông điệp và kiểm tra xác minh chữ ký điện tử.

Trong khi khoá riêng tư là một chuỗi ngẫu nhiên bất kỳ, chúng ta sẽ sử dụng một thuật toán để sinh ra khoá công khai từ nó. Thuật toán này cần đảm bảo :

  • Cung cấp khả năng gắn kết chặt chẽ về mặt toán học giữa khoá riêng tư và khoá công khai
  • Cho dù chúng liên quan đến nhau về mặt toán học nhưng không thể tìm ra khoá riêng tư từ khoá công khai : thuật toán sử dụng để sinh ra khoá công khai là thuật toán một chiều.

Trong thực tế thuật toán mã hóa đường cong elip (Elliptic curve cryptography — ECC) được sử dụng để tạo ra cặp public key và private key trong các mạng blockchain Lấy ví dụ như trên bitcoin:

  • Khoá riêng tư về cơ bản là một số 256 bit được lựa chon trong khoảng được định nghĩa bởi tiêu chuẩn SECP256K1. Private key là một số 256 bit bất kỳ trong khoảng từ 0x1 đến 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140.
  • Private key thường được encode sử dụng định dạng Wallet Import Format (WIF) để dễ copy và sử dụng. WIF có thể được convert thành private key và ngược lại.
  • Bitcoin sử dụng ECC để sinh ra public key từ private key.

Khoá công khai (public key) và Địa chỉ (Address)

Public key cho ta một ý tưởng về việc sử dụng nó như một địa chỉ trên blockchain. Bản thân bitcoin ban đầu cũng cho phép thanh toán trực tiếp sử dụng public key hay P2PK (Pay to Public Key). Tuy nhiên có một thực tế là trong khi một người muốn có thể sở hữu nhiều địa chỉ ( public key) và các địa chỉ này là duy nhất. Việc này cũng tương tự như bạn sở hữu nhiều địa chỉ email, mỗi địa chỉ email trong khi đó lại là duy nhất trên mạng internet vậy. Hơn nữa người dùng blockchain có thể không sử dụng lại địa chỉ mà có nhu cầu sinh ra một địa chỉ mới cho mỗi giao dịch. Địa chỉ mới sinh ra này cũng là duy nhất. Việc này giúp cho việc định danh cá nhân trên blockchain trở nên khó khăn hơn, tuy nhiên một số nghiên cứu cho thấy vẫn có khả năng tìm ra định danh người dùng trên nền tảng như bitcoin. Việc này cho ta ý tưởng rằng có thể tạo ra các địa chỉ phái sinh từ public key cho mục đích sử dụng làm địa chỉ thông qua sử dụng Hash Functions.

Một địa chỉ bitcoin được tạo ra thông qua việc lấy public key và private key chạy qua hàm hash 2 lần. Lần đầu tiên sử dụng thuật toán SHA256 và sau đó là sử dụng RIPEMD160. Kết quả cho ra là một chuỗi hash 160 bit với một số version. Cuối cùng nó được encode sử dụng phương pháp encoding Base58Check. Một địa chỉ bitcoin từ đo sẽ là một chuỗi có chiều dài từ 26–35 ký tự bắt đầu bởi 1 hoặc 3. Thanh toán trên bitcoin từ đó chuyển từ P2PK thành P2PKH (hay Pay To Public Key Hash )

Như đã nói ở trên, khoá công khai hoàn toàn có thể được tính toán ra từ khoá riêng tư và địa chỉ được sinh ra từ khoá công khai nên trên thực tế chúng ta không cần ghi nhớ cả 3 thông tin:

  • Khoá riêng tư
  • Khoá công khai
  • Địa chỉ

Tuy nhiên nếu chúng ta đánh mất khoá riêng tư thì điều đó có nghĩa chúng ta thật sự bị khoá khỏi khả năng truy cập vào những dữ liệu của mình trên blockchain.

Địa chỉ ví (Wallet Address)

Do blockchain đầu tiên ra đời là Bitcoin với mục đích để giao dịch tiền điện tử ( tiền mã hoá ) nên cách gọi địa chỉ ví hay Wallet Address đã ra đời. Khái niệm địa chỉ ví là thể hiện địa chỉ mà người dùng sở hữu và sử dụng để giao dịch trên nền tảng blockchain hỗ trợ tiền mã hoá (Cryptocurrency). Ví dụ : một ví bitcoin là một địa chỉ 32 bit duy nhất được sinh ra như mô tả ở trên cho phép gửi/nhận bitcoins.

Một phần mềm ví (Software Wallet) là một phần mềm được tạo ra để lưu trữ private key và public key và địa chỉ cũng như theo dõi tất cả các giao dịch liên quan đến địa chỉ đó trên blockchain. Ví không lữu trữ tiền điện tử, thực ra không có khái niệm ví lưu trữ số dư tiền điện tử cho user. Thậm chí trên nền tảng bitcoin, khái niệm coin còn không thực sự tồn tại, thay vào đó chỉ có thông tin các giao dịch được lưu trên blockchain, và từ các giao dịch này người ta tính toán ra được lượng tiền điện tử.

Ví chỉ cung cấp một loại định danh (ID) nhằm cho phép theo dõi và truy vết tất các các giao dịch liên với ID đó. Định danh đề cập tới ở đây chính là địa chỉ ví.

Hãy tưởng tượng ví như phần mềm ngân hàng của bạn, phần mềm đó chứa số tài khoản giao dịch của bạn và toàn bộ thông tin các giao dịch tiền vào/ra. Mỗi khi bạn cần truy vấn số dư, thì số dư đó sẽ được tính toán dựa trên toàn bộ các lịch sử giao dịch tính đến thời điểm truy vấn. Một cách tổng quát, ví được tạo ra giúp người sử dụng lưu trữ, chuyển đổi và nhận các tài sản điện tử trên blockchain (không chỉ tiền điện tử).

Các loại ví

Có khá nhiều loại ví đã được sinh ra phục vụ người dùng :

  • Non-deterministic wallet : ví thuộc loại này chứa các private keys được sinh ra một cách ngẫu nhiên và cũng còn được gọi là “Just a bunch of key wallets”. Ví sẽ sinh ra một số private key lúc đầu và lúc được yêu cầu. Tuy nhiên điểm yếu của nó là việc quản lý một số lượng key lớn là rất khó khăn và dễ nhầm lẫn dẫn tới việc có thể mất tài sản. Ngoài ra còn cần phải thường xuyên backup cũng như bảo về các key và backup để tránh bị trộm hoặc mất mát.
  • Deterministic walleet : khác với ví Non-deterministic, các private keys lúc này được sinh ra từ một giá trị seed thông qua hàm hash. Giá trị seed này được lựa chọn ngẫu nhiên và được biểu thị dưới dạng các từ gợi nhớ với con người ( human-readable mnemonic words). Từ gía trị seed này có thể khôi phục lại tất cả các keys và từ đó giúp việc quản lý keys dễ hơn rất nhiều
  • Hierarchical deterministic wallets (HD Wallet) : HD Wallet lưu trữ key trong một cấu trúc hình cây được sinh ra từ một seed. Seed này được sử dụng để sinh ra khoá chính (master private key) và từ khoá chính thì các khoá con sẽ được sinh ra và tiếp theo là các khoá cháu v..vv. HD Wallet không tạo ra khoá một cách trực tiếp mà nó cung cấp một số thông tin ( thông tin tạo ra khoá riêng tư) mà được sử dụng để tạo ra một chuỗi các khoá riêng tư. Sự phân cấp của các khóa riêng tư trong ví HD có thể dễ dàng khôi phục nếu khóa riêng tư chính được biết. Chính vì đặc tính này mà ví HD rất dễ bảo trì và có tính linh động cao.
  • Brain wallets : Khoá riêng tư chính được sinh ra từ giá trị hash của mật mã được ghi nhớ. Ý tưởng tương tự như HD Wallet nhưng giá trị seed là một chuỗi mật mã được đặt ra bởi chủ nhân của ví. Với loại ví này thì thì điểm yếu là ở việc đặt mật mã dễ đoán có thể cung cấp cho người lạ một cơ hội tấn công sử dụng các kỹ thuật cổ điển thử mật mã đến khi đúng như brute force attacks.
  • Paper Wallet : Như cái tên của nó chỉ ra, là một ví với thông tin in trên giấy. Nó cần được bảo vệ bằng hình thức vật lý. Một ví giấy ( paper wallet ) có thể được sinh ra online từ một nhà cung cấp như : https://bitcoinpaperwallet.com/ hoặc https://www.bitaddress.org/.
  • Hardware Wallet : Ví cứng là dạng ví bảo mật cao, được cung cấp bởi các công ty phần cứng lớn như Trezor hay Ledger dưới dạng các thiết bị lưu trữ. Các khoá được lưu trữ trên các thiết bị chống giả mạo với lớp bảo mật. Thông thường chúng không được kết nối với internet và chỉ được kết nối khi tiến hành các giao dịch, hính bởi vậy nó an toàn khỏi việc bị hack và cung cấp khả năng lưu trữ các tài sản điển tự một cách an toàn hơn . Các ví không kết nối với internet được gọi chung là Ví lạnh — Cold Wallet ( Paper wallet, hardware wallet ) để phân biệt với ví nóng — Hot wallet luôn được kết nối với internet.
  • Online wallet (Hot wallet ) : Như chính cái tên của mình, ví online cung cấp khả năng lưu trữ private key online sử dụng các dịch vụ như điện toán đám mây. Chúng cung cấp giao diện web để người sử dụng quản lý ví và thực hiện các giao dịch. Ví online rất tiện dùng nhưng việc lưu trữ online đồng nghĩa chúng ta đặt sự tin tưởng vào nhà cung cấp bởi họ nắm toàn bộ các thông tin khoá của chúng ta một cách tập trung (centralized ).
  • PC Wallet
  • Mobile Wallet
  • Browser Wallet : Metamask rất nổi tiếng.

Cách thức ví hoạt động

Hãy xem cách mà các ví hoạt động để hiểu thêm về cơ chế thực hiện giao dịch trên nền tảng blockchain:

  • Khi bạn cho ai đó địa chỉ ví của bạn, bất cứ khi nào họ thực hiện gửi tài sản (assets) cho bạn về thực chất họ đang tạo một giao dịch gán tài sản đó sang địa chỉ của bạn. ( nhớ rằng địa chỉ của bạn được sinh ra từ public key)
  • Bởi private key được gắn liền với public key ( thứ được dùng để sinh ra wallet address), nên nó là thứ duy nhất có thể được sử dụng để giải mã thông tin được mã hoá bởi người gửi để mở khoá nội dung giao dịch. Đó chính là cách bạn truy cập vào tài sản của mình
  • Để thực hiện một giao dịch, người chủ của ví sẽ sử dụng private key của họ để ký (sign) giao dịch trước khi gửi nó lên blockchain network. Một khi giao dịch được công bố trên toàn mạng, các node sẽ tiến hành kiểm chứng giao dịch sử dụng public key ( công khai ) gắn liền với private key được dùng để kí giao dịch để xem giao dịch có hợp lệ không. Chú ý rằng mỗi giao dịch được tao ra bởi private keys chứa một chữ ký số duy nhất khiến nó rất khó có thể bị copy hoặc giống như các giao dịch khác kể cả khi sử dụng cùng private key để tạo ra nhiều chữ ký số.
  • Người nhận trong giao dịch cũng được xác thực thông qua thực tế rằng tài sản trong giao dịch được gán cho địa chỉ của họ. Private keys của người nhận sẽ được sử dụng để giải khoá tài sản và cập nhật vào ví việc quyền sở hữu tài sản đã được chuyển giao.

--

--

Thanh Polimi

I am represented by the lion(leo), and these spirited fire signs are the kings of the celestial jungle. Leo is delighted to embrace his royal status.