Skip to main content

Cardano tự bảo vệ mình khỏi cuộc tấn công 51% như thế nào?

Ngày 13 tháng 10 năm 2022

PoS của Cardano hoạt động theo nhiều cách rất giống với PoW của Bitcoin. Bạn có thể ngạc nhiên khi biết rằng khi một blockchain phân tách, Cardano áp dụng quy tắc chuỗi dài nhất tương tự như Bitcoin. Không tốn nhiều năng lượng để tạo block PoS, vì vậy phải có một số quy tắc bổ sung trong giao thức Cardano. Hãy giải thích một số trong số chúng và chỉ ra cách các quy tắc bảo vệ Cardano khỏi cuộc tấn công 51%.

Picture

Tóm tắt

  • Cardano sử dụng quy tắc chuỗi dài nhất tương tự như quy tắc của Bitcoin.
  • Quy tắc Toàn vẹn được sử dụng để chống lại các cuộc tấn công tầm xa.
  • Nếu các khóa cá nhân được sử dụng để ký các block bị xóa, việc cố gắng ghi đè lịch sử của blockchain là không thể.

Các giao thức là về các quy tắc

Blockchain là một chuỗi (chain) các khối (block). Mạng lưới luôn thêm các block mới vào cuối chuỗi. Đôi khi, hai block mới có thể được tạo ra bởi hai (hoặc nhiều) node độc lập đồng thời cùng lúc. Sự kiện này được gọi là một ngã ba. Nó có nghĩa là hai block mới cùng tiếp nối một block trước đó. Một số quy tắc được áp dụng để đảm bảo rằng một block là người chiến thắng và được lưu lại mãi mãi trong blockchain, trong khi block còn lại sẽ bị loại bỏ (gọi là block mồ côi, mãi mãi). Bạn có thể thấy ngã ba trong hình dưới đây. Trong tình huống này, Node sẽ tạo ra block tiếp theo sẽ buộc phải chọn giữa block A hoặc B.

Picture

Trong mạng Bitcoin, một pool (nhà sản xuất block) có thể chọn chuỗi có block A hoặc B, tùy theo block nào mà họ thích hơn. Nếu một trong các block được tạo bởi một pool muốn thêm block khác, nó sẽ chọn block của chinh nó vì nó muốn nhận được phần thưởng cho nó. Pool không thể tiếp tục trên cả hai block vì nó sẽ phải chia tỷ lệ hash. Một pool sẽ không chọn cách làm này vì một pool khác có thể sẽ thêm block sau nhanh hơn. Việc chia nhỏ tỷ lệ hash làm giảm cơ hội thành công trong ngẫu nhiên của cơ chế đồng thuận PoW. Khi block tiếp theo được thêm vào, một chuỗi dài hơn sẽ được xác định rõ ràng. Pool tiếp theo biết chuỗi nào để tiếp nối vì nó có thể áp dụng quy tắc chuỗi dài nhất.

Trong hình bên dưới, bạn có thể thấy rằng chuỗi màu xanh dài hơn. Pool sẽ có lợi hơn khi thêm một block khác vào chuỗi màu xanh lam, vì chuỗi màu đỏ ít có khả năng chiến thắng chuỗi xanh lam để có thể dài hơn vì cần thời gian nhiều hơn. Không có nhà điều hành pool nào biết trước ai sẽ thành công trong việc thêm một block mới và blockchain nào sẽ tuân theo. Từ góc độ lý thuyết trò chơi, các pool sẽ có lợi khi chọn chuỗi màu xanh lam.

Picture

Cơ chế hoạt động của POW luôn khuyến khích các node tìm ra phiên bản blockchain nào là chính xác nhất. Các node kết nối với mạng lần đầu tiên cũng có thể dựa vào hoạt động của PoW.

Trong mạng Cardano, để tạo ra một block mới chi phí sẽ rất rẻ. Điều này có nghĩa là sẽ rất dễ dàng để tạo ra một loạt các block khiến một chuỗi sẽ dài hơn trong khoảng thời gian nhanh nhơn. Do đó, về mặt lý thuyết, một node có thể chọn cùng theo cả hai chuỗi có block A và B. Vì các node đều có thể đóng block nhanh chóng và rẻ tiền. Nếu các node tiếp theo sau đó tạo cũng làm điều tương tự như vậy, thì có thể sẽ rất khó xác định chuỗi nào là đúng.

Các node Cardano không cạnh tranh với nhau để thêm một block mới. Thay vào đó, một hàm mật mã hiện đại được gọi là Hàm ngẫu nhiên có thể xác minh (VRF) được sử dụng để chọn ra người chiến thắng. Trong mạng Carano, thời gian được chia thành các slot. Trong mỗi slot, mỗi node sử dụng chức năng VRF để lấy đầu ra VRF. Giả sử nó là một con số. Nếu số lượng nhỏ hơn một ngưỡng nhất định (được tính từ kích thước tiền stake), node đó là người chiến thắng và có quyền tạo ra một block mới.

Đôi khi, hai (hoặc nhiều) node trong cùng một vị trí có thể có quyền tạo ra một block. Hai block hợp lệ có thể được tạo đồng thời, tương tự như mạng Bitcoin. Tình huống này được gọi là trận đánh xèng. Cardano có một quy tắc đơn giản để xác định block nào là một phần của chuỗi dài hơn. Đầu ra VRF của hai block cạnh tranh A và B được so sánh với nhau. Người chiến thắng là block được tạo ra bởi node có đầu ra VRF nhỏ hơn.

Picture

Mặc dù các quy tắc giao thức làm rõ chuỗi nào được coi là dài hơn (chuỗi màu xanh lam), bạn có thể thấy trong hình trên rằng node đó đã thêm một block mới vào cả hai chuỗi. Nhìn bề ngoài, có vẻ như có hai chuỗi có chiều dài bằng nhau. Một node có thể làm điều này vì không tốn chi phí tạo block. Điều gì ngăn các node hoạt động theo cách này? Đó là uy tín. Một khi một pool hoạt động theo cách này, nó sẽ bị cộng đồng coi là một nỗ lực tấn công mạng. Pool sẽ đánh mất uy tín của mình và các bên liên quan sẽ ủy thác tiền ADA ở nơi khác. Node trung thực tiếp theo có thể sẽ chỉ thêm một block mới vào đúng chuỗi, do đó, chuỗi gian lận cuối cùng sẽ bị bỏ rơi.

Cần nhắc đến tầm quan trọng của động lực tích cực. Một nhà điều hành pool có thể thêm các block với giá rẻ, nhưng nếu nó có tác động tiêu cực đến hoạt động của mạng và uy tín, giá trị của ADA coin sẽ giảm. Các nhà khai thác sẽ nhận được phần thưởng giá trị đô la thấp hơn. Mọi người đều quan tâm đến việc mạng hoạt động tốt và có uy tín tốt.

Picture

Mỗi node nhìn thấy fork và khi nào cần thêm một block mới, nó sẽ quyết định tùy theo kết quả đầu ra VRF trong các block nằm ngay sau fork. Các quy tắc giúp bạn dễ dàng suy ra chuỗi bên phải đi theo hướng nào. Trong trường hợp có nhiều nhánh hơn, quy tắc sẽ áp dụng theo cùng một cách.

Tính ngẫu nhiên xác định node có quyền tạo một block mới. Có thể xảy ra trường hợp kẻ tấn công giành được quyền nhiều lần liên tiếp. Vì vậy, về mặt lý thuyết, anh ta có thể thêm nhiều block vào chuỗi lừa dối (block màu đỏ). Kết quả là, chuỗi màu đỏ sẽ dài hơn trong một khoảng thời gian ngắn (đối với một vài vị trí). Khi node trung thực có quyền tạo ra một block, nó sẽ thêm các block vào đúng, tức là chuỗi màu xanh lam. Về lâu dài, chuỗi màu xanh sẽ luôn thắng.

Picture

Như bạn có thể thấy, một chức năng mật mã hiện đại và một quy tắc đơn giản được sử dụng bởi giao thức Cardano để thay thế hệ thống chọn diễn ra trong mạng PoW. Bitcoin không xác định một quy tắc sẽ quyết định block nào được chọn để tiếp tục trong trường hợp fork. Các chuỗi có cùng độ dài nên không thể áp dụng quy tắc chuỗi dài nhất. Một block đơn giản được chọn bởi một pool và cho vòng tiếp theo, quy tắc chuỗi dài nhất có thể được áp dụng.

