What are potential security issues with the following password creation scheme:

  1. Choose a cryptographically secure hash function, call it hash()
  2. Choose a static master password, call it master
  3. To generate a password for a given site site with a username user, take hash(master|user|site) where | is concatenation and use the result as the password.

I can think of some issues with this but they are mostly implementation issues that could be solved by standardization and don't really hurt the security.

Some examples of the above would be: "One site needs multiple passwords" or "I need to change my password for a given site but I don't want to change my master password because that would require changing my password for all sites". Both of these could be solved relatively easily with simple changes to the schema (e.g. add a version number that get's hashed along with the other stuff) and so I'm not particularly concerned with these.

What are potential security issues with using this password generation scheme?

This is simple enough that I'm sure there is another question about it somewhere, but I couldn't find it.

In response to comments here is how this question differs from others on the site.

First hash of master and suffix has a clear problem that does not exist in this case. That question asks about hash(master|site). Anyone using the same scheme and same master password will have the same result password. By adding the user portion to the hash, we have essentially added a salt.

This question has essentially the same issue as above. In both of these cases, the generation scheme might work fine for personal use (when no one really knows your generation scheme), but it wouldn't scale securely.

This third question isn't really similar, but it is marked as a duplicate of this question (which is ironically already closed as too opinion-based), but actually is relevant to my particular question. This question in a sense is a non-opinion-based version of the last question I linked.