Шифрование c мастер-паролем

Принципы защиты ключа шифрования

Защита ключа шифрования — главное условие безопасности паролей. Если злоумышленник узнает этот ключ, то легко взломает всю базу паролей независимо от того, насколько сложный алгоритм шифрования используется. Поэтому защита ключа EncKey основана на следующих принципах:

  • Ключ EncKey шифруется ассимметричным алгоритмом RSA-OAEP.
  • Чтобы браузер расшифровал EncKey , пользователь должен ввести мастер-пароль. Мастер-пароль известен только владельцу паролей, он не сохраняется на компьютере, и, следовательно, не может быть с него украден. Сразу после расшифровки EncKey введенный мастер-пароль удаляется из памяти компьютера.
  • Ключ EncKey не связан математически с мастер-паролем. Поэтому стойкость EncKey к перебору остается постоянной (перебор случайного числа длиной 256 бит) и никак не зависит от сложности мастер-пароля (длина, словарные слова, набор символов).

Преимущества шифрования с мастер-паролем

Использование шифрования с мастер-паролем дает пользователю следующие преимущества:

  • Посторонний, имеющий доступ к компьютеру, не сможет воспользоваться паролями.
  • Потеря компьютера или кража базы с паролями не влекут необходимости немедленно менять все пароли.
  • При синхронизации ни Яндекс, ни кто-либо другой не сможет получить доступ к паролям.
  • Пароли в хранилище лучше защищены. Даже если вредоносная программа сможет оттуда украсть ключ шифрования, она не сможет им воспользоваться, так как доступ к ключу блокируется мастер-паролем.
Совет. Если пользователь использует мастер-пароль, он в любой момент может принудительно сменить ключ шифрования и перешифровать все пароли в хранилище. Для этого достаточно отключить и заново включить мастер-пароль.

Процедура шифрования с мастер-паролем

Шифрование ключа и хранилища

Схема шифрования ключа и паролей в хранилище
  1. Пользователь инициирует создание мастер-пароля.
  2. Браузер с помощью системного генератора случайных чисел создает ключ EncKey длиной 256 бит.
  3. Для ключа EncKey браузер генерирует случайный идентификатор key_id , который математически не связан с EncKey. Идентификатор key_id  сохраняется в каждой записи в базе паролей. Если пользователь включает шифрование паролей на нескольких несинхронизированных устройствах, могут появиться несколько разных ключей EncKey. При синхронизации и объединении паролей key_id  позволит понять, что чем зашифровано.
  4. С помощью EncKey браузер шифрует пароли, используя симметричный алгоритм AES-256 в режиме GСM. Расшифровываются пароли из хранилища с помощью того же ключа.
  5. Чтобы надежно защитить ключ EncKey, используется асимметричный алгоритм шифрования RSA-OAEP. Для этого браузер генерирует пару ключей: открытый (PubKey) и закрытый (PrivKey). Ключ EncKey зашифровывается с помощью открытого ключа, а расшифровать его можно только с помощью закрытого ключа PrivKey.
    Примечание. Благодаря шифрованию с открытым ключом браузер может:
    • менять мастер-пароль, не меняя ключ шифрования EncKey;
    • создать копию закрытого ключа PrivKey с другой парольной фразой и использовать ее для резервного доступа к хранилищу;
    • добавлять в хранилище пароли, не запрашивая мастер-пароль (например, при синхронизации зашифрованного хранилища паролей с незашифрованным, незашифрованные пароли можно шифровать с помощью дополнительно созданного ключа EncKey1).
  6. Чтобы защитить закрытый ключ PrivKey от несанкционированного использования, он шифруется парольной фразой при помощи AES-256-GCM.
  7. В качестве парольной фразы используется ключ UnlockKey. Чтобы этот ключ был криптостойким, браузер генерирует его из мастер-пароля, key_id  и соли путем многократного хеширования:
    1. Запрашивает у пользователя мастер-пароль.
    2. Добавляет к мастер-паролю соль и key_id .
    3. Обрабатывает результат 100 500 раз функцией хеширования PBKDF2-HMAC-SHA256.
    В результате придуманный человеком мастер-пароль преобразуется в длинный ключ UnlockKey размером 256 бит. Затрата ресурсов на перебор этого ключа сопоставима с затратой ресурсов на перебор ключа EncKey.
    Примечание. Криптоанализ не стоит на месте, исследователи открывают все более быстрые способы перебора хэшей. Поэтому механизм хэширования в браузере архитектурно не завязан на конкретную функцию. При необходимости мы легко сможем заменить PBKDF2 на более криптостойкий вариант.
Пример защиты ключа EncKey мастер-паролем

Открытый ключ EncKey:

