27 апреля 2012 г.

Сеть Фейштеля

Иной раз необходимо зашифровать какойнить кусочек, причем желательно не банальным XOR, так как он расшифровывается без проблем частенько даже при наличии бумажки с ручкой, а чем нибудь более стоящим. Посложнее XOR но полегче и попроще чем AES или MD5.
Для этого один из американских ученых по фамилии Фейштель разработал алгоритм, в последствии который стал называться сетью Фейштеля. Он до сих пор используется в в качестве основного движка во многих алгортмах шифрования, да хотябы в том же MD5. Я рассмотрю основной движек, без навороченных навесок типа перемешивания и прочего.
Смысл его в чем:

23 апреля 2012 г.

Длинная арифметика: Сравнение

Для следующей арифметической операции под названием деление, а именно вычисления модуля числа, нам необходима процедурка - сравнение. В принципе она очень проста, алгоритм заключается в следующем, сначала мы сравниваем длину числа в байтах, то число которое длиннее - всегда будет больше чем короткое. Если длина чисел равна, то сравниваем пару сатрших цифр в числах, если цифра в числе 1 больше, то значит число 1 больше и наоборот, если же они тоже равны то сдвигаемся на одну в право и повторяем сравнение,пока какая то цифра не окажется больше или меньше. Если все цифры закончились, но так и не найдено большее число, тогда считаем что оба числа равны.
А теперь все это на ASM:

20 апреля 2012 г.

Длинная арифметика: Умножение

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

18 апреля 2012 г.

Длинная арифметика: Вычитание

Продолжим работу с длинными числами, в текущий момент мы можем складывать числа произвольной длинны, а теперь нам необходимо научиться вычитать эти числа.
Опять же вспоминаем 3ий класс и как производятся вычитание при помощи столбика:

16 апреля 2012 г.

Длинная арифметика: Сложение

В криптографии часто возникает случаи когда необходимо работать с длинными числами, например необходимо вычислить 256 в 512 степени. А также сделать с этими числами некие арифметические операции. В текущий момент регистры в современных компьютерах, на 64 битных операционных системах, позволяют хранить знаковое число +-9223372036854775807 ну или беззнаковое - умножить это число на 2. С такими числами размеров 64бита можно проводить стандартные операции вычитания, деления и с некоторыми условями - умножение и сложение. Но как быть если число как я написал например 256 в 512 степени, это приблизительно - 1.04 * 10 в 1233 степени. Тоесть такое число будет занимать больше килобайта, если на каждый символ отдавать по 1 байту. Понятно, что килобайт это ничто в текущих реалиях, а если там будет 100 тысячная степень или еще больше? Тут к нам приходят на помощь алгоритмы длинной арифметики.