Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: SpicyPass – A free and open-source minimalist password manager (github.com/jfreegman)
241 points by Jfreegman on March 28, 2020 | hide | past | favorite | 107 comments



How would this compare with pass[1], the "standard UNIX password manager"? Is it simply that SpicyPass uses newer cryptography than pass?

Pass uses gpg along with the filesystem and git, so it is lightweight, and super-easy to backup offsite, as long as you guard your gpg keys separately. For those who want a GUI, QtPass[2] provides a simple GUI while using pass in the background.

[1] https://www.passwordstore.org/ [2] http://qtpass.org/


Yeah I don't see the advantages of this compared to `pass` as well.

The whole source code of bash pass [1] is almost as long as a single header file [2] from this C++ software. Plus pass already handles backup... Minimalist heh.

[1] https://git.zx2c4.com/password-store/tree/src/password-store...

[2] https://github.com/JFreegman/SpicyPass/blob/master/src/spicy...


The pass source code you linked to is just a wrapper for the unix toolset (and has twice the byte count, not that it matters). Pass has a completely different crypto implementation and security model than SpicyPass. The two are not synonymous, either in features or UX. I elaborated on more of the differences between the two in a different reply to a similar comment.

tl;dr different strokes for different folks. I didn't write spicypass with the intent of replacing pass.


> just a wrapper for the unix toolset

Yeah, that's the point of using Unix, and why pass is great for that.


I remember reading somewhere that Pass could be used with libsodium (or age), but I cannot find the source now, sorry.

One difference I see between this and pass is that spicypass is storing all the credentials in a single file. If you don't want to leak metadata with pass you have to add pass-tomb[1].

Anyway I just use pass (gopass actually) and I have no problems, it's a great improvement over a text editor.

[1] https://github.com/roddhjav/pass-tomb


I'm pretty satisfied with the minimalism of pass, and thought of asking this question. The documentation is also pretty good.


I personally didn't find pass to be minimal enough (not all POSIX-y systems use bash as /bin/sh, after all), which is why I switched to pash [0]. I created some shell functions to integrate it with fzf and support multiline passwords (in which the first line is the password and following lines contain metadata like usernames). The code is in my dotfiles [1].

[0]: https://github.com/dylanaraps/pash

[1]: https://git.sr.ht/~seirdy/dotfiles/tree/master/.config/shell...


pass is great. sops by Mozilla is pretty sweet too.


I find pass quite hard to follow and grok what it is doing and what assumptions or consequences of using it are.

And for the life of me I can not get it to prompt for the password in the terminal, which is infuriating.

First glance of SpicyPass looks promising in my eyes.


Hey, for me it took me a while to understand it as well, so I created a cheatsheet[1] and a tutorial[2] (shameless plug). Maybe they are helpful to you.

[1] https://woile.github.io/gopass-cheat-sheet/

[2] http://woile.github.io/posts/sharing-team-secrets/


Is there a decent pass integration with Android?


There is Password Store[0] although apparently no longer maintained (currently still using it). The downside is that there's no auto-fill etc. meaning that you have to copy and paste every login manually.

[0] https://play.google.com/store/apps/details?id=com.zeapo.pwds...


Password Store is still being developed. Master was recently updated to support Android's Autofill.


That's great to hear! I've been a long time user and never had a single issue with it. Autofill would be great!

Do you know why the Play Store description says that it is no longer maintained? Is the app being published somewhere else?


I don't see that anywhere in the description? Last update shows March 20th. Listing I'm look at is https://play.google.com/store/apps/details?id=dev.msfjarvis....


Huh, it appears that the app in the link I shared above it's the legacy version and this should be the new one (guessing from the age of each app).

Thanks for the info


This is really cool, thanks for sharing!

I personally use Bitwarden, also because it's free and open source software, and because the cloud managed option is $10 / year. I've found the GUI to be very well-made for a heavy keyboard user like me. I also second a curses-based terminal interface for password management, I think it'll be really useful!