Mh6lu1xRuZFo/qJ2yktfJch2nAzlgY4+OPADyLQYfrkbR0hxae9M5nVdafthJa2QHG18sZbf2VOxveH87naRb3vq3oJykfxlVHX4bllYDCcLISzHZVnxF2yMM0r4BXl8Uq+nuINiWx8kaKtrULrdwnMGU6eOuOLZvv/wLDzQvz74iuQUgoR3NSpOByFnY/BkAmGWbQ5KXTYqqIcrcqkG1xb3EAQGEG8KGPtQsTvLsHL1QdjteMZ9CBBLAWjYd/kdrZsx+MU96XMEA+ViBU0ot35cAPVBeWgAyMZhvM9sYy4zB2HrCg+n14kSc85OjNEqAChQDeHVtcbBfyshnKB0Qg==

Открытый ключ PubKey:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyiZMYsF3r121EAqq9spGWDife8bUEr6eyAEP3ip2gm6KaNzkyPGiDXN0zIidMjHKBzxjymtyQyY29DM26w1DQUK6Bd8aNvPXayscHXOKkId7L7+D1qc3mm9FJ/03Yi+pOa4yxVItgUZs9kpyW2LI9begHn62n0d6khsu6A2Iws66rohSXjPo6J2zONpWVn/YNz4o8QyB4O12msEB2Uf+NSFJjqNFAMUmGdTfcpUZ5Qz6Q7V0i5CRgONn2GeqqEaHwa+judPGxrcL1QK3QZGhXChmzwGMAySdVWkwMbQxBMSKMRLbRhM0D19W00TdwYAMLbmX/E8Ekthx1L3WCK7Y1wIDAQAB

Зашифрованный открытым ключом EncKey*:

VlZecAIaRweK2+ZnTAZzKskONjMGqqGWTli0Shr0zFcIQJwNaUSDTdflbSDEdR2KGh5HcShmRRaciQG0A59f8aBlYkoMEqLW+7Hoo1CJsunAxDioSoLf3YlpdfGto5
HFXsuoH1OcRTsKh/yCPiW9FTQrdPTIpLwnQjRi4nDkVLft3aWDlqvqcCHd4EKDTwioTIlhaUGBbfNDP5bQlt+KTl+cdOAQcOv4c1pJhN0hA2G93kLK32zcHIMYf89wmBnP1/leorp38W+hsZcpSJvhV2lufIZ74G0mMA6zBNYOYU/NLss7GpecwAZGcL5rlPbGGATBIoxa9S1QC
1azjI3llQ==

Закрытый ключ PrivKey:

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCu6h5dF90Ow7zwFE8KDbspsIbiAnlJJVdWE6BBSk9ecUnvlSeNZe/whbnvAkNF7o9wYstAdKUrKK3T+IJmgvhERgM
QoYlQZQmxm2EP9gsG84h0nWCVL82Sl1CA86Bt2Cr05UHGH9kWMC/FB7coPrURqXbMPtM0cwtWoIqzJJ6+EWkR/ucq8Bbrm9wnK1R3vFGXsFlTLWVmHEyY83gVnqwRR2u70b32j9qM91XevcRqWOYLNLIzio3FHTHuThsyy1cLYJsHPhc6ATqAKtYGcfWN4YPcIW7CG5uB3hFKi/
xGgOYxR38Ursw88rJqn1Od0QFpPLUxoPmXgydNYYIvE0iVAgMBAAECggEADWLWawpx/PjG41qyh9LwMWsUj4Rf8tScP/ali4mb1F74KRExozUbbT1Wsu9p5ZaxvIibBHZI06o7z16T4DOCu3reLi4mm5P373M0NOwAAQqvNTl8FD7BzUeuPggnDXD/LJnE9FwomXWbmkkSX86Yv
d7JvCzMrhVl1z3XD4msamA7VV/NdivL0Mn5cq5F2KGPLxqbH/nLCgxq4/Z0nAWIFJfGCx8C8sRALv2g7qK5PJVQ4VEttLpF6Qco31AwQQ0S2sWer+0y7m+GfZ+1tfdCE6ceZuEt4UsgF7q5at7lBfGHDdmH0F+sOYn+6+szJBPDLUFpO5d6udKGAiJZog23CwKBgQDWoJyFi/iQ
9ww2GzSanRDehNTLvNFqnDMGkrVNwAHhQ1FgXKDeW38ELPHQn21yt4GYzql/yHhS823ce7zLkHvKOcCfHWwHFfJimKqp2Rdp9MU6bU6WgZCNDkTr+AvNpyQ1FmiO/gc6qyB93fe+2RvHHZJ0YXuSG4XDbbQ45rsoKwKBgQDQocPUFV7iLvawmr3qRa8Bn/+0WXHzzdf5Nm8i4iy
faaVdrpvuFl9eIkVGjfYO65jHA+93oru7gWsLg9EPDdBBuADWf1PlIZw1EsykPnRLMBuLQFiPmHZdZSMhNWQWy1T8EOnTsEp9KujerQ9Yk3Uhvln3DrzuWMilqJWj6YQyPwKBgQC9TXRApjBbTEtM/bnsFVTnrykxeh0LdzHaPlQDe7MsyH9iCtEoznK9cBbo93VFlW2NJdqCho
L6RxNDQTBIK+vDdiTbMswxg74CEL2WiZAJOIcs/XQvc5/XihpoNqPSg/V/jYAzfwNJT96cpcb6YewKN58RX1nqiLP2pzAqb/freQKBgCsFUGZJSdmGKaRdJFBMsju5jHbaAt9tUN241c3xqZXtqQXaXZkIz/2PP42+9EA7YLOZIiYfTmrp0vL66X8bMBh9It8YPmp/NcDT8ZLkt
gJTFzrtt9VUcQPtOQM+CTeSEiIwMqdOMO4CjSZttT5kmcCticuiJF9Zu3Y9fy3flzztAoGAMsTJRcyRe0qi0Z4nfpQkND6zPCUiTZwgvb51jQxapgWcR1NYRM0oAocqgftHGPXkxMUz+g08Mg+nzL4Vh8R6UQZE+k1LLOnLWpqRb9I23/hqudld5MJYq5e1tOJ8cwcJ+k6YRxN+
4qpW2qvQSH2g/rh+ynkHeQHxl9OAuRYTYNg=

