Improvements to UI cleanup, confirm new master passwords, texts updates.
[FIXED] Immediately open the application on the password entry view if the key is forgotten instead of revealing the internals in a blink. [FIXED] Clean up the UI better when switching between master passwords. [ADDED] Ask spelling confirmation when a master password is used that doesn't have any known sites yet. [ADDED] iPad HD quality icon. [IMPROVED] Artworks re-generated, downscale improved, convertImages improved. [IMPROVED] Small guide text improvements. [UPDATED] Help texts updated for current operation and UI.
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
font-size: inherit;
|
||||
}
|
||||
h3 {
|
||||
padding-top: 1.5em;
|
||||
font-size: 12px;
|
||||
}
|
||||
i {
|
||||
@@ -68,11 +69,11 @@
|
||||
|
||||
<h2 id="1">— 1 —</h2>
|
||||
<p>
|
||||
<b>Find the site</b> that you need a password for by entering it into the <i>search field</i>.
|
||||
<b>Find the site</b> that you need a password for by entering its name into the <i>search field</i>.
|
||||
</p>
|
||||
<p>
|
||||
<b>While searching</b>, previously used sites will show up along with a <i>usage counter</i>.<br />
|
||||
The counter indicates the amount of times you've generated a password for that site.
|
||||
<b>While searching</b>, the names of previously used sites will be listed.<br />
|
||||
Tap one of these results to go straight to its password.
|
||||
</p>
|
||||
|
||||
<h2 id="2">— 2 —</h2>
|
||||
@@ -84,31 +85,38 @@
|
||||
<p class="Class MPElementStoredEntity">
|
||||
<b>To change</b> the password for this site, tap the <i>edit icon</i> <img src="icon_edit.png" />.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>Below the password</b> you can set the <i>password type</i>. Some types <i>create a password for you</i>,
|
||||
others let you <i>choose your own</i>.
|
||||
</p>
|
||||
|
||||
<p class="Class MPElementGeneratedEntity">
|
||||
<b>If the site complains</b> when you try to set or update the password, try changing the password type.
|
||||
</p>
|
||||
|
||||
<p class="Class MPElementGeneratedEntity">
|
||||
<b>To create another</b> password for this site, you can increment the <i>password counter</i> <img src="icon_plus.png" />.
|
||||
This is useful, for example, when you've had to share the password with somebody else.
|
||||
<b>To create a new</b> password for this site, you can increment the <i>password counter</i> <img src="icon_plus.png" />.
|
||||
This is useful, for example, after you've had to share the password with somebody else.
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="faq">— F.A.Q. —</h2>
|
||||
|
||||
<h3>What is this thing?<br />
|
||||
How do I use it?</h3>
|
||||
<p>
|
||||
You use it by searching for the name of your site (you choose this yourself. For Twitter, you could use
|
||||
<code>twitter</code>, <code>twitter.com</code>, or something else entirely as the name. Just remember how
|
||||
you name your sites and try to be consistent). Tap the resulting password to copy it for pasting elsewhere
|
||||
or type it manually on your computer.
|
||||
<b>Begin by entering the name</b> of the thing you want a password for. Naming is entirely up to you, but remember to be consistent.<br />
|
||||
<i>Good names</i> could be:<br />
|
||||
<code>apple.com</code>, <code>john@doe.com</code>, <code>office safe</code>, <code>bike lock</code>, etc.
|
||||
</p>
|
||||
<p>
|
||||
The thought behind this application is to secure your online life by <b>changing all of your passwords</b>
|
||||
Every name has a different password, so the following names may be <i>difficult to recall</i>:<br />
|
||||
<code>pw for amazon</code>, <code>pin for my cell</code>, etc.
|
||||
</p>
|
||||
<p>
|
||||
<b>Tap the resulting password</b> to copy it for pasting in a different application or read it to type it in or use it manually elsewhere.
|
||||
</p>
|
||||
<p>
|
||||
The thought behind this application is to secure your online (and offline) life by <b>changing all of your passwords</b>
|
||||
to passwords generated by this app.
|
||||
</p>
|
||||
|
||||
@@ -116,8 +124,8 @@
|
||||
Why would I do that?</h3>
|
||||
<p>
|
||||
The theory of password authentication is simple: To log in to a site, you share a secret word with the site
|
||||
that <b>only you and the site know</b>. Because nobody else knows your secret password, nobody else can log
|
||||
into your site.
|
||||
that <b>only you and the site know</b>. Since nobody else knows your secret password, nobody else can log
|
||||
into your account.
|
||||
</p>
|
||||
<p>
|
||||
It sounds good in theory. In practice, it's an <b>absolute hell</b>. These days, people have hundreds of
|
||||
@@ -187,10 +195,8 @@
|
||||
you log in to the account.
|
||||
</p>
|
||||
<p>
|
||||
A <b>Mac version</b> of this app is also in the works so that you can easily get to all of your passwords
|
||||
without needing to bring up your phone. More technically savvy users can already download a <b>Bash
|
||||
script</b> from the homepage that can generate these passwords for you on any POSIX system (such as your
|
||||
Mac).
|
||||
There is also a <b>Mac version</b> of Master Password available from the App Store. It allows you to
|
||||
generate any of your passwords without even needing to take out your phone.
|
||||
</p>
|
||||
|
||||
<h3>I'm paranoid.<br />
|
||||
@@ -202,16 +208,18 @@
|
||||
</p>
|
||||
<p>
|
||||
It's also important that you've chosen a long master password. Short master passwords, especially 4-digit
|
||||
PIN codes, are easily brute-forced by attackers. Using a <b>12-character master password</b> provides
|
||||
PIN codes, are trivial to guess by attackers. Using a <b>10-character master password</b> provides
|
||||
sufficient entropy to protect against any modern-day attempt at brute-forcing, assuming the password is not
|
||||
based on easily determined facts (names, birth dates, etc.). If you're really paranoid, install a keyboard
|
||||
of a non-latin script (russian, chinese, ...) and create a master password using these characters or even a
|
||||
mix between scripts. Just don't forget it! :-)
|
||||
based on easily determined facts (names, birth dates, etc.). A better idea yet is to use a pass phrase,
|
||||
ideally an absurd sentence. These are usually much easier to remember and much harder to guess by attackers.
|
||||
If you're really paranoid, install a keyboard of a non-latin script (russian, chinese, ...) and create a
|
||||
master password using these characters or even a mix between scripts.<br />
|
||||
<b>Just don't forget it!</b> :-)
|
||||
</p>
|
||||
<p>
|
||||
If you go into <code>Settings</code>, on the bottom you'll find an entry for this application; tap it to
|
||||
find some advanced settings for the app. Here, you can disable <code>Remember my password</code>. Doing
|
||||
so will force the app to ask for your master password each time you open it. That way, when you show your
|
||||
Using the action icon on the top right, select <code>Settings</code> to find some advanced settings for
|
||||
the application. Here, you can disable <code>Remember my password</code>. Doing so will force the
|
||||
application to ask for your master password each time you open it. That way, when you show your
|
||||
phone to somebody else after unlocking it, they can't go through your passwords.
|
||||
</p>
|
||||
|
||||
@@ -222,32 +230,42 @@
|
||||
passwords are <b>gone</b>.
|
||||
</p>
|
||||
<p>
|
||||
Where you go from here is, you change your master password (In <code>Settings</code>, flip <code>Change my
|
||||
password</code> and start the app again), and for each of your accounts, you go through the password
|
||||
recovery procedure (which will usually involve sending a message to your E-Mail account) and reset the
|
||||
passwords of these accounts to passwords generated by your newly chosen master password. Just don't forget
|
||||
it again! :-)
|
||||
Where you go from here is, you log in with a new master password, and for each of your accounts, you go
|
||||
through the password recovery procedure (which will usually involve sending a message to your email account)
|
||||
and reset the passwords of these accounts to passwords generated by your newly chosen master password.<br />
|
||||
Just don't forget it again! :-)
|
||||
</p>
|
||||
|
||||
<h3>So how does this thing work internally?</h3>
|
||||
<p>
|
||||
Alright, let's describe the process in detail. This part will likely make sense to you only if you're
|
||||
well versed in computer security jargon. If you're the kind of person who likes to know how the clock
|
||||
ticks before deciding that it can be trusted to keep ticking, read on.
|
||||
The way Master Password works internally is <i>fully disclosed</i>. The source code for this application
|
||||
is also available from <b>GitHub</i>. I invite anyone with a technical background to go through these
|
||||
resources to make certain of the trustworthyness of Master Password.
|
||||
</p>
|
||||
<p>
|
||||
This part will likely make sense to you only if you're well versed in computer security jargon. If you're
|
||||
the kind of person who likes to know how the clock ticks before deciding that it can be trusted to keep
|
||||
ticking, read on.
|
||||
</p>
|
||||
<p>
|
||||
The user chooses a single master password, preferably sufficiently long to harden against brute-force
|
||||
attacks. When the user requests a password be generated for a site, the application composes a string
|
||||
consisting of the site name, the master password, and a password counter, delimited in that order by a dash
|
||||
character, and hashes those <code>UTF-8</code> bytes using the <code>SHA-1</code> algorithm. The bytes
|
||||
resulting from this hashing operation are called the <code>keyBytes</code> in the next steps.
|
||||
attacks. The application then creates a scrypt key derivative from the user's password. This process
|
||||
takes quite a bit of processing time and memory. It makes brute-forcing the master password
|
||||
<b>far more difficult</b>, to practically infeasible, even for otherwise vulnerable password strings.
|
||||
</p>
|
||||
<p>
|
||||
When the user requests a password be generated for a site, the application composes a byte buffer
|
||||
consisting of the site's name (<code>UTF-8</code> encoded), the key derived from the master password,
|
||||
and a password counter, delimited in that order by a NUL byte. The bytes are hashed using the
|
||||
<code>SHA-1</code> algorithm. The bytes resulting from this hashing operation are called the
|
||||
<code>seed</code> in the next steps.
|
||||
</p>
|
||||
<p>
|
||||
Next, we need the password type that the user has chosen to use for the site. Password types determine the
|
||||
<q>cipher</q> that will be used to encrypt <code>keyBytes</code> into a readable password. For
|
||||
<q>cipher</q> that will be used to encrypt <code>seed</code> into a readable password. For
|
||||
instance, the standard password type <q>Long Password</q> activates one of three pre-set ciphers:
|
||||
<code>CvcvCvcvnoCvcv</code>, <code>CvcvnoCvcvCvcv</code> or <code>CvcvCvcvCvcvno</code>. Which of those
|
||||
will be used, depends on the first of the <code>keyBytes</code>. Take the byte value modulo the amount of
|
||||
will be used, depends on the first of the <code>seed</code> bytes. Take the byte value modulo the amount of
|
||||
pre-set ciphers (in this case, three), and the result tells you which of the three ciphers to use.
|
||||
</p>
|
||||
<p>
|
||||
@@ -256,8 +274,8 @@
|
||||
character in the cipher represents a set of possible output characters. For instance, a <code>C</code>
|
||||
character in the cipher indicates that we need to choose a capital consonant character. An <code>o</code>
|
||||
character in the cipher indicates that we need to choose an <q>other</q> (symbol) character. Exactly which
|
||||
character to choose in that set for the password output depends on the next byte from <code>keyBytes</code>.
|
||||
Like before, take the next unused <code>keyByte</code>'s byte value modulo the amount of characters in the
|
||||
character to choose in that set for the password output depends on the next byte from <code>seed</code> bytes.
|
||||
Like before, take the next unused <code>seed</code> byte's byte value modulo the amount of characters in the
|
||||
set of possible output characters for the cipher iteration and use the result to choose the output
|
||||
character. Repeat until you've iterated the whole cipher.
|
||||
</p>
|
||||
|
Reference in New Issue
Block a user