Cardano Franken Addresses

Cardano Franken Addresses

 

Lời mở đầu

Trên blockchain Cardano, địa chỉ ví ngoài việc chứa các thông tin về mạng, về quyền chi tiêu, nó còn chứa thông tin về quyền đặt cược (Staking). Chính vì vậy mà nó cũng có nhiều điểm khác biệt so với địa chỉ ví của các Blockchain khác.

Trong bài viết này, chúng ta cùng nhau tìm hiểu về cách thức hoạt động của một loại định dạng địa chỉ độc đáo trong Cardano. Đó chính là các địa chỉ Franken (Franken addresses).

Việc hiểu rõ về nó sẽ tối ưu cách sử dụng của các địa chỉ Franken, bảo vệ của mình cũng như tránh được các lỗ hổng, lỗi bảo mật trong quá trình tạo ra các hợp đồng thông minh trên mạng Cardano.

  • Địa chỉ ví Shelley

Trước tiên chúng ta cần tìm hiểu đôi chút về định dạng địa chỉ ví Cardano hiện tại (từ thời Shelley trở đi).

Địa chỉ Shelley  hiện tại mà chúng ta thường hay thấy nhất sau khi giải mã bằng bech 32, bao gồm các thành phần cơ bản sau:

1, Byte tiêu đề : 4 bit đầu tiên chứa thông tin như địa chỉ dành cho mạng nào (testnet hoặc mainnet); 4 bit tiếp theo cho biết loại địa chỉ đó (vd : địa chỉ của tập lệnh hay ví thông thường).

2, Phần thanh toán : là dạng mã hóa từ khóa công khai (public key) của ví; và là phần quan trọng nhất của địa chỉ vì nó cho biết ai có quyền chi tiêu tiền, tài sản liên kết với địa chỉ. Người sở hữu có thể là một cá nhân hay một hợp đồng thông minh, chính là người nắm giữ khóa riêng (private key) tương ứng với khóa chung được chỉ định trong địa chỉ.

3, Phần Ủy quyền : thường bao gồm khoảng 28 bit, liền sau phần thanh toán. Cho biết ai là người có quyền chọn nơi đặt cược tiền có trong địa chỉ và có quyền kiểm soát phần thưởng thu được từ việc đặt cược số tiền đó.

 

Việc kiểm soát phần ủy quyền cũng thông qua khóa riêng tương ứng. Trong nhiều trường hợp, địa chỉ ví không có phần ủy quyền, thường là ví của các quỹ khi nắm giữ tiền của người khác và không muốn đặt cược.

  • Địa chỉ Franken (Franken address)
  • Khái niệm

Khi người dùng tạo 1 ví Cardano, nó có thể  tạo ra rất nhiều địa chỉ nhận/gửi. Tuy nhiên, tất cả các địa chỉ này đều sử dụng chung 1 khóa đặt cược (stake key) duy nhất nằm trong phần ủy quyền. Khóa đặt cược này còn được mã hóa thành địa chỉ đặt cược (stake address). Người dùng có quyền đặt cược đối với tiền tại tất cả các địa chỉ thuộc về ví đó. 

Tuy nhiên, bất kỳ ai cũng có thể tạo một địa chỉ phần thanh toán hoặc phần ủy quyền tùy ý từ 2 địa chỉ hoàn toàn khác nhau. Tức là chúng ta có thể dễ dàng tạo ra một địa chỉ ví mà chủ sở hữu của khóa thanh toán được chỉ định trong địa chỉ khác với chủ sở hữu của khóa đặt cược được chỉ định trong phần ủy quyền. Một địa chỉ như vậy được gọi là địa chỉ Franken (Franken address) hay địa chỉ hỗn hợp (Hybrid Address) hay địa chỉ đọc sai (Mangled Address).

  • Đặc điểm 

Địa chỉ hỗn hợp này là loại địa chỉ không tồn tại trong bất kỳ ví nào mà được code thủ công trên bech32, hoặc có thể tạo thông qua chức năng nâng cao của ví Eternl bằng cách sử dụng khóa thanh toán và khóa ủy quyền của 2 địa chỉ khác nhau.

Người sở hữu thực sự là người nắm giữ khóa thanh toán của địa chỉ (A), người nắm giữ khóa ủy quyền (B) chỉ mang tính tạm thời. Khi số tiền trong địa chỉ này bị chi tiêu hết thì quyền đặt cược đối với số tiền này cũng không còn.

Khi số tiền được chuyển vào địa chỉ hỗn hợp có phần thanh toán thuộc về ví A, phần ủy quyền thuộc về ví B, thì số dư hiển thị trong ví B sẽ thay đổi, B có quyền đặt cược số dư này để nhận thưởng, còn số lượng tài sản thực tế của ví B là không đổi. 

Ví dụ:

–  Nếu Alice chuyển 1.000 ada đến một địa chỉ chỉ định phần thanh toán là do Bob nắm giữ, còn khóa đặt cược phần ủy quyền thuộc vẫn do Alice kiểm soát.

– Bob có thể chi tiêu 1.000 đó nhưng Alice là người có quyền chọn nơi đặt cược và nhận phần thưởng từ việc đặt cược 1.000 Ada đó.

Tất cả những thông tin, giao dịch, tài sản của tất cả các địa chỉ có cùng khóa đặt cược được ghi lại trên blockchain được cho là giao dịch của cùng 1 ví, nên người ta thường dùng địa chỉ đặt cược của ví để kiểm tra thông tin. Chính vì vậy tất cả thông tin của địa chỉ hỗn hợp đều được ghi lại trên địa chỉ đặt cược của ví B, chính vì vậy mà thông tin trên địa chỉ ví A sẽ hoàn toàn ẩn đi. Do vậy, việc tra thông tin từ địa chỉ đặt cược của ví trên blockchain cũng sẽ mang tính tương đối, không hoàn toàn chính xác. 

