Why do so many companies and people say that your password has to be so long and complicated, just to have restrictions?

I am in the process of changing some passwords (I have peen pwnd and it’s the password I use for use-less-er sites) and suddenly they say “password may contain a maximum of 15 characters“… I mean, 15 is long but it’s nothing for a password manager.

And then there’s the problem with special characters like äàáâæãåā ñ ī o ė ß ÿ ç just to name a few, or some even won’t let you type a [space] in them. Why is that? Is it bad programming? Or just a symptom of copy-pasta?

  • foo
    link
    fedilink
    7310 months ago

    Is it bad programming?

    With very few exceptions, yes. There should be no restrictions on characters used/length of password (within reason) if you’re storing passwords correctly.

    • @[email protected]
      link
      fedilink
      4210 months ago

      And if a site does have such restrictions, it could be an indication that they store passwords in plaintext, rather than hashed

    • @[email protected]
      link
      fedilink
      20
      edit-2
      10 months ago

      A very high max of something like 500 characters just to make sure you don’t get DOSed by folks hitting your endpoint with huge packets of data is about the most I would expect in terms of length restrictions. I’m not a security expert or anything though.

      • dog
        link
        fedilink
        11
        edit-2
        10 months ago

        That’s a misunderstanding of DDoS. 0 byte packets are actually worse than large packets.

        Which is why most DDoS (at least was) is extremely slow 0 byte requests until the server throttles/crashes under the number of requests.

        E: Consider this. Are you more likely to throttle a bandwidth of terabytes/petabytes with couple million 1gb requests; or break it entirely by sending >4294967295 0 byte requests that effectively never stop being requested from the server?

        • @[email protected]
          link
          fedilink
          810 months ago

          It depends on what the DoS is targeting. If hashing is being done with an expensive hash function you can absolutely cause a lot of resource usage (CPU or memory depending on the hash) by sending long passwords. That being said this likely isn’t a huge concern because only the first round needs to process the whole submitted data, the later rounds only work on the previous round’s output.

          Simple empty requests or connection opening attempts are likely to be stopped by the edge services such as a CDN and fleet of caches which are often over-provisioned. A targeted DoS attack may find more success by crafting requests that make it through this layer and hit something that isn’t so overprovisioned.

          So yes, many DoS attacks are request or bandwidth floods but this is because they are generic attacks that work on many targets. But that doesn’t mean that all DoS attacks work this way. The best attacks target specific weaknesses in the the target rather than pure brute-force floods.

          • dog
            link
            fedilink
            010 months ago

            Well to be fair, if they’re hashing serverside, they were doomed to begin with.

            But yeah, there’s a lot of ways to DDoS, and so many tools that just make it a 1 button click.

            • @[email protected]
              link
              fedilink
              210 months ago

              Who isn’t hashing server-side? That just turns the hash into the password which negates a lot of the benefits. (You can do split hashing but that doesn’t prevent the need to hash server-side.)

              • dog
                link
                fedilink
                -1
                edit-2
                10 months ago

                Hashing on client side is both more private, and secure. All the user ever submits is a combined hash (auth/pubkey) of their username + password.

                If the server has that hash? Check the DB if it requires 2FA, and if the user sent a challenge response. If not, fail the login.

                Registering is pretty much the same. User submits hash, server checks DB against it, fail if exists.

                Edit: If data is also encrypted properly in the DB, it doesn’t even matter if the entire DB is completely public, leaked, or secured on their own servers.

                • @[email protected]
                  link
                  fedilink
                  210 months ago

                  This means that the submitted hash is effectively a password. You get a minor benefit in that it obscures the original password in case it contains sensitive info or is reused. But the DB is now storing the hash password in plain text. This means that if the DB leaks anyone can just log in by sending the hash.

                  If you want to do something like this you would need some sort of challenge to prevent replay attacks.

                  This scheme would also benefit from some salt. Although the included username does act as a form of weak salt.

                • @[email protected]
                  link
                  fedilink
                  110 months ago

                  Per your edit, the DB being “encrypted properly” just means “hashing server side”. There’s little benefit (though not necessarily zero) to encrypting the entire database, since the key has to live in plaintext somewhere on the same system. It’s also making the slowest part of most systems even slower.

        • @[email protected]
          link
          fedilink
          4
          edit-2
          10 months ago

          Very true and a good explanation of DDoS but I was talking about DoS generally, not specifically DDoS. In my (admittedly pretty limited) experience, a single mega request which is not blocked or rejected by your server can cause it to choke. If you don’t have sufficient redundancy or if you get several of these requests coming through it can take down some of your backend services.

          It’s a good point though, there are lots of different attack vectors each fun in their own way that you need to watch out for.

      • foo
        link
        fedilink
        5
        edit-2
        10 months ago

        Right, that’s why I put the “within reason” in my comment. You still need to guard against malicious inputs so ultimately there is some max length limit, but it should be way beyond what a reasonable password length would be.

      • @[email protected]
        link
        fedilink
        410 months ago

        The best way to handle passwords IMO, is to have the browser compute a quick hash of the password, and then the server compute the hash of that. That way the “password” that is being sent to the server is always the same length.

    • @[email protected]
      link
      fedilink
      210 months ago

      Underappreciated fact: Bcrypt has a maximum of 72 bytes. It’ll truncate passwords longer than that. Remember that UTF8 encoding of special characters can easily take more than one byte.

      That said, this is rarely a problem in practice, except for some very long passphrases.

      • Spzi
        link
        fedilink
        English
        110 months ago

        Bcrypt has a maximum of 72 bytes. It’ll truncate passwords longer than that. Remember that UTF8 encoding of special characters can easily take more than one byte.

        Interesting: https://en.wikipedia.org/wiki/Bcrypt#Maximum_password_length

        In the worst case a password is limited to 18 characters, when every character requires 4 bytes of UTF-8 encoding. For example:
        
        𐑜𐑝𐑟𐑥𐑷𐑻𐑽𐑾𐑿𐑿𐑰𐑩𐑛𐑙𐑘𐑙𐑒𐑔 (18 characters, 72 bytes)
        

        Makes me question if bcrypt deserves to be widely used. Is there really no superior alternative?

        • janAkali
          link
          fedilink
          English
          2
          edit-2
          10 months ago

          Not only that, bcrypt could be run by GPUs and FPGA, that makes it more prone to bruteforcing attacks.

          There are 2 modern alternatives: scrypt and argon2. They both require a substantial amount of memory, so gpu and hardware computation is no longer feasible.

  • punkisundead [they/them]
    link
    fedilink
    4010 months ago

    And then there are times you set a password and everything just seems to work fine, but later the new password never works. You reset the password, try again and really focus because you think you made some mistake with the password manager. Again the password you set does not work.

    You begin to google the problem and see that there is a max password lenght of 12. But you always set passwords of the lenght 20-30 and the interface never complained. But because you are desperate, you try just the first 12 characters of the last password you set. And it works!

    I hate HP printers.

    • @[email protected]
      link
      fedilink
      1510 months ago

      You, you can add that list. Motherfuckers will let you type a password as long as you wish, only to internally truncate it. Was driving me crazy until I tried to log in on the mobile app, where it does prevent you to type more characters…

    • dog
      link
      fedilink
      310 months ago

      Old Steam calling.

      Website and Client used different password rules, what worked for the other didn’t in the other.

    • @[email protected]
      link
      fedilink
      110 months ago

      How “a$$word” saved PayPal

      TL;DR: PayPal had reencrypted their database with a new encryption scheme, but it would accidentally cutout passwords larger than 8 characters. However one person in set their passphrase to “a$$word”, saving the day.

  • Beej Jorgensen
    link
    fedilink
    2210 months ago

    Every time I find a site like this, I assume the programming is bad and the security is poor. (They don’t know how to sanitize input? They don’t know how to hash passwords?) It’s a good reason to use random passwords on every site for when that one is compromised.

    • @hairyballs
      link
      210 months ago

      What is “funny” is that I had the maximum password size thing on several bank websites (and a low one, at that). Fortunately, with 2FA, it doesn’t really matter I guess.

  • BoofStroke
    link
    fedilink
    20
    edit-2
    10 months ago

    The new NIST guidance is to have something long. Special characters don’t matter. So a good passphrase that you can remember > short line noise. NIST also recommends against constant password rotation, but to instead audit for dictionary attacks. See also: https://www.netsec.news/summary-of-the-nist-password-recommendations-for-2021/

    Yes, it is bad programming. Of course, on the backend you must never store passwords in the clear. You should never grow your own hashing algorithm.

  • @[email protected]
    link
    fedilink
    1510 months ago

    Yes its bad programing. These restrictions suggest that the company is either doing improper storage and processing, or does not understand how to deal with passwords.

    The proper password storage is a hash. This is a cryptographic function that is easy to do and imbossible to undo. The hash function operates on the underlying binary representation of your password, and doesn’t card what letters or symbols are in it. A program should take your password, hash it, and compare the result to the hash they have in their detebase.

    The current recomended hash algorythm is called ‘bcrypt’. Depending on the implementation, the input is between 50 and 70 bytes (the spec was a little unclear so people defined the inputs diferently, but the algorithe is the same). This means a password should be able to take at least 50 normal keyboard characters, including letters, symbols, and spaces. Anything less than that indicates a poor practice on behalf of the website.

    (a lot of this is simplified. There is some variation and nuance that I don’t think affects the main idea)

    • @[email protected]
      link
      fedilink
      410 months ago

      Well we don’t know how that website is actually storing the password. They may well be using a password hash. Also, you should use scrypt or argon over bcrypt IMO. And there should be no upper restrictions on password length. argon2 can handle hashing megabytes of data in about the same time as a short password, so there’s never a need to limit the password length.

    • Azzy
      link
      fedilink
      210 months ago

      What about Argon2id? What are the advantages of bcrypt?

      • dog
        link
        fedilink
        110 months ago

        Argon2 is the best (secure) crypto currently.

        That said, adoption is slow, Bitwarden only recently implemented it for example.

        That said, due to Argon2 being security-oriented, the recommended settings for it are pretty heavy.

      • @[email protected]
        link
        fedilink
        110 months ago

        I don’t really know the strong points of either, I’m not a cryptographer. Bcrypt gets recommended because its relatively fast, its decent, and most importantly its already in most environments

        • @[email protected]
          link
          fedilink
          210 months ago

          Bcrypt is slow on purpose; all these methods are. More importantly, though, bcrypt is very well studied. Scrypt and argon2 had to catch up, but should be fine at this point.

  • @[email protected]
    link
    fedilink
    English
    15
    edit-2
    10 months ago

    I hope you’re using a password manager, I recommend bit warden if not.

    Password requirements are all attempts at getting people to introduce entropy into their passwords. The length the characters the not allowed characters the allowed characters. All about adding entropy

    Restrictions on allowed characters tend to be based on legacy systems and the input state allow. So if you have an input system that only has Latin characters, it would be foolish to allow non-Latin characters into a password, because then people could get stuck unable to login. So typically they reduce to the safest set of characters that all of their systems use. And for some of the older systems that parse passwords, some of the Meta characters could be problematic.

    Password length is also down to legacy systems. If you have an old school Solaris system somewhere in your back end, that truncates password fields at 15 characters. Then 15 characters is the max.

      • janAkali
        link
        fedilink
        English
        1
        edit-2
        10 months ago

        While most of the time, I remember my password, I know I could just snap and forget it right there at any point. Happened to me not once. And I’m in my 20s. Sometimes when I forget a password, I just start typing and muscle memory kicks in, sometimes it doesn’t. I guess our brains are not optimized to store long random strings of characters. You could use a long sentence as your master password or do as I do:

        Come up with a way to make up a long seemingly random password from a couple words. Then if/when you forget a password, just remember those words and reconstruct password from them.

        • Don’t use common dictionary words or anything from popular media, as it could be guessed by attackers.
        • You can write down algorithm on a piece of paper and keep it somewhere safe.
        • Words should be related but not directly:
          • two asteroid names - bad
          • asteroid name and it’s greek translation - bad
          • real city name and city name from a book - good
          • two words that both start with S and end with T - good
        • If you forget both words, you should be able to remember/look up at least one of them if you still remember how you came up with the word.
    • @[email protected]
      link
      fedilink
      410 months ago

      I agree. Bitwarden is open source and also provides a pretty good user experience. Now that passkey support is also coming, I like it even more. Currently a premium member. 10€/year isn’t alot for a good service.

      • @[email protected]
        link
        fedilink
        English
        210 months ago

        Plus you can self host if you want the save the $10 a year, but its worth it to support the ecosystem

        • @[email protected]
          link
          fedilink
          3
          edit-2
          10 months ago

          Yes. Exactly. I don’t know why anyone would prefer anything else over Bitwarden if they want a online password manager.

    • @MagicShel
      link
      310 months ago

      It feels like a lot of sites are taking active measures to block the use is password managers, too. I hate those sites. Why I’m the hell would you do that???

        • @MagicShel
          link
          410 months ago

          Mainly financial sites, in my experience. I also have problems logging into Mastodon, because if I manually type my user and password I get logged in but if I use Bitwarden or even copy/paste it fails.

          But also every site where you type in the user name and then submit and it takes you to enter the password - I use a lot of custom emails to avoid spam so I may not remember my username for a given site, but Bitwarden won’t recognize it as a login page (much bigger problem on mobile, which is where I do most of my stuff).

          • @[email protected]
            link
            fedilink
            English
            210 months ago

            It’s your browser. You can install JavaScript or a browser extension which disallows the no paste input field. So that you can always paste in.

            The financial institutions that implement that they’re trying to guard against local copy and paste password theft. Any program can have access to the clipboard. So I understand why they do it, and I understand why it’s annoying.

            For financial institutions I highly recommend using something like a Fido 2 key. I’m partial to the yubikey bioseries.

        • @jadero
          link
          410 months ago

          Prairie Centre Credit Union.

          After years of complaining, they finally did something about their hopelessly insecure authentication, only to completely bork it.

          Bitwarden could open the site, but couldn’t push the login info. They prohibited pasting, so I had type everything by hand. And they couldn’t even get that prohibition right, because I discovered that I could type a character then CTRL+V to paste, then HOME, DEL.

          All of that is written past tense, because it was the last straw. I took my banking elsewhere, despite the fact I now have to drive 2.5 hours if I need to talk to someone in person.

    • @[email protected]
      link
      fedilink
      210 months ago

      BitWarden seems a little dumber at detecting password update submissions than LastPass. Same with detecting when there’s a login field on a page. Really, webdevs should do the most simple-stupid thing and give those fields predictable names like “old_password”/“new_password”/“new_password_retype”. No reason to get creative here.

      That’s about it. I switched out of LastPass for a reason and I’m not going back.

  • @[email protected]
    link
    fedilink
    1210 months ago

    Banks are the worst in this, the one website that should have secure passwords uses standards so low that KeePass can’t even go so low. I have to use a password I can remember, which may not actually be of a low standard but is in this case, considering it’s only 10 chars.

    • @[email protected]
      link
      fedilink
      English
      910 months ago

      Banks are the single industry most likely to be handing the passwords over to a 1970s mainframe that expects everything to be encoded in EBCDIC at some point in the validation sequence.

      This is an explanation, not an excuse.

    • @FinancesDrone98OP
      link
      610 months ago

      That’s the digital equivalent to the key under the rock, but it’s the only rock on your porch.

    • @FinancesDrone98OP
      link
      210 months ago

      Something like that is my master password! Well, it is a sentence with l33tspe4k and numbers, colons and stuff

      • dog
        link
        fedilink
        410 months ago

        Your password could also just be a long, unique sentence, without any excessive special characters. Maybe even a poem.

        Like "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eu leo eu nibh efficitur viverra. Integer lacinia tortor est, quis aliquet tortor varius sed. Sed dapibus vel turpis at suscipit. Nulla consequat orci in nibh dapibus sodales. Phasellus at arcu ac dolor suscipit pretium. Curabitur sit amet justo sit amet ipsum scelerisque accumsan ac ac nulla. Nullam accumsan lorem sagittis iaculis varius. Nullam convallis nisi ante, id congue diam tincidunt vel. Aliquam sed iaculis mauris. Nam leo nisi, consequat sed sodales non, tempor vel ante. Nunc eleifend vulputate turpis bibendum bibendum. Morbi nec massa in mi sagittis lacinia id ut metus. Maecenas gravida mi vitae lorem laoreet sagittis. "

        That’s alot of common characters and words; yet, it’ll take centuries to crack.

        • @[email protected]
          link
          fedilink
          210 months ago

          Centuries? With that much entropy it would take several universe heat deaths even assuming millions of guesses per second I believe.

          • @HeckGazer
            link
            110 months ago

            Once it gets that long it’s something like if every atom in the universe was used as a bit of computing it would still take some absurd n in 10^n heat deaths. Wild how fast the entropy zooms off the edge of the map

    • @[email protected]
      link
      fedilink
      210 months ago

      I’m always reminded of this when I see arbitrarily low caps on password character lengths.

      Recently signed up on a site that limited passwords to 11 characters. Why? Like, seriously, why?

  • @[email protected]
    link
    fedilink
    910 months ago

    It is bad programming. Specifically it is very bad security (especially setting a maximum length - that is just ridiculous). I think websites should not rely too much on passwords anyway. They should be designed under the assumption that attackers will fairly commonly get access to user passwords, and therefore not let someone do too much damage from simply being able to login to your account.

  • @[email protected]
    link
    fedilink
    710 months ago

    Non-ASCII characters can cause troubles because of different encodings and because you may need to type them on a machine where corresponding keyboard layout is missing.

    The password length limit is nothing short of stupid.

    xkcd:936

    • @FinancesDrone98OP
      link
      3
      edit-2
      10 months ago

      My mother’s password for everything got compromised recently. I told her to think of a sentence that will never happen and to write it down and store it somewhere safe.

      She remembered it instantly.

      Oh, and I made her a password manager

  • @[email protected]
    link
    fedilink
    610 months ago

    Likely more bad design than bad programming, but that’s not a very meaningful distinction.

    It’s downright scary how many “professionals” are onboard with this shit.

  • @[email protected]
    link
    fedilink
    610 months ago

    Is it bad programming

    No, it’s bad requirements, well ok maybe the programmer came up with the requirements too.

  • zkfcfbzr
    link
    fedilink
    English
    210 months ago

    My passwords use the full set of characters I can type by hand on a standard US qwerty keyboard, and I’ve only run into a few sites that have complained and made me use something simpler. PayPal is one of them. Some of the others are Zenni Optical, eBay, and FedLoan.

    In total that’s about 8% of my accounts. So the vast majority of sites seem to let you use whatever, at least. I only use 15 characters so I have no comments on length. I am equally annoyed when a new site makes me use simpler passwords.

  • @[email protected]
    link
    fedilink
    110 months ago

    I always thought banks (of all places) had the most ridiculous requirements. What, a 5 character pin to get read access to most of my financial data? Are you kidding me? That’s like securing your bike with a numbers lock