Giao thức Cardano xác định rõ ràng chuỗi nào được coi là dài nhất ngay lập tức sau khi fork được tạo. Quy tắc dài nhất có thể được sử dụng trong bất kỳ vòng nào và không có tình huống nào mà pool có thể chọn block mà nó thích hơn. Về mặt lý thuyết, có thể nói, mọi block mới đều tự động cuối cùng. Không có cuộc chiến về chuỗi nào sẽ là chuỗi chiến thắng. Đầu ra VRF luôn khai báo rõ ràng chuỗi chính xác (dài nhất) trừ khi hai đầu ra VRF giống nhau xuất hiện, điều này khó xảy ra.

Điều gì sẽ xảy ra nếu kẻ tấn công tạo ra một chuỗi dài thay thế, chẳng hạn như từ block Genesis? Điều này tương đối dễ dàng vì, như chúng tôi đã nói, không tốn kém gì để tạo một block, vì vậy có thể tạo toàn bộ một blockchain. Đừng lo. Có một quy tắc bổ sung.

Cách Cardano tự bảo vệ mình khỏi các cuộc tấn công tầm xa

Một cuộc tấn công tầm xa đại diện cho mạng PoS gần giống với cơ chế tấn công 51% trong mạng PoW. Mục đích của kẻ tấn công là tạo ra một chuỗi dài hơn để viết lại blockchain theo hướng có lợi cho kẻ tấn công. Thay vì bắt đầu cuộc tấn công trở lại một vài block, cuộc tấn công tầm xa phải lùi xa hơn nhiều trong lịch sử của chuỗi (tức là thậm chí hàng chục nghìn block). Điều này đặt ra một vấn đề cho mạng PoS vì không có bằng chứng về công việc cần thiết để viết lại một chuỗi rất dài.

Trong một cuộc tấn công tầm xa, kẻ tấn công cố gắng tạo chuỗi của riêng mình trong toàn bộ blockchain và muốn thực thi nó như một chuỗi chính xác (chuỗi chính hoặc chuỗi dài nhất). Kẻ tấn công thường làm điều này một cách bí mật và sau đó xuất bản phiên bản của mình vào đúng thời điểm. Lý do tại sao kẻ tấn công có thể cố gắng làm điều gì đó như vậy chủ yếu là để cố gắng tổ chức lại các block hoặc tăng phần thưởng. Điều này là do chuỗi thay thế có thể chứa các block hoặc giao dịch khác với chuỗi chính ban đầu.

Loại tấn công này có thể xảy ra do một hiện tượng được gọi là Chủ quan Yếu. Thuật ngữ này xuất phát từ sự "mù quáng" của các node mới hoặc đã ngắt kết nối từ lâu, buộc phải quyết định nhánh nào của blockchain là nhánh chính xác. Khi một node được cắm vào mạng, nó chỉ chắc chắn thuộc block ban đầu (block Genesis), vì đó là block duy nhất được thống nhất chung. Mọi người đều có thể tìm thấy block Genesis trong bất kỳ trình khám phá blockchain nào. Khi một node cần đồng bộ hóa, nó có thể nhận được danh sách tất cả các chuỗi thay thế hiện đã được xuất bản (nhiều chuỗi bắt đầu với cùng một block Genesis). Node phải có khả năng xác định chính xác và đáng tin cậy chuỗi nào là chuỗi chính xác.

Phải nói rằng các node trực tuyến không bị ảnh hưởng bởi cuộc tấn công này, bởi vì họ biết đến một thời điểm nhất định mà nhánh cuối cùng được đồng ý là nhánh chính. Các node trực tuyến không có lý do gì để viết lại lịch sử nếu điều đó có nghĩa là phải viết lại hàng trăm hoặc hàng nghìn block. Cuộc tấn công này do đó khá hạn chế để có thể thành công. Sự đồng thuận đang diễn ra có thể không bị ảnh hưởng bởi cuộc tấn công tầm xa, vì giao thức chủ yếu được điều chỉnh bởi quy tắc chuỗi dài nhất.

