README.md

    Redpass: консольный менеджер паролей

    redpass – менеджер паролей для персонального использования, предназначен для защищенного хранения и извлечения паролей доступа к сайтам, устройствам в операционных системах Linux/MacOS в консольном режиме.

    Справка по использованию

    Параметр --help,-h выдаёт справку по использованию программы.

    redpass -h
    Redpass: консольный менеджер паролей. Версия: 0.1.44-SNAPSHOT. Red Stars Systems, 2025 г.
    Запуск: redpass [<url>] [<login>] [opts]
    
    Под <url> понимается любое место, устройство или сайт. Например: rssys.org, "ssh:192.168.1.1", "pin:ipad4"
    
    Примеры: `redpass myrouter admin -g` - создаст новый пароль в базе и поместит его в буфер обмена.
             `redpass myrouter admin`    - извлечёт пароль из базы и поместит его в буфер обмена.
             `redpass myr`               - если подстрока url уникальна, то логин указывать не обязательно.
             `redpass -s ssh`            - поиск всех url по подстроке `ssh`.
             `redpass -s :login admin`   - поиск всех логинов по подстроке `admin`.
             `redpass -i ~/mycreds.txt`  - импортировать данные.
    Опции:
      -f, --file      ~/.redpass/redpass.vault Полный путь к файлу с базой паролей.
      -g, --generate                           Генерация нового пароля.
      -i, --import    <имя файла>              Импортировать логины и пароли из файла. Формат файла: ^url логин пароль\n.
      -l, --length    32                       Длина генерируемого пароля.
      -p, --print                              Печать таблицы известных паролей на экран.
          --print-key                          Печать ключа в виде hex-строки, выработанного на базе мастер-пароля.
      -q, --quiet                              Подавить вывод лишней информации на экран.
      -r, --remove                             Удаление пароля из базы.
      -s, --search                             Поиск пароля по url или его части.
    

    Зачем нужен еще один менеджер паролей?

    Я хотел:

    1. Написать нечто подобное сам;

    2. Не зависеть от менеджеров паролей, принадлежащих большим корпорациям;

    3. Иметь надёжное хранилище паролей для desktop-систем MacOS/Linux;

    4. Чтобы для защиты использовались российские криптографические алгоритмы;

    5. Удобно извлекать пароли при работе в командной строке к различным системам.

    Большие корпорации владеют данными пользователей и могут менять правила управления и доступа к ним вне зависимости от желаний пользователей. Менеджер паролей встроенный в ОС контролируется создателями ОС. Менеджер паролей в браузере контролируется создателями браузера. У нас нет возможности проверить кто имеет доступ к паролям при использовании вышеуказанных парольных менеджеров. Да и сами эти парольные менеджеры не понятно как контролировать.

    Такие менеджеры как LastPass и любые западные аналоги остались в прошлом. У них другая юрисдикция и непредсказуемые правила игры. Безопасность облачных парольных менеджеров не вызывает вопросов – они являются недоверенными технологиями, находящихся в руках неизвестно кого.

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

    Почему ГОСТ и российские алгоритмы? Во-первых, любые иные алгоритмы управляются и изменяются по зарубежным стандартам, которые для нас в непонятном статусе и, что важно, под экспортными ограничениями. Во-вторых, Россия одна из немногих стран, которая обладает независимой криптографией и солидной научной базой в этой области. В третьих, многие западные алгоритмы, например SHA-256 подвержены огромному ускорению на GPU/ASIC устройствах. Это создает условия для атак грубого перебора и быстрого вскрытия парольной базы, защищенной паролем с применением алгоритма PBKDF2. (Для справки, для защиты базы паролей, как правило, используется мастер-пароль, на основе которого вырабатывается секретный ключ шифрования базы паролей, с применением алгоритмов: PBKDF2-HMAC-SHA256 или их вариаций. Рекомендуемое увеличение количества итераций для этих алгоритмов с 10000 до 600000 за последние годы говорит само за себя.)

    Российская функция хеширования (Streebog) судя по открытым данным, очень “неудобна” для GPU/ASIC. Буквально в 1000+ раз медленнее на GPU/ASIC, но быстрая на обычных CPU, что является очень хорошим свойством для применения алгоритмов типа PBKDF2, для выработки ключа шифрования базы паролей.

    Российский алгоритм шифрования (“Кузнечик”) относительно новый и проектировался с учётом всех известных атак на блочные шифры. По крайней мере это алгоритм знают тут и он хорошо исследован. Популярный шифр AES или любой иной для нас под экспортными ограничениями.

    Установка

    Скачайте бинарный файл redpass под нужную ОС и архитектуру процессора по ссылке последнего релиза.

    Для запуска в любой ОС можно также воспользоваться jar-файлом, но это потребует установки java и запуск будет медленнее.

    Распакуйте архив бинарного файла и скопируйте исполняемый файл в каталог /usr/local/bin под именем redpass.

    После этого попытайтесь запустить: redpass -h. Если появилась справка - установка завершена.

    Проверьте, что в терминале MacOS у вас доступна утилита pbcopy, а в Linux у вас установлена утилита xclip (установка командой: apt-get install xclip).

    Использование

    Создание базы паролей

    При первом запуске, без параметров будет создана пустая база паролей.

    redpass
    Введите мастер-пароль к базе:
    

    По умолчанию путь к базе ~/.redpass/redpass.vault. Если файл уже существует, то ничего не произойдет.

    Файл базы паролей будет иметь права доступа rw------- (600).

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

    Например, следующая команда создаст файл в текущем каталоге:

    redpass -f ./my.vault
    Введите мастер-пароль к базе:
    

    Для блокировки множественного доступа к базе используется lock-файл. Если он случайно остался на диске и блокирует доступ к базе, то этот lock-файл можно безопасно удалить.

    Создание пароля

    Выполните команду в формате: redpass <url> <login> -g.

    По умолчанию, длина генерируемого пароля равна 32 символа.

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

    Пример создания пароля для пользователя root.

    redpass ssh:192.168.1.1 root -g
    Redpass: консольный менеджер паролей. Версия: 0.1.30-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Новый пароль записан в базу.
    Пароль скопирован в буфер обмена.
    

    Пример выработанного пароля: usY=Q`pL*?qgLtnpxJ1c_x$^Z;4R355-

    В качестве url можно использовать различные идентификаторы. Главное, чтобы они что-то значили.

    Например:

    1. Доменное имя. Например: www.rssys.org, rssys. Не рекомендуется использовать полную ссылку, т.к это будет не удобно отображать в таблице в консоли.

    2. Название устройства . Например, планшет, банковская карта, пропуск на вход в квартиру: ipad4, card4057, kv234.

    3. Ip-адрес с префиксом протокола. Например: ssh:192.168.1.1, “http://127.0.0.1:8080”.

    В качестве login можно использовать любое имя или то имя под которым зарегистрирован пользователь.

    Если, нужно изменить длину пароля по умолчанию, то при генерации пароля нужно указать параметр --length, -l.

    Пример, генерации пароля из 16 символов:

    redpass ssh:192.168.67.1 root -g -l 16
    Redpass: консольный менеджер паролей. Версия: 0.1.30-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Новый пароль записан в базу.
    Пароль скопирован в буфер обмена.
    

    Пример, выработанного пароля: FtT235=)y1Vd/6zO.

    Просмотр базы

    Параметр --print,-p выдаёт содержимое базы, без просмотра самих паролей.

    redpass -p
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Количество транзакций над базой: 11.
    Дата последнего изменения: 2025-02-06 15:16:42
    Общее количество записей: 5
    
    |                  :url |          :login |
    |-----------------------+-----------------|
    |              card4057 |             pin |
    | http://127.0.0.1:8080 |           admin |
    |                 ipad4 |             pin |
    |                 kv234 |             pin |
    |              mmail.ru | email1@mmail.ru |
    |       ssh:192.168.1.1 |            root |
    |          ssh:myrouter |           admin |
    |              telegram |        login123 |
    

    Извлечение пароля

    Базовый способ

    Базовый способ извлечения пароля является вызов: redpass <url> <login>.

    Менеджер паролей найдет по переданной связке нужный пароль и запишет его в буфер обмена. Данная возможность вставки в буфер обмена работает только в MacOS (утилита pbcopy) и Linux (утилита xclip).

    Пример:

    redpass telegram login123
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Пароль скопирован в буфер обмена.
    

    При нажатии (Ctrl-V / Cmd-V) происходит вставка пароля в нужной программе, например в браузере.

    Быстрый способ

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

    Для извлечения пароля по части url можно воспользоваться вызовом: redpass <часть url>.

    Например, мы знаем, что в текущей базе “telegram” это уникальный url и тогда мы можем запросить пароль только по части url: “tel”.

    redpass tel
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Найден пароль для пары: [telegram login123]
    Пароль скопирован в буфер обмена.
    

    Если переданная часть url будет не уникальной в общем списке, то будет выдана подсказка возможных вариантов. Допустим мы хотим найти пароль для подстроки “ssh”, которая встречается в нескольких записях.

    redpass ssh
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Найдено два или более вариантов. Выберите нужный:
    
    |            :url | :login |
    |-----------------+--------|
    | ssh:192.168.1.1 |   root |
    |    ssh:myrouter |  admin |
    

    Для извлечения пароля достаточно указать теперь любую уникальную подстроку из двух представленных вариантов (например: “myr” или “192”).

    Вывод пароля на экран

    Для целей конвейерной обработки команд может понадобиться передать пароль другой программе через pipe. Для этого предусмотрена возможность вывода пароля на экран, вместо копирования его в буфер обмена. Для этого нужно установить переменную окружения REDPASS_PWD_OUTPUT_STDOUT и присвоить ей любое значение. Также нужно указать параметр --quiet,-q для подавления лишнего вывода, чтобы была осуществлена печать на экран только пароля.

    При этом redpass всё еще будет запрашивать ввода мастер-пароля. Для полной автоматизации, чтобы redpass не ждал ввода мастер-пароля с клавиатуры воспользуйтесь переменными окружения REDPASS_MASTER_PWD_INPUT_FILE или REDPASS_SECRET_KEY_FILE, но об этом далее.

    Пример:

    export REDPASS_PWD_OUTPUT_STDOUT=1
    redpass card -q
    
    I3I`=:SMn8?L'^2bSMa%$6Q18_]KANMi
    

    При этом пароль будет передан как есть, без символа новой строки в конце.

    Если переменной окружения присвоить значение newline, то при выводе пароля на экран в конце будет добавлен символ новой строки.

    Пример:

    export REDPASS_PWD_OUTPUT_STDOUT=newline
    redpass card -q
    
    I3I`=:SMn8?L'^2bSMa%$6Q18_]KANMi
    

    Не забудьте удалить переменную командой: unset REDPASS_PWD_OUTPUT_STDOUT

    Вывод пароля в файл

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

    Для полной автоматизации, чтобы redpass не ждал ввода мастер-пароля с клавиатуры воспользуйтесь переменными окружения REDPASS_MASTER_PWD_INPUT_FILE или REDPASS_SECRET_KEY_FILE, но об этом далее.

    Например:

    export REDPASS_PWD_OUTPUT_FILE=a.txt
    redpass card
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Найден пароль для пары: [card4057 pin]
    
    cat a.txt
    I3I`=:SMn8?L'^2bSMa%$6Q18_]KANMi
    

    Не забудьте удалить переменную командой: unset REDPASS_PWD_OUTPUT_FILE

    Поиск по базе

    Параметр --search, -s осуществляет поиск по базе по url или по login.

    Вызов команды для поиска по url: redpass -s <url или его часть>.

    Вызов команды для поиска по login: redpass -s :login <login или его часть>.

    Пример поиска по части url:

    redpass -s rout
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    
    |         :url | :login |
    |--------------+--------|
    | ssh:myrouter |  admin |
    

    Пример поиска по части login:

    redpass -s :login adm
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    
    |                  :url | :login |
    |-----------------------+--------|
    | http://127.0.0.1:8080 |  admin |
    |          ssh:myrouter |  admin |
    

    Импорт данных

    Для загрузки в базу учётных данных из других источников предусмотрен параметр --import,-i.

    Вызов команды импорта: redpass -i <filename>.

    В качестве входного файла должен быть текстовый документ с одной или множеством строк. На каждой строке должна быть запись:

    <значение url> <значение login> <значение пароля>

    Пример файла с импортируемыми данными:

    creds.txt

    url1 login1 password1
    url2 login2 password2
    url3 login3 password3
    

    Пример импорта:

    redpass -i test-data/creds.txt
    Redpass: консольный менеджер паролей. Версия: 0.1.31-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    Импорт учётных данных из файла: test-data/creds.txt
    Пара [url1 login1] подготовлена к вставке.
    Пара [url2 login2] подготовлена к вставке.
    Пара [url3 login3] подготовлена к вставке.
    База обновлена.
    Всего учетных данных: 3
    Вставлено: 3
    Пропущено: 0
    

    Повторная вставка данных из того же файла приведет к игнорированию этих данных.

    Стойкость паролей в импортированных данных – ответственность пользователя.

    Чтение мастер-пароля из файла

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

    Это тотально снижает безопасность базы паролей, в случае кражи или несанкционированного доступа к файлу с мастер-паролем.

    Пример распечатки пароля на экран, без запроса мастер-пароля.

    export REDPASS_MASTER_PWD_INPUT_FILE=1.txt
    export REDPASS_PWD_OUTPUT_STDOUT=newline
    
    redpass card -q | cat
    I3I`=:SMn8?L'^2bSMa%$6Q18_]KANMi
    

    Не забудьте выключить эту возможность, когда пропадет необходимость командами:

    unset REDPASS_MASTER_PWD_INPUT_FILE
    unset REDPASS_PWD_OUTPUT_STDOUT
    

    Замена мастер-пароля ключом шифрования 256-бит

    Можно использовать 256-битный ключ шифрования для доступа к базе паролей и не использовать мастер-пароль. В этом случае мастер-пароль не будет запрашиваться при доступе к базе.

    Для этого необходимо при создании базы указать файл с ключом шифрования в переменной окружения REDPASS_SECRET_KEY_FILE , которым нужно зашифровать базу. Для выработки ключа шифрования нужно использовать криптографически стойкий генератор случайных чисел. Ключ шифрования должен быть в виде HEX-строки, длиной 64 символа (32 байта). Нужно поместить файл с ключом шифрования на любой сменный носитель.

    Утеря или искажение ключа навсегда заблокирует доступ к паролям в базе.

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

    Например, для выработки ключа шифрования и его установки для redpass можно воспользоваться командой:

    head -c 32 /dev/random | xxd -p -c 32 > master-key.txt
    export REDPASS_SECRET_KEY_FILE=master-key.txt
    

    После этого можно создать базу и пользоваться redpass без запроса мастер-пароля.

    redpass -f ./my.vault rssys.org login1 -g
    

    Также можно заменить мастер-пароль к существующей базе ключом шифрования, который получен от этого мастер-пароля по алгоритму PBKDF2-GOST3411-2012-HMAC. Для получения ключа из пароля можно вызвать redpass с параметром --print-key.

    redpass --print-key
    Redpass: консольный менеджер паролей. Версия: 0.1.37-SNAPSHOT. Red Stars Systems, 2025 г.
    Введите мастер-пароль к базе:
    150f29fc0744261446ee59261e0151b0402d740372221cb56686a50fa5afd451
    

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

    unset REDPASS_SECRET_KEY_FILE
    

    Общие советы

    1. Используйте redpass только на личном устройстве;

    2. Используйте программное обеспечение в ОС полученное из доверенных источников;

    3. Не запускайте “кряки” или любой недоверенный софт с торрентов на устройстве, где стоит redpass;

    4. Делайте резервную копию (backup) базы хотя бы 1 раз в месяц. Для этого есть множество средств;

    5. Не храните файл с ключом шифрования или мастер-паролем на том же диске, что и база паролей;

    6. Для изменения количества итераций при выработке ключа из мастер—пароля можно воспользоваться переменной REDPASS_MASTER_PWD_ITERATIONS. Не ставьте это значение ниже 10000. По умолчанию стоит 30000.

    7. Если решите хранить зашифрованную базу в облаке, переименуйте файл так, чтобы не было понятно, что это vault. Например, дайте имя: numbers.dat. Структура базы внутри файла полностью скрыта и нет ни одного постоянного признака, поэтому как-то идентифицировать данные по содержимому невозможно.

    8. redpass это начальная “линия обороны”. Во всём нужен системный подход. Используйте дополнительные средства для усиления защиты.

    Раздел для разработчиков

    Проект redpass создан на основе Шаблона приложения.

    Цели проекта

    Для настройки целей проекта используйте файлы bb.edn и build.clj.

    Для вывода списка целей проекта запустите команду bb tasks:

    clean        Очистить содержимое папки target
    javac        Компиляция Java классов
    build        Собрать дистрибутив программы в виде uberjar файла
    run          Запуск программы через функцию -main
    standalone   Создать самодостаточный пакет: программа + JRE (используя jlink, JDK 9+)
    native       Создать нативное приложение
    deploy       Опубликовать jar файл в публичный репозиторий
    release      Сделать выпуск: присвоить тэг, сделать сборку, опубликовать в репозиторий
    test         Запустить тесты
    repl         Запустить Clojure REPL
    outdated     Проверить устаревшие зависимости
    outdated:fix Проверить устаревшие зависимости и обновить
    format       Форматировать исходный код
    lint         Проверить исходный код линтером
    docmd        Конвертация README.adoc в Markdown формат
    requirements Установить зависимости необходимые проекту
    

    Самостоятельная сборка программы

    Примечание: универсальнее всего сборка проходит на Debian 11. Но там jdk версии 17, но это не принципиально.

    Все нижеследующие команды выполнялись в ОС AltLinux p11 aarch64.

    Установка языка Clojure

    Под учетной записью root нужно установить ряд программ:

    1. Установка базовых программ.

      apt-get update
      apt-get install java-21-openjdk
      apt-get install git
      apt-get install curl rlwrap unzip bash
      
    2. Установка языка Clojure.

      Linux

      curl -L -O https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh
      chmod +x linux-install.sh
      ./linux-install.sh
      

      MacOS

      brew install clojure/tools/clojure
      
    3. Установка Babashka (язык Clojure для разработки скриптов).

      Linux

      bash < <(curl -s https://raw.githubusercontent.com/babashka/babashka/master/install)
      

      MacOS

      brew install borkdude/brew/babashka
      

    Установка сборочного окружения

    Под обычной учетной записью необходимо выполнить:

    1. Установка
    clojure -Ttools install-latest :lib io.github.seancorfield/deps-new :as new
    

    Сборка проекта

    Клонирование проекта:

    git clone https://gitflic.ru/project/red-stars-systems/redpass.git
    cd redpass/
    

    Сборка проекта

    bb build
    

    Проверка работоспособности jar-файла

    java -jar target/redpass-0.1.45-standalone.jar -h
    

    Должна появиться справка об использовании программы.

    Получение исполняемого файла

    Необходимо под учётной записью root выполнить следующие команды.

    1. Установка GraalVM. На сайте https://www.graalvm.org/downloads/ необходимо выбрать нужную ОС и архитектуру процессора. В данном примере приведена ссылка для Linux aarch64.

      curl -L https://download.oracle.com/graalvm/23/latest/graalvm-jdk-23_linux-aarch64_bin.tar.gz -O
      tar xvf ./graalvm-jdk-23_linux-aarch64_bin.tar.gz
      mkdir -p /usr/local/jvm/
      mv graalvm-jdk-23.0.2+7.1 /usr/local/jvm/
      
    2. Установка gcc:

      apt-get install gcc zlib-devel
      

      Примечание: Для Debian этот пакет называется zlib1g-dev.

    Под обычной учетной записью, в папке проекта нужно выполнить:

    1. Сборка:

      export GRAALVM_HOME=/usr/local/jvm/graalvm-jdk-23.0.2+7.1
      bb native
      
    2. Проверка работы исполняемого файла

      target/redpass-0.1.45-standalone -h
      

      Должна появится справка об использовании программы.

    3. Установка исполняемого файла в ОС:

      sudo cp target/redpass-0.1.45-standalone /usr/local/bin/redpass
      

    Лицензия

    © 2025 Михаил Ананьев.

    Данный проект распространяется под Открытой лицензией на программное обеспечение РЭД СТАРС СИСТЕМС 1.0
    Текст лицензии находится в файле LICENSE или по ссылке.

    Описание

    Консольный менеджер паролей

    Релизы
    v0.2.61 2025-02-10
    Конвейеры
    0 успешных
    0 с ошибкой