Tấn công phát lại (replay attack) là gì

Triều Tô5 phút đọc
Nội dung bài8 phần
  1. Ví dụ số: một giao dịch, hai chuỗi
  2. Vụ Ethereum và Ethereum Classic
  3. EIP-155: gắn chain ID vào chữ ký
  4. Bitcoin Cash: bảo vệ từ lúc tách
  5. Replay còn gặp ở đâu
  6. Cách làm khi sắp có hard fork
  7. Học tiếp trong khoá Crypto
  8. Câu hỏi thường gặp

Độ khó: Trung cấp

Chữ ký số chứng minh bạn đồng ý một giao dịch, nhưng không nói giao dịch đó dành cho chuỗi nào. Khi một blockchain tách làm hai và cả hai chuỗi cùng chấp nhận loại chữ ký đó, ai cũng có thể lấy giao dịch hợp lệ ở chuỗi này đem phát sang chuỗi kia. Đó là replay attack (tấn công phát lại).

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

  • Replay attack không cần phá khóa. Kẻ tấn công chỉ gửi lại một giao dịch đã có chữ ký hợp lệ.
  • Nó xảy ra khi hai chuỗi chia sẻ lịch sử, địa chỉ và cách ký giống nhau, thường sau hard fork.
  • Cách chặn là buộc giao dịch gắn với một chuỗi: chain ID trong EIP-155 của Ethereum, SIGHASH_FORKID của Bitcoin Cash.
  • Người dùng cần biết trước khi hard fork xảy ra chuỗi mới có bảo vệ replay hay không.

Ví dụ số: một giao dịch, hai chuỗi

Giả sử một blockchain tách làm chuỗi A và chuỗi B. Lúc tách, Lan có 10 coin ở địa chỉ X trên cả hai chuỗi, vì lịch sử trước đó giống nhau.

Bước

Trên chuỗi A

Trên chuỗi B

1

Lan ký giao dịch: gửi 10 coin cho Bình, nonce 5

Chưa có gì

2

Giao dịch được xác nhận. Lan còn 0, Bình có 10

Chưa có gì

3

Kẻ tấn công sao chép giao dịch đó từ chuỗi A

Gửi nguyên văn sang chuỗi B

4

Không đổi

Chuỗi B thấy chữ ký đúng, số dư đủ, nonce 5 đúng thứ tự: chấp nhận. Lan mất thêm 10 coin B

Một giao dịch của Lan bị phát lại sang chuỗi B
Giao dịch hợp lệ trên chuỗi A bị sao chép và chuỗi B chấp nhận nên Lan mất thêm 10 coin

Lan chỉ muốn gửi tiền trên chuỗi A, nhưng chuỗi B cũng chuyển tiền của cô cho Bình. Nếu Bình là kẻ tấn công thì anh ta nhận cả hai phần.

Vụ Ethereum và Ethereum Classic

Ngày 20/07/2016, tại khối 1.920.000, Ethereum thực hiện hard fork để chuyển khoảng 12 triệu ETH từ hai hợp đồng Dark DAO và Whitehat DAO sang một hợp đồng thu hồi. Một phần cộng đồng không theo, giữ chuỗi cũ, về sau gọi là Ethereum Classic.

Blog chính thức của Ethereum Foundation ngày hôm đó đã cảnh báo người muốn ở chuỗi không fork phải cập nhật phần mềm, chạy cờ --oppose-dao-fork và tự đề phòng replay. Hai chuỗi dùng cùng định dạng giao dịch, cùng địa chỉ, cùng nonce. Bài của Ethereum Classic ngày 11/10/2016 minh họa bằng một giao dịch ở khối ETH 1.920.100 có thể gửi lại sang chuỗi kia.

Lúc đó chưa có cơ chế chặn ở tầng giao thức. Người dùng phải tự tách số dư để mỗi địa chỉ chỉ giữ coin của một chuỗi.

EIP-155: gắn chain ID vào chữ ký

Vitalik Buterin tạo EIP-155 ngày 14/10/2016 để một giao dịch gửi lên Ethereum không dùng lại được trên Ethereum Classic hay mạng thử nghiệm. Cách làm là đưa chain ID vào dữ liệu được ký.

Giao dịch cũ

Giao dịch theo EIP-155

Số trường được băm để ký

6 (nonce, gasprice, startgas, to, value, data)

