# Matrix

**Coturn (TURN-сервер)**

### **Аутентификация**

1. `lt-cred-mech`
    
    * Включает **Long-Term Credentials (LTC) механизм аутентификации**.
        
    * Клиенты должны передавать логин и пароль для соединения с TURN-сервером.
        
2. `use-auth-secret`
    
    * Включает механизм **динамической аутентификации**.
        
    * Вместо статических паролей клиенты получают временные ключи (HMAC), сгенерированные сервером.
        
3. `static-auth-secret=579d650b6e2d82c40519340ff5decd211a656725494b63e8d3e0e99a989b3316`
    
    * **Секретный ключ** для генерации временных паролей (используется с `use-auth-secret`).
        
    * Клиенты и сервер используют его для создания временных учетных данных (username, password).
        
    * Пароли создаются по алгоритму **HMAC-SHA1** и действуют ограниченное время.
        
4. `cert=/etc/letsencrypt/live/`[`mx.dc24.cloud/fullchain.pem`](http://mx.dc24.cloud/fullchain.pem)
    
    * **Путь к SSL-сертификату** (используется для TLS/DTLS).
        
    * Позволяет серверу шифровать соединения.
        
5. `pkey=/etc/letsencrypt/live/`[`mx.dc24.cloud/privkey.pem`](http://mx.dc24.cloud/privkey.pem)
    
    * **Приватный ключ** для SSL-сертификата.
        
    * Должен соответствовать сертификату (`fullchain.pem`).
        
6. `no-tcp-relay`
    
    * Отключает **ретрансляцию трафика по TCP**.
        
    * Полезно для снижения нагрузки на сервер (TURN обычно передаёт видео/аудио по UDP).
        
7. `no-multicast-peers`
    
    * Отключает поддержку **многоадресной передачи (multicast)**.
        
    * Уменьшает нагрузку, если сервер не работает с multicast-группами.
        
8. `fingerprint` – это настройка, которая **включает контрольную сумму (CRC32) в заголовках сообщений STUN/TURN**.
    
    🔹 **Зачем нужен этот параметр?**
    
    * **Обеспечивает целостность данных** – клиент может проверить, что сообщение не повреждено.
        
    * **Повышает безопасность** – помогает защититься от некоторых видов атак на подмену данных.
        
    * **Упрощает совместимость с WebRTC** – многие браузеры и клиенты WebRTC требуют `fingerprint`.
        
9. ### **Параметр** `ec-curve-name=secp384r1` в Coturn
    
    Этот параметр **указывает, какую эллиптическую кривую использовать для шифрования в TLS**.
    
    ### 🔹 **Что такое** `secp384r1`?
    
    * `secp384r1` – это эллиптическая кривая **P-384 (NIST)**.
        
    * Обеспечивает **384-битное шифрование**, что **безопаснее, чем стандартная P-256 (secp256r1)**.
        
    * Используется в ECDH (Elliptic Curve Diffie-Hellman) для создания **защищённого обмена ключами**.
        
    
    ### 🔹 **Почему это важно?**
    
    Использование эллиптической криптографии (ECC) делает шифрование: ✅ **Безопаснее** – выше уровень защиты по сравнению с RSA 2048.  
    ✅ **Быстрее** – меньшая нагрузка на CPU.  
    ✅ **Совместимо** – поддерживается всеми современными браузерами и WebRTC.
    
    ### 🔹 **Как включить в Coturn?**
    
    Добавь в `/etc/turnserver.conf`:
    
10. Добавь в `/etc/turnserver.conf`:
    
    ```plaintext
    ec-curve-name=secp384r1
    ```
    
    Затем **перезапусти Coturn**:
    
    ```plaintext
    systemctl restart coturn
    ```
    
    ### 🔹 **Какие есть альтернативы?**
    
    * `secp256r1` (P-256) – быстрее, но менее безопасен.
        
    * `secp521r1` (P-521) – максимально безопасен, но медленнее.
        
    
    Если хочешь **баланс между безопасностью и скоростью**, `secp384r1` – лучший выбор. 🚀
    

### **Как шифруется трафик при WebRTC и TURN?**

#### **1️⃣ UDP:**

* TURN **не шифрует** сам UDP-трафик, он просто ретранслирует пакеты.
    
* Однако WebRTC использует **SRTP (Secure Real-time Transport Protocol)**, который шифрует **UDP-трафик аудио и видео**.
    
* **SRTP использует AES (обычно AES-128-GCM или AES-256-GCM)**.
    
* Ключи для шифрования передаются через **DTLS (Datagram Transport Layer Security)**.
    

#### **2️⃣ TCP:**

* **SRTP работает только с UDP**, потому что он предназначен для **потоковой передачи в реальном времени**.
    
* Если WebRTC использует TCP, то применяется **TLS (Transport Layer Security)**.
    
* **TURN-трафик по TCP можно зашифровать через TLS (TURN over TLS, порт 5349)**.
