Только для многих генераторов ПСП сложно сделать алгоритм, который по любому оффсету начнет вычислять последовательность. Хотя можно использовать например число пи (для него такой алгоритм есть). Но при этом неизвестно, нормально ли оно — без нормальности будут вероятностные смещения (как в RC4).
Можно также применять счетчик в ключе (например номер сессии). Например, внутри сессии все шифруется одной последовательностью (без реинициализации ПСП конечно), а между сессиями ключ меняется увеличением счетчика.
В общем способов обойти повторное использование одной и той же ПСП достаточно.
PS Ключ килобайтный-мегабайтный необязателен, тех же 256 бит хватит за уши.
Поточные шифры так и делают — от ключа генерируют длинную ПСП (с очень большим периодом) и эта последовательность используется как гамма. Плохо, когда последовательность используется повторно (например зашифровали больше чем период, начался повтор). Тогда поксорив обе зашифрованные последовательности, получим заксоренные плеинтексты. Это очень плохо.
«ПСП от ключа» — не критерий, а просто пример. В ENIGMA есть подстановки как элементы, но сам этот шифр сложно назвать подстановкой, так же как и гаммированием.
Вообще, термины достаточно размытые. Перестановку тоже можно рассмотреть как частный случай подстановки из N символов в N символов.
Если же посмотреть с точки зрения построения блочных алгоритмов, подстановки обычно задаются таблицами, а перестановки тех же 64 битов из DES'а задать таблицей достаточно накладно. Также как и гаммирование (используемое например для отбеливания) не получится задать таблицей.
На мой взгляд это ключевое различие этих терминов.
Подстановок в шифре обычно конечное количество, если же рассматривать гаммирование как много подстановок, тогда их количество зависит от длины шифруемого текста. И вообще гаммирование как подстановки плохо, т.к. гаммировать с одной и той же последовательностью несколько раз нельзя, а подстановки использовать по несколько раз можно.
Гаммирование обычно используется в поточных шифрах — в качестве гаммы берется некоторая ПСП, зависящая от ключа.
Подстановки (S-boxы) и перестановки используются в блочных шифрах.
> при использовании алгоритм Фейстеля необходимо делать как минимум 3 цикла, только в таком случае при анализе результат таких перестановок будет не отличим от случайного набора бит.
> на этой системе не получиться построить «идеальный шифр»
Идеальный шифр и «неотличимый от случайного набора бит» — одно и тоже. Если используемая в сети Фейстеля односторонняя функция безопасна, то и 4-раундовый Фейстель с такой функцией тоже безопасен (при некоторых определениях «безопасности» достаточно и 3х раундов).
И здесь всё в одном потоке: когда сопрограмма ждет новых данных, она делает (yield) и управление передается в другое место. При этом после передачи управления обратно генератору-сопрограмме (вместе с какими то данными) выполнение продолжится с того же места.
Это база для «нормальных» корутин, т.е. например шедулер нужно писать самому.
Ниже кидали ссылку на PEP 342, там все понятно расписано.
Подставлять параметры в командную строчку через .format — ужасно. Если в параметре попадется пробел или более страшные символы (например если какая-то команда сфейлится и выдаст не хэш коммита, а ошибку), может быть много неожиданностей. Нужно передавать команду списком типа [«git», «log», param, "--pretty"].
Поиск строки подходящей под регэксп — NP-полная задача. Конечно, для большого подмножества регэкспов это сделать несложно и этого подмножества хватит за уши для регэкспов, попадающихся на практике.
Только для многих генераторов ПСП сложно сделать алгоритм, который по любому оффсету начнет вычислять последовательность. Хотя можно использовать например число пи (для него такой алгоритм есть). Но при этом неизвестно, нормально ли оно — без нормальности будут вероятностные смещения (как в RC4).
Можно также применять счетчик в ключе (например номер сессии). Например, внутри сессии все шифруется одной последовательностью (без реинициализации ПСП конечно), а между сессиями ключ меняется увеличением счетчика.
В общем способов обойти повторное использование одной и той же ПСП достаточно.
PS Ключ килобайтный-мегабайтный необязателен, тех же 256 бит хватит за уши.
Куда проще?
Вообще, термины достаточно размытые. Перестановку тоже можно рассмотреть как частный случай подстановки из N символов в N символов.
Если же посмотреть с точки зрения построения блочных алгоритмов, подстановки обычно задаются таблицами, а перестановки тех же 64 битов из DES'а задать таблицей достаточно накладно. Также как и гаммирование (используемое например для отбеливания) не получится задать таблицей.
На мой взгляд это ключевое различие этих терминов.
Гаммирование обычно используется в поточных шифрах — в качестве гаммы берется некоторая ПСП, зависящая от ключа.
Подстановки (S-boxы) и перестановки используются в блочных шифрах.
Поэтому это все таки немного разные вещи.
> на этой системе не получиться построить «идеальный шифр»
Идеальный шифр и «неотличимый от случайного набора бит» — одно и тоже. Если используемая в сети Фейстеля односторонняя функция безопасна, то и 4-раундовый Фейстель с такой функцией тоже безопасен (при некоторых определениях «безопасности» достаточно и 3х раундов).
Это база для «нормальных» корутин, т.е. например шедулер нужно писать самому.
Ниже кидали ссылку на PEP 342, там все понятно расписано.