Skip to content

Signing Service

Файл: backend/src/services/signing.rs

Сервис криптографической подписи. Работает с Ed25519 ключами через IOTA Stronghold для безопасного хранения приватных ключей в защищённой памяти. После закрытия редизайна (slice 17) подписывающий ключ — SecretType::DeviceSignKey, генерируемый внутри Stronghold и никогда не покидающий его.

Эндпоинты

МетодПутьФункцияОписание
POST/api/signing/signsign_with_device_key_svcПодписать данные ключом устройства
POST/api/signing/verifyverify_ed25519_signature_svcВерифицировать подпись

Удалён в slice 17: POST /api/signing/load-device-key / load_device_key_into_stronghold_svc. В v0.8 model'и нет такого «приватного ключа устройства», который можно было бы импортнуть — DeviceSignKey генерируется внутри Stronghold через generate_device_keypair при первом vault unlock'е (см. init_first_device_on_unlock).

Зависимости

  • SharedState / StrongholdManager — подпись данных в защищённой памяти через SecretType::DeviceSignKey

sign_with_device_key_svc

POST /api/signing/sign

Подписывает произвольные данные DeviceSignKey через Stronghold (ключ никогда не покидает защищённую память).

Параметры

ИмяТипОписание
dataVec<u8>Данные для подписи
shared_stateSharedStateГлобальное состояние

Возвращает

Result<SignatureResponse, String> — hex-encoded подпись (64 байта) и её длина.

Логика

  1. Извлекает stronghold_manager из shared_state (tokio mutex, async).
  2. Вызывает stronghold_manager.sign_ed25519(SecretType::DeviceSignKey, &data).await.
  3. Кодирует подпись в hex.
  4. Записывает метрики (StrongholdOperation::Sign).
plantuml Diagram

Проверить подпись на стороне получателя: использовать device_sign_pubkey (32 байта, hex) — он лежит в колонке devices.device_sign_pubkey после первого unlock'а и зашит в SignedDeviceCert.


verify_ed25519_signature_svc

POST /api/signing/verify

Верифицирует Ed25519 подпись. Статический метод — не требует Stronghold instance.

Параметры

ИмяТипОписание
public_keyStringHex-encoded публичный ключ
signatureStringHex-encoded подпись
dataVec<u8>Подписанные данные

Возвращает

Result<bool, String>

Логика

  1. Декодирует public_key и signature из hex.
  2. Вызывает StrongholdManager::verify_ed25519() (статический метод, использует ed25519-dalek).
  3. Возвращает результат верификации.
plantuml Diagram