Authentication Plugin - PARSEC
The PARSEC
Authentication Plugin is intended to be the default in a future release.
The PARSEC
(Password Authentication using Response Signed with Elliptic Curve) authentication plugin uses salted passwords, key derivation, extensible password storage format, and both server- and client-side scrambles.
It signs the response with ed25519
, but it uses stock unmodified ed25519
as provided by OpenSSL/WolfSSL/GnuTLS.
Description
The KDF function is pbkdf2 (supported by everything, including windows native, Java, javascript, PHP, .NET.
Parameters to the pbkdf2 are stored in with authentication plugin data : hash function (SHA512,SHA256), iteration count, salt, key_length, together with derived key =
PBKDF2(func, password, salt, iteration_count, key_length).
The number of iterations is a power of 2, greater than 9.
The algorithm is ed25519, "hash" is the public key generated using ed25519 from the PBKDF2(password).
The authentication string, stored by the server, is this:
concat('P', conv(log2(iterations)-10, 10, 62), ':', base64(salt), ':', base64(hash))
For example, it looks like this: P0:WW9sXaaL/o:vubFBzIrapbfHct1/J72dnUryz5VS7lA6XHH8sIx4TI
It consists of colon-separated fields.
The first field is 'P' (denotes KDF algorithm = PBKDF2) and the number of iterations, '0' means 1024, '1' means 2048, etc.
This is followed by the salt.
This is followed by the password hash.
The first two fields together are called ext-salt, extended salt.
Login Process, Packet Exchange
The server sends an Authentication Switch Request with a 32-byte random scramble.
The client sends an empty packet to the server to request the ext-salt.
The server sends the ext-salt to the client.
The client sends the random 32-byte scramble, and the
concat(server scramble, client scramble)
ed25519-signed by a secret key generated from the functionPBKDF2(password, ext-salt)
.The server replies with "ok" or "access denied".
Installing
INSTALL SONAME 'auth_parsec';
Example
CREATE USER test1@'%' IDENTIFIED VIA parsec USING PASSWORD('pwd');
This page is licensed: CC BY-SA / Gnu FDL
Last updated
Was this helpful?