Много исходников есть на сайте автора алгоритма www.schneier.com/blowfish.html
Вообще Blowfish очень простой алгоритм. Как по F, так и по всему.
Единственный замут — инициализация
Самое сложное для понимания -это та самая F, которая позволяет производить обратное преобразование. Какая бы статья полная не была, но мне как человеку увлекающемуся, до сих пор не понятно как она в обратную сторону работает.
p.s. Имеется в виду, что функция F — линейная, и в процессе шифрации, и в процессе дешифрации ее задача одна и та же и принцип работы не меняется. Что касаемо самого алоритма, то в случае дешифрации меняется порядок использования ключей. Просто проследите за логикой работы на схемах шифрации/дешифрации, которая приведена в статье.
Вообще это все строится на том что сложение по модулю легко обратимо. Т.е. если A xor B = C, то С xor B = A, а С xor A = B. В общем применяем операцию сложения по модулю к одному из операндов и результату их сложения и получаем другой операнд.
Вас что не учили как правильно верёвку на циферблат часов наматывать?)
> Ответ прост — она не ограничена. Можно использовать ключи до 576 бит. Но! Ограничение было сделано исходя из требований к соблюдению безопасности и криптостойкости алгоритма.
Ограничение размера ключа в 448 бит было сделано для достижения гарантии того, что каждый бит каждого под-ключа (имеются в виду раундовые ключи и элементы матрицы подстановки) непосредственно зависит от каждого бита исходного ключа (в целом), поскольку использование совокупности ключей P15, P16, P17 и P18 не оказывает влияние на каждый бит зашифрованного текста.
Да и к тому же, на Википедии есть уже статья, посвященная алгоритму Blowfish, которая, как мне кажется, вполне дает понять что из себя представляет данный алгоритм. Не так подробно как здесь, конечно, но всё же. Единственное, наверное, имеет смысл разместить там ссылку на эту страницу, для тех, кто хочет узнать более подробно по этой теме.
А так, Хабрахабр ведь тоже своего рода свободная энциклопедия…
В профессиональных кругах слово «шифрация» не в почёте, вместо него употребляется «шифрование». Аналогично с «дешифрацией». При этом следует иметь в виду, что «дешифрование» — это получение plain text без ключа, т. е. «взлом»; а «расшифровывание» — это получение plain text при знании ключа.
Разумеется, иная терминология никак не уменьшает ценности статьи. :-) Автору спасибо.
В своё время пришлось разбираться с алгоритмом IDEA практически по исходникам, текстов мне тогда было доступно мало, поэтому представляю, что это такое. И если сообщество сочтёт нужным, поддержу тему статьёй по этому алгоритму.
Вопрос терминологии очень часто метит на звание «камня преткновения» в IT-среде. Но, к счастью, достигнуть этого у него не удается, поскольку понимаем мы друг друга зачастую с полуслова :) Контекст всё же первичен, а форма представления вторична.
В вопросе шифрации/шифрования я исхожу из следующей логики:
«шифрация» — как процесс (as process) — произвести шифрацию входящих данных;
«шифрование» — как возможность (as aptitude) — эта программа использует шифрование по алгоритму XXL.
По аналогии с «врач сейчас проводит «операцию» и «этот врач может «оперировать».
Если относительно дешифрации/взлома/расшифрования — то любой процесс получения plain-text из зашифрованного — это в принципе так или иначе процесс дешифрации (расшифрования как. Просто, если это было сделано без полного ключа, то это еще и «взлом».
Но, как Вы правильно заметили ниже, «хоть горшком назови, только в печь не сажай» (:
Алексей, вопросами сертификации в конкретных странах из принципа не интересуюсь. У меня характер космополита и поэтому в вопросах разработки я привык доверять мировому опыту в первую очередь.
Думаю, на местах, это скорее правовые и организационные вопросы, на которые лучше ответят юристы.
На схеме у Вас 17 блоком XOR-ится верхняя половинка, а 18 — нижняя, в коде же наоборот. Это может каким-либо образом повлиять на криптостойкость алгоритма?
На пути к Skein: просто и понятно про Blowfish