diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2023-09-01 00:00:00 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2023-09-01 00:00:00 +0000 |
| commit | 96660a90e4cd296a2922d7a547de4cd9d0b1928b (patch) | |
| tree | e5216e22ee1a3e1653d8d1ecd856f4f03615d6a1 /src/main.rs | |
| parent | 6423baebd92e45c9be85157c443dff42e65d8d14 (diff) | |
feat(login) password login using encrypted nsec
Enables the user to only handle the nsec upon first use of the tool
by encrypting it with a password and storing it on disk in an
application cache.
The approach to encryption draws heavily from that used by the gossip
nostr client.
- unencrypted nsec is zeroed from memory
- a salt is used to defend against rainbow tables
- computationally expensive key stretching defends against
brute-force attacks of passwords with low entropy.
There is UX trade-off between decryption speed and key-stretching
computation. This UX challenge is exacerbated in a cli tool as
decryption must take place more regularly. Thought was put into the
selected n_log and a heavily reduced value is provided for long
passwords where security benefits are smaller.
A more granular reducing in computation was also considered by
rejected to avoided to revealing just how weak a password is as most
weak passwords are reused.
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index d16f1a3..e6eac32 100644 --- a/src/main.rs +++ b/src/main.rs | |||
| @@ -17,8 +17,11 @@ pub struct Cli { | |||
| 17 | #[command(subcommand)] | 17 | #[command(subcommand)] |
| 18 | command: Commands, | 18 | command: Commands, |
| 19 | /// nsec or hex private key | 19 | /// nsec or hex private key |
| 20 | #[arg(short, long)] | 20 | #[arg(short, long, global = true)] |
| 21 | nsec: Option<String>, | 21 | nsec: Option<String>, |
| 22 | /// password to decrypt nsec | ||
| 23 | #[arg(short, long, global = true)] | ||
| 24 | password: Option<String>, | ||
| 22 | } | 25 | } |
| 23 | 26 | ||
| 24 | #[derive(Subcommand)] | 27 | #[derive(Subcommand)] |