Hey Danilo,
With the transit backend, you would not make a new key for every customer. Instead you would have
a single named key like “credit-card” that is used for every row. Otherwise, you are correct, the Vault itself
sees the encryption key, and the database only sees the cipher text.
For the other questions, the transit backend supports the cryptographic operations that you need.
The generic backend only stores and retrieves values, but it is not suitable for storing a large key set.
The transit backend stores only the encryption keys themselves, and performs the cryptographic operations
using them, but allows the storage to be offloaded to an external database.
Vault 0.1 does not support key rolling, but we’ve merged in support for it in master and it will be
available in Vault 0.2. Vault has unseal keys that can be “rekeyed” to change, and backend encryption
keys which can be rotated.
The transit backend itself will eventually support key rolling, so that there can be multiple versions
of the “credit-card” named key. Additionally, we are going to support derived keys, so that you can
have a unique per-transaction key.