Master Password — различия между версиями

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:28, 27 мая 2017.
(Применение)
 
Строка 128: Строка 128:
 
==Применение==
 
==Применение==
 
[[File:thumb-process-black.png|300px|right]]
 
[[File:thumb-process-black.png|300px|right]]
Ожидается, что пользователь запомнит следующую информацию:<ref group="Источник">te-st.ru [Электронный ресурс]: Master password / Дата обращения: 14.05.2017. Режим доступа: https://te-st.ru/entries/master-password/</ref>
+
Ожидается, что пользователь запомнит следующую информацию:<ref group="Источник"> Master password//te-st.ru [2017-2017]. Дата обращения: 14.05.2017. URL: https://te-st.ru/entries/master-password/</ref>
 
*Их полное имя (например, Роберт Ли Митчелл):Это соль для генерации мастер-ключа.
 
*Их полное имя (например, Роберт Ли Митчелл):Это соль для генерации мастер-ключа.
 
*Их личный мастер-пароль (например, розовая пушистая дверная коробка):В этом секрет генерации мастер-ключа.
 
*Их личный мастер-пароль (например, розовая пушистая дверная коробка):В этом секрет генерации мастер-ключа.
Строка 158: Строка 158:
 
Master key - это 64-байтовый секретный ключ, сгенерированный путем выполнения дорогостоящего деривации ключа с использованием мастер-пароля пользователя, засоренного их полным именем. Он представляет собой глобальный секрет пользователя.
 
Master key - это 64-байтовый секретный ключ, сгенерированный путем выполнения дорогостоящего деривации ключа с использованием мастер-пароля пользователя, засоренного их полным именем. Он представляет собой глобальный секрет пользователя.
  
Цель этого процесса - сдерживать любые попытки грубого принуждения мастер-пароля пользователя от известного пароля сайта. Вывод ключей осуществляется с использованием алгоритма шифрования, который гарантирует, что процесс достаточно трудоемкий и ресурсоемкий, чтобы сделать грубую форсировку недопустимой атаки.<ref group="Источник">masterpasswordapp.com [Электронный ресурс]:
+
Цель этого процесса - сдерживать любые попытки грубого принуждения мастер-пароля пользователя от известного пароля сайта. Вывод ключей осуществляется с использованием алгоритма шифрования, который гарантирует, что процесс достаточно трудоемкий и ресурсоемкий, чтобы сделать грубую форсировку недопустимой атаки.<ref group="Источник">The Master Password Algorithm //masterpasswordapp.com [2017-2017]. Дата обращения: 14.05.2017. URL: http://masterpasswordapp.com/algorithm.html</ref>
The Master Password Algorithm / Дата обращения: 14.05.2017. Режим доступа: http://masterpasswordapp.com/algorithm.html</ref>
+
  
 
Вывод ключа вызывается полным именем пользователя, чтобы предотвратить создание радужных таблиц в алгоритме. Эта соль не является секретом, и полное имя пользователя выбрано, потому что это вход с достаточно высокой энтропией, хотя его невозможно забыть.
 
Вывод ключа вызывается полным именем пользователя, чтобы предотвратить создание радужных таблиц в алгоритме. Эта соль не является секретом, и полное имя пользователя выбрано, потому что это вход с достаточно высокой энтропией, хотя его невозможно забыть.

Текущая версия на 14:28, 27 мая 2017

Master Password
Login.png
Создатели: Мартен Биллемонт
Выпущена: 15 июня 2012
Постоянный выпуск: 19 апреля 2015
Состояние разработки: Активно
Написана на: Java, C, javascript
Операционная система: Microsoft Windows, Unix-like, включая OS X, iOS и Android
Локализация: English
Лицензия: GNU General Public License
Веб-сайт masterpasswordapp.com

Мастер-пароль (англ. Master password) - это алгоритм, разработанный Маартеном Биллемонтом для создания уникальных паролей воспроизводимым образом. Он отличается от традиционных менеджеров паролей тем, что пароли не хранятся на диске или в облаке, но каждый раз воссоздаются с использованием информации, введенной пользователем. [Источник 1]

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

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

Компоненты

