[{"data":1,"prerenderedAt":651},["ShallowReactive",2],{"blog-10-common-password-mistakes":3},{"id":4,"title":5,"alt":6,"author":7,"body":8,"category":627,"description":628,"extension":629,"faq":630,"image":637,"meta":638,"navigation":639,"path":640,"publishedAt":641,"seo":642,"stem":643,"tags":644,"__hash__":650},"blog\u002Fen\u002F10-common-password-mistakes.md","10 Common Password Mistakes Even Experts Make","password mistakes checklist with entropy math and security tips","Alex Vibe, Senior Security Dev",{"type":9,"value":10,"toc":611},"minimark",[11,20,23,26,31,39,61,68,74,77,82,215,218,229,231,239,248,260,262,266,277,280,282,286,289,292,295,297,301,311,321,323,327,330,336,338,342,345,367,370,383,390,393,400,406,408,412,415,476,483,493,495,499,502,505,542,544,548,551,554,556,560,566,572,586,595],[12,13,14,15,19],"p",{},"Most password advice is written for people who use ",[16,17,18],"code",{},"123456",". This isn't that. These are the mistakes that catch developers, sysadmins, and security-aware users — people who know better but still slip up under pressure, habit, or misplaced trust.",[12,21,22],{},"Let's tear through all ten with the math to back it up.",[24,25],"hr",{},[27,28,30],"h2",{"id":29},"_1-trusting-length-alone-without-checking-charset","1. Trusting Length Alone Without Checking Charset",[12,32,33,34,38],{},"Length matters. But ",[35,36,37],"strong",{},"length × charset matters more."," The entropy formula is:",[40,41,42,47],"blockquote",{},[12,43,44],{},[35,45,46],{},"H = L × log₂(R)",[12,48,49,52,53,56,57,60],{},[35,50,51],{},"H"," = entropy in bits · ",[35,54,55],{},"L"," = password length · ",[35,58,59],{},"R"," = character pool size (charset)",[12,62,63,64,67],{},"A 20-character lowercase-only password: ",[16,65,66],{},"H = 20 × log₂(26) = 20 × 4.7 = 94 bits",".",[12,69,70,71,67],{},"A 16-character full-ASCII password (95 printable chars): ",[16,72,73],{},"H = 16 × log₂(95) = 16 × 6.57 = 105 bits",[12,75,76],{},"The shorter password wins. Knowing this prevents the mistake of thinking \"long enough\" equals \"secure enough.\"",[12,78,79],{},[35,80,81],{},"Entropy in bits by charset and length:",[83,84,85,110],"table",{},[86,87,88],"thead",{},[89,90,91,95,98,101,104,107],"tr",{},[92,93,94],"th",{},"Charset",[92,96,97],{},"Pool (R)",[92,99,100],{},"8 chars",[92,102,103],{},"12 chars",[92,105,106],{},"16 chars",[92,108,109],{},"20 chars",[111,112,113,134,154,174,194],"tbody",{},[89,114,115,119,122,125,128,131],{},[116,117,118],"td",{},"Digits only",[116,120,121],{},"10",[116,123,124],{},"27 bits",[116,126,127],{},"40 bits",[116,129,130],{},"53 bits",[116,132,133],{},"66 bits",[89,135,136,139,142,145,148,151],{},[116,137,138],{},"Lowercase letters",[116,140,141],{},"26",[116,143,144],{},"38 bits",[116,146,147],{},"56 bits",[116,149,150],{},"75 bits",[116,152,153],{},"94 bits",[89,155,156,159,162,165,168,171],{},[116,157,158],{},"Mixed case",[116,160,161],{},"52",[116,163,164],{},"46 bits",[116,166,167],{},"68 bits",[116,169,170],{},"91 bits",[116,172,173],{},"114 bits",[89,175,176,179,182,185,188,191],{},[116,177,178],{},"Alphanumeric",[116,180,181],{},"62",[116,183,184],{},"48 bits",[116,186,187],{},"71 bits",[116,189,190],{},"95 bits",[116,192,193],{},"119 bits",[89,195,196,199,202,204,207,212],{},[116,197,198],{},"Full printable ASCII",[116,200,201],{},"95",[116,203,130],{},[116,205,206],{},"79 bits",[116,208,209],{},[35,210,211],{},"105 bits",[116,213,214],{},"131 bits",[12,216,217],{},"The bold cell — 16 chars, full ASCII — is the 2026 recommended floor for sensitive accounts. Below 60 bits is crackable in hours offline against MD5.",[12,219,220,221,228],{},"Use our ",[35,222,223],{},[224,225,227],"a",{"href":226},"\u002F","Password Generator"," — Zero-Knowledge, it runs 100% in your browser's volatile memory, nothing is ever transmitted to a server — to generate passwords that hit full-ASCII entropy by default.",[24,230],{},[27,232,234,235,238],{"id":233},"_2-using-mathrandom-in-your-own-scripts","2. Using ",[16,236,237],{},"Math.random()"," in Your Own Scripts",[12,240,241,242,244,245,247],{},"This one is specifically for developers. If you've ever written a quick password generator script and reached for ",[16,243,237],{},", you introduced a cryptographic vulnerability. ",[16,246,237],{}," is a deterministic PRNG — seed it and you can reproduce its entire output sequence.",[12,249,250,251,256,257,259],{},"The fix is one line: use ",[35,252,253],{},[16,254,255],{},"crypto.getRandomValues()"," from the Web Crypto API instead. Same browser, same JS, cryptographically secure. Our ",[224,258,227],{"href":226}," is built on this exact API — same entropy source your OS uses.",[24,261],{},[27,263,265],{"id":264},"_3-incremental-password-updates-password1-password2","3. Incremental Password Updates (Password1 → Password2)",[12,267,268,269,272,273,276],{},"NIST SP 800-63B removed mandatory periodic rotation in 2017. The reason: humans rotate predictably. ",[16,270,271],{},"Summer2024!"," becomes ",[16,274,275],{},"Autumn2024!",". Attackers know this and build pattern-aware rule sets directly into Hashcat.",[12,278,279],{},"Don't rotate on a schedule. Rotate when a breach is confirmed or suspected, and replace with a fully randomized credential — not a mutation of the old one.",[24,281],{},[27,283,285],{"id":284},"_4-reusing-passwords-across-accounts","4. Reusing Passwords Across Accounts",[12,287,288],{},"The classic. You already know it's wrong, but let's quantify why you should care more than you do.",[12,290,291],{},"Have I Been Pwned (HIBP) as of 2026 contains over 12 billion compromised credentials. Credential stuffing tools like OpenBullet test breached username\u002Fpassword combos against live services at thousands of requests per second. If your \"throwaway\" password matches your banking password, the attack is trivially automated.",[12,293,294],{},"One breach exposure propagates everywhere you reused it. Full stop.",[24,296],{},[27,298,300],{"id":299},"_5-treating-complexity-requirements-as-the-security-target","5. Treating Complexity Requirements as the Security Target",[12,302,303,304,307,308,310],{},"\"Must contain 1 uppercase, 1 number, 1 symbol\" — you've seen it everywhere. The minimum becomes the maximum for most users. ",[16,305,306],{},"Welcome1!"," technically passes. It has ~25 bits of entropy against a dictionary + rule attack. An RTX 4090 cracks MD5-hashed ",[16,309,306],{}," in under a second.",[12,312,313,314,320],{},"Complexity requirements are a compliance floor, not a security ceiling. Entropy is the actual metric. Check yours with the ",[35,315,316],{},[224,317,319],{"href":318},"\u002Fpassword-strength-checker","Password Strength Checker"," — it shows exact bits and offline crack-time estimates.",[24,322],{},[27,324,326],{"id":325},"_6-using-personal-information-as-entropy","6. Using Personal Information as Entropy",[12,328,329],{},"Birthdays, pet names, hometowns — humans are terrible CSPRNGs. The reason isn't that attackers know you specifically. It's that dictionary attacks include curated wordlists built from social media scrapes, LinkedIn profiles, and data broker exports. Your dog's name is probably already in a rule set.",[12,331,332,335],{},[35,333,334],{},"Real entropy requires a source with no pattern."," If you can remember the password without a manager, it almost certainly isn't random enough.",[24,337],{},[27,339,341],{"id":340},"_7-assuming-a-password-manager-is-a-silver-bullet","7. Assuming a Password Manager Is a Silver Bullet",[12,343,344],{},"Password managers solve reuse. They don't solve everything. The real attack vectors on a password manager setup are:",[346,347,348,355,361],"ul",{},[349,350,351,354],"li",{},[35,352,353],{},"Master password compromise"," — if it's weak, everything leaks at once",[349,356,357,360],{},[35,358,359],{},"Phishing"," — you autofill a convincing clone of your bank's login page",[349,362,363,366],{},[35,364,365],{},"Device compromise"," — a keylogger or memory scraper runs before the manager encrypts",[12,368,369],{},"Your master password should be a 6-word passphrase generated from a true wordlist. Using the EFF large wordlist (7,776 words):",[40,371,372,377],{},[12,373,374],{},[35,375,376],{},"H = W × log₂(7776) ≈ W × 12.9",[12,378,379,382],{},[35,380,381],{},"W"," = number of words · EFF large wordlist = 7,776 entries",[12,384,385,386,389],{},"Six words: ",[16,387,388],{},"H ≈ 6 × 12.9 = 77.4 bits",". That's enough for offline resistance without memorability trade-offs.",[12,391,392],{},"A real example of what this looks like (generated from the EFF list):",[40,394,395],{},[12,396,397],{},[16,398,399],{},"correct-horse-battery-staple-radar-clump",[12,401,402,403,405],{},"Six random words, a separator, nothing personal. You can type it, say it, and remember it after a few repetitions — but an attacker can't guess it without running through 7,776⁶ ≈ 2.2 × 10²³ combinations. Our ",[224,404,227],{"href":226}," has a passphrase mode that produces exactly this format.",[24,407],{},[27,409,411],{"id":410},"_8-ignoring-the-difference-between-online-and-offline-attack-surfaces","8. Ignoring the Difference Between Online and Offline Attack Surfaces",[12,413,414],{},"This one catches people when they're evaluating password strength. An \"online\" attack is throttled by the service — usually 3–10 attempts before lockout. An \"offline\" attack happens after a database breach when the attacker has your hash and can throw GPU cycles at it locally.",[83,416,417,430],{},[86,418,419],{},[89,420,421,424,427],{},[92,422,423],{},"Attack Type",[92,425,426],{},"Speed (RTX 4090)",[92,428,429],{},"Practical Implication",[111,431,432,443,454,465],{},[89,433,434,437,440],{},[116,435,436],{},"Online (throttled)",[116,438,439],{},"~10–100 req\u002Fsec",[116,441,442],{},"Even a 6-char password survives",[89,444,445,448,451],{},[116,446,447],{},"Offline MD5",[116,449,450],{},"~164 billion\u002Fsec",[116,452,453],{},"8-char passwords fall in minutes",[89,455,456,459,462],{},[116,457,458],{},"Offline bcrypt (cost 10)",[116,460,461],{},"~184,000\u002Fsec",[116,463,464],{},"12-char passwords survive for decades",[89,466,467,470,473],{},[116,468,469],{},"Offline Argon2id",[116,471,472],{},"~15,000\u002Fsec",[116,474,475],{},"Even weaker passwords get real protection",[12,477,478,479,482],{},"The implication: ",[35,480,481],{},"the hash algorithm used by the service determines your real attack surface",", not just your password strength. For accounts on services that store MD5 (many still do), 16+ chars with full ASCII is not optional.",[12,484,485,486,492],{},"Want to see what your password looks like after SHA-256 or Argon2id hashing? Try the ",[35,487,488],{},[224,489,491],{"href":490},"\u002Fhash-generator","Hash Generator"," — Zero-Knowledge, runs entirely in your browser — to inspect hash output and understand what the attacker actually receives after a breach.",[24,494],{},[27,496,498],{"id":497},"_9-not-auditing-old-passwords-after-a-breach","9. Not Auditing Old Passwords After a Breach",[12,500,501],{},"You changed the password on the breached service. The mistake is stopping there.",[12,503,504],{},"If you reused that password anywhere — and if you're being honest with yourself, you probably did at some point — every service sharing it is now compromised. Post-breach hygiene requires a full audit: check HIBP for all your email addresses, identify which accounts share any variant of the exposed credential, and rotate all of them.",[40,506,507,512,515],{},[12,508,509],{},[35,510,511],{},"🛡️ Security Checkpoint — Complete This Step",[12,513,514],{},"A leaked password is only dangerous if it opens other doors — audit everything now.",[346,516,517,526,534],{},[349,518,519,520,525],{},"→ ",[35,521,522],{},[224,523,524],{"href":226},"Generate new unique passwords for every affected account"," — full ASCII, 16+ chars, Web Crypto API",[349,527,519,528,533],{},[35,529,530],{},[224,531,532],{"href":318},"Audit your existing passwords with entropy scoring"," — find the weak ones before attackers do",[349,535,519,536,541],{},[35,537,538],{},[224,539,540],{"href":490},"Inspect how your password hashes"," — SHA-256 \u002F bcrypt output, 100% client-side",[24,543],{},[27,545,547],{"id":546},"_10-conflating-never-transmitted-with-secure","10. Conflating \"Never Transmitted\" With \"Secure\"",[12,549,550],{},"The last mistake is architectural overconfidence. \"I generated it offline\" doesn't guarantee security if the generation method was weak (see mistake #2). \"I use a local password manager\" doesn't help if the vault file is on an unencrypted drive.",[12,552,553],{},"Security is a stack, not a single point. Strong entropy at generation + a secure KDF at rest + phishing-resistant 2FA in transit + breach monitoring ongoing. Remove any layer and the others compensate less than you'd expect.",[24,555],{},[27,557,559],{"id":558},"frequently-asked-questions","Frequently Asked Questions",[12,561,562,565],{},[35,563,564],{},"What is the most common password mistake?","\nReusing the same password across accounts. It takes one breach to expose every service you've reused it on. Credential stuffing is fully automated and highly effective against reused credentials. Each account needs a unique, randomly generated password.",[12,567,568,571],{},[35,569,570],{},"Is a 12-character password still secure in 2026?","\nBarely, and it depends heavily on the charset and the hash algorithm protecting it. A 12-character password using only lowercase letters has ~56 bits of entropy — crackable against an MD5 hash in hours on an RTX 4090 at 164 billion guesses\u002Fsec. 16 characters with full ASCII (95 chars) gives ~105 bits, which is a realistic 2026 floor for sensitive accounts.",[12,573,574,577,578,581,582,585],{},[35,575,576],{},"Does changing passwords frequently make them more secure?","\nNo. NIST SP 800-63B explicitly dropped mandatory rotation in 2017, and for good reason: humans rotate predictably. Forced rotation leads to patterns like ",[16,579,580],{},"Password1 → Password2"," or ",[16,583,584],{},"Summer2024 → Autumn2024",", which Hashcat's rule sets already enumerate. Rotate when breach is suspected, not on a schedule.",[12,587,588,591,592,594],{},[35,589,590],{},"How do I know if my password has enough entropy?","\nRun it through the ",[224,593,319],{"href":318},". It calculates exact entropy bits and shows offline crack-time estimates against MD5 and bcrypt. Target 80+ bits for sensitive accounts.",[12,596,597,603,605,606,610],{},[35,598,599,600,602],{},"Why is ",[16,601,237],{}," dangerous for password generation?",[16,604,237],{}," is a deterministic pseudo-random number generator. Given the same seed, it produces the same sequence. An attacker who can observe or influence the seed can reconstruct its full output. ",[35,607,608],{},[16,609,255],{}," uses the operating system's entropy pool — truly unpredictable and cryptographically secure.",{"title":612,"searchDepth":613,"depth":613,"links":614},"",2,[615,616,618,619,620,621,622,623,624,625,626],{"id":29,"depth":613,"text":30},{"id":233,"depth":613,"text":617},"2. Using Math.random() in Your Own Scripts",{"id":264,"depth":613,"text":265},{"id":284,"depth":613,"text":285},{"id":299,"depth":613,"text":300},{"id":325,"depth":613,"text":326},{"id":340,"depth":613,"text":341},{"id":410,"depth":613,"text":411},{"id":497,"depth":613,"text":498},{"id":546,"depth":613,"text":547},{"id":558,"depth":613,"text":559},"Security","Even seasoned devs slip up. Here are 10 password mistakes that erode security — with entropy math, GPU benchmarks, and fixes you can apply today.","md",[631,633,635],{"question":564,"answer":632},"Reusing the same password across multiple accounts. One breach exposes everything. Each account needs a unique, randomly generated credential.",{"question":570,"answer":634},"Barely. Against an RTX 4090 attacking an MD5 hash at 164 billion guesses\u002Fsec, a 12-character lowercase-only password falls in hours. 16+ mixed characters is the 2026 floor.",{"question":576,"answer":636},"No — NIST SP 800-63B explicitly dropped mandatory rotation unless breach is suspected. Forced rotation causes predictable patterns (Password1 → Password2) that attackers exploit.","\u002Fimages\u002Fblog\u002F10-common-password-mistakes.webp",{},true,"\u002Fen\u002F10-common-password-mistakes","2026-05-08",{"title":5,"description":628},"en\u002F10-common-password-mistakes",[645,646,647,648,649],"password mistakes","password security","password best practices","entropy","brute force","5KXysg1zyZAxoswXRiNNw33AWCqpvAatpkxbwojeZCU",1778313695461]