From 7f957a1788a71bf04b7666e78db10c79b1cfdc6b Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 24 May 2023 22:51:10 +0200 Subject: [PATCH] tex: add stuff on hashes and passwords --- graphics/arbitrarypasswdlengthlimit.jpg | Bin 0 -> 28215 bytes graphics/forbiddencharacters.jpg | Bin 0 -> 30478 bytes tex/references.bib | 96 ++++++++++++++ tex/text.tex | 158 +++++++++++++++++++++--- 4 files changed, 238 insertions(+), 16 deletions(-) create mode 100644 graphics/arbitrarypasswdlengthlimit.jpg create mode 100644 graphics/forbiddencharacters.jpg diff --git a/graphics/arbitrarypasswdlengthlimit.jpg b/graphics/arbitrarypasswdlengthlimit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cc55b86ef3ef334a01e03904748247bd983fa57 GIT binary patch literal 28215 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 YbdQGre?U&rukpt3&fPq(MgA=O8}eAMS^xk5 literal 0 HcmV?d00001 diff --git a/graphics/forbiddencharacters.jpg b/graphics/forbiddencharacters.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9aa604566e35ede8b6f34529992887a85e43c92b GIT binary patch literal 30478 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 literal 0 HcmV?d00001 diff --git a/tex/references.bib b/tex/references.bib index bfe8cb8..de3ac6b 100644 --- a/tex/references.bib +++ b/tex/references.bib @@ -239,4 +239,100 @@ note={{Available from: \url{https://www.techradar.com/news/this-well-intentioned-chrome-feature-is-causing-serious-problems} [viewed 2023-05-23]}} } +@misc{mcmillan, + howpublished = {[online]}, + author = {Robert McMillan}, + publisher = {Wired}, + year = 2012, + month = jan, + day = 27, + title = {{The World's First Computer Password? It Was Useless Too}}, + note={{Available from: \url{https://www.wired.com/2012/01/computer-password/} [viewed 2023-05-24]}} +} + +@misc{nisthistory, + author = {{National Institute of Standards and Technology}}, + publisher = {NIST}, + title = {Passphrase}, + howpublished = {[online]}, + note={{Available from: \url{https://csrc.nist.gov/glossary/term/Passphrase} [viewed 2023-05-24]}} +} + +@misc{speakeasy, + publisher = {Legends of America}, + author = {Kathy Alexander}, + title = {{Speakeasies of the Prohibition Era}}, + year = 2022, + month = dec, + howpublished = {[online]}, + note={{Available from: \url{https://www.legendsofamerica.com/ah-prohibitionspeakeasy/} [viewed 2023-05-24]}} +} + +@misc{asciirfc20, + series = {Request for Comments}, + number = 20, + howpublished = {RFC 20}, + publisher = {RFC Editor}, + doi = {10.17487/RFC0020}, + author = {Vint Cerf}, + title = {{ASCII format for network interchange}}, + pagetotal = 9, + year = 1969, + month = oct, + note = {{Also available from \url{https://www.rfc-editor.org/info/rfc20}}}, +} + +@techreport{iso10646, +type = {Standard}, +key = {ISO/IEC 10646:2020}, +author = {{ISO/IEC 10646:2020}}, +year = {2020}, +title = {{Information technology -- Universal Coded Character Set (UCS)}}, +address = {Geneva, CH}, +institution = {International Organization for Standardization} +} + +@misc{larsklint, + author = {{Lars Klint}}, + publisher = {Twitter}, + year = 2016, + month = {{June}}, + day = 30, + title = {{Excuse me @EtihadAirways, why do you insist on making my passwords worse?}}, + howpublished = {[online]}, + note={{Available from: \url{https://twitter.com/larsklint/status/748615185762484224} [viewed 2023-05-24]}} +} + +@misc{etihad, + author = {{Etihad Airways}}, + publisher = {Twitter}, + year = 2016, + month = {{June}}, + day = 30, + title = {Reply to Lars Klint}, + howpublished = {[online]}, + note={{Available from: \url{https://twitter.com/EtihadAirways/status/748626413306150912} [viewed 2023-05-24]}} +} + +@misc{forbiddencharacters, + author = {{Nick Heer}}, + publisher = {Twitter}, + year = 2017, + month = jul, + day = 18, + title = {{This does not give me confidence in your password security, @YourAlberta. (cc. @troyhunt)}}, + howpublished = {[online]}, + note={{Available from: \url{https://twitter.com/nickheer/status/887196833872658432} [viewed 2023-05-24]}} +} + +@misc{ncsc, + author = {{National Cyber Security Centre}}, + year = 2018, + month = nov, + day = 18, + title = {{Password policy: updating your approach}}, + howpublished = {[online]}, + note={{Available from: \url{https://twitter.com/nickheer/status/887196833872658432} [viewed 2023-05-24]}} +} + % =========================================================================== % diff --git a/tex/text.tex b/tex/text.tex index 93915e7..907d735 100644 --- a/tex/text.tex +++ b/tex/text.tex @@ -82,35 +82,161 @@ Pre-requisites necessary for following up. \n{2}{Hash functions} -Explanation. What are hash functions -\n{3}{Uses and \textit{mis}uses} -The good, the bad and the ugly of hash usage (including or in some cases -excluding salting, weak hashes, split hashes (Microsoft)). +Hash functions are cryptographic algorithms used to help with a number of +things: integrity verification, password protection, digital signature, +public-key encryption and others. Hashes are used in forensic analysis to prove +authenticity of digital artifacts, to uniquely identify a change-set within +revision-based source code management systems such as Git, Subversion or +Mercurial, to detect known-malicious software by anti-virus programs or by +advanced filesystems in order to verify block integrity and enable repairs, and +also in many other applications that each person using a modern computing +device has come across, such as when connecting to a website protected by the +famed HTTPS. -\n{3}{Threats to hashes} -Rainbow tables, broken hash functions\ldots +The popularity stems from a common use case: the need to identify a chunk of +data. Of course, two chunks of data, two files, frames or packets could +always be compared bit by bit, but that can get prohibitive from both cost and +energy point of view relatively quickly. That is when hash functions come in, +since they are able to take a long input and produce a short output, named a +digest or a hash value. +\n{3}{Rainbow tables} -\n{1}{Brief passwords history}\label{sec:history} +As passwords are in more responsible scenarios stored not directly but as +hashes, attackers that would be interested in recovering the passwords really +only have one option (except finding a critical vulnerability in the hash +function): rainbow tables. Rainbow tables are lists of pre-computed hashes +paired with the passwords that were used to create them. When attackers gain +access to a password breach that contains hashes, all it takes is to find a +match within the rainbow table and reversely resolve that to the known +message: the password. -\n{2}{Purpose over time} +\n{1}{Passwords}\label{sec:passwords} -\n{2}{What is considered a password} +Passwords have been in use since the ancient times, apparently already the +Roman sentries used passwords or \textit{watchwords} to discern who was allowed +to enter an area. The Roman army had a special system of distributing passwords +among the encampment members on a wooden tablet. Fast forward a couple of +thousand years, during the days of the Prohibition Era in the United States, it +was the secret ``speakeasies'' that were protecting their illegitimate +alcohol-serving business using passwords~\cite{speakeasy}~\cite{nisthistory}. +During the World War II.\ the US paratroopers' use of passwords has evolved to +even include a counter-password. + +According to McMillan, the first \textit{computer} passwords date back to +mid-1960s' Massachusetts Institute of Technology (MIT), when researchers at the +university built a massive time-sharing computer called CTSS. Apparently, +\textit{even then} the passwords did not protect the users as well as they were +expected to~\cite{mcmillan}. + +Traditionally, passwords were expected to be memorised, but the large number of +password-protected \emph{services} these days can make this impractical. To +list a few common examples, access to a bank account, electronic mailbox, +personal computer encrypted disk are all protected by some form of a password. + +A password still often consists of a \textit{string} of characters typed into a +prompt but its function is still the same: as per NIST it enables the +\textit{verifier} to infer the \textit{claimant}'s identity via a secret the +claimant holds. + +There are always some arbitrary requirements applied to what the password can +be, only some turn out to smarter than others. + +Despite the impression given by the word ``password'', it does not need to be +an actual word, while a non-word (in the dictionary sense) may indeed be harder +to guess, which is a desirable property of passwords. A memorized secret +consisting of a sequence of words or other text separated by spaces is +sometimes called a passphrase. A passphrase is similar to a password in usage, +but the former is generally longer for added security. + +\n{2}{Program-imposed constraints} + +Some of the following examples might be a bit anecdotal and more of an +exception than a rule, nevertheless, when presented by a large-enough program +creator/service provider, their decisions reach a sufficient amount of +population, enough that the author will call them influential. They form how +users think when creating password and affect what users expect from other +services they happen to visit and use from that point on, as well. + +\n{3}{Short arbitrary length} + +It has been observed that a requirement for a ``strong'' password generally +represents that a password is: + +\begin{itemize} + \item longer than 7 characters, + \item shorter than 11 characters, + \item begins with a letter and ends with a number OR + \item begins with a number and ends with a letter. +\end{itemize} + +\obr{Short arbitrary password length +limit~\cite{larsklint}}{fig:forbiddencharacters}{.8}{graphics/arbitrarypasswdlengthlimit.jpg} + +This is wrong for multiple reasons, and it is a classic example of short +arbitrary length requirement. It essentially prevents users from using +passphrases, makes using a password manager impractical and all of that has +apparently been done ``because of security''~\cite{etihad}. Moreover, this +might be an indicative of the fact that instead of storing passwords hashed (as +it should be), they might be storing them in \textbf{plain text}. +Otherwise, what reason could exist for the limit to be 10 characters? +The recommendation of the US's National Institute for Standards and Technology +(NIST) in this regard is a minimum of 64 and a maximum of 256 characters, which +should be sufficient for most users' needs. -\n{2}{Problems with passwords} -\n{3}{Arbitrary length requirements (min/max)} -\n{3}{Arbitrary complexity requirements} \n{3}{Restricting special characters} + Service providers have too often been found forbidding the use of so called \textit{special characters} in passwords for as long as passwords have been used to protect privileged access. Ways of achieving the same may vary but the -intent stays the same: prevent users from inputting characters into the system, -which the system cannot comfortably handle, for one reason or another. +intent stays the same: preventing users from inputting characters into the +system, which the system cannot comfortably handle, for ``reasons'', which are +usually something dubious along the lines of ``an apostrophe may be used in SQL +injection attacks'' or ``angle brackets may be used in XSS attacks''. Instead +the real message it announces is pointing right to the serious shortcomings of +password handling of the site in question, as passwords should never be +re-displayed in a context that is prone to Cross Site Scripting (XSS), and the +passwords should always be hashed before being sent to the database anyway, +leaving us with only alphanumeric characters, rendering the SQLi fears +baseless. +\obr{Forbidden special characters in +passwords~\cite{forbiddencharacters}}{fig:forbiddencharacters}{.8}{graphics/forbiddencharacters.jpg} -\n{1}{Password strength validation} -Entropy, dictionaries, multiple factors. +Note that ``Passw0rd!'' would have been a perfectly acceptable password for the +validator displayed in Figure~\ref{fig:forbiddencharacters}. +NIST's recommendations on this are that all printing ASCII~\cite{asciirfc20} +characters as well as the space character SHOULD be acceptable in memorized +secrets and Unicode~\cite{iso10646} characters SHOULD be accepted as well. + +\n{3}{Character composition requirements} + +There is a tendency to come up with bad passwords when there are character +composition requirements in place, too. The reality is that instead of +creating strong passwords directly, most users first try a basic version and +then keep tweaking characters until the password ends up fulfilling the minimum +requirement. +The \emph{problem} with that is that it has been shown, that people use similar +patterns, i.e. starting with capital letters, putting a symbol last and a +number in the last two positions. This is also known to cyber criminals +cracking passwords and they run their dictionary attacks using the common +substitutions, such as "\$" for "s", "E" for "3", "1" for "l", "@" for "a" etc. +The password created in this manner will almost certainly be bad so all that is +achieved is frustrating the user in order to still arrive at a bad password. + +\n{3}{Other common issues} + +Some services don't allow users to paste into passwords fields (disabling them +using JavaScript), thereby essentially breaking the password manager +functionality, which is an issue because it encourages bad password practices +such as weak passwords and likewise, password reuse. + +Another frequent issue is forced frequent password rotation. Making frequent +password rotations mandatory contributes to users developing a password +creation pattern and is further a modern-day security anti-pattern and +according to the British NCSC the practice ``carries no real benefits as stolen +passwords are generally exploited immediately''~\cite{ncsc}. \n{1}{Web security}\label{sec:websecurity}