Уважаемые теоретики!

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

Так как же это сделать?

TL;DR:

Короткий разумный ответ: найдите хорошую аспирантуру и пройдите необходимые курсы, а затем работайте в уважаемой компании в должности охранника.

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

Шаг 1. Откуда вы знаете, что вам вообще нравится криптография??

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

А. Теоретическая криптография

Процесс для этого прост: всегда идите снизу вверх. Начните с изучения самых основных криптографических примитивов, а затем научитесь разрабатывать высокоуровневые (теоретические) протоколы.

Шаг 0. Предварительные требования

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

Шаг 1. Создайте базу

Предполагая, что вы уверены в соблюдении всех требований, вам нужно начать с простого, но хорошего вводного онлайн-курса. Я бы порекомендовал видеолекции либо от Christof Paar, либо от Dan Boneh. Оба хорошие. Выбрал любой. Вы тоже не пожалеете. Примечание: в качестве сопроводительного учебника Введение в современную криптографию Каца и Линделла вполне подойдет. Если вам кажется, что это слишком просто, попробуйте Основы криптографии Одеда Голдрайха (бесплатные черновики)

Шаг 2. Расширенные темы

Для продвинутой криптографии есть открытые курсы. Вместо этого я настоятельно рекомендую учиться, читая исследовательские работы. Если вы хотите хорошо разбираться в теории, то это мост, который вам в конце концов придется пересечь. Так что лучше заняться этим заранее. Начните с обзоров литературы, таких как это (pdf) или это (pdf). Затем переходите к простым, понятным документам. Еще лучше, если они будут историческими. IACR каталогизирует бесплатные версии для большинства статей с 1996 года. Мне больше всего нравится Shamir’s Secret Sharing (попробуйте произнести это быстро 5 раз: Shamir Secret Sharing) paper(pdf) . Две страницы криптографической целостности!!!

Шаг 3. Время писать

До сих пор вы впитывали информацию, как губка знаний, которой вы и являетесь. Теперь вам нужно заставить это работать. Итак, выберите тему и проведите обширное исследование по ней. Тема сама по себе не важна (плавание — это плавание, чему научились в бассейне или озере). Затем напишите на нем реферат. Найдите преподавателя или, желательно, старшего доктора наук и попросите их помочь оценить вашу работу. Исследования и соответствующие документы (которые я ненавижу TBH) — тяжелая работа, но поверьте мне, она окупится. А поскольку все в криптографии связано со всем остальным, изучая одну тему, вы в конечном итоге изучите все остальное. Бонус: научитесь пользоваться LaTeX. Вам это понадобится.

Шаг 4. Совместная работа (и публикация)!

Как только вы написали свою первую (курсовую) работу, ваши любительские дни остались позади. Теперь нет оглядки назад. Следующий шаг, если вы решили его предпринять, требует написания статьи для известной конференции по криптографии. Что займет время. Так что уделите этому время. И делать коллег. Потому что вам это тоже понадобится. Гении больше не сбивают бумаги, сидя в одиночестве в своем кабинете. Есть исключения, но даже им нужна поддержка для достижения цели. Так что познакомьтесь с новыми криптографами, математиками, теоретиками и людьми в целом и поднимите их мозги для счастливой и полноценной крипто-жизни.

B. Практическая криптография

В то время как все предлагают не сворачивать свою собственную криптовалюту, я дам более практичный совет: не сворачивайте свою криптовалюту, пока не станете достаточно способными.

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

Путь к практическому овладению криптографией противоположен пути ее теоретического аналога. Таким образом, вместо того, чтобы создавать свою первую хеш-функцию, вы узнаете, как создавать более крупные протоколы из существующих подпротоколов. Затем перейдите сверху вниз к самым основным примитивам (бонусное предложение: никогда не создавайте свои собственные криптографические примитивы).

Шаг 0. Предварительные требования

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

Шаг 1. Запачкайте руки

Начните медленно. Я бы предложил выбрать один из трех (C++, Rust, Go) и начать решать задачи криптопалов. Это займет вас в течение довольно долгого времени. В качестве дополнительного бонуса, если вы хотите выучить новый язык программирования, это отличное место для начала!

Шаг 2. Пришло время для настоящей криптовалюты

Скачайте библиотеку libsodium и научитесь пользоваться ею. Поэкспериментируйте с основными протоколами. Посмотрите, как они принимают входные и выходные данные. Натрий - реальная сделка. Зная, как он работает, вы будете уверены в криптографическом кодировании.

Шаг 3. Станьте специалистом по криптографии (грамматика)

Читать существующие библиотеки. Те, у кого есть опыт работы с крупными проектами, возможно, уже знают это, но я уточню: большая часть вашей жизни программирования тратится на чтение, а затем на изменение существующего кода. Внесение незначительных дополнений в протоколы проектов с проверкой кода. В какой-то момент изучите практики безопасного кодирования.

Шаг 4. Внедрение и изменение протокола

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

Убедившись в этом, попробуйте написать свою версию этого протокола. Замените примитивы протокола подходящими альтернативами из существующей библиотеки (например, натрия).

Шаг 5*. Создание (или удаление) примитивов

Итак, нам действительно нужно создавать собственную версию RSA или SHA-256? Для большинства людей, возможно, нет. Но людям любопытно, и кто-то должен попробовать. Итак, совет: если вы не DJB, никогда не пытайтесь делать это в одиночку. Говно. Тогда соберите хорошую команду для работы. И прежде чем запускать собственную функцию DogeHash-256, проведите аудит безопасности.

Шаг 6. Совместная работа! Сотрудничайте! Сотрудничайте!!

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

До следующего раза. Будьте осторожны и доверяйте математике.

Ваш криптографически

*(для тех, кто настолько сосредоточен на том, что может сделать, что не останавливается, чтобы подумать, стоит ли им это делать)