Signing Service
Файл:
backend/src/services/signing.rs
Сервис криптографической подписи. Работает с Ed25519 ключами через IOTA Stronghold для безопасного хранения приватных ключей в защищённой памяти. После закрытия редизайна (slice 17) подписывающий ключ — SecretType::DeviceSignKey, генерируемый внутри Stronghold и никогда не покидающий его.
Эндпоинты
| Метод | Путь | Функция | Описание |
|---|---|---|---|
| POST | /api/signing/sign | sign_with_device_key_svc | Подписать данные ключом устройства |
| POST | /api/signing/verify | verify_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 (ключ никогда не покидает защищённую память).
Параметры
| Имя | Тип | Описание |
|---|---|---|
data | Vec<u8> | Данные для подписи |
shared_state | SharedState | Глобальное состояние |
Возвращает
Result<SignatureResponse, String> — hex-encoded подпись (64 байта) и её длина.
Логика
- Извлекает
stronghold_managerизshared_state(tokio mutex, async). - Вызывает
stronghold_manager.sign_ed25519(SecretType::DeviceSignKey, &data).await. - Кодирует подпись в hex.
- Записывает метрики (
StrongholdOperation::Sign).
Проверить подпись на стороне получателя: использовать
device_sign_pubkey(32 байта, hex) — он лежит в колонкеdevices.device_sign_pubkeyпосле первого unlock'а и зашит вSignedDeviceCert.
verify_ed25519_signature_svc
POST /api/signing/verify
Верифицирует Ed25519 подпись. Статический метод — не требует Stronghold instance.
Параметры
| Имя | Тип | Описание |
|---|---|---|
public_key | String | Hex-encoded публичный ключ |
signature | String | Hex-encoded подпись |
data | Vec<u8> | Подписанные данные |
Возвращает
Result<bool, String>
Логика
- Декодирует
public_keyиsignatureиз hex. - Вызывает
StrongholdManager::verify_ed25519()(статический метод, используетed25519-dalek). - Возвращает результат верификации.