Спасибо за актуальную и подробную статью!) Помогите разобаться в нескольких моментах схемы на базе протокола SRP:
scrypt предлагается использовать везде далее в алгоритме вместо SHA-1 или только для вычисления x? т.е. hash() в описанном алгоритме это scrypt() или SHA-256?
почему A и B получаются 2048-битные?
числа N и g используются из спецификации постоянно? Есть необходимость их генерировать под каждый проект (сайт) или под каждого пользователя сайта?
зачем клиенту посыласть дважды свою соль серверу при регистрации в пунктах 1 и 6?
какая группа N и g подразумевается в вашем алгоритме (скольки битная)?
В тексте схемы защиты на симметричных ключах нет картинки формулы K=hmac_{H_p}(salt)
Часть вашего ответа стоит добавить в статью) или действительно написать подробно новую на эту тему)
Из описания type Stmt в документации показалось, что GO самостоятельно "готовит" операторы без участия БД. А также то, что параметр interpolateParams является частью метода DB.Open(), воспринималось как обязательное ко всем действиям с БД.
Спасибо, вы сэкономили много времени!
Вобщем, не стоит складировать *Stmt а использовать их только в для однотипных действий в рамках одного соединения, как в примере документации.
Есть пара моментов, которые очень хочется понять при одновременном использовании interpolateParams=true, DB.Prepare(query) и DB.SetMaxOpenConns(n) для http-сервера:
Первый. Если глобально складывать часто используемые подготовленные операторы в карту
stmt := DB.Prepare(query)
stmtMap[query] = stmt
а потом их брать оттуда для выполнения запросов к базе от разных http-клиентов
results, err := stmtMap[query].Query(userId)
то при в включенном interpolateParams=true это вообще имеет смысл? Что происходит в данном случае, stmt хранится в памяти GO и на сервер MySQL не передается? Экономия только на подготовке запроса в GO? Или все равно передается, но уже подготавливается новый оператор с включенным параметром userId? Тогда получается двойная работа...
Второй. Подготовленные операторы stmt := DB.Prepare(query) вроде как привязываются к конкретному соединению, после отправки на сервер MySQL. Получается один stmt будет дублироваться в каждое соединение из пула DB.SetMaxOpenConns(n) при запросе с его использованием? При желании сохранять stmt в карте (памяти GO) вызов stmt.Close() после каждого клиента не предполагается... Или вызов stmt.Close() освобождает только соединение от stmt и сохранит его в пригодном виде в stmtMap для повторного использования новыми http-клиентами?
Серьезная недоработка для Zyxel, но они исправятся обязательно! А пока выгоднее взять Microdrive, еще и статика по воздуху «без бубна», оказывается, теперь не проблема.
Благодарю за подробный ответ!
Спасибо за актуальную и подробную статью!) Помогите разобаться в нескольких моментах схемы на базе протокола SRP:
scrypt предлагается использовать везде далее в алгоритме вместо SHA-1 или только для вычисления x? т.е. hash() в описанном алгоритме это scrypt() или SHA-256?
почему A и B получаются 2048-битные?
числа N и g используются из спецификации постоянно? Есть необходимость их генерировать под каждый проект (сайт) или под каждого пользователя сайта?
зачем клиенту посыласть дважды свою соль серверу при регистрации в пунктах 1 и 6?
какая группа N и g подразумевается в вашем алгоритме (скольки битная)?
В тексте схемы защиты на симметричных ключах нет картинки формулы K=hmac_{H_p}(salt)
Часть вашего ответа стоит добавить в статью) или действительно написать подробно новую на эту тему)
Из описания type Stmt в документации показалось, что GO самостоятельно "готовит" операторы без участия БД. А также то, что параметр
interpolateParams
является частью методаDB.Open()
, воспринималось как обязательное ко всем действиям с БД.Спасибо, вы сэкономили много времени!
Вобщем, не стоит складировать
*Stmt
а использовать их только в для однотипных действий в рамках одного соединения, как в примере документации.Спасибо за отличную и актуальную статью!
Есть пара моментов, которые очень хочется понять при одновременном использовании
interpolateParams=true
,DB.Prepare(query)
иDB.SetMaxOpenConns(n)
для http-сервера:Первый. Если глобально складывать часто используемые подготовленные операторы в карту
а потом их брать оттуда для выполнения запросов к базе от разных http-клиентов
то при в включенном
interpolateParams=true
это вообще имеет смысл? Что происходит в данном случае,stmt
хранится в памяти GO и на сервер MySQL не передается? Экономия только на подготовке запроса в GO? Или все равно передается, но уже подготавливается новый оператор с включенным параметромuserId
? Тогда получается двойная работа...Второй. Подготовленные операторы
stmt := DB.Prepare(query)
вроде как привязываются к конкретному соединению, после отправки на сервер MySQL. Получается одинstmt
будет дублироваться в каждое соединение из пулаDB.SetMaxOpenConns(n)
при запросе с его использованием? При желании сохранять stmt в карте (памяти GO) вызовstmt.Close()
после каждого клиента не предполагается... Или вызовstmt.Close()
освобождает только соединение отstmt
и сохранит его в пригодном виде вstmtMap
для повторного использования новыми http-клиентами?Буду благодарен за разъяснения:)