Мастер-пароль:

password

Соль:

/4dMZgU3GG5WfXMjYQbGNzKGxa/7RNFej43Nwx4mpws=

Ключ UnlockKey, являющийся парольной фразой к PrivKey:

UfaND0ks2hulRHkLMGL9Zkpiu1gKBYJdYsqCVTnOIvs=

Зашифрованный с помощью UnlockKey ключ PrivKey*:

NphBZAm4mu2h4FoS21D6H6MNWxsk2YlD0+JbQQ2S2ujzgQpgF/lq52VU8OT039naB6MQRNxbGRL7G8w+W7MFonMq3bj2pzNTi6qQPqmZmTm1hXp8cFgcBABpZtgBjqY5K
n93WfdIkUCHOR6TscHXD8tnYC5SvVkCr6dsx4XmghoIk3CFr9Fn1ujCvnbVF8z6jjsvSjZcXKU8KluHlxqWiZQEq1k0xohXWq+D/7WH9qGHdgTqgFt35tPCpwcFsDHdXdQ0GoVY6n09xazA9pgvy6xE8QvmwcotV+LAoS6eLdiaQ1h4moymSc3Vrvgk/CQ3SvtTwVqV7Hogv1FT
XOApvlFgVqVnP4i89wFbaR2+oElsa8RwI590DeYP+h9610SCYCPE+1npN4lme1EX3lFh9Ejkmm7KXcH0aw7T1u1UTVUixg/RZv5eYkfSx08I42v6tBSKJUA/5sgJpE3adXgMgggzJonvYDS+oYsGNL2EeCLsLBeKLMGz6cDYbalJFG+wxYYptoN1433GxHvEWtKiXuSbeF+hbrc
kzN+0MujZlEQ20IvgbkbK2ocZbDS7oHySQvc2tT6gIhaXRR021SM127ALmI95lSWIK/rvFJ8LNP5pqyFwval0ushXGURxSzuVfnoBFQjwoPqWY4GUIfebGnC92cZjy4nqloEFDTC0FeKI+zjPkuOXIos+UfTAufaqilw1QSQkTccWh5e2o1w7hEPXx0OyOldXGULvDMDqEncST+
UCOkPSlkRlBuNlqqQ0EDKcDobDATbkiM/i5tTq/kkeYcJkUPXNbvENVRi/0otCJ/nSHK+01Ea0yGavBMy1kc/LDFykC4o3xLiqApsB+9ZveMND0DUY6Ju5/dCWiAUoOO5igXOREJQywmZ13TOfc77b/Bc2z0v9puDon51+9NXlKc1fCde05jsMUAQ98P71hA8XpmpdBG8V9fnBd
NZr6aDjkqspEEeY44kc62/ocqtStQA3m7LHTcOypkgOjoZU1MFtXJE1eAibBC42eK0eufOWfvs31O2VnJNS1WNEoyPFbvumIg9QAR4jDeJKfMiIjHZw0HCubs6LRzH4KLSAIiM7yF6FtU+gfa81VoN+/bA3y6jGlAANf6rL8j89e/SMZSbB0i7s7qZLDUqRyFzcKWsClKObttMY
GPXR+w3m+BKr8APdZbrcGpyQOpR26+dZY+jxpa71Y55w3UwKVP50Df4VVo+ZWfHXI5Z0WW4XDfNe/cRp9aqBYlcCOT2dE67VjOgwVDYES7qiVe6g/fVNg6fLlr/44tqDhOF0Ty79T4URZrCnZPFgP+U4HR51o/v2c1sTIF/ON/FptgVgnKoNNIuFt6YCeEZ4sgd/zo83TkQuTd/
8RyCTof5aDpIlDkbEK+G/5e2vToze+PwvY30qV/EKk5GumoZsOvHzAl1dQpsJsINjN9aXcu7lJ+qH4e3M9VMCY5Ajlov5m3ni9tCnT/yF0il0tbOSQAESw/x/ZgsR2efvMfiGxX2KZ559nrOkk6RwKkkD/rl/hCarZ6rkAfbiuWl1Jl6g+mr+QIOPV+lV62VLagxQXLrjTuV05P
/8L8dVIEvyxa+vWZ6zoX5q4b0oJHglf+viGa2t18LugZ4lBU6djwNFNQJ08DYN9ttYAqY2gUN84b1HEr9Dp8rDIAg=

