I have the following APP Design
- key store (contains 1:n user payload as 1:n key store entries)
- key store salt (is used to extend to key store password to 256 bits, stored in clear text)
key store entry (what the user wants to encrypt) with:
- own entry IV (payload is encrypted with AES-256 MODE OFB, IV stored in clear text )
- own entry SALT (64 bytes random appended to payload before encryption, SALT stored in clear text)
The encrypted entry is stored base64 encoded:
- model (a): only passwords are allowed
- model (b): additional data is allowed
Here the additional data may be comments / remarks in the users language, links or email addresses.
The key store SALT is used for apple crypt function CCKeyDerivationPBKDF which extends the user password to 256 bits to be used for AES256.
- Is it secure to allow multiple keys on the key store if the key store SALT is shared on all keys?
The number of used passwords is not detectable as the application accepts every entry as valid. You must decide on the decrypted information if the key is valid or not. This is also true for the user who should know the correct password.
Can an attacker use the shared SALT for some attack?
Is there a security risk when I use model (b) which allows the attacker to guess, that there is user language (or links / email addresses) in the encrypted entry?