Данный проект содержит в себе исходные файлы утилиту CLI для шифрования данных, точнее для генерации и управления RSA-ключами с безопасным хранением закрытых ключей в зашифрованных PEM-файлах, а также подписания файлов с помощью закрытого ключа.
Используется Argon2 для деривации ключей и AES для шифрования, для намеренного замедления хеширования; AES используется для шифрования закрытого ключа; соль (Salt) размером 16 байт генерируется автоматически при каждом запуске программы.
- генерация пары RSA-ключей (закрытый + открытый);
- закрытый ключ шифруется AES-GCM с ключом, полученным через Argon2id;
- соль и nonce сохраняются в заголовках PEM-файла;
- настраиваемые параметры Argon2 (time, memory, threads, keyLen) через CLI или yaml. Подробнее о параметрах;
- приоритет параметров: флаги CLI, config.yaml, значения по умолчанию;
- реализован собственный логгер с раздельным выводом в терминал и app.log файл;
- CLI через Cobra, конфигурация через Viper;
- логгер передаётся через DI;
- подписание файлов с помощью закрытого ключа RSA-PSS + SHA3-256;
- подпись сохраняется в .sig файл рядом с исходным файлом.
- Go 1.21+;
- Linux / macOS / Windows. Протестировано на Linux, macOS.
git clone https://github.com/saponite/KeyChain-Cli.git
cd KeyChain-CLIgo build main.go./main keys generate --time 1 --memory 64 --threads 4 --keyLen 32 --private-key-path priv_key.pem --public-key-path pub_key.pem --private-key-size 2048 --salt-size 16или
./main keys generate Иной вариант запуска программы без предварительной компиляции.
go run . keys generate --time 1 --memory 64 --threads 4 --keyLen 32 --private-key-path priv_key.pem --public-key-path pub_key.pem --private-key-size 2048 --salt-size 16Скачайте бинарный файл для Вашей платформы со страницы Releases.
chmod +x keychain-cli
./keychain-cli keys generatekeychain-cli.exe keys generate
-h, --help help for generate
--keyLen uint32 Длина ключа (в байтах). (default 32)
--memory uint32 Количество памяти для генерации ключа (в мегабайтах). (default 65536)
--private-key-path string Путь для сохранения закрытого ключа. (default "priv_key.pem")
--private-key-size int Размер закрытого ключа в битах. (default 2048)
--public-key-path string Путь для сохранения открытого ключа. (default "pub_key.pem")
--salt-size int Размер соли, используемый при выводе ключа, в байтах. (default 16)
--threads uint8 Количество потоков, которые нужно задействовать для генерации ключа. (default 4)
--time uint32 Время генерации ключа. (default 1)
./main signatures sign --file-path file.txt --signer-id "John"или с указанием пути к ключу:
./main signatures sign --file-path file.txt --signer-id "John" --private-key-path priv_key.pem-h, --help help for sign
--file-path string Путь к файлу для подписи.
--private-key-path string Путь к закрытому ключу. (default "priv_key.pem")
--signer-id string Имя или идентификатор подписанта.