2020/02/06
Blockchain

Cách đề phòng Replay attack (tấn công phát lại) và sự nguy hiểm của nó là gì? Có nguy hiểm không khi giao dịch Bitcoin mà không biết điều này?

Bạn có biết gì về Replay attack không?

Để phòng tránh Replay attack, chúng ta cần phải chuẩn bị rất nhiều biện pháp đề phòng.

Trong bài viết này, chúng tôi sẽ giải thích về sự nguy hiểm của Replay attack cũng như các phương thức đề phòng Replay attack.

Replay attack là gì?

Replay attack có khả năng xảy ra khi Blockchain của tiền ảo phát sinh Hardfork.

Đây là cuộc tấn công mà các giao dịch chuyển tiền gian lận diễn ra khi một mặt chuỗi sẽ copy các giao dịch đang thực hiện, mặt khác tại chuỗi cũng vẫn tiến hành các giao dịch đó.

Replay attack nguy hiểm như thế nào?

​​Tiền sẽ bị lấy cắp!

Replay attack ám chỉ việc vào thời điểm xảy ra phân ly, tiền ảo bị chuyển đi một nơi khác cùng lúc ta thực hiện việc chuyển tiền ảo.

Giả sử tiền ảo A bị Hard-fork, tiền ảo mới là B được ra đời. Trong trường hợp này, khi ta chuyển tiền ảo A mà bị ảnh hưởng bởi Replay attack, một lượng tiền ảo B cũng sẽ bị chuyển đi mất mà ta không hề hay biết.

Các bạn cứ tưởng tưởng như thế này cho dễ hiểu nhé: “ta nghĩ mình trả cho cửa hàng 1 BTC, nhưng thực ra lại trả thêm cho cửa hàng 1 BTC nữa”. Sự việc sẽ diễn ra như vậy đấy.

Bởi mình sẽ bị thất thoát số tiền ảo hiện đang nắm giữ, cho nên ta có thể nói Replay attack là “hành vi ăn trộm tiền”.

Ở những sàn giao dịch thì vấn đề còn trầm trọng hơn

Tại các sàn giao dịch, vấn đề này còn nghiêm trọng hơn nữa.

Trong giao dịch thông thường, người ta không thể thực hiện các giao dịch chuyển tiền đến chính bản thân mình.

Trong trường hợp là sàn giao dịch, thì người dùng có thể thoải mái rút tiền ra lúc nào cũng được.

Do vậy, bằng các thủ đoạn tinh vi mà việc đánh cắp tiền từ sàn giao dịch là điều hoàn toàn có thể xảy ra.

Trước tiên, anh X rút từ sàn giao dịch một số tiền ảo A ta đã nhắc đến ở trên. Lúc này, do Replay Attack, một lượng tiền ảo B bằng tiền ảo A cũng có thể được rút ra. Số tiền ảo B đã rút ra lại được cho vào một ví khác, rồi anh ta lại gửi ngược số tiền ảo A về sàn giao dịch.

Như vậy, khi rút khoản tiền ảo A đã được gửi sẵn ở sàn giao dịch,thì anh ta cũng rút được cả tiền ảo B, cứ như vậy lặp đi lặp lại, thì anh ta có thể rút toàn bộ tiền ảo B khỏi sàn giao dịch.

Có 1 sự kiện rất nổi tiếng là the DAO, chính là việc làm mất một lượng lớn Ethereum xảy ra vì Replay attack.

Mánh khoé này không quá tinh vi, nguyên nhân chỉ là khi nhiều yêu cầu giống nhau được gửi đi trong một thời gian ngắn và có một lỗi của hệ thống khiến tất cả chúng được chấp thuận.

Thật ra không phải lúc nào cũng nguy hiểm

Thực ra Replay attack không phải lúc nào cũng nguy hiểm.

Lý do là vì sau khi Hard-fork, một trong hai loại tiền tệ có khả năng sẽ mất đi giá trị của mình.

Ví dụ, trong quá khứ Ethereum trải qua 4 lần Hard-fork, nhưng loại tiền tệ phân ly từ Ethereum chỉ có mình Ethereum Classic mà thôi.

Còn lại 3 Hardfork khác thì do người dùng và thợ đào đã nhanh chóng chuyển sang chuỗi chain khác, nên những đồng tiền không được công nhận là Ethereum đã trở nên vô giá trị.

Do vậy, số tiền ảo bị mất cắp do Replay attack sẽ trở nên vô giá trị, và đây sẽ hoàn toàn không còn là vấn đề nữa.

​Replay attack diễn ra như thế nào?​

​Có liên quan đến cơ chế chữ ký điện tử