Các giao thức PoS khác nhau sử dụng các quy tắc khác nhau để ngăn chặn kiểu tấn công này. Đối với Cardano, nó còn phức tạp hơn vì nó không sử dụng cơ chế slashing nên không thể trừng phạt trực tiếp kẻ tấn công bằng cách lấy tiền của anh ta như Ethereum. Đối với Cardano, đối với Bitcoin, những người tham gia đồng thuận mạng được trả tiền để làm điều đúng đắn. Không nhận được phần thưởng là một hình thức trừng phạt, vì vậy động cơ là tích cực. Trong trường hợp của Ethereum, những người tham gia được trả tiền để làm điều đúng nhưng họ cũng có thể bị trừng phạt nếu làm điều sai trái. Nói cách khác, họ có thể bị thiệt hại kinh tế đáng kể mà không phải do sự biến động của thị trường gây ra.

Hãy xem làm thế nào mà kẻ tấn công có thể cố gắng thực hiện một cuộc tấn công tầm xa vào Cardano.

Trước hết, điều quan trọng cần lưu ý là kẻ tấn công bị giới hạn bởi số lượng block mà anh ta có thể tạo ra ở đầu chuỗi lừa dối. Ngay cả trên chuỗi lừa dối riêng tư của nó, kẻ tấn công không thể ký các block nhanh hơn trên chuỗi chính thực. Một block hợp lệ phải chứa bằng chứng VRF. Kẻ tấn công bị giới hạn bởi quy mô tiền stake của anh ta (giả sử anh ta không có đa số), điều này giới hạn số lượng block hợp lệ có thể được tạo.

Giả sử nếu kẻ tấn công chỉ có 20% cổ phần, thì hắn chỉ có thể tạo ra 20% block trong giai đoạn đầu của chuỗi lừa dối. Vấn đề là chuỗi chính (80% cổ phần) có thể chứa nhiều block hợp lệ hơn (điều này rất có thể xảy ra nhưng một số vị trí có thể bỏ sót block). Trong hình bên dưới, dây chuyền màu xanh là chủ đạo. Kẻ tấn công đang cố gắng tạo ra một chuỗi màu đỏ.

Picture

Kẻ tấn công cố gắng giả vờ trên chuỗi của mình rằng các node khác không tạo ra block và rằng anh ta đang dần giành được tiền đặt stake cao hơn vì chỉ có anh ta mới nhận được phần thưởng. Do đó, anh ta có thể tạo ra ngày càng nhiều block và cuối cùng đạt đến trạng thái mà anh ta là người duy nhất tạo ra block thường xuyên (thậm chí cứ sau 20 giây như bình thường). Do đó, về mặt lý thuyết anh ta có thể tạo ra chuỗi dài nhất (dài hơn chuỗi chính).

Lúc đầu, chuỗi lừa dối gần như trống rỗng. Theo thời gian, số lượng block sẽ ngày càng nhiều hơn. Do đó, một số lượng lớn các block là cần thiết cho cuộc tấn công.

Chúng ta sẽ xem sau tại sao kẻ tấn công đã thất bại trong cuộc tấn công này vào thời điểm này. Trước đó, chúng ta đã xem xét những gì có thể làm tăng cơ hội thành công của kẻ tấn công. Điều quan trọng cần đề cập là kẻ tấn công có thể có quyền truy cập vào các khóa riêng của các nhà khai thác pool khác. Điều này sẽ cho phép anh ta tạo ra nhiều block gian lận nhưng hợp lệ trong chuỗi lừa dối. Nếu kẻ tấn công lấy được chìa khóa của hai nhà khai thác pool khác và mỗi người trong số họ có 10% cổ phần, thì kẻ tấn công sẽ có tổng cộng 40% cổ phần. Cuộc tấn công sẽ có cơ hội thành công cao hơn vì chuỗi của anh ta sẽ dày đặc hơn ngay từ đầu. Vẫn chưa đủ dày đặc so với chuỗi chính.

Picture

Về mặt lý thuyết, có thể một nhà điều hành pool sao lưu các khóa riêng được sử dụng để sản xuất block và có thể cung cấp chúng cho kẻ tấn công để kiếm tiền. Ví dụ Tor, kẻ tấn công có thể hối lộ các nhà khai thác pool khác. Ngoài ra, các nhà sản xuất block có thể sẵn sàng bán các khóa riêng khi họ quyết định từ bỏ pool của mình. Cũng có thể kẻ tấn công đã đánh cắp các khóa này. Cả hai đều khó xảy ra trên quy mô lớn nhưng có thể xảy ra.

