for the example above, you could chunk-rotate, change the rot-degree you use as obfuscation or have other variants of your algorithm.
there's a point somewhere a bit faster than monthly-expiration where I would consider using a store and random gen in situations where i would otherwise not. really depends on you, what it's for, and what risks you need to care about the most.