← Назад к вопросам

Что такое криптография?

2.0 Middle🔥 151 комментариев
#Безопасность

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое криптография?

Криптография — это наука и практика разработки методов защиты информации, обеспечивающих её конфиденциальность, целостность, аутентичность и неотслеживаемость посредством преобразования данных в форму, недоступную для чтения или понимания без соответствующего ключа или знания алгоритма. В контексте разработки на Go (и вообще в IT) криптография является фундаментальным инструментом для создания безопасных систем.

Основные цели криптографии

  1. Конфиденциальность — гарантия того, что информацию может понять только её целевой получатель. Это достигается через шифрование.
  2. Целостность — защита от несанкционированного изменения данных (например, через хэш-функции и цифровые подписи).
  3. Аутентичность — подтверждение идентичности участников обмена (например, с помощью цифровых подписей и протоколов аутентификации).
  4. Неотслеживаемость (non-repudiation) — предотвращение ситуации, когда сторона может отрицать совершение действия (например, отправку сообщения), что также обеспечивается цифровыми подписями.

Ключевые концепции и их реализация в Go

1. Шифрование (Encryption)

Преобразование понятных данных (plaintext) в непонятные (ciphertext) и обратно. Бывает двух основных видов:

  • Симметричное шифрование: один ключ используется для шифрования и дешифрования. Алгоритмы: AES, ChaCha20.

    // Пример использования AES в Go через стандартный пакет crypto/aes
    import "crypto/aes"
    
    func encryptAES(key, plaintext []byte) ([]byte, error) {
        block, err := aes.NewCipher(key)
        if err != nil {
            return nil, err
        }
        ciphertext := make([]byte, len(plaintext))
        block.Encrypt(ciphertext, plaintext)
        return ciphertext, nil
    }
    
  • Асимметричное шифрование (публичная криптография): используются два ключа — публичный (public) для шифрования и приватный (private) для дешифрования. Алгоритмы: RSA, ECC.

    // Пример генерации RSA ключей в Go
    import "crypto/rsa"
    import "crypto/rand"
    
    func generateRSAKey() (*rsa.PrivateKey, error) {
        privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
        if err != nil {
            return nil, err
        }
        // publicKey := &privateKey.PublicKey
        return privateKey, nil
    }
    

2. Хэш-функции (Hash Functions)

Односторонние функции, преобразующие данные в фиксированную строку (хэш). Не могут быть обращены. Используются для проверки целостности, создания цифровых подписей, в структурах данных (хеш-таблицы). Алгоритмы: SHA-256, SHA-512, MD5 (считается устаревшим для безопасности).

// Пример вычисления SHA-256 хэша в Go
import "crypto/sha256"

func calculateHash(data []byte) []byte {
    hash := sha256.Sum256(data)
    return hash[:] // Преобразование массива фиксированной длины в slice
}

3. Цифровые подписи (Digital Signatures)

Механизм, позволяющий подтвердить, что данные были созданы конкретным владельцем приватного ключа и не были изменены. Сочетает хэш-функции и асимметричную криптографию.

// Пример создания подписи RSA-SHA256 в Go
import "crypto"
import "crypto/rsa"
import "crypto/sha256"

func signData(privateKey *rsa.PrivateKey, data []byte) ([]byte, error) {
    hashed := sha256.Sum256(data)
    signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed[:])
    if err != nil {
        return nil, err
    }
    return signature, nil
}

Применение криптографии в разработке на Go

Как Go-разработчик, ты часто взаимодействуешь с криптографией через стандартную библиотеку crypto и дополнительные модули:

  • Защита передачи данных: HTTPS/TLS (использует симметричное и асимметричное шифрование, цифровые подписи).
  • Аутентификация пользователей: JWT-токены (подписанные хэшем), OAuth.
  • Хранение паролей: использование алгоритмов адаптивного хэширования (bcrypt, scrypt) вместо простых хэшей.
  • Защита данных на стороне клиента: шифрование чувствительной информации перед отправкой в базу данных.
  • Криптовалюты и блокчейн: основная технология, построенная на криптографии (хэши, цифровые подписи).

Заключение

Криптография — не просто набор алгоритмов, а целостная дисциплина, требующая понимания не только механизмов (как шифровать), но и принципов (почему именно так, какие угрозы мы предотвращаем). В Go, благодаря мощной и относительно простой стандартной библиотеке crypto, реализация базовых криптографических задач становится доступной, но критически важно использовать её правильно — выбирать современные алгоритмы, правильно управлять ключами и избегать собственных "доморощенных" решений, которые часто приводят к уязвимостям. Для сложных задач (например, полноценного TLS) обычно используются высокоуровневые библиотеки, построенные на этих стандартных криптографических примитивах.