9 (thêm chain ID và hai số 0)

Giá trị v

27 hoặc 28

{0,1} + CHAIN_ID × 2 + 35

So sánh chữ ký giao dịch cũ với chữ ký theo EIP-155
EIP-155 thêm chain ID vào dữ liệu được ký nên chuỗi khác thấy chữ ký sai

Mạng chính Ethereum có chain ID là 1, nên v bằng 1 × 2 + 35 = 37 hoặc 38. Chuỗi khác dùng chain ID khác sẽ tính ra chữ ký khác, và nó thấy chữ ký trên giao dịch gốc là sai.

Bitcoin Cash: bảo vệ từ lúc tách

Bitcoin Cash tách khỏi Bitcoin ngày 01/08/2017 (theo timestamp kích hoạt 1501590000, tức 12:20 UTC). Đặc tả phiên bản 1.2 ngày 16/07/2017 nêu một cơ chế dùng lại được cho mọi lần tách chuỗi.

  • Một bit trong loại chữ ký, SIGHASH_FORKID (giá trị 0x40), bật thuật toán băm mới để ký.
  • Loại chữ ký được mở rộng thêm một fork ID dài 24 bit. Lần tách này dùng fork ID bằng 0.
  • Vì fork ID nằm trong dữ liệu được băm, cùng một giao dịch cho ra kết quả băm khác nhau trên các chuỗi có fork ID khác nhau.

So với Ethereum 2016, đây là bảo vệ đi kèm với lần tách chuỗi, không phải vá sau.

Replay còn gặp ở đâu

  • Giữa các chuỗi EVM: nhiều chuỗi dùng chung định dạng địa chỉ và giao dịch. Chain ID là thứ ngăn một giao dịch của chuỗi này chạy ở chuỗi kia.
  • Chữ ký ngoài chuỗi: ứng dụng có thể yêu cầu bạn ký thông điệp để cấp quyền. Nguyên tắc an toàn là thông điệp phải chứa số dùng một lần (nonce) và định danh chuỗi, nếu không có thể bị dùng lại. Đây là nguyên tắc thiết kế, không phải số liệu từ một vụ cụ thể.
  • Cầu nối chuỗi: lệnh chuyển qua cầu nối phải chứng minh nó chỉ được thực hiện một lần.

Cách làm khi sắp có hard fork

Checklist cho người giữ coin:

  • [ ] Đọc thông báo chính thức của dự án: chuỗi mới có bảo vệ replay không, và nó là bắt buộc hay tùy chọn?
  • [ ] Nếu chưa chắc, đừng gửi coin trong khoảng sát thời điểm tách. Một giao dịch có thể chạy trên cả hai chuỗi.
  • [ ] Sau khi tách, dùng ví hỗ trợ rõ từng chuỗi và xác nhận ví đang ký với đúng chain ID.
  • [ ] Đừng ký thông điệp mà bạn không hiểu nó cấp quyền gì và cho chuỗi nào.
  • [ ] Giữ khóa riêng và cụm từ khôi phục an toàn như thường lệ, theo trang bảo mật tiền mã hóa.

Để hiểu vì sao blockchain khó bị giả mạo nói chung, xem 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

Replay attack có đánh cắp được khóa riêng không?

Không. Kẻ tấn công không biết khóa riêng. Nó chỉ tái sử dụng một giao dịch mà chủ ví đã ký thật.

Vì sao hard fork thường gây replay?

Vì sau lúc tách, hai chuỗi có cùng địa chỉ, cùng số dư và cùng quy tắc kiểm tra chữ ký. Giao dịch hợp lệ ở một chuỗi thường hợp lệ ở chuỗi kia.

Replay protection có bắt buộc cho mọi chuỗi mới không?

Không có quy tắc chung. Đặc tả của Bitcoin Cash mô tả đây là cơ chế để người dùng có thể tạo giao dịch không hợp lệ trên chuỗi không hỗ trợ nó. Mỗi dự án tự chọn cách làm.

Người dùng bình thường nên lo ngay bây giờ không?

Rủi ro lớn nhất xuất hiện quanh thời điểm tách chuỗi hoặc khi dùng chuỗi mới chưa rõ bảo vệ. Với các mạng hiện có chain ID rõ ràng, hãy đảm bảo ví hiển thị đúng mạng khi ký.

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.

Watchlist

Đang tải…