I honestly might just pay the $10/yr just to support them but bitwarden_rs is dead simple to deploy if you already have a VPS sitting around for other stuff.


I consider the self-deployment option the 'npm eject' feature of open-core software, and I'd prefer to support an org to avoid having them disappear and consequently needing to manage my own build infra and scanning mailing lists for security vulnerabilities :P


I think the author of Bitwarden should seriously start considering making the official daemon lighter as bitwarden_rs is just that good.

With a requirement to pay extra $5 on your server instance monthly for more memory to self host the official version, you'll be paying a lot more than $10/year.


After using it for a month or so, the $10 was a no-brainer for me. Great piece of software!


Too bad that the owner/maintainer doesn't really like an open API. The only way to interact with the backend seems to be using the cli or trying to figure out the API yourself.


Are you talking about Bitwarden or bitwarden_rs? Because bitwarden_rs is simply a third-party implementation of the Bitwarden API server AFAIU.


Bitwarden gets recommended so much on Hacker News that it feels kind of like astroturfing.

That being said, I use Bitwarden and it's great.


I evaluated LastPass, OnePassword, and Bitwarden personally for my devices (Windows / macOS / Linux / iOS). Bitwarden supports all these plus more, is cheap, lightweight, reliable, UX-decent, and open-source.

If you build a great product people need, it's not a headspinner why people would use it and buy it. Hopefully going into this recession we'll see more products with that lesson baked in.


Other than being open source, what does Bitwarden offer over Lastpass on the free tier?


For me: the ability to self-host and the ability to read through the code.


I use bitwarden too, but I can't figure out how to get the cert to automatically update. I have port 443 served by Caddy2 and use that as a reverse proxy to Bitwarden, but Bitwarden wants to bind to 443 to update the cert. So, for now, it is a case of manually stopping Caddy, updating Bitwarden, and starting Caddy back up. The downtime is only acceptable because I only host personal stuff.


Here's what worked for me:

Run the bitwardenrs container without SSL:

sudo docker pull bitwardenrs/server:raspberry

sudo docker run -d --name bitwarden --restart always -e ADMIN_TOKEN=your_admin_token -v /bw-data/:/data/ -p 80:80 bitwardenrs/server:raspberry

