Улучшить KDF для шифрования мнемоник (SHA-256 → HKDF) #46

Closed
opened 2026-06-17 19:39:18 +00:00 by NW · 1 comment
Owner

Проблема

walletService.js:156-162 — ключ шифрования мнемоник выводится как SHA-256(key + userId) без соли и итераций. userId предсказуем, что делает ключ уязвимым.

Решение

  • Заменить SHA-256(key + userId) на HKDF или PBKDF2 с солью
  • Использовать случайную соль для каждого пользователя
  • Добавить обратную совместимость: при расшифровке пробовать старый метод, затем новый
  • Мигрировать существующие мнемоники на новый KDF

Файлы

  • src/services/walletService.js

Приоритет: ВЫСОКИЙ

## Проблема `walletService.js:156-162` — ключ шифрования мнемоник выводится как `SHA-256(key + userId)` без соли и итераций. userId предсказуем, что делает ключ уязвимым. ## Решение - [ ] Заменить `SHA-256(key + userId)` на HKDF или PBKDF2 с солью - [ ] Использовать случайную соль для каждого пользователя - [ ] Добавить обратную совместимость: при расшифровке пробовать старый метод, затем новый - [ ] Мигрировать существующие мнемоники на новый KDF ## Файлы - `src/services/walletService.js` ## Приоритет: ВЫСОКИЙ
NW added this to the Phase 1: Security & Secrets Management milestone 2026-06-17 19:39:18 +00:00
NW added the priority::hightype::securityphase::1 labels 2026-06-17 19:39:18 +00:00
NW closed this issue 2026-06-17 20:40:48 +00:00
Author
Owner

Реализовано

  • Заменить SHA-256(key + userId) на HKDF с солью
  • Использовать случайную соль для каждого пользователя
  • Добавить обратную совместимость: при расшифровке пробовать новый метод, затем старый
  • Автоматическая миграция при decrypt (новый формат: salt:iv:ciphertext)

Файлы: src/utils/encryption.js (новый), src/services/walletService.js

## ✅ Реализовано - [x] Заменить SHA-256(key + userId) на HKDF с солью - [x] Использовать случайную соль для каждого пользователя - [x] Добавить обратную совместимость: при расшифровке пробовать новый метод, затем старый - [x] Автоматическая миграция при decrypt (новый формат: salt:iv:ciphertext) **Файлы**: `src/utils/encryption.js` (новый), `src/services/walletService.js`
Sign in to join this conversation.