Сохранение пароля от сайта

Схема шифрования нового пароля

Если пользователю нужно сохранить новый пароль от сайта, браузер расшифровывает ключ EncKey, зашифровывает им нужный пароль и отправляет его в базу паролей.

Чтобы сохранить пароль в базу данных:

  1. Пользователь хочет сохранить новый пароль.
  2. Браузер запрашивает у пользователя мастер-пароль mPwd и генерирует ключ UnlockKey.
  3. С помощью ключа UnlockKey браузер извлекает закрытый ключ +PrivKey.
  4. С помощью закрытого ключа PrivKey браузер расшифровывает ключ EncKey.
  5. С помощью ключа EncKey браузер зашифровывает пароль и отправляет его в хранилище. После этого мастер-пароль и введенный пользователем пароль удаляются из памяти компьютера.

Расшифровка пароля

Схема расшифровки пароля

Ключ EncKey расшифровывается, когда пользователю нужно:

  • подставить пароль в форму входа на сайт формах авторизации или смены пароля;
  • открыть менеджер паролей;

Чтобы получить доступ к хранилищу паролей:

  1. Браузер запрашивает у пользователя мастер-пароль mPwd и генерирует ключ UnlockKey.
  2. С помощью ключа UnlockKey браузер извлекает закрытый ключ PrivKey.
  3. С помощью закрытого ключа PrivKey браузер расшифровывает ключ EncKey.
  4. С помощью ключа EncKey браузер расшифровывает или зашифровывает пароль.

При заполнении формы авторизации браузер расшифровывает пароль и вставляет его в форму, после ее отправки расшифрованный пароль удаляется из памяти компьютера.

Смена мастер-пароля

Схема изменения мастер-пароля

EncKey не связан с мастер-паролем математически, поэтому для смены мастер-пароля достаточно сменить парольную фразу UnlockKey, блокирующую PrivKey. Ключ EncKey может остаться прежним.

Примечание. Технически нет препятствий, чтобы сгенерировать новый EncKey, но мы считаем это нецелесообразным. Меняя только ключ UnlockKey, мы избегаем сложной, рискованной и долгой процедуры перешифровки всего хранилища паролей, неизбежной при смене EncKey.
Подробнее
  1. Браузер запрашивает у пользователя текущий мастер-пароль mPwd и генерирует ключ UnlockKey.
  2. С помощью ключа UnlockKey браузер расшифровывает закрытый ключ PrivKey.
  3. Браузер запрашивает у пользователя новый мастер-пароль mPwdNew.
  4. С помощью нового мастер-пароля mPwdNew браузер генерирует новый ключ UnlockKeyNew и с его помощью заново шифрует PrivKey.

Создание запасного ключа шифрования

Схема создания запасного ключа
Зачем нужен запасной ключ

Пользователь может забыть мастер-пароль. Для такого случая нужен способ восстановить доступ к хранилищу паролей — но такой, чтобы никто, кроме самого пользователя, не мог этого сделать.

Мастер-пароль нужен только для расшифровки закрытого ключа PrivKey, поэтому, чтобы получить доступ к хранилищу паролей, достаточно иметь копию этого ключа. Таким образом, задача восстановления мастер-пароля сводится к задаче безопасного хранения копии ключа PrivKey.

Запасной ключ шифрования RecoveryPrivKey — это и есть копия закрытого ключа. Некоторые системы защиты паролей предлагают пользователю хранить запасной ключ шифрования (или QR-код) в распечатанном виде. Мы считаем этот способ недостаточно безопасным, ведь распечатку можно украсть или потерять.

Мы предлагаем хранить запасной ключ на устройстве в зашифрованном виде, а ключ для его расшифровки RecoveryUnlockKey — отдельно от запасного ключа на сервере Яндекса. При этом, чтобы получить ключ с сервера, пользователю надо будет подтвердить свою личность, введя по памяти пароль от своего аккаунта на Яндексе.

Раздельное хранение запасного ключа шифрования и пароля к нему позволяют сбросить мастер-пароль, не создавая дополнительных уязвимостей. Если пользователь забыл мастер-пароль, то он запрашивает пароль от запасной копии закрытого ключа. Браузер расшифровывает RecoveryPrivKey, а затем зашифровывает его новым мастер-паролем, придуманным пользователем. Доступ к хранилищу паролей восстанавливается без необходимости менять ключ EncKey и перешифровывать пароли.

