Ответ
HTTPS использует симметричное и асимметричное шифрование в комбинации.
- Асимметричное шифрование (RSA, ECDSA) – для обмена ключами и аутентификации сервера (SSL/TLS handshake).
- Симметричное шифрование (AES, ChaCha20) – для шифрования данных после установки соединения.
- Хеширование (SHA-256) – для проверки целостности данных.
Пример обмена ключами в TLS 1.3:
// Упрощённый пример (не для продакшена!)
func handshake() {
// Сервер отправляет публичный ключ
pubKey, privKey := generateRSAKeys()
// Клиент шифрует симметричный ключ
encryptedKey := rsa.EncryptOAEP(sha256.New(), rand.Reader, pubKey, symKey, nil)
// Сервер расшифровывает
symKey := rsa.DecryptOAEP(sha256.New(), rand.Reader, privKey, encryptedKey, nil)
// Далее общение идёт с symKey (AES)
}
Современные стандарты (TLS 1.3) минимизируют использование асимметричного шифрования из-за его медлительности.