Существует несколько компонентов. В качестве конечного пользователя вы можете в настоящее время использовать приложение iOS, приложение Android, приложение OS X, приложение для рабочего стола Java, приложение C CLI или приложение Java CLI. Есть также несколько компонентов, полезных разработчикам.

core/c: Это ссылочная реализация алгоритма мастер-пароля, написанная на C.
core/java/algorithm: Это реализация Java алгоритма Master Password.
core/java/model: Это объектная модель для упрощения использования Главного пароля Java-приложениями.
core/java/tests: Это интеграционные тесты Java, предназначенные для обеспечения того, чтобы мастер-пароль работал должным образом.
platform-android: Это официальная реализация Microsoft Master Password на Java.
platform-darwin: Это официальная реализация мастер-пароля для iOS и OS X в Objective-C.
platform-independent/cli-c: Это независимая от платформы консольная реализация Master Password, написанная на C.
platform-independent/cli-java: Это не зависящая от платформы консольная реализация мастер-пароля, написанная на Java.
platform-independent/gui-java: Это независимая от платформы настольная реализация Master Password, написанная на Java.
platform-independent/web-js: Это независимое от платформы браузерное приложение для мастер-пароля, написанное на JavaScript.


Сборка и запуск

MacOS или iOS

Убедитесь, что у вас есть все соответствующие подмодули. Перейдите в платформу-darwin и откройте MasterPassword.xcworkspace в Xcode. Выберите желаемую цель из селектора схем и создайте, запустите или заархивируйте.

Web

Убедитесь, что у вас есть все соответствующие подмодули. Перейдите в платформу-независимый / web-js и откройте index.html в своем браузере. Вы должны иметь возможность запускать это локально, нет необходимости в хостинге или сервере приложений. Ява

Перейдите в каталог gradle и запустите

./gradlew build. Затем будут созданы все компоненты Java:

Независимая от платформы

 / gui-java / build / distribution: содержит архив с GUI основного пароля Java. Распакуйте его и запустите скрипт gui.

Независимая от платформы

 / cli-java / build / distribution: содержит архив с интерфейсом командной строки Master Password Java.

Распакуйте его и запустите скрипт cli.

   Platform-android / build / outputs / apk: содержит пакет приложений для Android. Установите его на Android-устройство.

Обратите внимание, что для создания приложения для Android вам необходимо установить Android SDK и установить переменную окружения ANDROID_HOME в ее местоположение или файл gradle / local.properties с его местоположением, например. (Для пользователей Homebrew, которые установили SDK, используя установку android-sdk для установки):

   sdk.dir = / USR / местные / Opt / Android-SDK

Native CLI

Перейдите в каталог, независимый от платформы / cli-c, и запустите ./build. Затем будет создан собственный клиент командной строки.

Когда сборка завершится, вы получите двоичный файл mpw, который вы можете использовать. Вы можете скопировать его в свой PATH или использовать сценарий ./install, чтобы помочь вам в этом.

Например:

 ./build && sudo ./install

Mpw -h

Как правило, это все, что вам нужно сделать, однако обратите внимание, что есть несколько зависимостей, которые необходимо выполнить, в зависимости от того, какие цели вы строите (по умолчанию создается только цель mpw):

   mpw

Реализация C зависит либо от libsodium, либо от криптографии Tarsnap, и от opensl-dev.

Мы рекомендуем вам установить libsodium. Если libsodium не установлен, когда выполняется ./build, скрипт попытается загрузить и статически связать скриншот Tarsnap. Шифрование Tarsnap зависит от того, установлен ли openssl-dev.

Если у вас включен mpw_color (он включен по умолчанию), сборка также зависит от ncurses-dev для связи с терминалом.

   МСР-bench

Этот инструмент сравнивает производительность нескольких криптографических алгоритмов, включая bcrypt. Скрипт ./build попытается автоматически загрузить и статически связать bcrypt.

   MPW-tests

Этот инструмент выполняет набор тестов, чтобы гарантировать, что алгоритмы будут генерироваться с помощью правильных паролей при различных обстоятельствах. Набор тестов объявлен в файле mpw-tests.xml, который должен существовать в текущем рабочем каталоге при запуске инструмента. Кроме того, libxml2 используется для анализа файла, поэтому эта цель зависит от того, установлен ли он при запуске ./build.

Наконец, есть несколько способов изменить процесс сборки.

Чтобы создать дополнительные цели, установите переменную среды target:

  Target = 'mpw mpw-tests' ./build

Для передачи дополнительных аргументов компилятора, например. Добавьте путь поиска библиотеки, передайте их в качестве аргументов скрипту:

 ./build -L / usr / local / lib

Есть несколько переключаемых функций, чтобы изменить их, передать их как переменные окружения:

 Mpw_color = 0 ./build

В настоящее время существует только одна функция переключения:

   Mpw_color: [по умолчанию: 1] Colorized Identicon, зависит от ncurses-dev.

Применение

Thumb-process-black.png

Ожидается, что пользователь запомнит следующую информацию:[Источник 2]

  • Их полное имя (например, Роберт Ли Митчелл):Это соль для генерации мастер-ключа.
  • Их личный мастер-пароль (например, розовая пушистая дверная коробка):В этом секрет генерации мастер-ключа.
  • Название сайта (например, apple.com): Пользователь выбирает имя для каждого сайта. Голосовое доменное имя является идеальным выбором.
  • Счетчик паролей на сайте (по умолчанию: 1): Это целое число, которое может быть увеличено, если пользователю нужен новый пароль для сайта.
  • Тип пароля сайта (по умолчанию: длинный пароль): Этот тип определяет формат выходного пароля. Его можно изменить, если политика паролей сайта не принимает пароли этого формата.

На практике секретный мастер-пароль - это единственное, что нужно помнить пользователям. Их полное имя, они, надеюсь, будут помнить независимо. Если сайт всегда назван по имени голого домена, его не нужно явно запоминать, но его можно найти в адресной строке браузера. Счетчик и тип нужно помнить, только если они изменены со своих значений по умолчанию.

Алгоритм включает в себя следующие шаги:

  1. Вычислите мастер-ключ из имени пользователя и главного пароля.
  2. Вычислите семена шаблона из имени и счетчика сайта.
  3. Кодировать пароль сайта с помощью шаблона типа сайта.

Чтобы обеспечить кросплатформенную совместимость, мы определяем все данные как потоки байтов, используя следующие кодировки для других типов:

  1. Строки (например, "com.lyndir") закодированы как UTF-8.
  2. Числа (например, длина имени) кодируются как 32-битные беззнаковые целые числа в сетевом порядке байтов.

Алгоритм

Алгоритм включает в себя следующие параметры:

  1. name: полное имя пользователя, используемое в качестве соли. Полное имя пользователя выбрано, поскольку оно обеспечивает достаточно высокий уровень энтропии, хотя вряд ли его можно забыть.
  2. master_password: секрет, используемый для создания мастер-ключа.
  3. site_name: уникальное имя службы, для которой предназначен пароль. Обычно голый доменный домен является хорошим выбором.
  4. counter: Целое число, которое может быть увеличено, когда служба запрашивает новый пароль. По умолчанию это 0.
  5. password_type: Тип пароля определяет длину и структуру результирующего пароля, см. Ниже.

Генерация master key

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

Цель этого процесса - сдерживать любые попытки грубого принуждения мастер-пароля пользователя от известного пароля сайта. Вывод ключей осуществляется с использованием алгоритма шифрования, который гарантирует, что процесс достаточно трудоемкий и ресурсоемкий, чтобы сделать грубую форсировку недопустимой атаки.[Источник 3]

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

salt = "com.lyndir.masterpassword" + length(name) + name
master_key = scrypt(master_password, salt, 32768, 8, 2, 64)

Шаблон SEED

С известным основным ключом мы можем перейти к вычислению SEED шаблона для сайта. SEED шаблон является, по существу, сайто-специфичным секретом в двоичной форме.

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

Мы используем алгоритм HMAC-SHA-256 для получения достаточно большого количества SEED для последующего шага кодирования.

seed = hmac_sha256(master_key, "com.lyndir.masterpassword" + length(site_name) + site_name + counter)

