📌 Tóm tắt nhanh
Blockchain dựa vào ba trụ cột mật mã học: hash function (tạo tính bất biến và liên kết block), public-key cryptography / ECDSA (xác thực chủ sở hữu và ký transaction), và Merkle Tree (tổ chức transaction hiệu quả). Không có cryptography, blockchain chỉ là database thông thường có thể bị sửa đổi bởi bất kỳ ai.
1Tại sao Blockchain cần mật mã học?
Câu hỏi cơ bản nhất: trong một mạng không có trung tâm tin cậy, làm sao mọi người có thể chắc chắn rằng dữ liệu là xác thực và không bị giả mạo?
Câu trả lời là mật mã học (cryptography) — ngành khoa học nghiên cứu các kỹ thuật bảo mật thông tin dựa trên nền tảng toán học. Blockchain sử dụng mật mã học để giải quyết ba vấn đề cốt lõi:
- Tính toàn vẹn dữ liệu: Ai đó có thể sửa lịch sử giao dịch không? → Hash function ngăn chặn điều này
- Xác thực danh tính: Làm sao biết người gửi thực sự sở hữu tài sản đó? → Digital signature chứng minh
- Kiểm tra hiệu quả: Làm sao verify một transaction trong block mà không tải toàn bộ block? → Merkle Proof
2Hash Function — Trụ cột đầu tiên
Hash function là hàm một chiều: nhận đầu vào (data) bất kỳ kích thước và trả về chuỗi cố định độ dài gọi là hash hay digest. "Một chiều" nghĩa là không thể tính ngược từ hash ra dữ liệu gốc.
Bốn thuộc tính quan trọng
- Deterministic: Cùng input luôn cho cùng output.
SHA256("hello") = 2cf24db...— bất biến - Avalanche effect: Thay đổi 1 bit input → hash thay đổi hoàn toàn (khoảng 50% bit thay đổi)
- Preimage resistance: Không thể tính ngược từ hash ra input gốc
- Collision resistance: Cực kỳ khó tìm hai input khác nhau cho cùng hash output
Hash Function trong Blockchain
Mỗi block header chứa parentHash = SHA256(block_header_trước). Nếu ai sửa block cũ, hash của nó thay đổi → không khớp với parentHash trong block tiếp theo → toàn bộ chain từ đó bị vô hiệu. Đây là cơ chế tạo nên tính bất biến (immutability) của blockchain — không cần trung tâm kiểm soát.
Ngoài ra, PoW dùng hash function như puzzle: tìm nonce sao cho SHA256(block_header + nonce) bắt đầu bằng đủ số 0. Đây là "lottery" tính toán tiêu tốn năng lượng của Bitcoin mining.
3SHA-256 và Keccak-256
Không phải tất cả hash function đều như nhau. Blockchain chọn các hàm được thiết kế đặc biệt cho bảo mật cao.
| Hash Function | Output | Dùng ở đâu | Thiết kế bởi |
|---|---|---|---|
| SHA-256 | 256 bit (64 hex chars) | Bitcoin (PoW, address, Merkle) | NSA / NIST |
| SHA-512/256 | 256 bit | Bitcoin address (phần trong) | NSA / NIST |
| Keccak-256 | 256 bit (64 hex chars) | Ethereum (mọi thứ) | Team Keccak (độc lập) |
| RIPEMD-160 | 160 bit (40 hex) | Bitcoin address (hash của pubkey) | Open research |
| Pedersen Hash | Tuỳ curve | ZK circuits, StarkNet | ZK research |
Tại sao Ethereum chọn Keccak-256 thay vì SHA-256?
Ethereum được thiết kế năm 2013-2014, ngay sau khi NSA Dual EC DRBG backdoor bị phát hiện làm dấy lên nghi ngờ về các thuật toán do NSA thiết kế. Team Ethereum chọn Keccak (sau này được chuẩn hóa thành SHA-3 với một vài thay đổi nhỏ, nhưng Ethereum vẫn dùng phiên bản Keccak gốc chứ không phải SHA-3 chuẩn) để tránh phụ thuộc vào NSA-designed algorithms.
4Public-Key Cryptography — Trụ cột thứ hai
Public-key cryptography (hay asymmetric cryptography) giải quyết vấn đề: làm sao hai bên có thể giao tiếp an toàn mà không cần chia sẻ bí mật từ trước? Và làm sao chứng minh danh tính mà không tiết lộ thông tin bí mật?
Nguyên tắc Key Pair
Mỗi người có một cặp key:
- Private key: Tuyệt mật, chỉ người sở hữu biết. Dùng để ký dữ liệu
- Public key: Chia sẻ công khai. Dùng để verify chữ ký
Mối quan hệ toán học: từ private key, có thể tính ra public key. Nhưng từ public key, không thể tính ngược ra private key (trong thời gian hợp lý với máy tính hiện đại).
Ứng dụng trong Blockchain
Trong blockchain, private key = chìa khóa tài sản. Ai có private key thì kiểm soát tài sản trong ví tương ứng. Public key (hoặc hash của nó) = địa chỉ ví — địa chỉ công khai để nhận tiền. Chữ ký số (digital signature) chứng minh người gửi transaction sở hữu private key của địa chỉ đó — mà không cần tiết lộ private key.
5Elliptic Curve Cryptography — secp256k1
Blockchain (Bitcoin và Ethereum) không dùng RSA truyền thống mà dùng Elliptic Curve Cryptography (ECC) — cụ thể là curve secp256k1.
Tại sao ECC thay vì RSA?
ECC cung cấp bảo mật tương đương RSA với key size nhỏ hơn rất nhiều:
- RSA 3072-bit ≈ ECC 256-bit về bảo mật
- Key nhỏ hơn → signature nhỏ hơn → transaction nhỏ hơn → tiết kiệm blockchain space
- Tính toán nhanh hơn → verify transaction nhanh hơn
Elliptic Curve là gì?
Một elliptic curve là tập hợp các điểm (x, y) thỏa mãn phương trình y² = x³ + ax + b trên một trường số. secp256k1 dùng phương trình y² = x³ + 7 trên trường số nguyên modulo một số nguyên tố lớn 256-bit.
Phép nhân điểm trên curve (scalar multiplication) là one-way function: dễ tính Q = k × G (Q là public key, k là private key, G là generator point), nhưng cực kỳ khó tính ngược k từ Q và G. Đây là Elliptic Curve Discrete Logarithm Problem — nền tảng toán học của toàn bộ ECC.
6ECDSA — Chữ ký số trong Blockchain
ECDSA (Elliptic Curve Digital Signature Algorithm) là thuật toán ký số dùng ECC. Đây là cơ chế mỗi transaction Bitcoin và Ethereum dùng để chứng minh quyền sở hữu.
Quy trình ký transaction
- Tính
z = hash(transaction_data)— hash của toàn bộ nội dung transaction - Chọn số ngẫu nhiên k (nonce mật mã học — khác với nonce transaction)
- Tính điểm
R = k × Gtrên curve - Tính
r = R.x mod n(x-coordinate của R) - Tính
s = k⁻¹(z + r × private_key) mod n - Chữ ký =
(r, s)— cộng vớivđể recover public key
Quy trình verify
Bất kỳ ai có public key đều có thể verify: tính toán một điểm trên curve từ (r, s, z) và kiểm tra x-coordinate có bằng r không. Nếu đúng → chữ ký hợp lệ. Không cần biết private key.
7Từ Private Key đến Địa chỉ Ví
Quá trình tạo địa chỉ ví Bitcoin/Ethereum từ private key là một chuỗi một chiều không thể đảo ngược:
Ethereum Address Generation
- Private key: 256-bit random number (32 bytes)
- Public key:
private_key × Gtrên secp256k1 = 512-bit uncompressed point (64 bytes) - Keccak-256 hash:
Keccak256(public_key)= 256-bit hash - Ethereum address: Lấy 20 bytes cuối (40 hex chars) = địa chỉ
0x...
Bitcoin Address Generation (phức tạp hơn)
- Private key → Public key (compressed, 33 bytes)
SHA256(public_key)RIPEMD160(result)= 20 bytes- Thêm version byte + checksum → Base58Check encoding → địa chỉ Bitcoin
Lý do dùng nhiều bước hash: nếu một ngày nào đó ECC bị break (ví dụ bởi quantum computing), attacker vẫn phải break thêm SHA256 và RIPEMD160 để từ địa chỉ tìm ra public key. Đây là lớp bảo vệ thêm.
8Merkle Tree trong Blockchain
Merkle Tree là cấu trúc dữ liệu dạng cây nhị phân: mỗi node lá là hash của một transaction, mỗi node cha là hash của hai node con, tiếp tục đến root — Merkle Root.
Cấu trúc Merkle Tree
Với 8 transaction T1...T8:
- Lá:
H1=hash(T1), H2=hash(T2), ..., H8=hash(T8) - Tầng 2:
H12=hash(H1+H2), H34=hash(H3+H4), H56, H78 - Tầng 3:
H1234=hash(H12+H34), H5678 - Root:
MerkleRoot=hash(H1234+H5678)
Merkle Proof — Verify nhanh
Để prove T3 thuộc block, chỉ cần cung cấp: H4, H12, H5678 (3 hash thay vì 8). Người verify tính H34=hash(hash(T3)+H4), H1234=hash(H12+H34), Root=hash(H1234+H5678). Nếu Root khớp với block header → T3 hợp lệ.
Với block 10,000 transaction: proof chỉ cần ~14 hash (~448 bytes) thay vì tải cả block. Đây là nền tảng của light client và SPV (Simplified Payment Verification) của Bitcoin.
Ethereum Merkle Patricia Trie
Ethereum nâng cấp lên Merkle Patricia Trie (MPT) — kết hợp Merkle Tree với Patricia Trie — để lưu toàn bộ state (account balance, contract storage) theo cách có thể verify được. State root trong mỗi block header là MPT root của toàn bộ state Ethereum.
9Cryptography và ZK Proof — Tương lai
Ngoài hash function và ECC, blockchain hiện đại ngày càng dùng các kỹ thuật mật mã học tiên tiến hơn, đặc biệt là Zero-Knowledge Proof.
ZK Proof — Chứng minh mà không tiết lộ
ZK Proof cho phép prover chứng minh họ biết một bí mật hoặc một tính toán đúng mà không tiết lộ bất kỳ thông tin gì về bí mật/tính toán đó. Ứng dụng trong blockchain:
- ZK Rollup: Prove toàn bộ batch transaction hợp lệ bằng một proof nhỏ thay vì re-execute từng transaction
- Privacy: Prove sở hữu token mà không tiết lộ số dư hay địa chỉ (Zcash, Tornado Cash)
- Identity: Prove đủ tuổi mà không tiết lộ ngày sinh cụ thể
Các primitives mật mã học trong ZK
ZK-SNARK dùng pairing-based cryptography trên elliptic curve. ZK-STARK dùng hash function thuần túy — không cần trusted setup và quantum-resistant hơn. Pedersen commitment và Poseidon hash được thiết kế đặc biệt để hiệu quả trong ZK circuits.
10Câu hỏi thường gặp (FAQ)
Blockchain dùng ba thành phần mật mã học chính: hash function (SHA-256 hoặc Keccak-256) để liên kết block và tạo tính bất biến, public-key cryptography / ECDSA để xác thực chủ sở hữu địa chỉ và ký transaction, Merkle Tree để tổ chức transaction và verify hiệu quả qua light client.
Private key là số ngẫu nhiên 256-bit — tuyệt mật, ai có được thì kiểm soát toàn bộ tài sản. Public key được tính từ private key qua elliptic curve multiplication (secp256k1). Địa chỉ ví là hash của public key. Chữ ký ECDSA chứng minh quyền sở hữu private key mà không tiết lộ chính private key đó.
Hash function biến data bất kỳ thành chuỗi cố định độ dài, không thể đảo ngược. Trong blockchain: tạo tính bất biến bằng cách liên kết block (parentHash), tạo PoW puzzle cho mining, tổ chức transaction trong Merkle Tree, tạo địa chỉ ví từ public key, và làm nền tảng cho ZK Proof systems.
Máy tính lượng tử đủ mạnh có thể phá ECC (thuật toán Shor), cho phép tính private key từ public key. Hash function ít bị ảnh hưởng hơn (chỉ cần double key size để kháng Grover algorithm). Tuy nhiên máy tính lượng tử đủ mạnh hiện chưa tồn tại và cộng đồng blockchain đang chuẩn bị migration sang post-quantum cryptography.
Ethereum chọn Keccak-256 (phiên bản gốc trước khi chuẩn hóa thành SHA-3) để tránh phụ thuộc vào NSA-designed algorithms, sau khi có nghi ngờ về backdoor trong các chuẩn NSA năm 2013. Keccak được thiết kế bởi team độc lập và đã thắng cuộc thi NIST hash function competition dựa trên merit kỹ thuật thuần túy.
📚Tham khảo
- Nakamoto, S. — "Bitcoin: A Peer-to-Peer Electronic Cash System" (2008)
- NIST — FIPS 180-4: Secure Hash Standard (SHA-256)
- Ethereum Yellow Paper — Keccak-256 và ECDSA specification
- Certicom Research — SEC 2: Recommended Elliptic Curve Domain Parameters (secp256k1)
- Boneh, D. & Shoup, V. — "A Graduate Course in Applied Cryptography" (2023)