Этапы создания запасного ключа
  1. Пользователь соглашается создать ключ для сброса мастер-пароля.
  2. Браузер запрашивает у пользователя мастер-пароль mPwd и генерирует ключ UnlockKey.
  3. С помощью ключа UnlockKey браузер расшифровывает закрытый ключ PrivKey.
  4. Если пользователь не авторизован на Яндексе, браузер просит его авторизоваться.
  5. Браузер генерирует случайный 256-битный ключ RecoveryUnlockKey и записывает его в аккаунт пользователя на Яндексе.
  6. Браузер создает ключ RecoveryPrivKey. Для этого он делает копию расшифрованного ключа PrivKey и зашифровывает его, используя RecoveryUnlockKey в качестве парольной фразы.
  7. Браузер сохраняет RecoveryPrivKey на устройство в профиль браузера. В дальнейшем этот ключ хранится только на устройстве пользователя и не загружается на сервера Яндекса при синхронизации.
  8. Чтобы пользователь мог восстановить доступ к паролям с других устройств, при синхронизации браузер отправляет на все устройства пользователя ключ EncryptedRecoveryPrivKey — копию RecoveryPrivKey, зашифрованную при помощи UnlockKey.
  9. Как только пользователь синхронизирует другое устройство с сервером Яндекса, ключ EncryptedRecoveryPrivKey отправляется на это устройство и хранится там в зашифрованном виде.
  10. Когда пользователь в первый раз после синхронизации вводит на другом устройстве мастер-пароль mPwd, с ключа EncryptedRecoveryPrivKey снимается дополнительное шифрование. Он преобразуется в ключ RecoveryPrivKey, защищенный ключом RecoveryUnlockKey.
  11. RecoveryPrivKey сохраняется на устройстве и никогда не синхронизируется в незашифрованном виде. С его помощью, получив из аккаунта RecoveryUnlockKey, пользователь сможет сбросить старый мастер-пароль и установить новый.
Пример создания запасного ключа

Исходный закрытый ключ PrivKey:

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCu6h5dF90Ow7zwFE8KDbspsIbiAnlJJVdWE6BBSk9ecUnvlSeNZe/whbnvAkNF7o9wYstAdKUrKK3T+IJmgvhERgM
QoYlQZQmxm2EP9gsG84h0nWCVL82Sl1CA86Bt2Cr05UHGH9kWMC/FB7coPrURqXbMPtM0cwtWoIqzJJ6+EWkR/ucq8Bbrm9wnK1R3vFGXsFlTLWVmHEyY83gVnqwRR2u70b32j9qM91XevcRqWOYLNLIzio3FHTHuThsyy1cLYJsHPhc6ATqAKtYGcfWN4YPcIW7CG5uB3hFKi/
xGgOYxR38Ursw88rJqn1Od0QFpPLUxoPmXgydNYYIvE0iVAgMBAAECggEADWLWawpx/PjG41qyh9LwMWsUj4Rf8tScP/ali4mb1F74KRExozUbbT1Wsu9p5ZaxvIibBHZI06o7z16T4DOCu3reLi4mm5P373M0NOwAAQqvNTl8FD7BzUeuPggnDXD/LJnE9FwomXWbmkkSX86Yv
d7JvCzMrhVl1z3XD4msamA7VV/NdivL0Mn5cq5F2KGPLxqbH/nLCgxq4/Z0nAWIFJfGCx8C8sRALv2g7qK5PJVQ4VEttLpF6Qco31AwQQ0S2sWer+0y7m+GfZ+1tfdCE6ceZuEt4UsgF7q5at7lBfGHDdmH0F+sOYn+6+szJBPDLUFpO5d6udKGAiJZog23CwKBgQDWoJyFi/iQ
9ww2GzSanRDehNTLvNFqnDMGkrVNwAHhQ1FgXKDeW38ELPHQn21yt4GYzql/yHhS823ce7zLkHvKOcCfHWwHFfJimKqp2Rdp9MU6bU6WgZCNDkTr+AvNpyQ1FmiO/gc6qyB93fe+2RvHHZJ0YXuSG4XDbbQ45rsoKwKBgQDQocPUFV7iLvawmr3qRa8Bn/+0WXHzzdf5Nm8i4iy
faaVdrpvuFl9eIkVGjfYO65jHA+93oru7gWsLg9EPDdBBuADWf1PlIZw1EsykPnRLMBuLQFiPmHZdZSMhNWQWy1T8EOnTsEp9KujerQ9Yk3Uhvln3DrzuWMilqJWj6YQyPwKBgQC9TXRApjBbTEtM/bnsFVTnrykxeh0LdzHaPlQDe7MsyH9iCtEoznK9cBbo93VFlW2NJdqCho
L6RxNDQTBIK+vDdiTbMswxg74CEL2WiZAJOIcs/XQvc5/XihpoNqPSg/V/jYAzfwNJT96cpcb6YewKN58RX1nqiLP2pzAqb/freQKBgCsFUGZJSdmGKaRdJFBMsju5jHbaAt9tUN241c3xqZXtqQXaXZkIz/2PP42+9EA7YLOZIiYfTmrp0vL66X8bMBh9It8YPmp/NcDT8ZLkt
gJTFzrtt9VUcQPtOQM+CTeSEiIwMqdOMO4CjSZttT5kmcCticuiJF9Zu3Y9fy3flzztAoGAMsTJRcyRe0qi0Z4nfpQkND6zPCUiTZwgvb51jQxapgWcR1NYRM0oAocqgftHGPXkxMUz+g08Mg+nzL4Vh8R6UQZE+k1LLOnLWpqRb9I23/hqudld5MJYq5e1tOJ8cwcJ+k6YRxN+
4qpW2qvQSH2g/rh+ynkHeQHxl9OAuRYTYNg=

