mattmakai / fullstackpython.com

Full Stack Python source with Pelican, Bootstrap and Markdown.
https://www.fullstackpython.com/
MIT License
2.88k stars 627 forks source link

Secure the password encryption of ssh key #182

Closed peterwwillis closed 6 years ago

peterwwillis commented 6 years ago

I found your guide on generating SSH keys (https://www.fullstackpython.com/blog/ssh-keys-ubuntu-linux.html) after looking at the top 20 Google results for 'how do I generate an ssh key', and it looks like your default suggestions for using ssh-keygen are insecure.

I highly recommend you add this to your guide's ssh-keygen arguments:

ssh-keygen -o

(Note: The -o option was added in 2014; if this command fails for you, simply remove the -o option)

This will ensure the key is password-encrypted properly.

From the ssh-keygen manual:

-o      Causes ssh-keygen to save private keys using the new OpenSSH for‐
        mat rather than the more compatible PEM format.  The new format
        has increased resistance to brute-force password cracking but is
        not supported by versions of OpenSSH prior to 6.5.  Ed25519 keys
        always use the new private key format.

The problem is described in this blog post: https://latacora.singles/2018/08/03/the-default-openssh.html More info can be found on this Hacker News thread: https://news.ycombinator.com/item?id=17682999

By making these changes to your guide, you will be making the internet safer. If the keys used to access servers are secure by default, then both the servers, and all the users who visit websites on those servers, will be more secure.


Here is some background on the problem:

Additional recommendations:

Thank you very much for your consideration and help in this matter. Please feel free to contact me if you have any questions.

mattmakai commented 6 years ago

wow, @peterwwillis this is a spectacular pull request. thank you so much. I didn't realize standard Ubuntu was so insecure. I typically use the macOS version of ssh-keygen, which from my initial digging doesn't look like it suffers from the same insecure-by-default issue. Is that your understanding as well?

I'm going to merge this and likely add a bit more of my own context to elaborate on why -o flag is so critical. Thank you again for your work here this is incredibly helpful!

peterwwillis commented 6 years ago

Hi Matt,

Thanks very much for accepting the change!

I'm not aware of the MacOS version used, but this option was introduced in version 6.5 of OpenSSH (https://www.openssh.com/txt/release-6.5). If you're using version 6.5 or later, the option should be available (I use ssh -V to check my OpenSSH version). If you're using a different key-generating tool than OpenSSH's ssh-keygen, you'd have to investigate how it is password-encrypting its keys.