IntroductionJust imagine a Private Key that can be lost and you don't afraid that won't see your encrypted data anymore. Or, imagine a Private Key that you can restore on your every new device without a need to transfer the Key between devices.Sounds great? And it is possible!Virgil presents Brain Key - a strong cryptographic key based on user's PASSWORD.ProblemSimple User's Private Key that is generated using a Crypto Library has limited entropy sourceIf you lost your Private Key you can't decrypt previously encrypted dataIf you get a new device you need to re-encrypt data for a new key pair or transmit previously generated private key, but there is always a chance to be intercepted.SolutionVirgil Security presents Pythia Service that can be used directly as a means to generate strong cryptographic keys based on user's password. We call these keys the BrainKeys. Thus when you need to restore a Private Key you use only user's password and Pythia Service.Virgil helps you create Brain Key, based on your PASSWORD, without having to know a your password or its hash.You don't need to re-create a new Key or re-encrypt data in case you lost your private key or device.How it worksRegister your E2EE application on Virgil Dashboard and get your app credentialsGenerate your API key or use availableSet up JWT provider using previously mentioned parameters (App ID, API key, API key ID) on the Server sideGenerate JWT token with user's identity inside and transmit it to Client side (user's side)On Client side set up AccessTokenProvider in order to specify JWT providerInitialize and create an instance of BrainKey class with AccessTokenProvider and pass user's passwordSend BrainKey request to Pythia ServiceGenerate BrainKey keypair based on transformed password that you've got from Pythia Service and create user's CardSetup your cardVerifier and cardManagerPass user's Card to cardManagerPublish user's Card that is related to the BrainKeyYou perform all operations under user's password on a Client side, thus Virgil doesn't know about a user's password or its hash.What Virgil provides for developersVirgil Cards Service for storing & managing your users' Public Keys.Virgil SDK which allows you to easily manage a Crypto Library and communicate with Virgil Cards Service.Virgil Pythia Service for creating user's protected blinded password that will be used to generate BrainKey on Client side.Virgil Pythia SDK which allows you to communicate with Virgil Pythia Service and implement Pythia protocol.Let's get started!