
Зашифрованный удалённый помощник Git, реализованный на Rust
ЭТО ЭКСПЕРИМЕНТАЛЬНЫЙ ПРОЕКТ, формального аудита безопасности не проводилось. НЕ ПОЛАГАЙТЕСЬ на него для критически важных репозиториев.
git-remote-pqcrypt — это зашифрованный удалённый помощник Git, аналогичный gcrypt. Он хранит Git-пакфайлы и метаданные репозитория в зашифрованном виде. Доступ осуществляется с помощью постквантовой обёртки XWing.
Текущая версия крейта: 0.2.0.
git-remote-pqcrypt init создаёт главный ключ репозитория.git-remote-pqcrypt.Пример файлов удалённого хранилища:
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json содержит метаданные и зашифрованные обёртки главного ключа.
Установите стандартную сборку из Git:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
Это устанавливает git-remote-pqcrypt в бинарный каталог Cargo, обычно ~/.cargo/bin.
Убедитесь, что бинарный каталог Cargo находится в вашем PATH, затем проверьте, что всё работает:
git-remote-pqcrypt --help
Стандартная сборка включает поддержку локальной файловой системы и хранилища на основе Git.
Для установки с поддержкой SFTP в Unix-подобных системах:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
Функция sftp в настоящее время не поддерживается в Windows.
Сборка с поддержкой бэкендов по умолчанию:
cargo build --release
Это включает поддержку локальной файловой системы и хранилища на основе Git.
Для сборки с поддержкой SFTP в Unix-подобных системах:
cargo build --release --features sftp
Установите бинарный файл в ваш PATH:
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
Имя бинарного файла должно оставаться git-remote-pqcrypt, так как Git находит удалённые помощники по шаблону git-remote-[имя].
Проверьте, что всё работает:
git-remote-pqcrypt --help
git--features sftp и в настоящее время доступна только в Unix-подобных системахПерейдите в существующий Git-репозиторий или создайте новый.
Инициализируйте хранилище pqcrypt.
Локальный путь:
git-remote-pqcrypt init pqcrypt:///path/to/encrypted-store
SFTP требует сборки с функцией sftp и в настоящее время поддерживается только в Unix-подобных системах:
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/path/to/store
На основе Git:
git-remote-pqcrypt init pqcrypt::[email protected]:org/store.git
Если закрытый ключ отсутствует, он будет создан в ~/.config/pqcrypt/key, а открытый ключ будет выведен.
Вас попросят указать необязательный комментарий к ключу, например personal или work-laptop.
После инициализации будет добавлен удалённый Git-репозиторий с именем pqcrypt:
git remote -v
Пример:
pqcrypt pqcrypt::/path/to/encrypted-store (fetch)
pqcrypt pqcrypt::/path/to/encrypted-store (push)
git push pqcrypt main
git clone pqcrypt::[email protected]:Torm0r/pqcrypt-test.git my-clone
Они должны сгенерировать пару ключей с помощью:
git-remote-pqcrypt keygen
Они могут получить свой открытый ключ с помощью:
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
Или они могут скопировать открытый ключ, выведенный keygen.
Затем существующий авторизованный пользователь добавляет их в репозиторий:
git-remote-pqcrypt add-user <base64-public-key>
Выполните это для дополнительных параметров:
git-remote-pqcrypt add-user -h
По умолчанию add-user ищет локальный удалённый Git-репозиторий, URL которого начинается с pqcrypt, и добавляет туда открытый ключ.
pqcrypt различает обычные отправки и принудительные отправки по Git refspec.
Обычные отправки проверяются на fast-forward и отклоняются, если они перезаписывают удалённую историю.
Git вызывает pqcrypt как удалённого помощника через бинарный файл git-remote-pqcrypt.
При вызове Git помощник ожидает форму аргументов удалённого помощника, используемую Git, например:
git-remote-pqcrypt origin pqcrypt::/path/to/store
Прямые подкоманды CLI, такие как init, add-user, keygen, pubgen и help, обрабатываются как обычные пользовательские команды, а не как вызовы удалённого помощника.
Точка входа бинарного файла делегирует выполнение библиотеке времени выполнения, поэтому логика приложения тестируема как через библиотеку крейта, так и через установленный бинарный файл.
Для URL-адресов хранилища на основе Git pqcrypt поддерживает локальный кэш в системном каталоге кэша, например:
~/.cache/pqcrypt/
pqcrypt получает зашифрованное состояние из резервного Git-репозитория перед операциями и отправляет зашифрованное состояние после обновлений.
Если обнаружено повреждение или потеря кэша, pqcrypt пытается автоматически воссоздать кэш, повторно загружая данные из резервного Git-репозитория.
pqcrypt::, pqcrypt:// и pqcrypt: — все принимаются и внутренне нормализуются до pqcrypt::.
Эти эквивалентны:
git-remote-pqcrypt init pqcrypt:///path/to/store
git-remote-pqcrypt init pqcrypt::/path/to/store
git-remote-pqcrypt init pqcrypt:/path/to/store
Бэкенд определяется путём хранилища:
Примеры:
pqcrypt::/tmp/store
pqcrypt:///tmp/store
pqcrypt:/tmp/store
pqcrypt::[email protected]:org/store.git
pqcrypt::https://github.com/org/store.git
pqcrypt::sftp://[email protected]/path/to/store
Во время расшифровки pqcrypt ищет закрытый ключ в следующем порядке:
PQCRYPT_KEY_PATHgit config pqcrypt.keypath.pqcrypt/key в текущем каталоге~/.config/pqcrypt, где все проверяютсяДля многоключевых конфигураций, например рабочих и личных ключей:
git config pqcrypt.keypath ~/.config/pqcrypt/work-key
Ключ должен быть тем, который использовался во время init или был добавлен через add-user.
Запустите полный набор тестов:
cargo test
Запуск с включённым SFTP в Unix-подобных системах:
cargo test --features sftp
Некоторые сквозные тесты, зависящие от поведения локального пути в Unix-подобных системах, игнорируются в Windows.
GitHub Actions собирает проект на Linux, macOS и Windows. Артефакты рабочего процесса могут содержать бинарные файлы из запусков CI, но они не являются официальными релизами.
XChaCha20Poly1305.XWing.0600 в Unix-подобных системах.sftp и в настоящее время не поддерживается в Windows.ssh и git должны быть установлены.| Pattern | Backend | Notes |
|---|
/local/path | Локальная файловая система | По умолчанию |
git@host:, *.git, https://git* | На основе Git | По умолчанию |
sftp:// или ssh:// | SFTP | Требует --features sftp; только Unix-подобные системы |