2
0
MasterPassword/Site/2013-05/security.html
2014-11-06 07:48:02 -05:00

444 lines
50 KiB
HTML

<!DOCTYPE html>
<html class="no-js" itemscope itemtype="://schema.org/Product">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title itemprop="name">Master Password &mdash; Secure your life, forget your passwords.</title>
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
<meta itemprop="image" content="img/about.png" />
<meta name="apple-itunes-app" content="app-id=510296984" />
<meta name="viewport" content="width=device-width">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="img/favicon.png" type="image/x-png" />
<link rel="shortcut icon" href="img/favicon.png" type="image/x-png" />
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-responsive.min.css">
<link rel="stylesheet" href="css/main.css?7">
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
<script src="js/vendor/prefixfree.min.js"></script>
</head>
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="security">
<!--[if lt IE 7]>
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
<![endif]-->
<nav class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="brand" href="./">●●●|</a>
<div class="nav-collapse collapse">
<ul class="nav">
<li><a href="what.html">What is it? How do I use it?</a></li>
<li class="active"><a href="security.html">Is it safe?</a></li>
<li><a href="algorithm.html">How does it work?</a></li>
</ul>
<ul class="nav pull-right">
<li><a href="irc://irc.freenode.net/#masterpassword" onclick="_gaq.push(['_trackPageview', '/outbound/irc']);">#masterpassword</a></li>
<li class="divider-vertical"></li>
<li><a href="faq.html">FAQ</a></li>
<li><a href="support.html">Support</a></li>
<li><a href="https://github.com/Lyndir/MasterPassword/" onclick="_gaq.push(['_trackPageview', '/outbound/github']);">Source</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</nav>
<header>
<img class="background" src="img/mp-process-angled.png" data-stellar-ratio="2.5" />
<div class="container">
<div class="content">
<h2>Security Overview</h2>
</div>
</div>
</header>
<section><div class="content">
<p>The following is an overview of the security properties of the Master Password solution. It aims to answer all questions related to the strengths and weaknesses of the algorithm behind Master Password. If you have any unanswered questions after reading this page, don't hesitate to <a href="support.html">get in touch</a>.</p>
<ol>
<li><a href="#prelude">How do I keep my accounts secure?</a>
<ol>
<li>Well Placed Trust</li>
<li>Adequate Protection</li>
<li>Secure Channels</li>
</ol>
</li>
<li><a href="#about">What Does Master Password Give Me?</a>
<ol>
<li><a href="#strength">STRENGTH: Why Is Master Password Strong?</a></li>
<li><a href="#trust">TRUST: Why Should I Trust Master Password?</a></li>
<li><a href="#loss">LOSS: Can I Lose Everything?</a></li>
<li><a href="#usability">USABILITY: I Don't Really Need A Secure Facebook...</a></li>
</ol>
</li>
<li><a href="#how">How Does It Manage To Do All That?</a>
<ol>
<li>To Be Stateless</li>
<li>To Be Strong</li>
</ol>
</li>
<li><a href="#tradeoffs">What Are Master Password's Trade-Offs?</a></li>
<li><a href="#conclusion">Conclusion</a></li>
<li><a href="#finalnote">A Final Note On Security</a></li>
</ol>
<div class="thumb clearfix">
<p>We'll begin with a prelude to account security. If you are interested specifically about Master Password, you can <a href="#about">skip right ahead to the next section</a>.</p>
<h1 id="prelude">How do I keep my accounts secure?</h1>
<p>Security is a tough subject, and yet we all need it. Knowledge about good security practices should not be limited to professionals: <b>we all have to protect our privacy and keep our identities from getting abused</b>.</p>
<p>Security doesn't need to be tough. It can just be common sense. We all know to lock our houses at night or cars in the parking lot. We all teach our children to buckle up in the car and not to blindly trust strangers. It's time to learn some common sense on digital security.</p>
<p>Let's dive in. What do you really need to keep your accounts and information secure?</p>
<div class="hlvl">
<ol>
<li>Well placed trust: every website you put information on can willfully or accidentally betray that trust.</li>
<li>Adequate protection: websites assume that only you know your password. You need to ensure that remains true.</li>
<li>Secure channels: contrary to how it appears, on the Internet you are never alone unless you are on a secure channel.</li>
</ol>
<div class="hlvl">
<h2>Well Placed Trust</h2>
<p>The security of your account with a website is mostly in the hands of that website's care takers. Regardless of how strong your passwords are, sloppy administration on their end means attackers might be able to bypass your password or simply copy it from of their database. Websites <em>should store passwords as uniquely salted hashes</em> and you should insist that they do, for your protection.</p>
<p>It is also imperative that you <strong>use unique passwords for each site</strong>. It will prevent hackers or a rogue site administrator from secretly trying to steal your identity by using your password of one site to get into your other sites. <em>Unique passwords are your only weapon against mistakes made by website owners</em>.</p>
<p>Also be careful with what information you share and whether you truly feel that information is safe in the hands of a person or company you may not know as well as you think you do, or may not be as trustworthy as you feel they should be.</p>
</div>
<div class="hlvl">
<h2>Adequate Protection</h2>
<p>Passwords are a very sub-par protection measure, but they're the most convenient and wide-spread authentication method in use. A password is a secret "word" shared between you and the other end which is meant to convince them that you are who you say you are. <em>They only work</em> if you and they are the only ones who know that "word". Which means, <strong>passwords should be unguessable and they should not be shared with any person or any other site</strong>.</p>
</div>
<div class="hlvl">
<h2>Secure Channels</h2>
<p>The Internet is a very alien place to most of us. We are used to the real world where we know what's around us and we know who can hear us when we speak. These assumptions do not hold true on the Internet. Most of what you'll do on the Internet may feel like an interaction between you and a website, while in reality everything you say and do is recorded on hundreds of computers and possibly listened in on by many individuals hidden to you.</p>
<p>It is therefore essential that <em>while on the Internet, you behave like you would in a public space</em>, say a market square or cafe. Only when you are on a secure channel, such as an HTTPS website, should you feel safe to share private information. Before you type anything in on a website that you don't want to shout out in a market square (that includes passwords!), <em>check whether your channel is secure</em> and whether you trust the website to
keep it private.</p>
</div>
</div>
</div>
<div class="thumb clearfix">
<h1 id="about">What Does Master Password Give Me?</h1>
<p>What do you need from passwords? You need security. <em>Security is an extremely vague term</em>, and excessively over-used in marketing material. Terms such as encryption, military-strength, and so on are used freely without context. As a customer, <em>it is now your responsibility to put these terms into context</em> and <strong>evaluate how well a solution really helps with the safety of your private data</strong>.</p>
<p>How do you properly evaluate the security of a product? Investigate what kind of security the product really gives you. There are a few key points on which you should evaluate security:</p>
<div class="hlvl">
<ol>
<li><a href="#strength">STRENGTH</a>:
How well does it protect against increasingly creative attackers? How easy is it to get in?</li>
<li><a href="#trust">TRUST</a>:
How much trust do you need to dish out? How many points of failure are there to this trust?</li>
<li><a href="#loss">LOSS</a>:
How safe are you from locking yourself out? What happens when your hardware breaks or your house burns down?</li>
<li><a href="#usability">USABILITY</a>:
How easy is it to use this product? How likely are you to bypass it for convenience?</li>
</ol>
<p><strong>In summary</strong>: Master Password aims to solve each of these security problems rather than just focussing on one. It gives you <strong>unique strong passwords for each site</strong> that are also easy to use, generated in a way that makes them <strong>immune to data loss</strong>, completely independent from any third parties using an algorithm <strong>hardened against any known attack vector</strong>.</p>
<div class="hlvl">
<h2 id="strength">STRENGTH: Why Is Master Password Strong?</h2>
<p>The first point is pretty obvious, we want to keep malicious people out. Unfortunately, these people are getting increasingly more creative and are targeting as many people as they possibly can. In the next few years, <strong>you <em>will</em> become the target of somebody's attack</strong>, most likely more than once. News reports of millions of people's accounts having been put at risk are becoming ever more frequent.</p>
<p>When we evaluate the strength of a password solution, there are two important aspects that we need to consider:</p>
<div class="hlvl">
<ol>
<li><strong>STRONG PASSWORDS</strong>:
How hard is it for an attacker to get into one of my web accounts protected by these passwords?</li>
<li><strong>STRONG CRYPTOGRAPHY</strong>:
How hard is it for an attacker to get to all my passwords by attacking my password app?</li>
</ol>
<h3 class="inline">Master Password solves the <em>strong passwords</em> problem</h3>
<p>by generating passwords for you with extremely high entropy. We've found that humans are exceedingly bad at coming up with good passwords, especially when they need a new one every week for a new site they sign up with. Master Password therefore takes the guesswork out of it and generates high-entropy, memorable passwords. High entropy means that when a hacker obtains all of <a
href="http://www.washingtonpost.com/business/technology/linkedin-eharmony-deal-with-breach-aftermath/2012/06/07/gJQAwqs5KV_story.html" onclick="_gaq.push(['_trackPageview', '/outbound/linkedin']);">LinkedIn's password hashes</a>
again, they won't be able to brute-force your real LinkedIn password from it.</p>
<p>If you used an evenly distributed custom 8-character alphanumeric password (<code>p4sSw0rD</code> doesn't count), it would only take a powerful attacker <em>1.7 days</em> to brute-force your password from a leaked hash. If you used Master Password's default <em>Long Password</em> instead, it would take that same attacker <em>1.4 years</em> of non-stop focus on your password, assuming they already know you used Master Password. If they don't,
that time goes up to <em>26 billion years</em>. If you used Master Password's <em>Maximum Security</em> type, it would take up to <strong>422460722753999994880 years</strong>.</p>
</div>
<div class="hlvl">
<h3 class="inline">Master Password solves the <em>strong cryptography</em> problem</h3>
<p>through careful selection of strong cryptographic algorithms to counter all known attack vectors. It took quite a bit of research and tweaking to get a solid algorithm that adequately deals with any attack vectors known to specialists. Getting cryptography right isn't a simple matter of doing some encryption of your hashing. Algorithms should be as simple as possible, because each aspect of complexity introduces new attack vectors, and simple algorithms are
easier to evaluate and trust.</p>
<p>A solution like Master Password needs to strengthen itself against a few different types of attacks, many of which are not immediately obvious. Master Password has been hardened to defeat:</p>
<ol>
<li>Brute-force attacks against the master key.</li>
<li>Brute-force attacks against the user's master password.</li>
<li>Length extension attacks against the hash functions.</li>
<li>Rainbow table attacks against the master password.</li>
<li>Future-proofing by considering more powerful computers and as yet unknown weaknesses in hashing algorithms.</li>
</ol>
<h4 class="inline">Brute-force attacks against the master key</h4>
<p>are defeated by deriving a very long (64-byte) master key from the user's master password. As a result, brute-force attacks that aim to guess the master key used to compute a site's password would take up to <em>137983530581000001620252739433368710545408 years</em> to find the right master key.</p>
<h4 class="inline">Brute-force attacks against the user's master password</h4>
<p>are defeated through the use of resource-intensive <em>scrypt</em>-based key derivation which makes this attack a few million times harder to execute than an ordinary brute-force attack. Thanks to this defence, it would take <em>560 years</em> to discover a 6-character alphanumeric master password.</p>
<h4 class="inline">Length extension attacks against the hash functions</h4>
<p>are mitigated by selecting hashing functions that have no known length extension attack vectors, concatenating their inputs in careful ordering and delimiting them with field-length prefixes.</p>
<h4 class="inline">Rainbow table attacks against the master password</h4>
<p>are mitigated through the introduction of a unique salt to each person's master key derivation process. Since we need a solution that remains stateless, we can't use a blob of secure random data as the salt. We've instead opted to use the user's full name to seed the key derivation. Even though there are some people with the exact same full name, the fact that there's so many possible full name combinations makes the effort to construct an expensive rainbow
table for each name entirely invaluable.</p>
<h4 class="inline">Future-proofing by considering more powerful computers and as yet unknown weaknesses in hashing algorithms</h4>
<p>is especially important in the world of cryptography. Computers are getting ever more powerful and new attack vectors are found. To protect the algorithm against factors we don't yet know about, we've ensured that the security guarantees are sufficiently excessive such that if they're weakened in the future, there'll likely remain sufficiently strong to not be broken. We've employed defensive algorithms that perform operations in moderate excess of the
bare minimum we'd need but are known to provide extra mitigation facilities against possible weaknesses in, for example, the hash functions in use. For example, we've chosen to use <em>HMAC-SHA-256</em> as opposed to simply <em>SHA-256</em>, even though the latter has no known attack vectors today. If in the future a length extension attack or similar is found against this algorithm that might weaken our use of it, it is likely that the HMAC component
will defeat such an attack.</p>
</div>
<h3>These things are hard to get right.</h3>
<p>Security is hard to get right. Applying some "military strength" encryption, doing some "hashing" and topping it off with some "proprietary" encoding doesn't suffice. There are many ways in which you can unintentionally open the door for attackers to weaken your solution or make it trivial to get in. When you evaluate a product consider <em>proprietary algorithms and missing details</em> on why it is "secure" as <strong>glaring red flags</strong>.
</div>
<div class="hlvl">
<h2 id="trust">TRUST: Why Should I Trust Master Password?</h2>
<p>Regardless of how strong a solution is, all that strength can be easily defeated by misplaced or violated trust. If you're looking for a security product, you <strong>will need to trust something</strong> but it is important that you carefully consider and minimize that trust. Some prefer to put their trust in large organizations with a track record. Some prefer to put it in secret algorithms they aren't even allowed to evaluate themselves.</p>
<h3 class="inline">At Master Password we've decided that real trust</h3>
<p>is the result of <strong>transparency</strong>. Which is why we've made our algorithm open, published it on our website, described it in full and exposed it to cryptographic experts. We've also made our applications that implement it open-source so that you can see how they work and even bypass our binary distributions and instead install them from source.</p>
<h3 class="inline">Master Password minimizes the parties</h3>
<p>you need to trust by implementing a completely stateless solution that requires <em>no storage</em> (you don't need to trust your hard disk or hardware), requires <em>no backups or syncing</em> (you don't need to trust that all your passwords are safely backed up and synced across your devices so they're actually available to you), requires <em>no cloud services</em> (you don't need to trust that your Internet connection is safe, or a cloud provider won't lose your
data or <a href="http://www.guardian.co.uk/world/2013/jun/06/us-tech-giants-nsa-data" onclick="_gaq.push(['_trackPageview', '/outbound/prism']);">secretly send it to your or a foreign government</a>).
<h3>Trust is the most common failure point.</h3>
<p>Most other solutions that get strength right don't care so much about the trust front. They figure, if you're going to pay them for their app, you might as well trust them with all your passwords too. This really shouldn't be an implicit assumption. They're <strong>your passwords</strong>, and nobody else should have a say.</p>
<p>Knowing what happened to <a href="http://www.pcworld.com/article/2046264/after-lavabit-silent-circle-also-shuts-down-email-service.html" onclick="_gaq.push(['_trackPageview', '/outbound/lavabit']);">Silent Circle and Lavabit</a>, knowing how extremely powerful and persuasive governments and share-holders can be, you would be well advised to consider very carefully giving the keys to your digital identity to a separate entity.</p>
</div>
<div class="hlvl">
<h2 id="loss">LOSS: Can I Lose Everything?</h2>
<p>Loss is another one of those points that are very often overlooked. It's as though the implicit assumptions are that everybody backs all of their stuff up to at least two different devices and backups in the cloud in at least two separate countries. Well, <strong>people don't always have perfect backups</strong>. In fact, they usually don't have <em>any</em>.</p>
<p>So what happens when you drop your phone in the toilet, spill your coffee on your laptop, or worse, your kid drops a candle into the arts and crafts box and sets the house alight? You lose everything. <strong>You lose your own identity</strong>.</p>
<h3 class="inline">Master Password is engineered to be immune</h3>
<p>to data loss. And what better a way to fight data loss than by using <em>no data at all</em>? Master Password is a stateless solution, which means that its passwords are a result of only the things you can remember. Additionally, it minimizes the things you need to remember to little more than your own name, the site you want to use and one password (to rule them all).</p>
<p>When all is lost, you just need to open up Master Password, be it on a brand new computer, or a friend's iPhone, and you can just add your name and site back to it. Your passwords will re-appear "out of thin air".</p>
<h3>Most password solutions rely on "vaults".</h3>
<p>Vaults make the password problem really easy: passwords can be encrypted and stored on your hard disk for when you need the password again. You only notice the trouble vaults inflict when disaster strikes and you either lose the vault, it falls in the wrong hands, or a foreign government confiscates it. Be extremely wary of all vault-based password solutions and <em>make sure you understand the trade-offs well</em>.</p>
</div>
<div class="hlvl">
<h2 id="usability">USABILITY: I Don't Really Need A Secure Facebook...</h2>
<p>And then there's the biggest obstacle of all. Bigger even than password strength, trust issues and risk of total loss, is the risk that you'll get lazy. Usability should be a primary concern for password solutions, but it is often overlooked.</p>
<p>When a security solution becomes just a little bit too hard to use, people become extremely eager to just skip it. At first, only for those "<em>innocent</em>" cases where they "<em>don't really need security</em>". Not only is that a very slippery slope, it also gives attackers a way to climb up from your weakly protected sites to your strong ones through various methods including social engineering with your friends, your sites' support staff and even with you
directly.</p>
<p>All your sites should be <strong>equally well protected</strong>, each of them with <strong>unique passwords</strong> and you need to remain ever encouraged to keep it that way.</p>
<h3 class="inline">Master Password makes it easier on you</h3>
<p>in various ways. It tries to minimize the time it takes to get to the password you need. It generates easily memorable and typeable passwords to facilitate their usage. It removes the need for you to take the time to think of strong passwords by doing it for you. You can copy-paste the password to avoid having to type it in manually. And we're constantly thinking of more ways to speed things up.</p>
</div>
</div>
</div>
<div class="thumb clearfix">
<h1 id="how">How Does It Manage To Do All That?</h1>
<p>For the more technical details, please see the <a href="algorithm.html">Algorithm</a> page instead. I will give a more down-to-earth overview here.</p>
<div class="hlvl">
<h2>To Be Stateless</h2>
<p>As mentioned, Master Password is a stateless solution which means it derives its passwords solely from <strong>things that you can easily remember and nothing more</strong>. So what does it use?</p>
<div class="hlvl">
<ol>
<li><a href="#inputname">Your Name</a>:
We recommend you use your full given names and family name.</li>
<li><a href="#inputmp">Your Master Password</a>:
This one is your <strong>personal</strong> secret. Don't give it to anyone. <em>Ever</em>.</li>
<li><a href="#inputsite">The Site Name</a>:
This tells Master Password which password to generate. If you just use the site's bare domain name, you won't need to remember anything extra.</li>
<li><a href="#inputcounter">The Site Counter</a>:
The least obvious, it's a number that starts at 1 and only ever goes up if you want a new password for the site.</li>
</ol>
<div class="hlvl">
<p id="inputname"><h3 id="inputmp" class="inline">The fact that we need</h3>
a master password is obvious, why do we need a name?<br />
The name is a key element to the security of the algorithm: It is a seed to the key derivation that happens on your master password. Without this seed, the key derivation could be weakened by attackers generating a rainbow table. In practice, it ensures that two different people won't by chance pick the same master password and end up with all the same site passwords.</p>
</div>
<div class="hlvl">
<p id="inputcounter"><h3 id="inputsite" class="inline">The name of the site</h3>
is also an obvious requirement, it ensures each site has a unique password. What's the counter about? Well, if a site's password was the result of just your name, your master password, and the site's name, what would you do if somebody saw your password? Or if the site told you its password database was compromised and you need to set a new password? You'd need a way to make a new password for the site. The solution is the password counter. Increase the counter, get a new password. Don't
worry too much about not remembering the counter. If you ever need to, just start the counter from one and bump it until you get the password that logs you into your site.</p>
</div>
</div>
<h2>To Be Strong</h2>
<p>Using those givens, Master Password applies its algorithm to get you a password for the site. Why can you trust that this algorithm is strong against possible attacks? How does it work and what attacks does it prevent?</p>
<p>Here's how it works. To get your password, Master Password goes through the following steps:</p>
<div class="hlvl">
<ol>
<li><a href="#masterkey">The Master Key</a>:
We use the master password and your name to derive a very long master key using <em>scrypt key derivation</em>.</li>
<li><a href="#passwordseed">The Password Seed</a>:
We create a <em>password seed</em> from the site's name and counter using your master key and <em>HMAC-SHA-256</em>.</li>
<li><a href="#passwordtemplate">The Site Password</a>:
We compose a good password by encoding your <em>password seed</em> using a password template.</li>
</ol>
<div class="hlvl">
<h3 id="masterkey" class="inline">The Master Key</h3>
<p>The first part of the process it to obtain a very strong "token" of your personal identity. We call this token your <em>master key</em>, because it is very much like the one and only <strong>main key that opens all your doors</strong>. It is a personal key, it represents your identity.</p>
<p>The master key is derived from your name and your master password, and thrown away as soon as it's no longer needed to minimize the risk of loss.</p>
<p>Since it's vital that nobody else can gain access to your master key, it's important that the process of deriving the key is insurmountably difficult. An attacker could try a brute-force attack against your master key or password by convincing you to make an account on his website, and then guessing at your master password or your master key until he finds one that gives him your password for his fake site.</p>
<p>These are two different types of brute-force attacks and we need to make sure to defeat both of them.</p>
<p>To defeat a brute-force attack against your master key, we make sure the master key is sufficiently high in entropy. Since the master key is a 256-bit key, an attacker would now have to make up to <code>2<sup>256</sup></code> guesses, or try <code>115792089237316195423570985008687907853269984665640564039457584007913129639936</code> master keys before finding the right one. Even at an ambitious rate of 2 billion tries per second, it would take several times the age of the universe to try all of them.
<p>A brute-force attack against your master password is more feasible, since your master password will be tiny compared to such a huge master key.</p>
<p>Even if you used an 8-character evenly distributed random alphanumeric password (such as <code>yIp6X2qd</code>), a smart attacker could brute-force such a password in less than <em>1.7 days</em>.</p>
<p>To solve this problem, we introduce an expensive <q>scrypt</q>-based <em>key derivation</em> step. <em>scrypt</em> specifically improves on standard key derivation techniques by not only wasting a lot of <em>CPU time</em>, but also consuming huge amounts of <em>RAM</em>. We need to be careful to choose the right parameters so that logging into Master Password doesn't take too long on weaker mobile devices while the possibility of guessing at passwords is sufficiently
crippled for attackers. The theory is, the longer it takes for an attacker to try out one guess of your master password, the longer it'll take him to find the right one. We pull this theory into the extreme so that guessing your password now takes <strong>2151076 years</strong> instead of <em>1.7 days</em> while logging into Master Password on an iPhone 4S takes no more than 3 seconds.</p>
<p>It bears note that <em>scrypt</em>'s approach is specifically interesting because it costs both a lot of CPU and a lot of RAM to derive a master key. That means that the more computers an attacker buys, the more his $ cost goes up. CPU and RAM are expensive, and forcing the derivation to use a lot instead of minuscule amounts causes the $ cost of a brute-force attack to become phenomenal.</p>
<p>Given these solutions, we feel confident Master Password is adequately protected against attacks on your private master key.</p>
</div>
<div class="hlvl">
<h3 id="passwordseed" class="inline">The Password Seed</h3>
<p>With your master key, we can move on to getting a site-specific secret, since the idea behind Master Password is that each site needs to have a unique password.</p>
<p>To derive a site-specific secret from your master key, we employ <q>HMAC-SHA-256</q> (a SHA-Hashed Message Authentication Code of 256-bit in length) to compute an authentication token by carefully hashing the site's name and counter with the master key. The result is a 256-bit <em>password seed</em>, which is essentially <strong>your key to get into the website</strong>.</p>
<p>It's obvious why we include the site name in this operation: it gets us a site-specific result. The password counter exists to allow you to get a new and completely different password for the site in case your old one becomes lost or compromised.</p>
<p>Some may wonder why this password seed is quite so large. We've chosen a 256-bit password seed not because it gives us any added security, but specifically because it gives us enough entropy in case the user wants to encode a really long password (see the "Maximum Security" password template in the next section).</p>
</div>
<div class="hlvl">
<h3 id="passwordtemplate" class="inline">The Site Password</h3>
<p>Even though we now already have a site-specific key, called the <em>password seed</em>, this is a 256-bit sequence, which is definitely not something you can type into a password field. The last step involves encoding a nice password using the secret bits in this seed.</p>
<p>While we're encoding a password, we have one final problem to solve: password policies. Most websites nowadays have taken it upon themselves to restrict the kinds of passwords you can use. The point is usually to keep you from using passwords that are too weak, but these policies unfortunately often include rules that are detrimental for the strength of passwords (such as <q>your password MUST contain a number, it MUST start with a letter, and it MUST
NOT be longer than 6 characters. Oh yeah, and it MUST NOT contain quotes or anything fancy because we strip that since we don't know how else to sanitize data against SQL injection while we store your passwords in plain text.</q> (did you detect a little rant there?).</p>
<p>Master Password comes with a set of templates which are carefully crafted to give you passwords which strike an optimal balance between security and usability while dodging the rules of the most common password policies.</p>
<p>Master Password's default <em>Long Password</em> template produces memorable passwords such as <code>XikuFuzzFosu9[</code> which have just under 56 bits of entropy. An attacker that knows you use Master Password would still need to dedicate <em>1.4 years</em> of powerful computer time to crack that password's hash. If he doesn't know you, that time goes up to <em>26 billion years</em>.</p>
<p>Master Password's <em>Secure Password</em> template uses encodes many more bits from the password seed resulting in a password that's 20 characters long, looks something like <code>A2/IczT2BKx^(bVa18Kp</code> and would take that same machine up to <strong>422460722753999994880 years</strong> to crack.</p>
<p>Given these numbers we feel confident that Master Password's output passwords offer you the maximum amount of confidence in the strength of your external accounts.</p>
</div>
</div>
</div>
</div>
<div class="thumb clearfix">
<h1 id="tradeoffs">What Are Master Password's Trade-Offs?</h1>
<p>Whenever choices are made, they come with trade-offs. We'll highlight the trade-offs involved with using Master Password, why we feel the benefits outweigh them and how.</p>
<p>So what are the trade-offs with the Master Password solution?</p>
<div class="hlvl">
<ol>
<li>You cannot change your master password without also changing all your site passwords.</li>
<li>You cannot "generate" your own custom passwords.</li>
<li>You cannot freely build your password template.</li>
<li>This is only a one-factor solution (something you know).</li>
</ol>
<div class="hlvl">
<p><h2 class="inline">Changing your master password</h2>
results in all your site passwords to change, since they are the mathematical result of your master key, which in turn is a mathematical result of your master password. That means, if somebody learns your master password, you'll need to reset all your site passwords to new ones. It also means the solution is incompatible with "password recovery". It is your responsibility to think of a good and memorable master password, and more importantly,
<em>ensure that nobody learns your master password</em>. If you chose to share it anyway (say, with your spouse), you should do so in full expectation that you'll need to change all your sites' passwords if your trust relationship with them degrades.</p>
<p>This trade-off is a direct result of the desire to create a stateless solution which is immune to data loss. The solution relies entirely on the master password you can remember, which means that <strong>the only point of failure is now entirely under your control</strong>.</p>
</div>
<div class="hlvl">
<p><h2 class="inline">Custom passwords</h2>
are sometimes still a necessity. You may want to store a password you've been using for a long time in your manager, or your boss may have set an unchangeable password on your computer for you to use. Since Master Password's passwords are a mathematical result of your unchanging master password, it is impossible for it to be used with passwords that are created via another way.</p>
<p>The Master Password application however <em>functions as a hybrid password manager, implementing both the Master Password algorithm and a vault-like password solution</em>. In the second mode, Master Password uses your master key to encrypt custom passwords and store the encrypted result in a vault. Since we use the master key for this process, the result is a vault that is much harder to break into than that used by many other vault-based password solutions (specifically
because the encryption key is a large key derived from your master password using scrypt key derivation). As a result, <strong>this trade-off has been mitigated</strong>.</p>
</div>
<div class="hlvl">
<p><h2 class="inline">Password templates</h2>
are the presets that tell Master Password what your final password should look like. They specify where to put the letters, numbers or other characters. We've made the decision to only provide a set of template presets rather than allowing users to determine their own templates to use for a site. As a result, you cannot chose to design your own custom template, such as, "a 6-digit password that starts with a lower-case letter".</p>
<p>This decision has been made in the interest of password recovery after a total loss scenario. Recovering the correct password for sites that use such custom templates would be extra difficult, since now you're forced to recall the specific custom template you drafted for this site. This problem becomes more difficult the more sites you've made custom templates for.</p>
<p>As a partial mitigation of this trade-off, <strong>we've created a set of password templates designed to cover nearly all use cases</strong>. The default template should work on nearly all websites. When this template fails, it's usually because the site imposes a low maximum-password-length restriction. This type of restriction is a <em>serious red flag</em> which almost always indicates a sloppy security implementation on their end. When you encounter it, you <em>should</em>
contact the website administrator and demand an explanation (it's <em>your</em> security!). Usually, the explanation involves database-imposed limitations which mean they're storing your password in clear text, and you should be extremely wary about your continued use of this website.</p>
</div>
<div class="hlvl">
<p><h2 class="inline">A one-factor solution</h2>
is an authentication solution that requires only one factor of security. Master Password is a one-factor solution since its security relies solely on "something you know". That means, if somebody steals your master password, that's all they need to gain access to your sites. The alternative is usually a two-factor solution which relies on two distinct security factors, such as "something you know" and "something you have". Now, when somebody's obtained
the "something you know", they'll still need to obtain the "something you have" before they can break in. The most popular example of a two-factor solution is a bank card: Your PIN number is the secret you know, but with the PIN alone a thief can't get to your money. They'll need to first steal your card as well.</p>
<p>A vault-based password manager is often considered two-factor, since it relies on your vault password as well as access to your vault file. <em>Most security experts disagree, however</em>. To be truly multi-factor, the security factors should come from separate categories:</p>
<ul>
<li><strong>Knowledge factors</strong>: passwords, key files, other secret data or information</li>
<li><strong>Possession factors</strong>: physical tokens, smart cards</li>
<li><strong>Inherence factors</strong>: biometrics</li>
</ul>
<p>When two factors are derived from the same category, they don't really add a significant extra hurdle for the attacker to overcome. An attacker could steal your master password by installing a key-logger on your computer. But at that point he's probably also already copied your vault file.</p>
<p>Additionally, the weaker link with using a password-based authentication method is the password itself. Irrespective of how many truly distinct security factors you've used to obtain your password, your actual act of authentication involves sending a single password to the remote party, which means your actual authentication remains only one-factor secure.</p>
<p>So while Master Password is indeed a one-factor authentication solution, we don't aim or pretend to be anything more than that since the reality is that <strong>it's not truly possible when you're just doing password authentication</strong>.</p>
</div>
</div>
</div>
<div class="thumb clearfix">
<h1 id="conclusion">Conclusion</h1>
<p>We've explained all the important factors in which password managers can and should protect the security of your private information. We've also clarified in which ways Master Password deals with each of these factors and backed these clarifications with numbers and reasoning.</p>
<p>Hopefully this information has given you sufficient confidence in the Master Password algorithm and has taught you important ways to evaluate other competing security products so that you can make an informed decision.</p>
<h2>A Final Note On Security</h2>
<p>Of course, there are much easier ways for attackers to get at your passwords than through brute-forcing them or the solutions that provide them. When sites like <em>Yahoo!</em> store your passwords as plain-text in their databases, or you log into websites via plain HTTP connections where middle men can read everything that goes over the wire, your extra strong password can instantly be defeated. These problems cannot be solved by a password manager, and it is therefore important that users remain ever
vigilant and don't rely on a "security solution" to keep them "secure" from "everything".</p>
<p>Master Password aims to provide you with secure passwords and protects you from loss. It cannot protect your wire as you send passwords over the internet, it cannot protect the note paper if you write these passwords down somewhere, and it cannot protect your web account when the web master has been negligent and the site gets hacked. Security, as always, must come in many forms, and the weakest link easily breaks the entire chain.</p>
</div>
<div class="thumb clearfix">
<h1>Other Questions / Issues</h1>
<p>Don't hesitate to send us a message at <a href="mailto:masterpassword@lyndir.com">masterpassword@lyndir.com</a>. I'll get right on your case. Try to include any details you can. Good or common questions will have their answers added to this page.</p>
</div>
</div></section>
<footer><div class="muted content">
<p><em>Master Password is a security product and algorithm by <a href="http://www.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/lhunath']);">Maarten Billemont</a>, <a href="http://www.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/lyndir']);">Lyndir</a> (&copy; 2011-2014).</em><br>Usage implies agreement with our <a href="privacy.html">privacy policy and disclaimer</a>.</p>
<p><a href="http://gorillas.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/gorillas']);">Gorillas</a><a href="http://deblock.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/deblock']);">DeBlock</a><a href="https://github.com/Lyndir" onclick="_gaq.push(['_trackPageview', '/outbound/github']);">GitHub</a><a href="http://thanks.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/thanks']);">Send Thanks</a></p>
</div></footer>
<!-- Scripts -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>')</script>
<script src="js/vendor/bootstrap.min.js"></script>
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
<!-- Internet Defense League -->
<script type="text/javascript">
window._idl = {};
_idl.variant = "modal";
(function() {
var idl = document.createElement('script');
idl.type = 'text/javascript';
idl.async = true;
idl.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'members.internetdefenseleague.org/include/?url=' + (_idl.url || '') + '&campaign=' + (_idl.campaign || '') + '&variant=' + (_idl.variant || 'banner');
document.getElementsByTagName('body')[0].appendChild(idl);
})();
</script>
<!-- Google Analytics -->
<script>
var _gaq=[['_setAccount','UA-90535-15'],['_trackPageview']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
s.parentNode.insertBefore(g,s)}(document,'script'));
</script>
<!-- Google +1 -->
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
<!-- Tender -->
<script src="https://masterpassword.tenderapp.com/tender_widget.js" type="text/javascript"></script>
</body>
</html>