Proxy through Caddy (note that I'm using DuckDNS for DNS):

curl https://getcaddy.com | bash -s personal tls.dns.duckdns

nohup caddy -http-port 999 -conf /etc/caddy/Caddyfile -envfile /etc/caddy/CaddyEnvFile -agree -email YOUR_EMAIL@gmail.com &

(the port 999 is because we've already got docker container running on port 80)

Follow the examples here for the configuration: https://github.com/dani-garcia/bitwarden_rs/wiki/Proxy-examp...


I’ve been running it in a docker container plugged into the nginx reverse proxy and letsencrypt companion containers. The latter claims to automatically update certs though I haven’t had it running long enough to test it. Unless you’re set on using Caddy, it’s a pretty straightforward option.

Instructions here: https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-compan...


The issue with this kind of solution is that you need to pass your docker socket to the container. Not great.


Can you elaborate on why this is a problem? I'm fairly new to docker (and not a programmer / dev), so I'll take any tips I can get!


It basically ruins most isolation/security benefits containers provide, since having root access to this socket allows to nearly have root access to the host. This is something you want to really avoid.

I don't really have a good solution to this "reload service when certificates are updated" problem that doesn't involve heavier container orchestration.


> I also second a curses-based terminal interface for password management, I think it'll be really useful!

Bitwarden also has a CLI, so it's probably do-able to create something like this.

I built envwarden[0] on top of the CLI, which lets us manage our server secrets with Bitwarden.

[0] https://github.com/envwarden/envwarden


Why might I want to use this over something like pass (https://www.passwordstore.org/)?


My motivation for writing spicypass was actually a frustrating struggle I once had trying to get pass to play nicely with my GPG installation. I decided it would be easier (and more fun) to write my own.

So one of the main differences is that spicypass is setup-free. You just pick a master password and go. It achieves this by using symmetric encryption via the libsodium library. A nice side-effect of this is that backups are as simple as copying the .spicypass file to your backup device/server. With asymmetric encryption you have to worry about backing up your private keys in addition to the store file(s).

Another major difference is that it has an idle lock. Even if someone has root access to your machine and you leave it unattended while spicypass is running, they won't be able to see your passwords (assuming there's no keylogger involved).

There's also the minimalist aspect. pass has a lot of features that I personally don't need and consider to be bloat. I designed spicypass to my own personal specs: A very simple notepad-like interface, but secure. I figure I can't be the only one who thinks all the bells and whistles that most password managers have just get in the way.


I've also experienced some difficulties with getting pass to play nicely with gpg, but the hassle was definitely worth it. An integrated pass and gpg setup allows for a single consistent means of authenticating and comes with the idle timeouts that you mention.

When I want to push to a git repo and authenticate with my private key, I just run git push normally, and a pin-entry prompt comes up, and I just need to enter my master password. Similarly, when I want to use a stored password for logging into a website, I just click the passff extension and enter my master password into the pinentry program. It would seem like something like spicypass would just bloat my system, requiring multiple programs for authenticating in different ways.

I can understand the drive for minimalism, but I can't see any reasonable metric by which pass could be seen as bloated - it provides a small set of features that are important for a password store and nothing more.


Often it just comes down to personal preference. A necessary feature to one person is bloat to another. Git integration for example is not something that meets my criteria for a necessary feature of a password store (think non-developers), although I can certainly understand why some people might love it.


Git integration was a major plus point for me. Undo is a basic desire everywhere, and revision control with Git gets you Undo. You get a bunch of other things from Git, but being able to Undo my inevitable mistakes is essential.


The benefit of Pass is it already has Chrome/Firefox plugins so all you need to do is press a keyboard shortcut and it automatically fills it in on the site.

Given SpicyPass doesn't have that, I think I'll still be with Pass, because it's free and simply amazing.


Third party browser extensions (and cloud syncing) are two things that, while convenient, create potential security holes. I opted for security over convenience with spicypass.

I absolutely understand why this might turn some people off, maybe even most people. But I know that there are people (like me) who want something that isn't connected to the cloud, and isn't going to inherit all of the security flaws of their browser.


Not having a browser extension is also a security risk, because copy/pasting is error prone, and does not protect you from phishing - which is more of a risk than someone taking control your computer and bruteforcing your vault IMO (of course your threat model might be different from most users, for example if you store passwords not for the web)

(Disclosure: I work for a commercial password manager that do offer browser extensions)


I agree that there are risks either way, though like you said, the threat model is a bit different. SpicyPass isn't explicitly for web passwords. It's just a generalized key value store with added security. I use it to store my bitcoin keys for example, and that's probably not something you want to expose to the cloud and/or your browser.

With that said I don't rule anything out for the future.


There is also rofi-pass, which inserts data from pass into any X window.


Not to mention the amazing iOS app which syncs with Github and lets you add OTP codes by scanning QR codes.


I'm using keepassxc and I'm loving it.

Specifically, I love the fact that I can configure otp and depend less on my phone.


I did not know this is something KeepassXC could do! So this is basically making it do the same thing as Google Authenticator?


On a lighter note, this would have made a great name for a kitchen spices subscription. 20g garam masala delivered to your doorstep every week. Lol.


Probably still can, different markets and all :D


What advantage does this have over KeePass? I'm particularly anxious about early projects with less contributors, the likelihood of having a regrettable bugs is higher.


I am surprised that keepassxc does not get suggested more often. Uses the probably most common file format, has support for uibikeys, ssh agent and secret service (can act as gnome-keyring/KDE wallet substitute).

Those features make it the best password manager for me


Only complaint I have about it is it has no quick unlock feature unless you have a Mac with TouchID. It is really inconvenient to type the master password every time rather than a PIN. I realize there is a security trade off here, but I think it's well worth it.


FWIW this is a limitation of KeepassXC itself and not the database format.


Interesting. Just 2 questions, is there a way to sync it run on Android. Got nextcloud instance. Nice if it can do that. Since there are password I would need on the move.


I just store my database on Dropbox and use keepassdb on android.


Can you link to the app


Very unrelated—SpicyPass looks quite attractive—one feature that is missing from some of these managers—possibly because the host OS does not allow it—is typing of the passwords as if from a keyboard rather than using the clipboard, which is potentially readable by malware.


This seems less "minimalist" than Unix pass[0] - but maybe author has specific issues that are addressed?

I'm curious to see a comparison.

[0] https://passwordstore.org


Why does the string random_password(unsigned int size) function have "no duplicate characters" as a requirement? Seems to me that this would only reduce the entropy; what does it bring?

I need access to passwords from my phone so I'll stick with KeePassXC, but nice project! This makes me want to play around with lib-sodium, the API looks nice.


That's a great question, and I wish I was good enough at math to give you a sophisticated answer. But my thinking is that the entropy you might gain by allowing duplicates is negated by the huge set of weak/guessable passwords you allow. For example, the password "aaaaA1!" is probably more likely to be guessed or used by others than "agkxA1!". (I just checked on haveibeenpwned.com, and the former has been seen 12 times, while the latter has been seen 0 times. Not very scientific I know)

Though this isn't set in stone if someone wants to formally correct me.

And libsodium is indeed a pleasure to work with.


No, your intuition is bad.

If you use passwords of a small enough size that this would really be a problem (like four digit PINs or your "aaaaA1!" example) then your password isn't delivering adequate security against brute force and so you've definitely lost.

If you use passwords that are big enough to make brute force impractical anyway then this "feature" will never make any real difference and is just a waste of time at best, and since it adds complexity it's another place to hide bugs.

Having a PwnedPasswords check (not this silly "repeating characters" test) makes sense if you allow users to enter passwords. Whereas if you generate passwords of decent length and at random then they're random so there's no purpose in checking them.


>If you use passwords of a small enough size that this would really be a problem (like four digit PINs or your "aaaaA1!" example) then your password isn't delivering adequate security against brute force and so you've definitely lost.

I can't force users to use reasonably long passwords. In the case that they don't (and some certainly won't), it's preferable that their password is still as good as it can be given the length.

When it comes to web logins, brute force is probably the least effective method of attack. Social engineering, dictionary attacks, rainbow tables, password lists, guessing and so on are all much bigger concerns. It's my thinking that most of those threats are better addressed by sacrificing a negligible amount of entropy and removing a large subset of weak passwords.

Moreover, this reduction in entropy only applies when the attacker knows the algorithm used to derive the password, making it even less relevant for the average case. (That's not an appeal to security through obscurity; just an observation).

>Whereas if you generate passwords of decent length and at random then they're random so there's no purpose in checking them.

Random != secure. "aaaaaaaaaa" could be the result of a random function. The goal is to create passwords that are both difficult to brute force, and difficult to guess, while making no assumptions about the length.

Entropy has diminishing returns; if it takes 10 million years to crack a password, another 5 million doesn't increase security. However I would re-consider if someone could provide a concrete example of how the small loss in entropy could lead to a practical vulnerability.


> I can't force users to use reasonably long passwords.

But you can, apparently, force them to use passwords that meet whatever other weird criteria you choose. So this is a statement of policy. You've decided by policy to allow "agkxA1"† but not "V+0mCx&3LmgyC" (because the latter has a "duplicate letter C") and that's crazy.

> Social engineering, dictionary attacks, rainbow tables, password lists, guessing and so on are all much bigger concerns.

Since you enumerated them let's run down the list and actually examine what they are and how your "no duplicate characters" rule addresses them or doesn't.

Social engineering: bad guys persuade the user to give them the secret. Only brick wall UX works well here, so that's WebAuthn / U2F and similar. Your rule makes no difference.

Dictionary attacks: bad guys have a list of passwords to try. Some of those passwords have "duplicate characters" and so are eliminated by your rule. But others do not.

Rainbow tables: it's weird to call out Rainbow tables specifically and suggests you're cargo culting. The Rainbow table is just a very specific optimisation of a time-space tradeoff attack on password hashing (the main thing salt mitigates). Your rule actually makes things marginally easier for attackers in this scenario, again if passwords are short you lose, if they're long enough you don't gain anything.

Password lists: You already listed a dictionary attack. A password list is just a dictionary.

Guessing: Guessing is a brute force attack, the same thing you said was "least effective".

Needlessly making your software more complicated is the way it can lead to practical vulnerability, nobody is going to be able to explain this to your satisfaction and so all I can do is recommend that people avoid it.

Your "add characters from different classes into a pool, then shuffle it to make the password" approach is just slightly worse than actual random long passwords, but the added complexity to make it slightly worse is the problem.

† Actually this isn't allowed, the algorithm actually used insists upon putting at least one character of each class into the password before any others are added. But this far too short password does obey the "No duplicate characters" requirement.


>But you can, apparently, force them to use passwords that meet whatever other weird criteria you choose.

No one is forced to use the random password generator, and even if I set a minimum limit they could just chop it up to their liking. All I can do is guide users towards a criteria I think provides the most effective security.

>You've decided by policy to allow "agkxA1"† but not "V+0mCx&3LmgyC" (because the latter has a "duplicate letter C") and that's crazy.

I didn't suggest that all passwords that contain duplicate characters are weak. But if we were to simply use a random string of characters without discrimination, then we would have to allow passwords like "aaaaaaa" and "abcdefg123", which is unacceptable in my opinion. If you agree that there should be some sort of policy that guarantees certain properties, then I'm confused by your position, as that would contradict the main point of your criticism centered around code complexity.

The list of attack vectors was not to suggest that removing duplicate characters was a solution to all of them (I disagree with your assessment but we'll leave that alone for now). I was merely highlighting the fact that brute force attacks are one of the least important factors in securing web-based accounts.

If you are able to point out a concrete example of a vulnerability introduced by disallowing duplicate characters (that includes bugs in the code caused by the added complexity) I'm all ears/eyes. If not, I'm going to call an end to this debate for now. I do appreciate your input though and it's definitely given me something to think about.


Rainbow tables are a brute force technique.


Increasing entropy mitigates brute force attacks but not necessarily rainbow table attacks, hence the distinction. If every user had a unique password, rainbow tables would be rendered useless. This is why it's important to reduce the likelihood that a randomly generated password is comprised of a common pattern.


> Increasing entropy mitigates brute force attacks but not necessarily rainbow table attacks

No. All time-space trade-offs need to expend the entire attack effort once (and usually it's considerably more). Their advantages are that you can do this in advance (timeliness) and that you can re-use the product (which is what salt mitigates).

You can very simply increase entropy until the attack effort cannot be deployed at all, regardless of when. For example the 'pass' tool lots of people have mentioned in this thread defaults to 24 character random passwords, far more than 128 bits of entropy. As a result it simply isn't possible to deploy the attack effort even once, you can neither do a Brute Force attack nor build the Rainbow Table to find these passwords.

The way the Rainbow Table got famous is its application to the LM Hash, an old (but already terrible when it shipped) Microsoft password hash. LM Hash uses two 56-bit values to represent a password, naively this looks like 112-bits of entropy but you can attack each independently so it isn't.

Rainbow Tables took attacking this from something that could in theory work on any password but you'd get bored waiting for your "crack" program to finish if it wasn't trivial to a few minutes on a fast laptop for every possible password. Because it's a time-space tradeoff, so somebody put all the effort in once and then you can re-use it.


>No

Yes. For example, if a rainbow table contains a match for "a" repeating 500 times, then that password's entropy is a non-factor. Therefore entropy in of itself does not necessarily mitigate rainbow table attacks. Entropy does necessarily mitigate naive brute force attacks. We can use this same logic for more reasonably sized passwords that are comprised of known patterns but would otherwise be difficult to brute force.

Obviously you could use extremely long passwords and be fairly certain that you won't end up with something that would be found in a rainbow table or dictionary. You could also just use passwords that are long enough that they can't be brute forced and remove common patterns from the set of possible passwords. Both of these solutions are valid, and both have theoretical weaknesses that are irrelevant in practice.

You've spent a significant amount of time trying to convince me that my random password generator is flawed in some way. Why don't you just demonstrate how instead of continuously trying to argue tangentially related theoretical points? I would hope that such an effort would be motivated by a practical concern and not merely the desire to bikeshed out of boredom.


> Yes. For example, if a rainbow table contains a match for "a" repeating 500 times, then that password's entropy is a non-factor.

This muddle reflects your overall intuitive mistake.

When you roll two fair dice the "snake eyes" (two ones) outcome has only one chance in thirty six. But if you've just rolled snake eyes, the probabily it was snake eyes isn't one in thirty six it's 1.0 exactly. We do not say, as a result, that you were "certain" to roll snake eyes, you weren't, but it has happened anyway and so now it won't change. Entropy is not a measure of what did happen it's a measure of the unknown. Password generation entropy doesn't result in passwords which change constantly, it just means you can't know what the password might be within that parameter.

Constructing a rainbow table where the choice function just cycles through some number of arbitrary guesses - and then saying if those guesses are right the rainbow worked, therefore rainbow tables were a success skips the step where it's overwhelmingly likely that none match, it fails and was a total waste of resources. Nobody actually does this because it's pointless.

When we tell humans to pick randomly they behave like you, and your algorithm - trying so hard to pick a "non-obvious" answer and thus inadvertently they're predictable. Your algorithm is, as a result, needlessly predictable compared to sane "random password" code and yet also significantly more complicated.

Look at the number line. See the first number you think isn't interesting? Well the fact it's the first non-interesting number is pretty interesting, isn't it? So now maybe that's not the first one that isn't interesting after all. Next one, same argument. Likewise your removal of "common patterns" just means the set of possible passwords is made smaller, and leaves remaining passwords with the "common pattern" of not having those "common patterns". It's futile, stop it.

If you want to put your intuition about what "random" ought to be like, put it into a playlist shuffle codebase or something, where humans will appreciate how properly "random" it feels to always get a nice mix of things. In security software this is a mistake, no matter how sure you are that it's common sense to do it your way.


You missed my point again, and your tangent on randomness is unnecessary; I have no misconceptions of how randomness works, and it is precisely that understanding that has lead me to these decisions - a pure random password generator produces every word in the English language. That's not a good thing!

The point remains that if your password generator produces passwords such as "aaaaaaa" then it is a bad algorithm, end of discussion. It doesn't matter if the passwords it produces are completely random. That's not the goal and is completely irrelevant. The goal is to produce unique, unpredictable passwords that utilize randomness. We're not producing fixed-length keys. In the average case for web-based logins, uniqueness is far more important than entropy.

So, I'll say it once more. If you can demonstrate how passwords generated by the algorithm I wrote are predictable or otherwise insecure in a real-world setting as you claim, then do it. If you cannot, then any further responses are in vain.


> The point remains that if your password generator produces passwords such as "aaaaaaa" then it is a bad algorithm, end of discussion.

The correct algorithm does this, and you've managed to convince yourself that this is bad and it's time to invoke lots more complicated code. This is the end of the discussion in the sense that you've departed from reality so severely that you may be unable to recover.

Here's how zxc24's 'pass' does it:

  read -r -n $length pass < <(LC_ALL=C tr -dc "$characters" < /dev/urandom)
For those who can't read shell that's saying to run the random data from the OS kernel through a pipeline which removes everything except $characters and then consume $length bytes of the result as the new password.

This absolutely can give you "aaaaaaa" as a password if you've unaccountably chosen to use such short passwords - but no more easily than it might choose "fuckwit" or "X3_$mwK" or any other sequence of permitted symbols.

But enough about how to do this correctly, you're very focused on your bizarre way to pick "unique, unpredictable passwords that utilize randomness", so let's look at that again:

The tight inner loop picks characters randomly using code from Sodium. Unfortunately it discards characters from the candidate list once it has picked them, and then it has a further rule which may ignore this (already discarded) character and go round again.

For the short case (size = 4) this means it can produce only about 5.2 million different passwords, whereas a better (simpler) solution gives 78 million different passwords, you've made it more than a decimal order of magnitude worse.


> For example, if a rainbow table contains a match for "a" repeating 500 times, then that password's entropy is a non-factor.

But it doesn't. You seem to be taking it as gospel that this sort of password is going to show up in the early in the list of passwords people are trying. But I don't buy it. There is no need to reject a long password that contains some repeated characters.


Why doesn't it? If that password became public knowledge, then it certainly does exist in lists and tables. Its high entropy is only protective as long as it remains secret. This is why it's important to avoid common patterns, even if those patterns are a result of a random number generator.


Every password that becomes public knowledge ends up in credential stuffing lists, whether it matches your password policy or not.

"Common patterns" and "passwords that contain repeated characters" are not even remotely the same thing.


>Every password that becomes public knowledge ends up in credential stuffing lists, whether it matches your password policy or not.

That's right. And we don't want to produce passwords that are likely to be on those lists. A simple policy greatly reduces the chances of that happening. After a certain number of zeros, entropy is no longer a concern.

>"Common patterns" and "passwords that contain repeated characters" are not even remotely the same thing.

I've already addressed this.


Small correction: the password that has been seen 12 times is "aaaaA1" (no ! char). But "agkxA1" has still been seen 0 times.


What about Password Gorilla? I've been using it for years now (I think a decade) and has been one of my favourite tools. It's multiplatform and opensource: https://gorilla.dp100.com/downloads/


I just use Firefox's built in password manager. With the sync feature it syncs to my phone as well. I don't know if they have a separate app though so I can punch it into external apps.

edit: they do!


Minimalist is fine but it's not really fulfilling my main requirement of being able to use it from my laptop and access the passwords on my cellphone.

I still think pass is the best password manager for Unix-like systems.

It lets me use multiple keys using GPG. It's simple and minimalistic. It allows for integration with 3rd party web GUIs you can expose on your home LAN and access with a VPN from your cellphone.


I switched from 1Password to pass with my gpg private key sitting on a Yubikey (with backup keys). I don’t think anything else comes close to this setup in terms of security.


1Password with WebAuthn 2FA is probably better (harder for generic malware to steal), and leagues more convenient.


Not true. The solution I described would survive a local machine compromise (the GPG key is maintained on the Yubikey), the 1Password based solution won’t. How could generic malware steal secrets that are not even on the device? Furthermore, pass encrypts each password separately (I.e GPG generates a new symmetric key for each password). In case of 1password, if the master password is compromised, it’s game over.

Also, I was a long time 1password user, switched to my current setup after 1Password moved to the rent-seeking subscription business model with 1Password 7.

In terms of convenience, it’s even more convenient than using 1Password. The only minor hitch is having to key in the PIN for the Yubikey if I haven’t used it for a bit.


Your solution doesn't survive a real-time attack on a local machine compromise (wait for you to enter the PIN and then opportunistically use the private key). It only makes doing so harder by automatically re-locking the key.

That said, your system is well past the point of "password storage is no longer the most economical surface to attack".


Occasionally entering the PIN + Physical touch on the Yubikey for every decryption call. Since the private key never leaves the Yubikey, every decryption needs a physical touch.


Love the concept, but definitely needs browser extensions to be practical. Also consider using NaCl relay so you can add password sync between machines as second must have.


Yet another password manager. But then...why not? Looks simple enough, works mostly well and is good security-wise. I might try it but the only feature that puts me off is password syncing. Minimalist is fine and all but...come on; most people nowadays use multiple devices and password syncing is very important. In any case, nice project.


I’ve been looking for something like this for awhile but not enough of a security expert to know if this is something I can trust


Not an expert, but I think I'm decently knowledgeable. The design as outlined in the security section of the readme looks just fine to me, assuming the key is securely derived from the password. I would hope for more emphasis on the importance of choosing a secure master password. Ideally you should be able to treat its hash (which is prepended to the database) as public knowledge, even if in practice you'll keep the database as private as you can.

That said, barring an audit by a respectable security firm, I think a lot of eyeballs on an open source project who can confirm that the implementation is correct is the most important thing. For that reason, I don't plan to switch away from Keypass in the near future.


Many eyes, and/or audit is essential, for many I would think.


Are you familiar with Bitwarden and KeePassXC? If so, I"m curious why neither of those meet your use case.


How do you log into stuff on your phone, or when you don't have your password db and app installed?


It looks like you're storing an unsalted hash of the database's password in the plaintext header of the database itself. Is that correct? If so, this is a really really bad idea


According to the libsodium docs:

>The string produced by crypto_pwhash_str() already includes an algorithm identifier, as well as all the parameters (including the automatically generated salt) that have been used to hash the password.

https://libsodium.gitbook.io/doc/password_hashing/default_ph...


Aha, looks like it's using a salt and iterated hashing under the hood. Thanks for the link.


"A light-weight password manager with a focus on simplicity and security"

Simplicity? Written in C++?


Although that sentence refers to the interface and feature-set, not the language on which it's built, I do tend to avoid the more complex features of C++. Is there anything in particular that you find confusing or complex about the code itself?


Complexity? Written in C++?


A new wheel.


Sometimes you don't want minimalist- you want to quickly find and visualise things.

What I'd love is a Tui "curses" interface to keepassdb with quick vim like navigation. GUI is both too heavy and not too keyboard friendly.

In fact, unless there's a specific (and specified) reason, all password managers should be based on the somewhat de facto standard of keepassdb


If I have a keyboard, then for a relatively small dataset, such as my saved passwords, I prefer a text file over any database. Lookup workflow: decrypt file (with, say, gpg), find what I want (with, say, grep), delete decrypted file. (Not safe if you don't use disk encryption!) Update workflow: decrypt file, edit file, encrypt file, commit encrypted file to local git repo, git push to backup storage.


That sounds like a lot of work... I am entering passwords on websites 10-30 times a day... that would add up.


The 'Pass' password manager is just bash wrapper for this. It comes with 'passmenu' which is a very simple script that pipes the list of passwords to dmenu & handles the decryption using gpg. I just have a keybinding to launch it so I can copy & insert a password into any application in seconds.

[1] https://www.passwordstore.org/


You're describing the behavior of https://www.passwordstore.org/ almost exactly! Give it a try.


There's a vim extension that automatically decrypts files with gpg extension on open and encrypts them on save. If you use gpg agent, this is pretty painless.

Just be careful about leaking to .viminfo file. :)


Perhaps of you pipe it into vim (i.e. | vim - ), it'd be somewhat safer and less manual work.


It's not a TUI but I have used kpcli (http://kpcli.sourceforge.net/) as a method to access keepass databases over SSH and text interfaces. I've thought about building a more TUI-based option but have yet to get around to it.


Is this still being maintained? It's a great idea but the Keepass database format has been evolving (we're on version 4.x now) and I don't want to use unmaintained software to manage my passwords.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: