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 тысячная степень или еще больше? Тут к нам приходят на помощь алгоритмы длинной арифметики.

26 марта 2012 г.

Генератор псевдо случайных чисел.

Для начала, попробуем напрограммить что нибудь простое, нуууу например генератор псевдо случайных чисел. Сегодня поговорим про псевдо случайные числа и для чего они нужны, про реальный генератор случайных чисел будет отдельная статья. Ключевое слово тут "псевдо", так для чего он нужен?

23 марта 2012 г.

Краска кода.

Обнаружил, что для блогспота нет такой вещи как расскраски кода для ассемблера, так что придется пользоваться сторонними сервисами типа http://tohtml.com/asm/ А то совсем нечитабельные куски кода получаются.
В итоге при помощи этого сервиса получается что то типа того, вроде читабельно:

strlen proc String:BYTE
    lea edi, text
    mov ecx, 2048
    mov eax, 0
    repne scasb
    dec edi
    sub edi, offset text
    lea ebx, len
    ret
strlen endp

Новый блог.

Иногда руки чешутся и хочется сделать что нибудь такое, что интересно и раньше не делал, ну.... например изобрести велосипед, да не с двумя колесами, а с 5ю и чтобы ездил по шпалам с асинхронной тряской. Вообщем стандартный непоседский ум русского человека. Вот по этому и был создан этот блог. В нем я буду размещать куски кода в основном надеюсь на ассемблере. Почему на асме, а например не на с++, C# или допустим Python? На них же все это пишется проще и быстрее. А просто так, ну прет меня иной раз написать, что нибудь на низком уровне, чтобы было архималенькое, мало жрало в памяти, не требовало 80мб .net и левых библиотек.