​Trước khi đi tìm hiểu kỹ cơ chế của Replay attack, chúng ta cần nắm được về cơ chế gọi là chữ ký điện tử được dùng ở mỗi giao dịch.

Chữ ký điện tử là công nghệ mã hoá dành cho việc xác minh khi một người A thực hiện giao dịch chuyển tiền cho ai đó, thì có chắc giao dịch được tạo ra bởi A hay không.

Người A sẽ mã hoá giao dịch chuyển tiền bằng khóa bí mật của mình.

Như vậy, khi những người xác minh giao dịch sử dụng khoá công khai của A để khôi phục lại giao dịch, nếu giao dịch được khôi phục đúng, thì có nghĩa là nó đã được mã hoá bởi khoá bí mật của người A chứ không phải là ai khác,

Nói cách khác, việc này đã xác định được rằng giao dịch tạo ra bởi người A.

Do vậy, khi người khác tạo ra giao dịch chuyển tiền dưới danh nghĩa của A, nếu như người đó không biết kết quả mã hoá từ khoá bí mật của A thì chữ ký được xác định là vô hiệu.

Chữ ký có hiệu lực ở cả hai chuỗi!

Replay Attack có nghĩa là hiện tượng sao chép giao dịch.

Ngay cả khi bạn có sao chép lại giao dịch trên cùng một chuỗi đi nữa, thì theo quy tắc ‘chấp nhận giao dịch nào hoàn thành sớm hơn” thì sẽ không xảy ra hiện tượng thanh toán hai lần.

Tuy nhiên, với trường hợp mà chuỗi (chain) được tạo ra do Hard-fork thì lại khác.

Trong trường hợp này không tồn tại có quy tắc chỉ chấp nhận giao dịch sớm hơn. Chuỗi mới được hình thành do Hardfork về cơ bản có cơ chế giống với chuỗi ban đầu.

Tóm lại, trong trường hợp giao dịch được mã hoá ở blockchain A được sao chép lại ở chuỗi B sau hard fork, do nguyên tắc giao dịch và chữ ký điện tử giống nhau nên tại Blockchain B giao dịch đó cũng có chữ ký hợp lệ và giao dịch được chấp nhận.

Có nghĩa là trong lúc này đã xảy ra hiện tượng trên cả 2 chuỗi đều có giao dịch mang chữ ký hợp lệ.

Những kẻ thực hiện Reply Attack thực sự đã sử dụng những thủ thuật rất khôn ngoan là “Dù không biết phương thức mã hoá giao dịch nhưng chỉ cần sử dụng các giao dịch đã được mã hóa xong là được”.

Cách phòng chống hiệu quả cho Replay attack?​​​​

Đánh dấu giao dịch

Nếu xét kĩ hơn về cơ chế Replay Attack đã giải thích ở trên, ta có thể thấy rằng vấn đề nằm ở chuỗi tạo ra sau Hard-fork.

Ta biết rằng phương thức xác nhận chữ ký điện tử và quy tắc giao dịch trong chuỗi mới hoàn toàn giống với chuỗi gốc.

Do đó, để chữ ký chỉ có hiệu lực trên từng chuỗi, hiện nay người ta sử dụng phương pháp là thêm vào một giá trị đánh dấu để phân định rõ hai giao dịch khác nhau.

Nhờ đó, dù Replay attack có diễn ra, việc phục hồi mã hoá có diễn ra suôn sẻ đi chăng nữa, thì nhờ có giá trị đánh dấu khác nhau nên giao dịch được xác định là vô hiệu.

Khi mã hoá chữ ký, ta có thể thực hiện Replay protection mà không cần phải thay đổi phương pháp giải mã.

Chấm dứt giao dịch

​Trên đây là biện pháp chống Replay attack mà các nhà phát triển hệ thống đang thực hiện. Tuy vậy, với các nhà đầu tư cá nhân thì biện pháp chống lại Replay attack chính là việc không thực hiện giao dịch.

Nếu bạn không tạo ra giao dịch thì đương nhiên là sẽ không có gì để sao chép cả.

Khi bạn không thực hiện giao dịch, số tiền ảo trên một chuỗi sẽ không có giá trị và Replay attack sẽ không còn hiệu lực nữa.

Hầu hết các sàn giao dịch đều ngừng giao dịch trước và sau thời điểm hardfork. Sau hardfork, bạn nên cố gắng tiếp tục lại việc giao dịch mới chỉ sau khi đã xác định được rằng các tính năng đã ổn định trở lại nhé.

Biện pháp đối phó Replay attack của Bitcoin là gì?

​Biện pháp đối phó của Bitcoin Cash(BCH)

