Giao dịch bí mật (confidential transactions) là gì
Nội dung bài8 phần
Độ khó: Nâng cao
Trên Bitcoin, ai cũng thấy mỗi giao dịch chuyển bao nhiêu coin từ địa chỉ nào sang địa chỉ nào. Giao dịch bí mật (confidential transactions, CT) giấu con số đó khỏi người ngoài, nhưng vẫn để mọi node kiểm tra được rằng đầu vào bằng đầu ra, tức là không có coin nào tự sinh ra.
Nội dung chỉ nhằm giải thích kiến thức, không phải khuyến nghị đầu tư.
Điểm chính
- CT giấu số tiền (và loại tài sản trên Liquid), không giấu địa chỉ hay đồ thị giao dịch.
- Cốt lõi là cam kết Pedersen: một giá trị "khóa kín" mà vẫn cộng trừ được với nhau.
- Cần thêm range proof (bằng chứng phạm vi) để chặn số âm và tràn số.
- Bulletproofs thu nhỏ range proof 64 bit còn 674 byte, so với khoảng 2,5 KiB của cách cũ cho 32 bit.
Vấn đề CT giải quyết
Số tiền công khai giúp ai cũng kiểm toán được nguồn cung. Nhưng nó cũng làm lộ lương, doanh thu và số dư. Ví dụ: một doanh nghiệp trả nhà cung cấp bằng crypto, đối thủ xem blockchain là biết giá.
Adam Back nêu ý tưởng dùng giá trị đồng hình để giấu số tiền trong một bài đăng Bitcointalk năm 2013. Gregory Maxwell, Andrew Poelstra và Pieter Wuille phát triển nó tiếp tại Blockstream, rồi CT được đưa vào dự án Elements và sau đó vào Liquid, ra mắt năm 2018.
Cam kết Pedersen
Một cam kết che số tiền a bằng một số ngẫu nhiên x, gọi là hệ số che:
C = x·G + a·H
G là điểm sinh của đường cong elliptic. H là điểm thứ hai, được chọn để không ai biết quan hệ logarit rời rạc giữa G và H. Nhờ đó nhìn vào C không đoán ra được a, và không ai đổi được giá trị a sau khi đã cam kết.
Tính chất quan trọng nhất: cộng hai cam kết ra cam kết của tổng, với hệ số che cũng được cộng lại. Mạng không cần thấy số tiền, chỉ cần kiểm tra đầu vào trừ đầu ra bằng một cam kết tới số 0.
Ví dụ số: kiểm tra cân bằng
Ví dụ mượn tinh thần ví dụ của dự án Elements, dùng số nhỏ. Alice chi một đầu vào 5 coin cho hai đầu ra, 3 coin cho Bình và 2 coin trả lại mình. Phí được ghi công khai là 0 để dễ tính.
Số tiền (ẩn) | Hệ số che (ẩn) | |
|---|---|---|
Đầu vào | 5 | 7 |
Đầu ra 1 (Bình) | 3 | 4 |
Đầu ra 2 (Alice, tiền thừa) | 2 | 3 |
Đầu vào − tổng đầu ra | 5 − (3 + 2) = 0 | 7 − (4 + 3) = 0 |

