Криптография на С и С++ в действии
Автор - Михаэль Вельшенбах
Зачем нужна книга по криптографии, посвященная в основном арифметике целых чисел и ее реализации в виде компьютерных программ? Насколько это важно по сравнению с теми большими задачами, которые решает программист? Если ограничиться лишь теми числами, которые могут быть описаны стандартными числовыми типами какого-либо языка программирования, арифметика будет делом довольно легким: обычные арифметические операции задаются в программах обычными символами +, /, *. Но как только нам нужны результаты, длина которых намного больше 16 или 32 битов, все становится гораздо интересней. Для таких чисел даже простые арифметические операции уже не годятся, и приходится потрудиться над разрешением таких проблем, которые раньше и проблемами-то не казались. С этим сталкивается любой, будь то профессионал или любитель, кто занимается теорией чисел: пытаясь применить школьные алгоритмы арифметики, мы вдруг оказываемся втянутыми в невероятно запутанный процесс. Читатель, который собирается разрабатывать программы в этой области и не желает изобретать колесо, найдет в книге Михаэля Вельшенбаха "Криптография на С и С++ в действии" целый ряд функций, оперирующих с большими числами, на языках С и C++. Речь идет отнюдь не об «игрушечных» примерах, поясняющих «как это работает в принципе», но о готовом пакете функций и методов, удовлетворяющих профессиональным требованиям в части корректности, быстродействия и серьезной теоретической базы.
Цель этой книги - связать теорию и практику, перекинуть мост через пропасть, разделяющую теоретическую литературу и практические задачи программирования. Последовательно, шаг за шагом вы будете познавать фундаментальные принципы арифметики больших натуральных чисел, арифметики конечных колец и полей, сложные функции элементарной теории чисел, что позволит пролить свет на многочисленные и разнообразные возможности применения этих принципов в современной криптографии. Сведения из математики приводятся здесь в объеме, необходимом для понимания представленных программ; более глубокие знания можно почерпнуть из обширного списка литературы. Все разработанные нами функции постепенно объединяются и многократно тестируются, так что в итоге мы получаем полезный объемлющий программный интерфейс.
Мы начинаем с представления больших чисел и с изучения основных вычислительных операций, создавая для сложения, вычитания, умножения и деления больших чисел мощные базовые функции. Исходя из этого, мы поясняем модульную арифметику в классах вычетов и реализуем соответствующие операции в виде библиотечных функций. Отдельная глава посвящена трудоемкому процессу возведения в степень, разрабатываются и программируются различные специальные алгоритмы модульной арифметики. После тщательной подготовки, включающей в себя также ввод и вывод больших чисел и их преобразование в различных системах счисления, мы рассматриваем элементарные теоретико-числовые алгоритмы, используя для этого базовые арифметические операции, а затем разрабатываем программы, начиная с вычисления наибольшего общего делителя больших чисел. Следом идут такие задачи, как вычисление символов Лежандра и Якоби, обращение и возведение в квадрат в конечных кольцах. Мы знакомимся также с китайской теоремой об остатках и ее приложениями. Попутно мы несколько подробнее останавливаемся на принципах распознавания больших простых чисел и программируем мощный тест простоты. Следующая глава посвящена генерации больших случайных чисел, разработке и проверке статистических свойств криптографически стойкого генератора случайных битов. Завершается первая часть тестированием арифметических и других функций. Для этого, исходя из математических правил арифметики, мы разрабатываем специальные методы проверки, а также обсуждаем реализацию эффективных внешних средств. Во второй части мы шаг за шагом строим класс LINT (Large INTe-gers - большие целые числа) на языке C++. Для этого функциям на С из первой части мы придаем синтаксис и семантику объектно-ориентированного языка C++. Значительное внимание уделено форматированному вводу и выводу LINT-объектов с гибкими потоковыми функциями и манипуляторами, а также обработке ошибок. Элегантность, с которой алгоритмы формулируются на C++, особенно поражает, когда начинают стираться границы между стандартными типами и большими числами как LINT-объектами. Отсюда - синтаксическое сходство, ясность и прозрачность реализованных алгоритмов. И наконец, мы иллюстрируем практичность разработанных методов на примере знаменитой криптосистемы RSA: для шифрования с открытым ключом и цифровой подписи. Попутно мы приводим теоретическое обоснование процедуры RSA как наиболее известного представителя асимметричных криптосистем. Отдельно разрабатывается расширяемое ядро, позволяющее применять этот ультрасовременный криптографический процесс, исходя из принципов объектно-ориентированного языка программирования C++.
Издательство – Триумф
Год издания – 2004
Формат книги - DJVU
Размер - 19,8 Мб
СКАЧАТЬ с gigapeta.com
Или
СКАЧАТЬ с turbobit.net
Или
СКАЧАТЬ с hitfile.net
|