master password gsoc project

Vivien Bernet-Rollande vivien.bernet-rollande at etu.utc.fr
Wed May 21 17:50:45 EDT 2008


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Richard Laager wrote:
> Thanks for that pointer. I was wondering if something related existed on
> Windows but wasn't having any luck finding anything. I looked at this
> documentation and I'm not sure that this "secret" (which even Microsoft
> puts in quotes) would be an appropriate place to stick a user's "master
> password". From what I gather, it's a way for an application like Pidgin
> to make it more difficult for other applications to grab its passwords.
> Given that we're open-source, I'm not sure where we'd store this
> "secret". If we generated it per-machine or per-user or whatever, we'd
> have to store it (ultimately unprotected). I don't think that's worth
> bothering with.
I might very well be wrong, but :

BOOL WINAPI Internal Protect Function (
   DATA_BLOB                  *pDataIn,
   LPCWSTR                     szDataDescr,
   DATA_BLOB                  *pOptionalEntropy,
   PVOID                        pvReserved,
   CRYPTPROTECT_PROMPTSTRUCT   *pPromptStruct,
   DWORD                        dwFlags,
   DATA_BLOB                  *pDataOut)

    * /pOptionalEntropy
      /Pointer to a| DATA_BLOB |containing additional entropy used to
      protect the data. The| cbData |member holds the length of the|
      pbData |member's byte string that contains the optional entropy.
      The| DATA_BLOB |used in the protection call must also be used in
      the unprotection call. This is the application specific "secret"
      mentioned earlier.

      *This parameter is optional and can be NULL.*

- From this, it seems the "secret" or optional entropy is pretty much
any kind of data + the size, and it would be possible to use it for a
password. There are some drawbacks to that implementation, but it
seems feasible. This also means we have a total control on the prompt
window's design.
>
> This would allow one to have a real Pidgin "master password". However,
> if we're going to do that, it would make sense to use that existing
> master password patch's approach (i.e. encrypting things ourselves).
> That would allow us to avoid using another Windows API and would be
> cross-platform. It'd also allow us to control the look of the master
> password prompt dialog.
This would indeed make sense, having a cross-platform plugin. I don't
know if Glib contains any cryptographic code, nor if pidgin is already
linked against cryptographic libs. The patch links against NSS
(http://www.mozilla.org/projects/security/pki/nss/), which is
multi-platform, but adds another dependency. Also, it seems to use
PKCS #11, which is a public-key algorithm, which sounds odd for such a
purpose.
I've seen that there's a whole cipher infrastructure in libpurple, so
such a plugin could probably make use of that code. Haven't checked
what algorithms are available though.
Also, it seems to me it would be a better thing to store the protected
data in another file, unlike the patch, which modifies the structure
of the accounts.xml file.
>
> I'm also not sure that a Pidgin "master password" is truly appropriate
> anyway. After all, why not just secure things with the login password?
> That's what this API seems to do. So apparently, we'd be able to use
> this API to encrypt the plaintext password and store it ourselves. (In
> contrast, GNOME Keyring will store the encrypted password for us.)
>
> In designing all this, we need to look at the end goals. I think the
> goal here is to avoid storing plaintext passwords. In contrast to the
> "master password" approach, I (and others) prefer something that is
> seamless (and yet secure by being based off a login password).
The way I see it is the following : by default, the plugin works in a
totally transparent way. The user never gets prompted anything,
password are secured with his system password, simple, clean and easy.
But from the configuration interface, the user could set a master
password, adding an extra layer of security (in case the system
account is shared by multiple users for instance).

I see a few reasons for this. First, one might want to be able to
implement a plugin for a password safe that does not have access to
the system login credentials, and therefore requires the user to enter
a password. Second, some users might like an extra layer of
protection, since having a pidgin-specific password makes it harder
for other applications.

- --Vivien
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFINJk130k75O5OLaURAsxkAJ9/4PyMW30MnvMA0TXSw5WsyWPgSgCfUM5e
NryvmGV9g3Sgmj6mpRMvw2c=
=+orF
-----END PGP SIGNATURE-----




More information about the Devel mailing list