Rotate Keys
This guide shows how to rotate PureKit-related keys. There can never be enough security, so you should rotate your sensitive data regularly (about once a week).
Also, use this flow in case your database has been COMPROMISED!
Use this workflow to get an update_token
for updating encryption keys in your database and to get a new app_secret_key
and service_public_key
for your application.
Learn more about Pure Records and keys rotation as a part of Post-Compromise Security in this guide.
Get your update token
Navigate to your Virgil Application panel at Virgil Dashboard and, after pressing "BEGIN ROTATION PROCESS" press “SHOW UPDATE TOKEN” button to get the update_token
(UT).
Initialize PureKit with the update token
Move to PureKit configuration file and specify your update_token
(UT):
PureContext context = PureContext.createContext(
"AT.znqRZcOdzybj62Rzer897pX2DZ9KZoYF",
"NM.Qs0YFBS7Mr3Aaa9qn4OCVcNC1wvPCXfUpZNWFCPUOUI=",
"BU.MCowBQYDK2VwAyEAKWSBAZbbekJ5Ns36jRcjEiut3rH4rpaCCVnRxcB+d/E=",
"SK.1.3JE4SAOXGC95nDOjOhCyTXZqdQmjaqz9mtZhIN9s/2g=.cFGlNRis9FQ77DW2fCpBcx+EI4SHv7guS1sPCnSRmx0=.rKEuUZePvcr6CdOTJkk0kd0kUAq1rSx0x2A9lUegQHo=",
"PK.1.BCIeyCW9xDfbuYQb6CIJ7dMqujrjBlIysJs6dXxV+9FU9kxC60fD1dl/P/6TT2wJN8p9E16IPNt5OdJ6Tq3S6L0=.BGjcd5b4wzuGapBQXcUxVXnHWvscYMDbTWk1zxqejSruppcoVWzeYlF0z7GTT3HUdejdrFtbL6sRxD/wOu5jYAs=",
"UT.2.CiDd8vnWg2I5nzcCMbd0f72fcYPGgWoNnC48ZUBaiiX66hIgx9y+4+7wgwTHCk2wTK392mTQyBuzmQrZHTPAC7X+CG8=.gDHGqQ0uxqybPnuTWIP9FewlB4eq0Qff6/1VEZKtYkQ=.cr3Hs5Ej8Dz5BHt1KkHXf/Mqrqb/1/hU28W3ZwFOjJY=");
Pure pure = new Pure(context);
Start migration
If using Virgil Cloud
If you're using Virgil Cloud for storing users' encrypted passwords and encryption keys, then simply continue the rotation process at the Virgil Dashboard by clicking "CONTINUE KEYS ROTATION" and following the instructions.
If using custom storage
If you're using a custom storage, run the performRotation
function:
Pure.RotationResults results = pure.performRotation();
Note! You don't need to ask your users for a new password.
Note! The SDK is able to work with two versions of a user's password record
(old and new). This means that if a user logs into your system while you're performing the migration, the PureKit SDK will verify their password without any problems.
Download CLI
After you've updated your database records, it's required to update (rotate) your application credentials. For security reasons, you need to use the Virgil CLI utility.
Rotate app secret key
Use Virgil CLI update-keys
command and your update_token
(UT) to update the app_secret_key
(SK) and service_public_key
(PK):
virgil purekit update-keys PK.*** SK.*** UT.***
Configure PureKit with new credentials
If you are using your own storage, you have to navigate to PureKit configuration and replace your previous app_secret_key
, service_public_key
with the new ones.
It is necessary to delete update_token
and the previous app_secret_key
, service_public_key
after rotation for security reasons.
Here is an example of how to configure PureKit with the new credentials:
PureContext context = PureContext.createContext(
"AT.znqRZcOdzybj62Rzer897pX2DZ9KZoYF",
"NM.Qs0YFBS7Mr3Aaa9qn4OCVcNC1wvPCXfUpZNWFCPUOUI=",
"BU.MCowBQYDK2VwAyEAKWSBAZbbekJ5Ns36jRcjEiut3rH4rpaCCVnRxcB+d/E=",
"SK.2.3JE4SAOXGC95nDOjOhCyTXZqdQmjaqz9mtZhIN9s/2g=.cFGlNRis9FQ77DW2fCpBcx+EI4SHv7guS1sPCnSRmx0=.rKEuUZePvcr6CdOTJkk0kd0kUAq1rSx0x2A9lUegQHo=",
"PK.2.BCIeyCW9xDfbuYQb6CIJ7dMqujrjBlIysJs6dXxV+9FU9kxC60fD1dl/P/6TT2wJN8p9E16IPNt5OdJ6Tq3S6L0=.BGjcd5b4wzuGapBQXcUxVXnHWvscYMDbTWk1zxqejSruppcoVWzeYlF0z7GTT3HUdejdrFtbL6sRxD/wOu5jYAs=",
null);
Pure pure = new Pure(context);