:mod:`srp` --- Secure Remote Password ===================================== .. module:: srp :synopsis: Secure Remote Password .. moduleauthor:: Tom Cocagne .. sectionauthor:: Tom Cocagne This module provides an implementation of the Secure Remote Password Protocol. It may be used for secure, mutual authentication across an unsecured network connection. With SRP, the user's password is never sent across the network and a successful authentication results in a cryptographically secure shared key that may be used for symmetric key encryption. The SRP authentication requires that the server store a salt and verification key that is computed from user's password. While care should be taken to protect the verification key from disclosure, the protocol remains reasonably secure even in the event that an attacker obtains it as a computationally infeasible brute-force dictionary attack would be required to derive the users password. See http://srp.stanford.edu/ for a full description of the SRP protocol. Functions --------- .. function:: gen_sv ( username, password ) Generates a salt and verifier for the given username and password. Returns (salt_bytes, verifier_bytes) :class:`Verifier` Objects ------------------------- A :class:`Verifier` object is used to verify the identity of a remote user. .. class:: Verifier( username, bytes_s, bytes_v, bytes_A ) *username* Name of the remote user being authenticated. *bytes_s* Salt generated by :func:`gen_sv`. *bytes_v* Verifier generated by :func:`gen_sv`. *bytes_A* Challenge from the remote user. Generated by :meth:`User.start_authentication` .. method:: authenticated() Returns True if the authentication succeeded. False otherwise. .. method:: get_username() Returns the name of the user this :class:`Verifier` object is for. .. method:: get_session_key() Returns the session key for an authenticated user or None if the authentication failed or has not yet completed. .. method:: get_challenge() Returns (bytes_s, bytes_B) on success or (None, None) if authentication has failed. .. method:: verify_session( user_M ) Completes the :class:`Verifier` side of the authentication process. If the authentication succeded the return result, bytes_H_AMK should be returned to the remote user. On failure, this method returns None. :class:`User` Objects ------------------------- A :class:`User` object is used to perform mutual authentication with a remote :class:`Verifier`. Successful authentication requires not only that the :class:`User` be provided with a valid username/password but also that the remote :class:`Verifier` have a salt & verifier for that username/password pair. .. class:: User( username, password ) *username* Name of the user being authenticated. *password* Password for the user. .. method:: authenticated() Returns True if authentication succeeded. False otherwise. .. method:: get_username() Returns the username passed to the constructor. .. method:: get_session_key() Returns the session key if authentication succeeded or None if the authentication failed or has not yet completed. .. method:: start_authentication() Returns (username, bytes_A). These should be passed to the constructor of the remote :class:`Verifer` .. method:: process_challenge( bytes_s, bytes_B ) Processes the challenge returned by :meth:`Verifier.get_challenge` on success this method returns bytes_M that should be sent to :meth:`Verifier.verify_session` if authentication failed, it returns None. .. method:: verify_session( bytes_H_AMK ) Completes the :class:`User` side of the authentication process. If the authentication succeded :meth:`authenticated` will return True