Писать свой собственный алгоритм шифрования

Я сейчас учусь в колледже (Великобритания колледж ака не Университет) и курсовая работа-это скучно меня до смерти. Я был кодирования в течение довольно долгое время сейчас в основном в ОО языках, таких как C# и Java, но часто надоедает и сдался быстро, потому что большинство это скучно пользовательского интерфейса вещи, которые я ненавижу делать проекты, я придумываю редко имеют много общего с кодом проектирования и создания алгоритмов. Я хочу начать писать свои собственные алгоритмы сортировок и начать отодвигаться от дружелюбия стороны пользователей и начать изучать то, что интересует меня, а именно шифрование и сжатие. Я хочу написать собственный алгоритм шифрования, чтобы зашифровать байт файла или строки. У меня есть несколько вопросов:

  • Где бы мне начать, какие книги/рекомендуемые материалы для начала с криптографией?
  • Мне нужна обширная криптографии знаний для начала на базовом алгоритм?
  • Будут C# быть хорошо для включения алгоритма шифрования на практике?

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

Комментарии к вопросу (19)
Решение

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

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

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

Большинство ошибок совершается при реализации алгоритмов. Так что если вы хотите получить хорошо оплачиваемую работу, вы могли бы узнать как правильно реализовать это.

Я бы рекомендовал начинать реализовывать что-то вроде AES и чем дальше в различные режимы работы, такие как общий анализ крови или СКК и выяснить, почему случайность-это важно. Продолжать с ша-2 и HMAC и приступить к асимметричной криптографии. Всегда проверяйте, что делали другие и зачем они это сделали и имеют особый взгляд на атаки с боковым каналом и как они выполняются. Если вы находитесь на этом этапе вы найдете свой путь.

В ссылка для начала будет в "ВАК", который находится в свободном доступе в интернете: http://cacr.uwaterloo.ca/hac/

[Править] Предложение от JRsz, который не должен быть похоронен в комментариях. Хорошая книга для начинающих: http://crypto-textbook.com/

Комментарии (24)

Курсере

Здесь's Мои 2 цента:

Присоединяйтесь к криптографии с Coursera, онлайн-класса:

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

В конце шести недель-тест.

Если вы хотите быть оспорены, то это правильный путь. Это очень много работы. Я предлагаю вам план 10+ часов каждую неделю. Более если вы хотите сделать задание по программированию, а также.

(Редактировать: здесь'ы оглавление для предыдущего запуска этот класс.)

Уточнение: задания по программированию как раз и существуют для создания более глубокого понимания темы. Они явно не то, что ты тогда имел в виду выпустить в дикую природу. Наоборот: "и Дон'т вы когда-нибудь реализовать это самому!" и сообщение повторяется снова и снова. (И не давая слишком много: всякий раз, когда "просто реализовать себя!&и" на один из вопросов множественного выбора тесты, потом он'ы не так).

Комментарии (3)

Начните ломать, не строить свой собственный. Там'ы беспокойный большое количество на StackExchange посты людей, которые'вэ написали свои собственные алгоритмы. Оглянитесь вокруг и выяснить, что'ы не так с ними. (Дон'т посмотри на выложил ответы). [Хороший поиск включает "и это безопасно" и "что не так с этим алгоритмом на"].

Только когда вы'вэ нашел проблем в других людях's работы следует переместить в попытке реализовать другие люди'алгоритмы С. (@stackzofztuff'ы комментарий о Coursera-это не плохо ... если я не ошибаюсь, Дэн Бонех начинается с того, что путь, с более структуру, чем тыкать здесь.)

Комментарии (3)

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

И да, вы нужно много знаешь о криптографии, даже прежде чем пытаться свернуть свой собственный алгоритмов для удовольствия. Дон't даже думать об использовании их для реальных задач, хотя ... там's уже много плохой крипто вокруг.

В отношении программирования, избежать проприетарные языки, как чумы. Я'd предлагает C или даже c++.

Комментарии (7)

Хорошее начало было бы для реализации существующих алгоритмов и узнать, как они работают в глубину. Например, разовый алгоритм коврик прост в освоении и реализации, а также изучение ее сильных и слабых сторон поможет вам начать. Она будет также сделать вас комфортно с таким бит-сложа, что's важный в криптографии. Делаете поиск по "один раз площадку и" поможет вам начать.

Комментарии (3)

Просто навалить в большой ответы, что здесь, что-то под другим углом.

Если сделать предположение, что ваш алгоритм В1 будет небезопасным и ужасным, и вашего твердотельного накопителя V100, если будет только очень немного лучше, но не менее небезопасной. (как будет ваш V1000 в)

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

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

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

Там'большая разница между говорю, что я'вэ написано 'хороший' криптография протокол и говорю, что я'вэ написано в протоколе, что почти наверняка очень слабый, но цель была'т создание защищенного протокола. Лично я'd имеют большое количество уважения к тому, кто говорил последним. (Я'д, скорее всего, реверанс в сторону бывшего - и быстро показать ему на дверь)

Комментарии (1)

Вы можете реализовывать уже существующие алгоритмы шифрования, но и конструировать свой собственный алгоритм шифрования является одним из самых сложных вопросов, вы могли бы заниматься. Для общего введения я очень рекомендую этот канал: или книгой &quot https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg/videos ;понимание криптографии и" Кристоф Паар и Ян Pelzl (http://crypto-textbook.com/). Я предполагаю, что вы нацелены на симметричные алгоритмы и я рекомендую вам начать читать много теории о них, что является безопасным, было небезопасно (historicle) и явно как современное состояние алгоритмов пробирались к тому, что они (как АЭС разработаны, выбраны и т. д.).

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

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

Комментарии (0)

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

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

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

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

Это будет хорошей отправной точкой (или, возможно, даже остановки) на ваших поисках, чтобы написать свой собственный алгоритм :)

Комментарии (0)

Вы могли бы последовать Скотт Уилсон'с предложением об одноразовых блокнотов, а с реальными случайными данными. Вы можете, например, считать шум от компьютера'с веб-камеры. Пусть веб-камеру сделать несколько снимков статической сцены, преобразования изображений до 32 бит с плавающей точкой изображений, нормализации картины на ту же яркость, возьмем среднюю, а затем вычесть одну из картинок из среднего. Если сопоставить отрицательные значения пикселей до 0 и положительные значения пикселей в 1, вы почти совершенно случайных битов, которые являются некоррелированными, когда пиксели не слишком близко. Применяя фон Неймана'ы алгоритм для пар битов, принятых с дальних точек:

(0,1) ---> 0

(1,0)---> 1

(0,0) и (1,1) отбрасываются

будет уступать совершенно случайные биты с 0 и 1, имеющие ровно 50% вероятность.

Комментарии (2)