Общепринято, что вы не должны создавать свои собственные алгоритмы и особенно не полагаться на то, что эти алгоритмы остаются в секрете.
Концептуальная причина заключается в том, что хорошее шифрование составляет количественно конфиденциальность. Мы не хотим, чтобы наши секреты были взломаны, но более точно мы хотим, чтобы иметь возможность сказать, сколько будет стоить взломать наши секреты (и, надеюсь, показать, что стоимость слишком высока, чтобы предвидеть любой субъект на Земной шар). Это настоящий прогресс, произошедший через несколько лет после Второй мировой войны: понять разницу между ключом и алгоритмом. Ключ концентрирует секрет. Алгоритм становится реализацией.
Поскольку реализация, в общем-то, реализована, она существует в виде некоторого кода или устройства, которое является материальным и сохраняется, даже если оно не используется. Сохранение секрета реализации требует отслеживания жесткого диска, на котором постоянно находится код. Если злоумышленник увидит двоичный код, он может его перепроектировать, что зависит от его ума и терпения. Суть в том, что очень трудно уметь сказать: «Восстановление описания алгоритма стоит X долларов».
С другой стороны, ключ короткий. Это может быть безопасно сохранено намного легче; например Вы могли бы запомнить это и избежать передачи его на любое постоянное устройство хранения. Тогда вам придется беспокоиться о своем ключе только тогда, когда вы им пользуетесь (а не тогда, когда вы этого не делаете, например, ночью, когда вы спите). Количество возможных ключей - простая математическая задача. Вы можете легко и точно оценить среднюю стоимость перечисления возможных ключей, пока ваш ключ не будет найден. Ключ является надежной основой для количественной защиты.
Так что вы не должны бросать свои собственные алгоритмы, потому что тогда вы не знаете, сколько вы получаете безопасности.
Кроме того, большинство людей, которые применили свои собственные алгоритмы, обнаруживают, как правило, трудным путем, что они вообще не получают особой защиты. Разработка хорошего алгоритма шифрования hard , потому что он не может быть автоматически протестирован. Ваш код может выполняться и правильно расшифровывать данные, которые он зашифровал, но он ничего не говорит вам о том, насколько безопасен алгоритм. Разработка AES была результатом процесса, который занял несколько лет и в котором участвовали сотни квалифицированных криптографов (большинство из которых имели докторскую степень и многолетний опыт научных исследований в области симметричного шифрования). То, что одинокий разработчик мог бы делать то же самое, не говоря уже о лучшем, в тайне своей мастерской, выглядит отчасти ... неправдоподобно.