srptools — аутентификация при помощи SRP
О библиотеке, позволяющий реализовать аутентификацию на основе Secure Remote Password (SRP) в Python.
Вчера закончил работу над первой версией библиотеки srptools.
Библиотека позволит вам в приложениях на Питоне реализовать аутентификацию на основе протокола SRP.
Данный протокол, являясь представителем семейства PAKE (password-authenticated key agreement), позволяет одной стороне получить представление о том, обладает ли сторона противоположная знанием пароля (при этом сам пароль не пересылается). Такой способ аутентификации обладает достаточно высокой надёжностью, если сообщение производится с использованием TLS.
Приложение, в отличие от аналогов, обладает, надеюсь, большей гибкостью программного интерфейса, работает на Python 2 и 3 и включает в поставку консольную утилиту, позволяющую производить базовые действия из командной строки.
В упрощённом виде взаимодействие по протоколу при помощи библиотеки можно описать так:
Этого примера должно быть достаточно, чтобы получить общее представление о происходящем процессе. Стоит, однако, заметить, что в реальной жизни рекомендуется отправлять не сами ключи сессии, а данные, основанные на них (см. описание, прилагающееся к библиотеке, а также официальную спецификацию протокола).
Проект разрабатывает открыто — srptools на GitHub.
Не пересылайте пароли.
Библиотека позволит вам в приложениях на Питоне реализовать аутентификацию на основе протокола SRP.
Данный протокол, являясь представителем семейства PAKE (password-authenticated key agreement), позволяет одной стороне получить представление о том, обладает ли сторона противоположная знанием пароля (при этом сам пароль не пересылается). Такой способ аутентификации обладает достаточно высокой надёжностью, если сообщение производится с использованием TLS.
Приложение, в отличие от аналогов, обладает, надеюсь, большей гибкостью программного интерфейса, работает на Python 2 и 3 и включает в поставку консольную утилиту, позволяющую производить базовые действия из командной строки.
В упрощённом виде взаимодействие по протоколу при помощи библиотеки можно описать так:
from srptools import SRPContext, SRPServerSession, SRPClientSession
# На основе логина и пароля
# формируем набор (логин, сверка_пароля, соль).
# Этого набора достаточно серверу для получения
# представления о том, знает ли клиент пароль.
context = SRPContext('alice', 'password123')
username, password_verifier, salt = context.get_user_data_triplet()
# Сервер получает от клиента имя пользователя
# и, обладая сверкой_пароля, вычисляет публичный ключ.
server_session = SRPServerSession(SRPContext(username), password_verifier)
server_public = server_session.public
# Клиент получает от сервера публичный ключ и соль,
# осуществляет их обработку,
client_session = SRPClientSession(SRPContext('alice', 'password123')
client_session.process(server_public, salt)
# генерирует свой публичный ключ и ключ сессии.
client_public = client_session.public
client_session_key = client_session.key
# Сервер получает публичный ключ клиента,
# обрабатывает его
server_session.process(client_public, salt)
# и осуществляет сверку ключей сессий.
assert server_session.key == client_session_key
Этого примера должно быть достаточно, чтобы получить общее представление о происходящем процессе. Стоит, однако, заметить, что в реальной жизни рекомендуется отправлять не сами ключи сессии, а данные, основанные на них (см. описание, прилагающееся к библиотеке, а также официальную спецификацию протокола).
Проект разрабатывает открыто — srptools на GitHub.
Не пересылайте пароли.
На заметку
У нас есть представительство в Facebook. Ссылка в самом низу страницы.