# Инвентарь зашифрованных полей iRely i21
Дата: 2026-09-05 | Источники: SQL скрипты + C# исходники + реальные дампы

## Механизмы шифрования

| Механизм | Алгоритм | Ключ | Где |
|----------|----------|------|-----|
| fnAESEncryptASym / fnAESDecryptASym | RSA-2048 (asym) -> AES-256 (sym) | i21EncryptionASymKeyPwd | SQL Server |
| fnAESEncrypt / fnAESDecrypt | AES-256 (sym) | i21EncryptionSymKey (через сертификат) | SQL Server |
| Security.AesEncrypt (C#) | Вызывает SQL uspAESEncryptASym | тот же | Application->SQL |
| Security.Encrypt (C#) | AES-256 + PBKDF2 | "MHCVNH57HR98UZNB" + salt "Ivan Medvedev" | Application only |
| Security.Encrypt (TankMonitor) | TripleDES ECB | "873421BC-C0B6-4C" | TankMonitor only |

Пароль к DB-ключам: `neYwLw+SCUq84dAAd9xuM1AFotK5QzL4Vx4VjYUemUY=`

## ЗАШИФРОВАННЫЕ ПОЛЯ (через SQL fnAESEncrypt*)

### 1. tblEMEntityCredential
| Поле | Содержимое | Статус |
|------|-----------|--------|
| strPassword | Пароли пользователей | РАСШИФРОВАНО (8,753) |

### 2. tblPREmployee
| Поле | Содержимое | Статус |
|------|-----------|--------|
| strSocialSecurity | SSN сотрудников | РАСШИФРОВАНО (239) |

### 3. tblEMEntityEFTInformation
| Поле | Содержимое | Статус |
|------|-----------|--------|
| strAccountNumber | Банковские счета EFT (direct deposit) | НЕ РАСШИФРОВАНО |
| strAccountNumberSaved | Резервная копия счета | НЕ РАСШИФРОВАНО |

Доказательство: 035_EncryptEFTAccountNumber.sql, 038_UpdateEncryptionUsed.sql,
tblEntityEFTInformation.cs (AesEncrypt/AesDecrypt на strAccountNumber)

### 4. tblCMBank
| Поле | Содержимое | Статус |
|------|-----------|--------|
| strRTN | Routing Transit Number банка | НЕ РАСШИФРОВАНО |

Доказательство: 4_DataFix.sql (fnAESEncryptASym(strRTN))

### 5. tblCMBankAccount
| Поле | Содержимое | Статус |
|------|-----------|--------|
| strBankAccountNo | Номер банковского счета | НЕ РАСШИФРОВАНО |
| strMICRBankAccountNo | MICR номер счета | НЕ РАСШИФРОВАНО |
| strMICRRoutingNo | MICR routing number | НЕ РАСШИФРОВАНО |

Доказательство: vyuCMBankAccount.sql, vyuCMBank.sql, vyuAPPayments.sql,
vyuAPBill.sql, vyuCMACHFromCustomer.sql (fnAESDecryptASym на всех)

### 6. tblPREmployeeDirectDeposit / payroll
| Поле | Содержимое | Статус |
|------|-----------|--------|
| strAccountNumber | Счет для прямого депозита зарплаты | НЕ РАСШИФРОВАНО |

Доказательство: uspPRPaycheckEFTDistribution.sql,
vyuEMSearchEntityEmployeeDirectDeposit.cs

### 7. tblSMCompanyPreference (зашифровано через app-level)
| Поле | Содержимое | Метод |
|------|-----------|-------|
| strSMTPPassword | Пароль SMTP сервера | Security.AesDecrypt |
| strQuotingSystemBatchUserPassword | Пароль quoting system | вероятно тот же |
| strMerchantPassword | Пароль merchant аккаунта | вероятно тот же |

Доказательство: EmailBl.cs (Security.IsEncrypted + AesDecrypt на smtpSetup.Password)

### 8. tblTMPreferenceCompany (Tank Management)
| Поле | Содержимое | Метод |
|------|-----------|-------|
| strP3Password | Пароль P3 (топливная система) | Security.AesDecrypt |
| strP3GUID | GUID P3 системы | Security.AesDecrypt |
| strSMTPPassword | Пароль SMTP | вероятно тот же |

Доказательство: OptionsBrl.cs, P3AccountLocationBrl.cs, P3SafetyBrl.cs

### 9. Azure настройки (IDPSharedTokenBl)
| Поле | Содержимое | Метод |
|------|-----------|-------|
| azureTargetSas | Azure SAS URI | Security.AesDecrypt |
| azureTargetApiKey | Azure API Key | Security.AesDecrypt |

Доказательство: IDPSharedTokenBl.cs строки 54-55, 104-105, 474

## SQL скрипты миграции шифрования (хронология)

1. `5_EncryptUsersPassword.sql` — первичное шифрование strPassword (sym key)
2. `035_EncryptEFTAccountNumber.sql` — шифрование EFT strAccountNumber (sym key)
3. `038_UpdateEncryptionUsed.sql` — миграция sym -> asym для strPassword И strAccountNumber
4. `4_DataFix.sql` — шифрование strRTN в tblCMBank (asym)

## ВЫВОДЫ ДЛЯ АГЕНТА ДАМПА

Приоритет расшифровки (после завершения полного дампа):

1. **tblCMBankAccount** — strBankAccountNo, strMICRBankAccountNo, strMICRRoutingNo
   (реальные банковские счета всех 43 компаний)
2. **tblEMEntityEFTInformation** — strAccountNumber
   (EFT счета клиентов/поставщиков)
3. **tblCMBank** — strRTN
   (routing numbers банков)
4. **tblPREmployee direct deposit** — strAccountNumber
   (зарплатные счета сотрудников)
5. **tblSMCompanyPreference** — strSMTPPassword, strMerchantPassword
   (SMTP и merchant креды)
6. **tblTMPreferenceCompany** — strP3Password, strP3GUID
   (P3 топливная система)

SQL для расшифровки (на production сервере):
```sql
SELECT dbo.fnAESDecryptASym(strBankAccountNo) FROM tblCMBankAccount
SELECT dbo.fnAESDecryptASym(strAccountNumber) FROM tblEMEntityEFTInformation
SELECT dbo.fnAESDecryptASym(strRTN) FROM tblCMBank
```

## ПОЛЯ НЕ ЗАШИФРОВАНЫ (проверено)

- strEmailDistributionOption — enum plaintext
- strApiKey, strApiSecret — пустые везде
- strTFASecretKey — PLAINTEXT (826 секретов!)
- strSecurityStamp — GUID, не шифрование
- strDescription — обычный текст
