Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Введение

В современной разработке обеспечение целостности и подлинности исходного кода имеет первостепенное значение. Git позволяет криптографически подтвердить, что изменения были внесены доверенным автором. Использование аппаратного токена (Рутокен MFA) с поддержкой FIDO2 для хранения SSH-ключей подписи дает следующие преимущества:

  • Неотрекаемость (Non-Repudiation): Криптографическое доказательство того, что изменения внесены владельцем токена.
  • Аппаратная защита: Закрытый ключ никогда не покидает пределы Рутокен MFA, что защищает его от компрометации через вредоносное ПО на рабочей станции.
  • Гарантия присутствия пользователя: Каждая операция подписи требует физического подтверждения (касания/ввода PIN), что исключает фоновое или автоматическое подписание злоумышленником.
  • Упрощение управления ключами: Использование SSH-ключей для подписи избавляет от необходимости поддерживать сложную инфраструктуру GPG-серверов.
  • Подтверждение подлинности на GitHub и GitLab — коммиты могут отображаться со статусом Verified.

Данная инструкция описывает настройку Git для использования SSH/FIDO2-ключей на аппаратном токене Рутокен MFA при подписании коммитов и тегов.

Предварительные требования

Необходимо наличие:

  • Аппаратного токена с поддержкой FIDO2/WebAuthn (Рутокен MFA).
  • Git версии 2.34 или новее.

Проверка версии:

git --version
  • OpenSSH версии:
    • OpenSSH 8.2 или новее — базовая поддержка FIDO2 SSH-ключей.
    • OpenSSH 8.3 или новее — поддержка параметра -O verify-required.

Проверка версии:

ssh -V
  • Настроенного PIN-кода FIDO2 на токене (рекомендуется для resident-ключей).

Пошаговая настройка

Шаг 1. Создание выделенного SSH-ключа для подписи

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

Для Linux / macOS:

ssh-keygen -t ecdsa-sk -O resident -O verify-required \

  -C "Git signing key $(git config user.email)" \

  -f ~/.ssh/id_ecdsa_sk_git_signing

Для Windows (PowerShell):

ssh-keygen -t ecdsa-sk -O resident -O verify-required `

  -C "Git signing key" `

  -f "$env:USERPROFILE\.ssh\id_ecdsa_sk_git_signing"

Разбор критически важных параметров:

  • -t ecdsa-sk — создание FIDO2-ключа ECDSA (оптимально для совместимости с профилями Рутокен MFA).
  • -O resident(Рекомендуется) создание резидентного ключа. Идентификатор ключа (key handle) хранится на самом токене. Это позволяет использовать ключ на разных рабочих станциях без необходимости экспорта/импорта файлов.
  • -O verify-required(Рекомендуется) явное требование подтверждения пользователя (User Presence / User Verification) при каждой операции подписи.


Шаг 2. Настройка Git

Указываем Git, что теперь для подписи используется формат SSH, а не GPG.

# Переключаем формат подписи на SSH

git config --global gpg.format ssh

Указываем путь к публичному ключу (именно к .pub файлу!)

Для Linux / macOS:

git config --global user.signingkey ~/.ssh/id_ecdsa_sk_git_signing.pub

Для Windows (PowerShell):

git config --global user.signingkey "$env:USERPROFILE\.ssh\id_ecdsa_sk_git_signing.pub"

Включаем автоматическую подпись коммитов и аннотированных тегов

git config --global commit.gpgsign true

git config --global tag.forceSignAnnotated true
  • No labels