Design:
People should be able to store the partial-key in a unobtrusive form but the unobtrusive form should not be used to decrypt sensitive content on its own.
The design should allow to be plausible deniable because the parts should not look like keys.
How it works
Two (or more) pieces of information like numbers are fed to the software. The software derives a password from it that is used to decrypt the real sensitive stuff.
User A has the unobtrusive key '1234' User B has the unobtrusive key '5678'
Together they form '12345678' and the software derives a key from this string.
It's like two people come to a safe box and the safe box only opens with two keys at the same time.
Key derivation method
- Secure key derivation method can be used on the final string like PBKDF2 with custom iteration count
- The iteration could also be calculated from the final string (something like crc32 + 10000
Threat model:
- One piece of the key can be compromised without revealing the other one
- Key can be something unobtrusive, anything that translates in to a sequence where a key can be derived from (string, file & etc.)
Out of scope:
- Keyloggers
- Malware
- Encryption algorithm
Failure:
- Attacker gets hold of things and feds them in to the software
Cons:
- Somewhat Security by obscurity
Pros:
- Non-technical users can handle it better than a saved password
- One key alone does not translate to a password. It will be derived from the whole sequence of keys
- Can be stored in any form as long as it can be translated back to a sequence of data (post it note, image file & etc).
- Plausible deniability - The unobtrusive key can look like a regular item
Questions:
- What would be a realistic attack for this storage method?
- How can it be improved?
- (sarcasm) What could possibly go wrong? (/sarcasm)