CIP - Cardano Gift Cards

Cardano Gift Card Standard

I believe a gift card standard could be a great addition to Cardano. I posted a feature request on the Yoroi Wallet repository. The devs agreed it was doable; however, they advised me to create a CIP so that all wallets could follow the same protocol. I initially tried to describe a standard with cryptocurrency-specific specifications. However, for this CIP, I’ll try to merge everything into one Cardano proposal.

This is my first time doing a CIP; please let me know if there is an issue.

Abstract

Gift cards are paper wallets intended to be gifted; they are fancy documents bundled with mnemonic words and instructions. It is a fun way to gift Cardano to someone who doesn’t know about crypto. It includes explicit directives that can teach anyone to retrieve its funds and introduce them to the blockchain concepts. A standard protocol for generating and restoring the cards could make gifting Cardano more secure.

Motivation

Gift cards are potentially beneficial for the ecosystem since they allow to easily gift Cardano to people who don’t own a wallet or an exchange account (thus suitable for adoption).

Specification

Concerning the gift card:

  • Document must include a code that can be derived into and private key allowing access to a wallet on the blockchain.

  • Document code must be a 24 word mnemonic corresponding to a standard Cardano wallet.

  • Document must include information to determine which cryptocurrency it is holding.

  • Document must indicate that it is a Gift Card.

  • Document must include a warning stating that it should not be used as a regular crypto wallet and must be emptied upon reception.

  • Document must include basic instructions to retrieve funds.

  • Document must include a deposit address.

Optional:

  • Document can include a QR code for quick access; its data must be a JSON object with the following members:

    • ‘code’: the code stated in (1.) as it would be entered by the user

    • ‘abbr’: cryptocurrency abbreviation, ex: BTC

Here are three Gift Card features that could be integrated into software wallets:

  1. Gift Card Generation: A menu to generate a paper wallet bundled with instructions.

  2. Gift Card Restoration: A menu to automatically restore and empty a gift card to a secure wallet.

  3. Gift Card Detection: This feature detects when a gift card is restored (in the classic wallet restore menu) and proposes a Gift Card restoration (2.) instead.

Rationale

The main risk with Gift Cards is that the person receiving the funds could use the restored wallet as its own (thus putting more funds on an insecure wallet). The above specifications were made to reduce that risk to a minimum.

Concerning (3.): one way to detect if a restored wallet is a Gift Card would be to generate every Gift Card with ‘gift’ as their first word.

However, it would reduce the wallet possibilities from 2048^24 to 2048^23 (a potential security risk).

Reference implementation

Live example of a gift card generator.

Copyright

Creative Commons Attribution 4.0 International Public License

1 Like

Hi! That’s a good description of the main idea, thank you for the post! The idea of a paper-certificate (does not have to be actual paper) that is recoverable for a transfer but cannot accidentally be left to be used as actual long-term wallet it pretty cool. Let me leave few comments here for further discussion.

This should not be done in general and the security is not the concern. Since “gift” is a valid bip39 word it means any randomly generated real wallet has a chance of starting with that word. If wallets start assuming any mnemonic sequence starting with “gift” is something that should not be restored as a regular wallet - it’s gonna be a problem.

Same general problem with this: 24 words is a valid BIP case for a mnemonic, so if you want to use a valid number of words and only words from the valid list - you will have collisions with something that can be validly generated randomly by a regular wallet and therefore other wallets cannot make extra assumptions about it.

The easiest secure way would be to use a non-valid number of mnemonic words, like 20 or something like that. Then all regular wallets would not ever allow to restore it as a normal wallet by accident. This could be easily done by following the paper-wallet flow that produces 18 words and then taking additonal 22-bit checksum of it or something. A proper technical CIP spec would need to be created in the CIPs repository for public review, but first ideas are of this sort.

Maybe gift-cards could also have an optional password, like paper-wallets have (at least in Yoroi, not sure if others support that as well) the gifter could come up with that password and then write it done on the printed certificate. In that case the last two words could be a checksum of the main mnemonic and the password which would provide some safety-check for when a wrong password is entered (for example paper-wallets in Yoroi don’t have that safety-check by design, cuz using multiple passwords can give you multiple wallets with the same paper certificate).

This sounds cool, but generally QR-codes are used for public non-private information, like an address or a wallet public key or something non-critical like that. Might be ok, but needs additional security research.

It might be more ok in case a gift-card would be protected by a password cuz in this case the QR code would only contain the mnemonic itself and the user would need to scan it and then enter the password written somewhere inside the paper.

2 Likes