Bitcoin Cash là đồng tiền ảo được khai sinh nhờ Hard-fork từ Bitcoin vào ngày 1/8.

Hiện nay nó hoạt động như là một loại tiền ảo độc lập hoàn toàn với Bitcoin. Đương nhiên là Bitcoin Cash cũng đang thực hiện Replay Protection (các biện pháp bảo vệ khỏi tấn công phát lại).

Với Bitcoin Cash, các giao dịch đều được đánh dấu bằng cách thêm giá trị SIGHASH_FORKID. Nhờ đó, giao dịch được phân biệt rõ cái nào là của Bitcoin, cái nào là của Bicoin Cash.

Biện pháp đối phó của BitcoinGold(BTG)

Bitcoin Gold được khai sinh nhờ Hard-fork ngày 24/10.

Thực tế chuỗi này không được trang bị Replay Protection.

Tại chuỗi này, chức năng gọi là Opt-in Replay Protection hiện được sử dụng.

Với Opt-in Replay Protection, một danh sách đen những địa chỉ được thiết lập, khi bạn thực hiện việc chuyển tiền Bitcoin, thì đồng thời bạn cũng chuyển một lượng nhỏ Bitcoin khác đến các địa chỉ trong danh sách đen, nhờ đó mà phòng tránh việc lẫn lộn giữa hai loại tiền ảo.

Do các giao dịch bao gồm việc chuyển tiền đến danh sách đen được thiết lập như là một giao dịch vô hiệu trong Bitcoin Gold, nên nó có chức năng giống như Replay Protection.

Tuy vậy, đây là nghiệp vụ phiền toái cần user tự tay thực hiện. Mặc dù chỉ là chuyển đi một lượng nhỏ Bitcoin đến danh sách đen nhưng người dùng phải tốn công thực hiện chuyển tiền cho nên không thể nói đây là một cơ chế Replay Protection tốt.

Biện pháp đối phó Segwit2X – hiện đã bị huỷ bỏ

Người ta đã từng dự định sử dụng Biện pháp Segwit2XHard-fork (hiện đã bị hủy) như thế nào để chống lại Replay attack?

Thực ra cũng như BicoinGold, dù nó có thể áp dụng Opt-in Replay Protection, nhưng đây không phải là cơ chế Replay Protection tự thân của tiền ảo.

Segwit2XHard-fork bị huỷ bỏ do có nhiều người phản đối.

Lý do phản đối của họ là vì cơ chế Replay Protection không được trang bị.

【Bổ sung】Các biện pháp thông thường đối với Replay attack

Replay attack là thuật ngữ không chỉ dành riêng cho tiền ảo, mà nó còn chỉ những cuộc tấn công chặn thông tin mã hoá và sử dụng nó để tiến hành truyền tin.

Vậy những biện pháp thông thường để đối phó với Replay attack được thực hiện như thế nào?

Sử dụng nonce

Trước tiên, với trường hơp xác minh danh tính, cách thực hiện của Replay attack như sau:

Để có thể xác định danh tính của A có đúng hay không, B yêu cầu Password từ A. A mã hoá password và gửi cho B. C chặn thông tin Password mã hoá đó.

C giả dạng thành A, gửi đi thông tin Password mã hoá được B yêu cầu nhưng đã bị C chặn trước đó và nhờ đó đã vượt qua bước xác minh danh tính.

Đối sách ở đây sẽ là, mỗi lần B xác minh danh tính thì sẽ gửi đến A một con số (nonce) chỉ có thể sử dụng một lần, A sẽ dùng con số đó để mã hoá Password.

Vì phương thức mã hoá Password mỗi lần được chỉ định khác nhau, ví dụ nếu như Password mã hoá bị chặn, thì nó không thể được tiếp tục sử dụng cho lần tiếp theo nữa.

Nói các khác, bằng việc sử dụng nonce, ngoài người biết Password ra thì không ai có thể trả lời khi được yêu cầu Password cả.

 


Tổng kết

Replay attack là khi Hardfork xảy ra và tạo ra chuỗi mới giống hệt như chuỗi gốc, do đó kẻ gian đã thực hiện việc chuyển tiền trái phép lợi dụng việc giao dịch được xác nhận đồng thời trên cả hai chuỗi.

Khi xảy ra Hardfork, bạn hãy kiểm tra xem sàn giao dịch hiện bạn đang sự dụng có những cách đối phó như thế nào nhé.

Ngoài ra, bạn cũng không nên thực hiện giao dịch ngay sau thời điểm Hard-fork, cũng như tự thực hiện các biện pháp chống Replay attack của riêng mình nhé!