Hacker News new | past | comments | ask | show | jobs | submit login

Maybe because people frequently reference scrypt as a password hashing function, but when you download the source and look in the top level, what you get is an example of an encryption utility and no documentation other than a man page for said encryption utility?

Taking a look at the distribution, I can imagine being confused, as there's nothing to indicate that crypto_scrypt is what you want to be using.

Remember, not everyone who uses your library is a security expert, or will spend the time to read all of the code; they may be someone who has heard "you should use scrypt, it's the strongest readily available password hashing function", so they downloaded it and built it, but may not know where to go from there, so they take the most visible code, main.c, and use that as their example starting point.

Here's an example of something you could write in a top-level README to make this a little more clear. Feel free to use if you feel like, or reword as necessary. The main point is just to point people who are looking for a password hashing function to the right place, as that is what a lot of people looking at this may be looking for, and may not find immediately from the example given.

  This project provides the scrypt utility for performing password based symmetric 
  encryption, as well as libscrypt for using the functionality in your own software. 
  See scrypt.1 for details on use of the scrypt encryption utility.

  libscrypt implements the scrypt PBKDF, which can be used to derive a symmetric 
  encryption key for a password, or can be used as a password hashing function for 
  storing hashed passwords in a form that will make them more difficult to guess via 
  brute force.

  To encrypt and decrypt files or buffers using a symmetric cipher with a key derived
  using the scrypt PBKDF, use the functions declared and documented in
  lib/scryptenc/scryptenc.h.

  To implement a password hash, or use the scrypt PBKDF directly to derive a key for
  some other purpose such as use with a different symmetric cipher, use crypto_scrypt
  defined in lib/crypto/crypto_scrypt.h



Maybe because people frequently reference scrypt as a password hashing function, but when you download the source and look in the top level, what you get is an example of an encryption utility and no documentation other than a man page for said encryption utility?

You mean the code which is labeled on the website as "A simple password-based encryption utility is available as a demonstration of the scrypt key derivation function"?

Remember, not everyone who uses your library is a security expert, or will spend the time to read all of the code

I know people won't read all the code... but you'd think that people would at least read the comment directly above the function prototype

    * Encrypt inbuflen bytes from inbuf, writing the resulting inbuflen + 128
    * bytes to outbuf.
and realize that this doesn't even sound remotely like what they were looking for.

sigh

I've added a warning to the top of scryptenc.h which will hopefully help to point people in the right direction.


  You mean the code which is labeled on the website as "A 
  simple password-based encryption utility is available as 
  a demonstration of the scrypt key derivation function"?
Think of this from the perspective of someone who's looking for a password hashing function. Remember that a lot of people are fairly unclear on the idea of password hashing vs. encryption; lots of people say things like "the password database was encrypted" when they mean "the password database was hashed." For someone who is a bit fuzzy on the idea, but has been pointed to scrypt as the solution for secure password storage, they may just think "oh, it encrypts the passwords, OK" and go ahead and use the encryption functions.

The additional note is definitely helpful; I still think it would be good to put something at the top level which points people in the right direction.

As is, if someone wants to figure out what to do for password hashing, they have no documentation at the top level. The most promising thing to try, main.c, just uses the encryption functions. If they then jump to the definitions, your note is over 50 lines above the declaration of scryptenc_file, well outside of what will normally show up in their editor window. Yeah, they will probably have to scroll up a little to find the definitions of parameters and return values, but it's possible to do that and miss the note.

I know, people should read the whole documentation, but it's probably easier to just point them in the right direction from the start than to convince people to read the full documentation.




Applications are open for YC Summer 2021

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

Search: