Криптографические системы: изучение методов и примеров кода для безопасной связи

Под криптографической системой понимается набор алгоритмов и протоколов, предназначенных для защиты связи и обмена данными путем преобразования открытого текста в зашифрованный текст. Вот несколько методов, обычно используемых в криптографических системах, а также примеры кода:

  1. Симметричное шифрование (с использованием AES):
    Симметричное шифрование использует один ключ как для шифрования, так и для дешифрования. Алгоритм Advanced Encryption Standard (AES) широко используется в симметричном шифровании.
from cryptography.fernet import Fernet
# Generate a random key
key = Fernet.generate_key()
# Create a cipher object
cipher = Fernet(key)
# Encrypt a message
plaintext = b"Hello, World!"
ciphertext = cipher.encrypt(plaintext)
# Decrypt the ciphertext
decrypted_text = cipher.decrypt(ciphertext)
print(decrypted_text)  # Output: b"Hello, World!"
  1. Асимметричное шифрование (с использованием RSA).
    Асимметричное шифрование предполагает использование пары ключей: открытого ключа для шифрования и закрытого ключа для дешифрования. Алгоритм RSA — это распространенный алгоритм асимметричного шифрования.
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
# Generate a private/public key pair
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)
# Get the public key
public_key = private_key.public_key()
# Encrypt a message using the public key
plaintext = b"Hello, World!"
ciphertext = public_key.encrypt(
    plaintext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)
# Decrypt the ciphertext using the private key
decrypted_text = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)
print(decrypted_text)  # Output: b"Hello, World!"
  1. Хеш-функции (с использованием SHA-256):
    Хеш-функции — это односторонние функции, которые преобразуют данные в хеш-значение фиксированного размера. Алгоритм SHA-256 обычно используется для хеширования.
import hashlib
# Hash a message using SHA-256
message = b"Hello, World!"
hash_value = hashlib.sha256(message).hexdigest()
print(hash_value)  # Output: "2ef7bde608ce5404e97d5f042f95f89f1c232871"
  1. Цифровые подписи (с использованием RSA и SHA-256).
    Цифровые подписи обеспечивают целостность и подлинность сообщений. Вот пример использования RSA и SHA-256 для цифровых подписей:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
# Sign a message using RSA and SHA-256
message = b"Hello, World!"
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)
# Verify the signature using the public key
public_key.verify(
    signature,
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)