Implement key rotation for encryption keys
masterTo rotate keys without invalidating existing sessions, provide multiple key pairs to redistore.NewStore. The first pair is used for encoding new sessions, while all provided pairs are attempted for decoding existing sessions.
Key Sizes:
- Authentication key: 32 or 64 bytes (HMAC)
- Encryption key: 16 (AES-128), 24 (AES-192), or 32 bytes (AES-256)
Rotation Process:
- Add new key pair at the beginning of the slice.
- Keep old keys for a transition period.
- Remove old keys once all sessions have been renewed.
Helper Functions:
KeysFromStrings(keys ...string): Provide keys from strings.Keys(keys ...[]byte): Provide keys as byte slices.
// Keys are provided in pairs: authentication key, encryption key
store, err := redistore.NewStore(
redistore.KeysFromStrings(
"new-authentication-key", // Used for new sessions
"new-encryption-key", // Used for new sessions
"old-authentication-key", // Tried for decoding
"old-encryption-key", // Tried for decoding
),
redistore.WithAddress("tcp", ":6379"),
)