Почему Я Не Занимаюсь Криптографией

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

Примечание — личное мнение человека, который уважает таких программистов, но сам никогда не влезет в криптографию.

Мы, программисты, любим ошибаться.

Маленькие ошибки, большие ошибки, лень — возможности безграничны.

Обычно мы об этом узнаём сразу: у нас разваливаются тесты, где-то в логах видны возникшие исключения или мы слышим жалобы от клиентов — мол, то-то и то-то перестало работать.

В большинстве случаев нас даже не волнует, насколько опасен этот баг — его можно временно обойти, и приложение в целом продолжит нормально функционировать.

Как только причина будет найдена, мы исправим ошибку и все будут довольны.

Но давайте представим, что вы сделали что-то вроде ошибки на одну позицию .

Это нормально, такое случается.

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

Как будто ошибки вообще не было.

Представьте, что, хотя вывод верен, из-за этой ошибки он фактически совершенно бесполезен, и вся ваша программа также совершенно бесполезна.

Добро пожаловать в мир криптографии.

Криптография не может быть «немного глючной».

Он не может быть «в целом работающим».

Либо оно работает на 100% правильно, либо вообще не стоило браться за эту работу.

Слабое звено разрывает всю цепочку.

Худший: глядя на данные, которые программа выдаёт на выходе, вы не заметите подвоха.

Вы что-то шифруете, а на выходе получается какой-то случайный мусор.

Расшифровываешь эту чушь - видишь оригинальный текст. Кажется, это работает. Да? На прошлой неделе была статья о пробелах в генераторе случайных чисел в алгоритме сервиса cryptocat является отличным примером этого.

Ошибка была вызвана той же ошибкой для одной позиции в их генераторе случайных чисел.

На выходе функции по-прежнему были случайные числа, и при ближайшем рассмотрении они выглядели случайными.

Эффект усиливался тем, что мы привыкли считать написанный код правильным.

Но это не правда.

Произошла ошибка, и случайные числа были недостаточно случайными.

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

Защита здесь — это не просто дополнительная функция, включенная в состав основных.

В данном случае это был основной функционал.

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

Друзья мои, именно поэтому я держусь подальше от криптовалют. Я просто не такой уж и крутой.

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

Вы должны поставить перед собой цель достичь совершенства.

Если вам не удастся достичь цели, вы безнадежны.

Криптография — это то, что я бы предпочел оставить другим.

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

=== Автор перевода рекомендует читать одновременно habrahabr.ru/post/181372 Теги: #мнение #криптография #цена ошибки #рандомизация #офф-бай #криптография

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.