Запасной ключ шифрования RecoveryUnlockKey:

d84eaaa2d1a44d7716b59129c9b48b0339b97eb3d3e28405a6e212b8fc82535c

Копия закрытого ключа RecoveryPrivKey, зашифрованная RecoveryUnlockKey:

NJdSM0ZBf4IbLCcZIcCex/ul3UxkOVdl+05WyRg9yLwP97EKMzy4yMXvLLiq27H/xxfzkAs7DaYWSTqNyW/iGIidpUcyMKffM+P2i4vSjngTpVMQQl0ISQ1P2+Ym5dsUOtMHNh5SPQOVvcgZ0Nvq4GVVMVoX6HlnLsK3EmwBOmlMuuWhHbMPRaiJl4xCRZlmTQlRNbhSQEGNHkcDTPKUG4Li35OSKnZRO2WVUfdgNJeUtUWWncoSLwnxzBqdCvYzdicn0DtagI0aNOoXZgM1gCCfiwIJH5TcrAMELGxbjXo+74hjJ3QdhUqzsHTnghOxp+R8oU6ReGT84J1vhlkhwBX9/kkX+7GPKnJHWt2jASdTxmdf27AA34/e+TeVThPyMQWlVG9GTptzrGjsoAomvWKcJmUJwGlUNytqe9c47iKyeqruzdtvntPeZi5BKmfRdIXjzsmtAnUftLjGLF990t3vmSN0VUrXBNVWsMycvBvAsyOhHjHLfJbHDfKFOgJouBWruHRblpDiWBYlrH/Q4yyEAHb/tDUANu4p3D6sySI8WHLCGXVvXT3V2qbDs82kFETZYwwe6m7T2bjNToh4Vp04KzWCeaq9MMWk0nRIkXogZFN0QzM5Fdm8LMCmecFggGEbcIIdH3hdgqmhmhj8beU6WmxinFOVAGTJg+TnLWPDoFaAI/BHVDUjpICu4iY5jjO4IVwrDqN/EeBC4e98xl+Oi0cXfkwlb+OAZMQBB6r2U5WvawcdLeQVb/GP7N8/n5f6FxVEYfN/jQhe3UNEy7u4QUSXg2o85geZXKJcchxIQ69qfi4sIYqfVqwKIeBl8pZB3L17ErhLaADuEnzWq2B3ZSZswd0HxHIpKYO42OuILEVMyqEMg7QYofTeywa8CReq/Dsd5Jhke7WP5/fAoy7dlfYtkvjQeXIEdL2x6j5ubYUo+dZQpnGJpU/klGJb4qhtVgjx33pEX5RelZNDStDCcUDxUsEluLCISOfsL81w/dunOVtksL9muvn786D1EkuoefGP1KBku8hYW8K19ysF+tD0LI1rEOr6stFFq4yCQUnC+fTex0/gWyrhEp3qEeeG/FHTy60P9vGQvmf0AOXz+Qm0pKB0W0qyHeusVd9EifhkcxMHRYAUWU1tPwDv1++yU6qKLdp7LtMKI1jdoVcH9Kl7oeFhlQpP5/vhXbWdROdaCpdJ41BB3/VfhhfhHqwkwRUZaM3JaquWoL0+TlRkqvd8THRIP5SmSC4w5UtjJKELnvU/WpCsUPjG3Ruqj/drs1uatOYTZJiaalMPP8UjBzdJ6Z5H7MYPiVH2Z7FqeXe+RGTWC9q+jbcGW7D2yjX7WAGh200GlR8jp64HAK/QVvnXyldUd98+BqqDNcct0BjFIXBQPfq4ee3MPyi9WLnFvVMTIEaQp/7KjDarwwUb4BDBmUUuVspMbj/7ijVWX/FT7HYHS+NcU+5t3LjFqoJfHUO4e9g5FpRc3eiIOS6BmZ8XI9zGIpjKOjDOoUcxSmeY06Fx22QUlSsDwGPvyq4bzs+4MNHNmxLjZgSCdh6QzjA4qv7gE0HKsBwh4xRJK8oidvC8kRL5i6h4sF5CyzY7W+mSUaa6nQ+jXlmm7Y8ApnTcFly4ybXWZvp+7lEhfHeZsoRUTdxgLjzaPMeAc+U=

Ключ EncryptedRecoveryPrivKey, зашифрованный UnlockKey:

