Рубрики
Без рубрики

Дневник внутренних дневников YouTube-DL, часть 2

Добро пожаловать во вторую часть моего дневника YouTube-Dl. В этой части я исследую другой файл в … Теги с Python.

YouTube-DL (4 частью серии)

Добро пожаловать во вторую часть моего дневника YouTube-Dl. В этой части я исследую другой файл в кодовой базе, aes.py.py. Содержит основные функции шифрования AES и расшифровки.

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

AES – это криптографический стандарт, написанный NIST в 2001 году, который использует большой шифр для шифрования и расшифровки произвольных данных. Он не шифрует данные один раз, но 10, 12 или 14 раз, в зависимости от длины шифра. Дешифрование делается одинаковое количество раз. Если вы когда-либо слышали о AES256, то есть вариант AES, который шифрует данные в 14 раундах. Он использует 256-битный ключ, больше, чем все другие существующие варианты, и это реализовано в YouTube-DL И тот, который я буду покрывать здесь.

Не тратя впустую время, давайте охватим функции.

aes.py

Этот файл короткий и прямой вперед, так что построчные объяснения не нужны здесь. Block_size_bytes Это длина каждого куска данных, которые зашифрованы за раз. Это означает, что входной текст разделен на 16 байт (равен 128 бит) массивов и зашифрован один за раз.

Здесь определены следующие функции:

  • AES_CTR_DECRYPT (данные, ключ, счетчик) [Экспортируется]
  • AES_CBC_DECRYPT (данные, ключ, IV) [Экспортируется]
  • aes_cbc_encrypt (данные, ключ, IV) [1]
  • key_expansion (данные) [Экспортируется]
  • aes_encrypt (данные, расширенные_key) [Экспортируется]
  • aes_decrypt (данные, расширенные_key) [2]
  • aes_decrypt_text (данные, пароль, key_size_bytes) [Экспортируется]

[1] По какой-то причине эта функция не экспортируется, но AES_CBC_DECRYPT экспортируется. Ничто не останавливает вас от импорта этой функции напрямую. Он зашифрует данные, используя CBC, используя только ключ шифрования и IV (вектор инициализации). Не волнуйтесь, если вы не понимаете, что это значит.

[2] Это просто расшифрует один блок данных, поэтому он не полезен сама.

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

Все большие массивы после строки 205 – коэффициенты для каждого из операций шифрования. Они не будут покрыты здесь, потому что они настолько велики, что они практически читательны. Не пытайтесь запомнить массивы коэффициентов, в этом нет никакой выгоды.

Этот файл и эти функции, скорее всего, не быть измененным, потому что это веб-сайт-агностик; Им не имеет ничего общего с загрузкой видео, они только реализации шифрования расшифровки AES. На этих функциях не ожидается работа запроса на тягу. Таким образом, не волнуйтесь, если вы не понимаете функциональные тела. Пока вы знаете, что делают функции, вы можете безопасно пропустить до поста на следующей неделе.

AES_CTR_DECRYPT (данные, ключ, счетчик)

Расширяет строку данных с помощью клавиши 16/23/32 байтов и внутренний Счетчик Класс, который является просто случайным целым числом для счетчика, который имеет функцию приращения, которая добавляет 1 к нему, упаковывая его на ноль, если он попадает в максимальное количество.

Возвращает дешифрованную строку.

AES_CBC_DECRYPT (данные, ключ, IV)

Так же, как AES_CTR_DECRYPT кроме вместо А Счетчик Объект, у нас есть 16-байтовый начальный вектор (IV), который обычно 0. Используется для получения шифра (другой буфер) для первого блока, который затем используется для вывода шифра для второго блока и т. Д.

aes_cbc_encrypt (данные, ключ, iv)

Противоположность AES_CBC_DECRYPT , он принимает простые текстовые данные, ключ и IV и возвращает зашифрованные данные.

key_expansion (данные)

Это берет ключ Аргумент из функций выше и расширяет ключ в клавишу более высокий размер около порядка 240 байтов, если ключ изначально был 32 байта.

Расширенный ключ используется для выполнения операций шифрования AES на каждом блоке.

aes_encrypt (данные, расширенные_key)

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

aes_decrypt (данные, расширенные_key)

Делает противоположность Aes_encrypt То есть это дешифрует один блок, нанесение обратного операции, которую я перечислен выше в обратный приказ.

aes_decrypt_text (данные, пароль, key_size_bytes)

Вот как вы расшифруете блок данных с помощью пароля. Сначала ключ шифра создается путем шифрования пароля, чтобы зашифрованный пароль – ключ шифрования. Затем счетчик создается внутренне, и данные расшифруются с помощью ключа шифрования и AES_CTR_DECRYPT Отказ

Приложение

Фу! Большинство из вышесказанного, вероятно, не имело никакого смысла для вас, даже я не уверен, правильно ли я на 100% в некоторых местах. Но самый важный урок, который я хочу, чтобы вы взяли домой, состоит в том, что YouTube-DL имеет функции AES для шифрования и дешифрования. Почему нужно зашифровать и расшифровать данные? В конце концов, это просто видео загрузчик. Надеюсь, мы узнаем в конце концов.

Я был удивлен тем, насколько сложным объяснение алгоритмов AES началось. Это должно объяснить, почему только несколько разработчиков знают алгоритм, есть много (важно, потому что его использовали в безопасности) Математика, которая применяется здесь, и даже у меня были некоторые проблемы после некоторых мест. Поэтому, если вы видите какие-либо ошибки в этом посте, не бойтесь называть их. Это то, что я обычно пишу в любом случае, но это особенно важно в этом посте из-за природы этой темы, шифрования.

Важно, чтобы все больше людей понять, как работает шифрование.

YouTube-DL (4 частью серии)

Оригинал: “https://dev.to/zenulabidin/diary-of-youtube-dl-internals-part-2-3he4”