В чем преимущество использования известного алгоритма шифрования?

Я могу легко создать свой собственный алгоритм шифрования следующим образом:

// make sure the private key is long enough
byte key[] = {0x3e, 0x33, 0x7e, 0x02, 0x48, 0x2a, 0x4e, ...};
byte data[] = "a string to be encrypted".getBytes("utf-8");
for (int i = 0, j = 0; i < data.length; ++i, ++j) {
    data[i] ^= key[j];
    if (j + 1 == key.length)
        j = 0;
}

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


person neevek    schedule 23.01.2013    source источник
comment
Если вы понизите мой вопрос, оставьте свои причины здесь!   -  person neevek    schedule 23.01.2013
comment
Вот несколько веских причин: stackoverflow.com/questions/3651090/home-made-cryptography   -  person Jerry B    schedule 23.01.2013


Ответы (3)


говоря непосредственно о предложенном вами алгоритме, с ним есть несколько серьезных проблем:

  1. Если ваши данные длиннее вашего ключа, то будет очень легко восстановить ваш ключ, потому что он станет похож на шифр Виженера.

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

  3. Поскольку ваш ключ должен быть такой же длины, как сообщение, чтобы быть действительно безопасным, у вас есть кошмар управления ключами. Как сохранить ключ такой же длины, как и сообщение? как вы безопасно передаете его тому, кто хочет его прочитать? Что делать, если вы хотите зашифровать файл размером 1 ГБ? теперь вам нужно 2 ГБ хранилища для вашей зашифрованной версии

  4. Ваш ключ должен быть совершенно случайным. Любые недостатки в вашем генераторе случайных чисел раскроют информацию о вашем сообщении и ключе. По общему признанию, это проблема и с такими алгоритмами, как AES, но, хотя плохой ГСЧ уменьшит усилия по взлому сообщения/ключа AES, это не так плохо, как было бы для вашей схемы.

Хорошо известные алгоритмы, такие как AES, решают подобные проблемы, используя короткие ключи для большей безопасности. один 256-битный ключ можно использовать для шифрования огромного количества сообщений, прежде чем он станет небезопасным, а управление и хранение 256-битного ключа намного проще, чем 1 ГБ.

person Peter Elliott    schedule 23.01.2013
comment
Спасибо, это ответ, который я ищу! Он четко указывает на недостатки моего алгоритма, что помогает мне понять, почему он небезопасен, почему я должен использовать известный алгоритм, а не самодельный. Еще раз спасибо Петр, это действительно очень полезно! - person neevek; 23.01.2013

Вы используете хорошо известный алгоритм, чтобы не стать Дейвом.

Закон Шнайера гласит, что "любой человек может изобрести систему безопасности настолько умны, что она или он не могут придумать, как его сломать».

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

person Joachim Sauer    schedule 23.01.2013
comment
Первая ссылка интересная, Дэйвом не стану! - person neevek; 23.01.2013

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

Я не эксперт в криптоанализе, но что-то настолько простое, вероятно, не так безопасно.

Кроме того, если бы это было так просто, разве все не делали бы это?

person hvgotcodes    schedule 23.01.2013