первый: я не знаю ни о реализации lastpass, ни о работе
, но давайте посмотрим, что мы можем сделать ...
скажем, у нас есть сервер, которыйхранит двоичные данные для нас, и, кроме того, он делает это для каждого пользователя / учетной записи ...
что нам нужно, чтобы иметь возможность авторизовать такие функции учетной записи, как "заменить данные" или "запросить сохраненные данные"?
нам нужна задача, которая должна быть решена клиентом, которая удостоверяет личность клиента, иными словами, операция, которая может быть решена, если и только если клиент хранит определенный секрет .. ... это кричит об асимметричной криптографии и / или цифровых подписях ... пары ключей ...
как мы можем это сделать, если у нас нет общего хранилища для безопасного хранения ключа и его совместного использования между двумя разными устройствами?
одно из возможных решений довольно простое и начинается с ... PBKDF2 ... Функция извлечения ключа из производного пароля
PBKDF2 принимает пароль, соль, параметр для количества раундов и дает вам... биты ... рслучайные биты
Возьмите свое имя пользователя и хэшируйте его ... => идеальная соль ...
Возьмите произвольное число, например, 15000 => количество ваших раундов (большие числа замедляют процесс вычисления-> замедление атак грубой силы, в то время как вам нужно рассчитать его только один раз при каждом входе в систему)
Взять ваш пароль => Удивить ... пароль
запустить PBKDF2
seed your любимый CSPRNG (Криптографически безопасный генератор псевдослучайных чисел) с несколькими байтами из результирующего потока битов
используйте ваш любимый CSPRNG для генерации новой (RSA, DSA, ECDSA, как угодно) пары ключей ...
используйтеключ
эта пара ключей EXACT будет сгенерирована КАЖДЫЙ раз, когда вы выполняете эти шаги, на любом устройстве
, конечно, это нарушает безопасность указанной пары ключей до уровня секретных параметров для PBKDF2,который будет ... вашим паролем
, но теперь у вас есть асимметричное шифрование из пароля ...
сервер хранит открытый ключ ... и простопросит клиента расшифровать число (одноразовый номер) вместе с запросом на замену / получить данные ... возможность расшифровать одноразовые доказательства того, что секретный ключ известен клиенту
, который вы также можете получитьключ AES из потока PBKDF2 для шифрования базы паролей перед ее отправкой на сервер ... или для расшифровки после получения