Ví dụ trong trang của Elements dùng số tiền {1, 1, 2} với hệ số che {5, 10, 15}, đẳng thức là C(5,1) + C(10,1) − C(15,2) = 0. Điều kiện giống nhau: cả số tiền và hệ số che đều phải triệt tiêu. Người gửi chọn hệ số che sao cho chúng cộng đúng, mạng chỉ thấy các cam kết và kết quả bằng 0.
Phí giao dịch phải để lộ công khai. Elements ghi rõ phí được cộng vào phép kiểm tra dưới dạng phí × H.
Vì sao cần range proof
Các phép tính diễn ra trong một nhóm số có vòng lặp, giống đồng hồ 12 giờ: vượt quá thì quay về đầu. Vì thế số âm và số rất lớn có thể làm phép cộng "đúng" nhưng sai về ý nghĩa.
Ví dụ trong chính trang Elements: (1 + 1) − (−5 + 7) = 0 nghe cân bằng, nhưng đầu ra −5 là số âm và đầu ra 7 sinh ra 5 coin từ không khí. Muốn chặn, mỗi đầu ra phải kèm range proof, chứng minh số tiền nằm trong khoảng hợp lệ, ví dụ từ 0 đến 2⁶⁴, mà không tiết lộ số đó.
Cách làm đơn giản nhất để hiểu: để chứng minh một số nằm trong [0, 32), người chứng minh cam kết riêng từng bit tương ứng với 1, 2, 4, 8, 16, chứng minh mỗi bit là 0 hoặc chính lũy thừa của 2, và các cam kết cộng lại ra đúng giá trị đã cam kết. Một số 5 bit thì chắc chắn nhỏ hơn 32.
Kích thước và tốc độ
Range proof từng là phần chiếm nhiều dữ liệu nhất của giao dịch CT.
Loại range proof | Phạm vi | Kích thước |
|---|---|---|
Cách cũ (Borromean ring signature) | 32 bit | 2.564 byte (khoảng 2,5 KiB) |
Bulletproofs | 32 bit | 610 byte |
Bulletproofs | 64 bit | 674 byte |

Theo Poelstra, Bulletproofs còn gộp được nhiều bằng chứng: 8 range proof 64 bit gộp lại dài 866 byte, trong khi 8 bằng chứng cách cũ cộng lại hơn 40.000 byte. Số liệu tốc độ đo trên một lõi CPU Intel i7-6820HQ, nên chỉ mang tính tham khảo.
CT giấu gì và không giấu gì
Thông tin | Bị giấu? |
|---|---|
Số tiền | Có, với người ngoài giao dịch |
Loại tài sản (trên Liquid) | Có |
Địa chỉ gửi và nhận | Không. Ai cũng thấy giao dịch xảy ra và địa chỉ nào liên quan |
Danh tính chủ địa chỉ | Không giấu bằng CT, chỉ là bút danh |

Người gửi và người nhận cùng giữ khóa mở (unblinding key), nên một trong hai có thể tự công bố số tiền cho bên thứ ba, ví dụ để kiểm toán. Với số tiền rất lớn vượt giới hạn độ chính xác 52 bit (mặc định), phần độ lớn và một vài chữ số thấp vẫn lộ.
Vì địa chỉ không bị giấu, CT không thay thế các kỹ thuật làm rối dấu vết như coin mixing và CoinJoin. Một số kiểu tấn công như dusting dựa vào việc theo dõi địa chỉ, nên CT không tự giải quyết được chúng.
Về mặt mật mã, CT dùng tính cộng đồng hình của cam kết, họ hàng gần của khái niệm trong bài mã hóa đồng hình hoàn toàn (FHE). Bức tranh chung về độ tin cậy của sổ cái nằm ở blockchain bảo mật nhờ đâu.
Học tiếp trong khoá Crypto
Các bài học liên quan trong Khoá học Crypto của HODL.VN:
Câu hỏi thường gặp
CT có biến Bitcoin thành đồng tiền ẩn danh không?
Không. CT chỉ giấu số tiền. Địa chỉ vẫn hiển thị. Theo các nguồn đã tra, CT được triển khai trên Elements và Liquid.
Nếu số tiền bị giấu, làm sao biết không có coin bị in thêm?
Nhờ tính cộng của cam kết Pedersen và range proof: mạng kiểm tra tổng đầu vào bằng tổng đầu ra mà không cần biết từng số.
Ai thấy được số tiền?
Theo mô tả của Liquid, chỉ người gửi và người nhận giữ khóa mở. Họ có thể tự công bố số tiền cho người khác.
Vì sao đầu ra ví dụ có hệ số che?
Nếu không có số ngẫu nhiên, ai cũng có thể đoán số tiền rồi tính lại cam kết để so khớp. Hệ số che làm cam kết trông giống nhau với mọi số tiền.
Duyệt bởi Ban biên tập HODL.VN · Cập nhật 09/11/2026
Ứng dụng HODL
Tải app HODL
Bảng giá, cảnh báo giá và bài phân tích ngay trên điện thoại.