An ninh mạng Cardano tăng lên cùng với số lượng các nhà sản xuất block. Hãy để chúng tôi nói thêm rằng sẽ khó khăn hơn nhiều để có được khóa riêng của những người điều hành pool vẫn đang hoạt động và nhận phần thưởng từ giao thức.

Lưu ý rằng kẻ tấn công chỉ có thể ký các block cũ trên một chuỗi lừa dối. Nếu nhà điều hành bị hối lộ đã ngừng vận hành, anh ta không có khóa riêng mới. Về mặt lý thuyết, có thể thuyết phục nhiều nhà khai thác chung tham gia vào việc tạo ra một chuỗi lừa dối. Động lực là các nhà khai thác có thể nhận được phần thưởng cao hơn. Cuộc tấn công này tương tự như cuộc tấn công 51% vì nó sẽ yêu cầu một cổ phần siêu lớn.

Kẻ tấn công (hoặc nhiều kẻ tấn công hơn) có thể tăng cơ hội thực thi một chuỗi lừa dối bằng cách ở lại chuỗi chính với tư cách là nhà sản xuất block đang hoạt động. Bất cứ khi nào anh ta có cơ hội để sản xuất một block mới, anh ta sẽ từ bỏ cơ hội đó. Slot vẫn trống và không ai khác có thể tạo ra block. Các block trong chuỗi chính sẽ mỏng dần trong khi các block trong chuỗi lừa dối sẽ trở nên dày đặc hơn vào cuối.

Picture

Lưu ý rằng kẻ tấn công sẽ không nhận được phần thưởng trên chuỗi chính, vì hắn cố tình không tạo ra các block. Cổ phần của anh ta sẽ giảm. Kẻ tấn công có thể mua token trên thị trường, nhưng điều này làm cho cuộc tấn công trở nên tốn kém hơn.

Hãy cùng khám phá cách Cardano phòng thủ trước đòn tấn công tầm xa. Giao thức Cardano không thể chỉ dựa vào quy tắc chuỗi dài nhất. May mắn thay, một quy tắc khác được định nghĩa gọi là quy tắc Độ lớn. Nếu một đợt fork xảy ra trong một khoảng thời gian ngắn, quy tắc chuỗi dài nhất vẫn được áp dụng. Tuy nhiên, một khi ngã ba xảy ra trong một khoảng thời gian dài hơn, quy tắc Độ lớn sẽ được áp dụng.

Quy tắc Độ lớn xác định chuỗi nào là chuỗi phù hợp bằng mật độ của các block trong một khoảng thời gian ngắn. Dựa trên quy tắc, node xem xét một số vị trí nằm ngay sau ngã ba. Nói cách khác, quy tắc chỉ xem xét các phần ban đầu của chuỗi dài. Một chuỗi trong đó có nhiều block hợp lệ hơn trong phần này sẽ được chọn là chuỗi phù hợp. Số lượng block trong phần còn lại của chuỗi không quan trọng.

Picture

Quy tắc dựa trên giả định rằng kẻ tấn công không thể hình thành nhiều block ngay sau khi fork vì anh ta không có đủ tiền đặt cọc để làm như vậy. Như chúng tôi đã trình bày ở trên, chuỗi lừa dối gần như trống rỗng ở phần đầu.

Nói một cách đơn giản, hai quy tắc này là đủ để node Cardano luôn nhận ra chuỗi nào là chuỗi phù hợp. Nó áp dụng quy tắc chuỗi dài nhất cho chuỗi ngắn sau khi ngã ba và quy tắc Độ lớn cho chuỗi dài, một lần nữa sau khi ngã ba. Hầu hết thời gian Cardano chỉ cần quy tắc chuỗi dài nhất. Quy tắc Toàn bộ chỉ được sử dụng trong trường hợp bị tấn công.

Key Evolving Signature

Key Evolving Signature (KES) là một công cụ mật mã khác giúp bảo vệ Cardano khỏi các cuộc tấn công. Các khóa KES được sử dụng bởi các nhà sản xuất block để ký các block mới. Khóa KES thường hết hạn sau một vài kỷ nguyên.

