March 25, 2023

Асимметричное шифрование

Всех приветствую! На связи админ канала Falcon Bytes! В данном посте мы затронем тему асимметричного шифрование, зачем оно нужно и напишем самый простой скрипт который шифрует сообщения этим алгоритмом. Приятного прочтения!

Асимметричное шифрование — это метод шифрования данных, предполагающий использование двух ключей — открытого и закрытого. Открытый (публичный) ключ применяется для шифрования информации и может передаваться по незащищенным каналам. Закрытый (приватный) ключ применяется для расшифровки данных, зашифрованных открытым ключом. Открытый и закрытый ключи — это очень большие числа, связанные друг с другом определенной функцией, но так, что, зная одно, крайне сложно вычислить второе.

Для лучшего понимания, представьте ситуацию:
Есть вы, и ваш друг, также есть хакер, который имеет полный доступ к сообщениям, которые вы передаете друг другу. Для того, чтобы обезопасить вашу переписку, Вы отправляете другу коробку и навесной замок, а ключ оставляете у себя, в надежном месте. Друг пишет свое сообщение, кладет его в коробку, и закрывает вашим замком. Ваш друг теперь не имеет доступ к сообщению, которое он положил в коробку. Хакер соответственно не имеет тоже доступа к содержимому ящика. Для того, чтобы получить к сообщению друга, вы открываете коробку своим ключом. Готово! Вы передали свое сообщением методом асимметричного шифрования. Соответственно Приватный ключ - ваши ключи от замка. Публичный ключ - ваш замок, который вы посылаете своему другу.

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

Применение асимметричных алгоритмов

  1. Безопасность веб-сайтов: SSL и TLS используют асимметричное шифрование для защиты веб-сайтов и обеспечения безопасной передачи данных между сервером и клиентом.
  2. Электронная почта: протоколы электронной почты, такие как S/MIME и PGP, используют асимметричное шифрование для защиты конфиденциальности электронных писем.
  3. Цифровые подписи: асимметричное шифрование используется для создания и проверки цифровых подписей, которые обеспечивают подлинность данных и подписывающего.
  4. VPN: многие виртуальные частные сети (VPN) используют асимметричное шифрование для шифрования и защиты данных, передаваемых между клиентами и серверами.
  5. Банковские транзакции: многие банковские транзакции защищены асимметричным шифрованием, чтобы обеспечить конфиденциальность и целостность данных.
  6. Мобильные устройства: асимметричное шифрование используется на мобильных устройствах для защиты данных, передаваемых через мобильные сети.
  7. Криптовалюты: многие крипто валютные протоколы используют асимметричное шифрование для защиты цифровых кошельков и транзакций.
  8. Мессенджеры: Telegram, Matrix, Whats App. (Но не надейтесь на анонимность этих мессенджеров, и учтите, что они тоже очень хорошо читаются спец службами)

Вот например схема шифрования сообщения в Telegram:

Рассмотрим простейший пример алгоритма такого шифрования на Python:

import random

# Генерация случайных простых чисел p и q
def generate_primes():
    primes = []
    for i in range(2, 100):
        is_prime = True
        for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    p = random.choice(primes)
    q = random.choice(primes)
    while p == q:
        q = random.choice(primes)
    return p, q

# Расширенный алгоритм Евклида для нахождения обратного элемента в кольце вычетов по модулю
def extended_gcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        gcd, x, y = extended_gcd(b % a, a)
        return gcd, y - (b // a) * x, x

# Вычисление открытого и закрытого ключей RSA
def generate_keys(p, q):
    n = p * q
    phi = (p - 1) * (q - 1)
    e = 65537 # Общепринятый открытый экспонент
    gcd, x, y = extended_gcd(e, phi)
    d = x % phi
    if d < 0:
        d += phi
    return (e, n), (d, n)

# Шифрование и расшифрование RSA
def rsa_encrypt(m, public_key):
    e, n = public_key
    c = pow(m, e, n)
    return c

def rsa_decrypt(c, private_key):
    d, n = private_key
    m = pow(c, d, n)
    return m

# Пример использования
p, q = generate_primes()
public_key, private_key = generate_keys(p, q)

text = 'Hello World!'
lst = [ord(i) for i in text]
c = [rsa_encrypt(m, public_key) for m in lst]
m = ''.join([chr(rsa_decrypt(i, private_key)) for i in c])

print("Исходное сообщение: ", text)
print("Приватный ключ: ", private_key)
print("Публичный ключ: ", public_key)
print("Зашифрованное сообщение: ", c)
print("Расшифрованное сообщение: ", m)

#Только давайте не будем плеваться ядом из серии: "ЫЫЫЫ гавнакод я магу в 100 раз лучше" Это простой учебный вариант скрипта, если вы такие умные, нахуй вы вообще открыли этот пост?

Обратите внимание, что если несколько раз запустить скрипт, то переведенный в числа зашифрованный текст всегда разный, при этом нету явной закономерности в этих числах. Такой алгоритм шифрования можно взломать обыкновенным перебором приватного ключа только потому, что числа в приватном и публичном ключах относительно вычислительной мощности очень маленькие. В настоящем алгоритме RSA обычно используется приватный ключ размером 2048 бит, это означает, что число, образующее закрытую экспоненту, будет состоять примерно из 617 десятичных цифр. Однако, если нужно зашифровать очень ценные данные, то размер ключей может достигать и большего числа.

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

Под пониманием "невзламываемый" я подразумевается то, что для того, чтобы подобрать закрытую экспоненту для шифра, понадобится очень много времени. И подбирать будут не люди, а все машины мира. Грубо говоря, для расшифрования сообщения, в каком либо мессенджере понадобится около 2000 лет непрерывной работы всех компьютеров мира.

Чтобы лучше понять принцип работы RSA шифрования, советую посмотреть данное видео на You Tube:

https://www.youtube.com/watch?v=vooHjWxmcIE&t=4s&ab_channel=%D0%9D%D0%B0%D1%83%D1%87%D0%BD%D1%8B%D0%B9%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB

На этом все, надеюсь статья была вам интересна и вы узнали что-то новое.

Подпишитесь на наш канал!