7oXPhdrujp/l/wEzBYRFC1ynD2AQATdSkOckzXwiRMeWB4czZjSEZ3u0ZWYy+Hinx80zupFS3A0n7fnzB0Ogs6h6SsMlD1WkImsZ3XaSf98u8VCVm7cILvOvNz5j2xzgFVBmQiyTbgf5NSIwsJte7Uz9p6Bb5fCRcV6sAzt13IdBSXJ6Xa11tUqiMZXn+JYzCzHyh7zAWXr41e9TaWv6mJ3EWw28OSgGD4eeLOxJ3UihzUaFYtlXmJkmUaVZcZwIOXua58FABJqu6IXIgC/Ssoq/biq6sepfVHY4xMgjkfb/KlJzZPjWkmBUJiHgvAibqQDK+lv/TtTwVRSoC4z80SjvnJ37Z4IFE40rSb84A30Va7iHGNeeJx4vqWV8oZJFEwyb9RbuQNICvNo5VkJx465N9d2Nb9iTJx+YhVLAmmtS4kyYk+7CMtIpH9+qM9cJHbgqpSpZ+kr/Go+ljlC0jbCaNVtZEvGMCLmNCGzhsLXbtCwM1zcIQcCvVPCI1jGGLi39P2UYa1pfh78FceCU7558DPiNDWk1VGBYbRBkZ2u1A5Oei+mUpSUdeMRi0jWp2F2SVMX7mzP9njOj6kqmEymgrjSpyA74Cfb2bkXi2nT9bhdOfYZxphBPj8346jZ38tACTLbWDmvbuMt09G8noaAeovZwefkuDzDNHuCz6XJ34nN/LiclmD7MxS5OHHGkfyyLyUhTe3TqjZanNp9bXvs2DVGKVBcY0Q5+Xpt+sNTBCPjZUqTsFOnu06Gj5PQGuOQHXcKWIzQF3vILG84lFF+Eg+5j/3c5YaCoPCzF2kkeqnGe7B/EPeEeEKNJ8ZOOvRWcdxDTHQhpu+SvT98V5X/8uJErqM+pA4FDZ5wOmUD0mSXR4pbv/geD2wlzeQV1AJs2nBR4356TBL9kLOxQu9pDcdsd45PniWzR9leqCYsILzVP8wSVh3gBl7o5fhRnz/YeyFkXF5FUc0hPUG9exAy83zir2i9G1d7DqDvYhYoHUd4lFrezz9p4TNy3QPJzH77fFnbCq7PbuLvbsdwjBzm/h4zab5TSJ2NE543rmo3R1JgNMm3HFbNm69Jj5VoFtODdyFMSnGIM3wqqaiPVAj6oMovCgvqvJ8HcspaLPCczUp+cMdb0HlIRiUKAuVrEqMg4kTs2Mzzu53Q3queeo3jnwWvnclGZnZf1p1uO89n6YBe7BWmFrgO4vtbiziUS1y09PdxBDeUibuzEFj1m8Tevkc9ET9IMtEYPF7M6fRCy7xU63jZDOwOZZSrYNqKVBPabSnRodgn9Mjznn/wDWrQEsdEz6paABZUq58AtGNO/pb5poF8CWmRIEtFn0n9/47kESTcoZM1ycgtGPiZEeNDF0/LndCAmLWiEPEUHuVBfzcyJSD8AJ5FYFJOdx8l7LsWeKIrwOJrMMWsLz5JAoj1pMfJe8P6kgr6+6SIvCDfKiKcJqUrIukUvM7p0TSkbC5Kjt9MskmIRY2UAGvIEYdXscpegSSPOFXPP6zfBbzRMoVSnr89dbDNjfN0qneGI2JLvtwlGKLe1oxodFY+hHE1L76Yz7KX9hfCFT+hDJs3HESzRcMVdIKoym7ikA1PGOn8ioqDFbvsDkNH0vgVtfvb/afH68/MnLPUGVpTkhJzGC478pOZ6tJdwp9ehK0ItqPZkV4UgTaR6oSH2LF/Gne488lACgXIVfdUA38vf

Сброс забытого мастер-пароля

