Ответ
Асимметричное шифрование (или криптография с открытым ключом) — это система, использующая пару ключей для шифрования данных: публичный и приватный.
- Публичный ключ можно свободно распространять. Он используется для шифрования данных и проверки цифровой подписи.
 - Приватный ключ должен храниться в секрете. Он используется для расшифровки данных, зашифрованных публичным ключом, и для создания цифровой подписи.
 
Главный принцип: данные, зашифрованные одним ключом из пары, могут быть расшифрованы только другим ключом из этой же пары.
Применение в бэкенде:
- HTTPS/TLS: Установка безопасного соединения, когда сервер предоставляет свой публичный ключ клиенту.
 - SSH: Аутентификация пользователей по ключам.
 - JWT (JWS): Подпись токенов для подтверждения их подлинности.
 
Пример на Go (RSA-OAEP):
import (
    "crypto/rand",
    "crypto/rsa",
    "crypto/sha256",
    "fmt"
)
func main() {
    // 1. Генерация пары ключей
    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        panic(err)
    }
    publicKey := &privateKey.PublicKey
    message := []byte("очень секретное сообщение")
    // 2. Шифрование с помощью публичного ключа
    ciphertext, err := rsa.EncryptOAEP(
        sha256.New(),
        rand.Reader,
        publicKey,
        message,
        nil,
    )
    if err != nil {
        panic(err)
    }
    // 3. Расшифровка с помощью приватного ключа
    plaintext, err := rsa.DecryptOAEP(
        sha256.New(),
        rand.Reader,
        privateKey,
        ciphertext,
        nil,
    )
    if err != nil {
        panic(err)
    }
    fmt.Printf("Original: %sn", string(message))
    fmt.Printf("Decrypted: %sn", string(plaintext))
}Преимущества:
- Безопасный обмен ключами: Нет необходимости передавать секретный ключ по незащищенному каналу.
 
Недостатки:
- Низкая производительность: Значительно медленнее (в сотни и тысячи раз), чем симметричное шифрование, из-за сложных математических вычислений.