Trong trường hợp một NFT được chuyển vào địa chỉ hỗn hợp này, thì khi kiểm tra ví A sẽ thấy NFT này, nhưng khi kiểm tra NFT này, sẽ thấy thông tin sở hữu là ví B. Để chứng minh quyền sở hữu thực sự của NFT, thì bắt buộc phải cung cấp chữ ký tương ứng với phần thanh toán chứa NFT thì B sẽ không chứng minh được.

Các trường hợp sử dụng

  1. Một số nhà phát triển ứng dụng có thể tận dụng quyền ủy quyền để nhận thưởng hoặc giúp người dùng duy trì quyền đặt cược của họ trong khi số tiền đó bị khóa trong hợp đồng thông minh của ứng dụng. Bằng cách chỉ định phần ủy quyền của người dùng trong địa chỉ nhận tiền (giống như sàn Wingriders hay Indigo đang làm).

Ví dụ : Một người dùng gửi 1000 ADA vào smart contract (có địa chỉ hỗn hợp chứa khóa đặt cược của người dùng) và mint 300 iUSD.
–  Thông tin giao dịch được ghi nhận
địa chỉ : stake01abc – 1000 ADA (sent)
địa chỉ : stake01abc + 300 iUSD(received), Staking Controlled + 1.000 ADA, nếu số tiền bị khóa trong smart contract bị thanh lý thì số dư hiển thị này cũng mất).

 

  1. Một người dùng bất kỳ có thể tạo ra một địa chỉ hỗn hợp để chuyển tiền của họ mà không muốn tiết lộ thông tin địa chỉ ví chính của họ bằng cách chuyển tiền đến địa chỉ hỗn hợp chứa khóa thanh toán của họ và khóa đặt cược thuộc về ví khác. 
  2. Địa chỉ hỗn hợp là một cách để đăng ký cam kết bổ sung cho một nhóm ủy quyền (Staking pool) mà không cần đăng ký chủ sở hữu thứ hai trên chuỗi khối.
  3. Mặc dù người dùng không mất quyền chi tiêu số tiền của họ nhưng kẻ xấu có thể đặt cược số tiền đã hoán đổi cho đến khi nạn nhân nhận ra số tiền này không đóng góp vào số dư đặt cược của họ hoặc cho đến khi ví của họ tình cờ sử dụng số tiền đó trong một giao dịch.
  4. Trong thị trường NFT, người mua ác ý có thể sử dụng lỗ hổng này để kiểm soát số tiền mà họ dùng để mua NFT bằng cách gửi khoản thanh toán đến một địa chỉ hỗn hợp mà người bán kiểm soát phần thanh toán nhưng lại chỉ định khóa đặt cược của người mua trong phần ủy quyền.
  5. Kẻ xấu có thể sử dụng khóa ủy quyền của người khác, tạo ra một địa chỉ hỗn hợp nhằm chiếm đoạt những lợi ích từ việc ủy quyền mang lại. Ví dụ như đăng ký whitelist, nhận NFTs, nhận token airdrop, ISPO… Giống như trường hợp ISPO của Ray bị hack bằng cách sử dụng địa chỉ Franken như trên.
  6. Trên các sàn giao dịch phi tập trung, đại lý có thể lợi dụng lỗ hổng này sử dụng địa chỉ hỗn hợp để chiếm quyền đặt cược của người dùng khi thực hiện giao dịch hoán đổi tài sản.

Ví dụ : 

-Alice cần swap 100 ADA thành WRT. Bob cần swap 200 WRT thành 100 ADA. 

– Jack là người trung gian trên sàn giao dịch, tận dụng lỗ hổng này và tạo hợp đồng giao dịch nhưng gửi số tiền trên tới địa chỉ hỗn hợp chứa stake key của Jack để chiếm quyền đặt cược số tiền trên.

Khi biết số tiền trong ví bị hoán đổi, người dùng có thể lấy lại quyền đặt cược bằng cách chuyển tất cả số tiền trên về lại đúng địa chỉ ví của mình.

Kết luận

So với các loại địa chỉ ví của các mạng blockchain khác thì địa chỉ trên Cardano mang tính độc đáo, phức tạp hơn. Khi bất kỳ ai cũng có thể tạo 1 địa chỉ ví có 2 quyền khác nhau do 2 chủ sở hữu khác nhau điều khiển. Chính vì vậy, đặc điểm của địa chỉ Franken trên Cardano cần được truyền thông nhiều hơn để các nhà phát triển cũng như người dùng có thể hiểu cách hoạt động, bảo vệ quyền lợi của bản thân và tránh được những rắc rối do chưa lường trước được tác động của nó.

Như vậy, chúng ta đã tìm hiểu qua về địa chỉ hỗn hợp của Cardano. Các trường hợp sử dụng thực tế cũng như 1 số giải pháp khắc phục nhược điểm độc giả có thể tham khảo ở nguồn cuối bài viết.

 

https://medium.com/adamant-security/mangled-assuming-temporary-staking-control-of-funds-sent-from-validator-scripts-ab3fbec96558

https://adamantsecurity.medium.com/multi-sig-concerns-mangled-addresses-and-the-dangers-of-using-stake-keys-in-your-cardano-project-94894319b1d8

Cardano: NerdOut – Franken Addresses

 

Leave a Reply

Your email address will not be published. Required fields are marked *