Схема сброса мастер-пароля
Внимание. Пользователь может сбросить мастер-пароль, только если ранее был создан запасной ключ шифрования. Сбросить мастер-пароль он может либо на устройстве, где был создан запасной ключ, либо на устройстве, где после синхронизации появилась копия закрытого ключа EncryptedRecoveryPrivKey и была там расшифрована (после синхронизации пользователь хотя бы раз успешно ввел мастер-пароль на этом устройстве). После смены мастер-пароля не требуется заново генерировать запасные ключи, потому что основной и запасной ключи зашифрованы разными паролями, независимо друг от друга.
  1. Пользователь инициирует сброс мастер-пароля.
  2. Браузер запрашивает у пользователя новый мастер-пароль mPwdNew.
  3. Если пользователь не авторизован на Яндексе или авторизовался больше 5 минут назад, браузер просит его подтвердить свою личность, введя пароль от аккаунта на Яндексе. Это позволяет избежать ситуации, когда в момент отсутствия пользователя кто-то другой мог бы воспользоваться его устройством для сброса мастер-пароля.
    Примечание. При данной авторизации подстановка паролей не работает. Если пользователь не помнит пароль от своего аккаунта на Яндексе, сбросить мастер-пароль он не сможет до тех пор, пока не восстановит доступ к аккаунту.
  4. Браузер запрашивает у Паспорта RecoveryUnlockKey и в случае успешной авторизации получает его.
  5. С помощью ключа RecoveryUnlockKey браузер расшифровывает RecoveryPrivKey. Сразу после этого ключ RecoveryUnlockKey удаляется из памяти устройства и из аккаунта пользователя на Яндексе.
  6. С помощью нового мастер-пароля mPwdNew браузер заново шифрует PrivKey, создав новый ключ UnlockKey.
  7. Браузер генерирует новый запасной ключ RecoveryPrivKeyNew и отправляет его на сервер Яндекса.

Синхронизация паролей

Синхронизация хранилища паролей

При синхронизации хранилища, закрытая часть которого защищена мастер-паролем, на сервер отправляются:

  • ключ EncKey в зашифрованном виде;
  • открытый ключ PubKey;
  • закрытый ключ PrivKey в зашифрованном виде;
  • хранилище паролей, закрытая часть которого (пароли и примечания) зашифрована;
  • запасной ключ EncryptedRecoveryPrivKey в зашифрованном виде (если он был создан).
Примечание. Ключ UnlockKey на сервер не передается и на компьютере не хранится — он вычисляется каждый раз после ввода пользователем мастер-пароля.

В процессе передачи с устройства на сервера Яндекса и обратно ваши данные остаются в безопасности за счет следующих факторов:

  • протокол HTTPS защищает передаваемые данные в целом;
  • использование GСM защищает открытую часть записей от подмены;
  • используемое браузером шифрование защищает закрытую часть хранилища паролей;
  • ключ шифрования защищен мастер-паролем, поэтому никто, даже Яндекс, не сможет его расшифровать.

Таким образом, на серверах Яндекса хранятся в открытом виде адреса сайтов и логины пользователя на этих сайтах, но пароли, примечания и ключ шифрования EncKey хранятся в зашифрованном виде. При этом на сервера Яндекса не загружается информация, необходимая для их расшифровки.

Синхронизация запасного ключа

Запасной ключ шифрования RecoveryPrivKey создается на устройстве и хранится на нем в зашифрованном виде. Оставлять этот ключ только на устройстве, где он был создан, нельзя — пользователь может потерять устройство и не сможет восстановить доступ к паролям. Создавать запасной ключ на каждом устройстве вручную тоже не годится — можно случайно остаться с тем устройством на руках, на котором ключ создать забыли. Передавать ключ на другие устройства через синхронизацию небезопасно, так как пароль от ключа хранится на сервере Яндекса.

Чтобы решить все эти проблемы, на RecoveryPrivKey накладывается дополнительное шифрование ключом UnlockKey. Для расшифровки UnlockKey нужен мастер-пароль, который нигде не хранится, поэтому получившийся в результате ключ EncryptedRecoveryPrivKey можно спокойно синхронизировать.

После синхронизации на каждом синхронизируемом устройстве в момент первого правильного ввода мастер-пароля с EncryptedRecoveryPrivKey снимается дополнительное шифрование. Восстановленный ключ RecoveryPrivKey остается зашифрованным ключом RecoveryUnlockKey. Последний хранится в аккаунте пользователя на Яндексе и может быть получен только после явного ввода пользователем пароля от аккаунта. Копия ключа RecoveryPrivKey хранится в профиле браузера на устройстве.

Таким образом пользователь может восстановить мастер-пароль с любого синхронизированного устройства, если он хотя бы раз после синхронизации вводил на нем мастер-пароль. При этом во время передаче по сети запасной ключ остается защищенным.

Этапы шифрования запасного ключа в процессе синхронизации
  1. Браузер создает копию ключа RecoveryPrivKey и шифрует ее при помощи ключа UnlockKey.
  2. При синхронизации получившаяся копия EncryptedRecoveryPrivKey отправляется на сервер Яндекса.
  3. Как только пользователь синхронизирует другое устройство с сервером Яндекса, ключ EncryptedRecoveryPrivKey отправляется на это устройство и хранится там в зашифрованном виде.
  4. Когда пользователь в первый раз после синхронизации вводит на другом устройстве мастер-пароль mPwd, с ключа EncryptedRecoveryPrivKey снимается дополнительное шифрование. Он преобразуется в ключ RecoveryPrivKey, защищенный ключом RecoveryUnlockKey.
  5. RecoveryPrivKey сохраняется на устройстве и никогда не синхронизируется в незашифрованном виде. С его помощью, получив из аккаунта RecoveryUnlockKey, пользователь сможет сбросить старый мастер-пароль и установить новый.