Пароль сайта

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

У нас есть две дополнительные проблемы, которые необходимо решить: выходной пароль должен быть простым для пользователя, чтобы он мог читать с экрана и набирать текст с клавиатуры или смартфона. Кроме того, он также должен быть совместим с политиками паролей большинства сайтов. Эти правила часто ограничивают типы паролей, которые пользователи могут назначать своим учетным записям, пытаясь скомпрометировать плохие привычки к паролям, но часто имеют обратный эффект, особенно на защищенные пароли. Как правило, это побочный эффект плохой обработки паролей сайта (например, хранение паролей с явным текстом в базе данных).

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

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

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

templates = [ "CvcvCvcvnoCvcv", "CvcvnoCvcvCvcv", "CvcvCvcvCvcvno", ... ]
template  = templates[ seed[0] % count( templates ) ]

Теперь, когда мы знаем, какой шаблон использовать для создания нашего выходного пароля, осталось только переформатировать шаблон и создать для каждого шага характер вывода пароля. Когда мы перебираем шаблон (индекс i), мы смотрим в группу символов, идентифицированную символом (строка passChars) в шаблоне с индексом i.

Мы используем значение байта SEED шаблона в индексе i + 1 по модулю количества символов в символьном классе, чтобы определить, какой символ (passChar) в классе использовать для выходного пароля с индексом i.

passChar    = passChars[ seed[i + 1] % count( passChars ) ]
passWord[i] = passChar

Результатом является закодированная строка passWord, которая содержит пароль, сгенерированный для сайта, например:

CuzaSasy3*Rimo

Типы шаблонов паролей

Master password определяет следующие типы паролей и их шаблоны:

Тип: Максимальный пароль безопасности

  • anoxxxxxxxxxxxxxxxxx
  • axxxxxxxxxxxxxxxxxno

Тип: Длинный пароль

  • CvcvnoCvcvCvcv
  • CvcvCvcvnoCvcv
  • CvcvCvcvCvcvno
  • CvccnoCvcvCvcv
  • CvccCvcvnoCvcv
  • CvccCvcvCvcvno
  • CvcvnoCvccCvcv
  • CvcvCvccnoCvcv
  • CvcvCvccCvcvno
  • CvcvnoCvcvCvcc
  • CvcvCvcvnoCvcc
  • CvcvCvcvCvccno
  • CvccnoCvccCvcv
  • CvccCvccnoCvcv
  • CvccCvccCvcvno
  • CvcvnoCvccCvcc
  • CvcvCvccnoCvcc
  • CvcvCvccCvccno
  • CvccnoCvcvCvcc
  • CvccCvcvnoCvcc
  • CvccCvcvCvccno

Тип: Средний пароль

  • CvcnoCvc
  • CvcCvcno

Тип: Короткий пароль

  • Cvcn

Тип: Основной пароль

  • aaanaaan
  • aannaaan
  • aaannaaa

Тип: PIN

  • nnnn

Если каждая из букв выше расширяет любой из символов в их соответствующей группе символов:

Символ шаблона: V

  • AEIOU

Символ шаблона: C

  • BCDFGHJKLMNPQRSTVWXYZ

Символ шаблона: v

  • aeiou

Символ шаблона: c

  • bcdfghjklmnpqrstvwxyz

Символ шаблона: A

  • AEIOUBCDFGHJKLMNPQRSTVWXYZ

Символ шаблона: a

  • AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz

Символ шаблона: n

  • 0123456789

Символ шаблона: o

  • @&%?,=[]_:-+*$#!'^~;()/.

Символ шаблона: X

  • AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz0123456789!@#$%^&*()

Источники

  1. Master password // Википедия. [2017—2017]. Дата обновления: 12.10.2015. URL: https://en.wikipedia.org/wiki/Master_Password (дата обращения: 13.05.2017)
  2. Master password//te-st.ru [2017-2017]. Дата обращения: 14.05.2017. URL: https://te-st.ru/entries/master-password/
  3. The Master Password Algorithm //masterpasswordapp.com [2017-2017]. Дата обращения: 14.05.2017. URL: http://masterpasswordapp.com/algorithm.html