Ý tưởng về lược đồ chữ ký an toàn chuyển tiếp được sử dụng. Cơ chế dựa trên ý tưởng rằng kẻ tấn công không thể giả mạo chữ ký đã được thực hiện trong quá khứ. Có thể giữ cùng một khóa công khai nhưng tạo nhiều lần một khóa riêng mới. Do đó, khóa cá nhân cũ có thể bị xóa và thay thế bằng khóa mới được tính toán.

Do đó, không ai có thể ký lại các block bằng khóa KES đã xóa. Nếu kẻ tấn công xâm phạm khóa hiện tại được sử dụng để ký các block, anh ta chỉ có thể sử dụng khóa đó để ký các block từ bây giờ (và một vài block trở lại), chứ không phải các block đã được ký trong quá khứ (xa). Nó khiến kẻ tấn công không thể viết lại lịch sử. Nói chính xác hơn, không thể ký các block đã được tạo khi các khóa ký đã bị xóa. Giả định rằng các nhà sản xuất block sẽ không cố ý giữ các khóa KES của họ.

Có một cấu trúc mật mã được gọi là chữ ký một lần lượng tử cho phép sử dụng khóa riêng để ký một block (hoặc bất kỳ thứ gì khác) một lần và chỉ một lần. Nếu khái niệm này có thể được triển khai và sử dụng trong Cardano, điều đó có nghĩa là kẻ tấn công không thể tạo chuỗi riêng tư và ký các block bằng khóa riêng đã được sử dụng một lần trong quá khứ. Nói cách khác, các nhà khai thác có thể giữ các khóa riêng tư nhưng chúng sẽ không có bất kỳ giá trị nào đối với kẻ tấn công.

Kết luận

Không có cơ chế bảo vệ nào hiệu quả 100% và nếu đầu tư đủ nguồn lực vào cuộc tấn công, cuộc tấn công vẫn có thể thành công. Tính nhạy cảm của các mạng phi tập trung đối với các cuộc tấn công 51% là một đặc điểm cố hữu. Tính dễ bị tổn thương là một loại thuế đánh vào sự Phi tập trung. Nếu đầu tư đủ tài nguyên vào năng lượng và phần cứng ASIC, người ta có thể tạo ra một chuỗi dài hơn trong mạng PoW. Trong mạng PoS, kẻ tấn công chỉ có cơ hội thực hiện một cuộc tấn công tương tự nếu anh ta có đủ số lượng khóa riêng. Các nhà điều hành pool là những chuyên gia và biết rằng họ phải giữ các khóa trên một thiết bị phần cứng không được kết nối với Internet. Vì vậy, những kẻ tấn công chỉ có cơ hội nhận được khóa "nóng", nhưng không có khóa "lạnh". Với sự phân cấp ngày càng tăng của mạng Cardano, khả năng xảy ra một cuộc tấn công giảm đáng kể. Rõ ràng, càng có nhiều nhà sản xuất block độc lập nắm giữ chìa khóa, cuộc tấn công càng trở nên khó khăn hơn. Nếu các khóa bị xóa, một cuộc tấn công tầm xa về cơ bản là không thể và sẽ yêu cầu một cuộc tấn công bạo lực (sử dụng sức mạnh tính toán khổng lồ).

Kẻ tấn công có một cách nữa để thực hiện cuộc tấn công 51% vào Cardano. Anh ta có thể cố gắng mua trên thị trường mở số lượng đồng ADA sẽ mang lại cho anh ta sự thống trị trong sự đồng thuận của mạng lưới. Tuy nhiên, cuộc tấn công này rất tốn kém về mặt kinh tế và vượt quá chi phí của cuộc tấn công 51% vào Bitcoin. Chúng tôi coi cuộc tấn công này gần như là không thể, nhưng nó là một vectơ tấn công hợp lệ.

Có những pool trong mạng Bitcoin đã tồn tại kể từ khi khái niệm này được phát minh. Điều tương tự cũng được lặp lại trong mạng Cardano. Nếu một nhà điều hành pool đang hoạt động tốt, không có lý do gì để họ rời bỏ công việc vận hành và tham gia vào cuộc tấn công. Có thể an toàn khi cho rằng các hồ cũ sẽ tồn tại trong một thời gian dài và các pool mới sẽ dần xuất hiện. Mỗi nhà khai thác pool đơn mới sẽ tăng tính bảo mật của mạng Cardano.

Nguồn bài viết tại đây.


Picture


Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới