КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Модулярная арифметика
ЭЛЕМЕНТЫ ТЕОРИИ ЧИСЕЛ Модулярная арифметика часто называется “арифметикой часов”. Если прибавить 14 часов к 3 часам после полудня, то получится 5 часов утра следующего дня: 3 + 14 º 5 (mod 12) или (3 + 14) mod 12 = 5. Это арифметика по модулю 12. Обычная запись в модулярной арифметике a º b (mod n) читается так: “ a сравнимо с b по модулю n ”. Это соотношение справедливо для целых значений a, b и n ¹ 0, если и только если а = b + k • n для некоторого целого k. Отсюда, в частности, следует n | (a ─ b). Это читается как “ n делит (a ─ b)”. Если a º b (mod n), то b называют вычетом числа a по модулю n. Операцию нахождения вычета числа а по модулю n a (mod n) называют приведением числа а по модулю n или приведением по модулю. В нашем примере (3 + 14) mod 12 = 17 mod 12 = 5 или 17 º 5 (mod 12), число 5 является вычетом числа 17 по модулю 12. Набор целых чисел от 0 до (n – 1) называют полным набором вычетов по модулю n. Это означает, что для любого целого а (а > 0) его вычет r по модулю n есть некоторое целое число в интервале от 0 до (n – 1), определяемое из соотношения r = a – k • n, где k – целое число. Например, для n = 12 полный набор вычетов: {0, 1, 2, …, 11}. Обычно используют вычеты r Î {0, 1, 2, …, n – 1}, но иногда полезны вычеты в диапазоне целых: r Î {– ½ (n – 1), …, ½ (n – 1)}. Важно, что
– 12 (mod 7) º – 5 (mod 7) º 2 (mod 7) º 9 (mod 7) и т.д. Модулярная арифметика аналогична во многом обычной арифметике: она коммутативна, ассоциативна и дистрибутивна. Точнее говоря, целые числа по модулю n с использованием ипераций сложения и умножения образуют коммутативное кольцо при соблюдении законов ассоциативности, коммутативности и дистрибутивности. Фактически можно сначала приводить по модулю n, а затем выполнять операции, либо сночала выполнять операции, а затем приводить по модулю n, поскольку приведение по модулю n является гомоморфным отображением из кольца целых в кольцо целых по модулю n: (a + b) mod n = [ a (mod n) + b (mod n) ] mod n, (a - b) mod n = [ a (mod n) - b (mod n) ] mod n, (a • b) mod n = [ a (mod n) • b (mod n) ] mod n, [a • (b + c) ] mod n = {[a • b (mod n) ] + [a • c (mod n) ]} mod n. Криптография использует множество вычислений по модулю n, потому что задачи типа вычисления дискретных логарифмов и квадратных корней очень трудны. Кроме того, с вычислениями по модулю удобнее работать, потому что они ограничивают диапазон всех промежуточных величин и результата. Для модуля n длиной k бит промежуточные результаты любого сложения, вычитания или умножения будут не длиннее 2kбит. Поэтому возведение в степень в модулярной арифметике можно выполнить без генерации очень больших промежуточных результатов. Вычисление степени числа а по модулю n а х mod n можно выполнить как ряд умножений и делений. Существует способ сделать это быстрее. Поскольку эти операции дистрибутивны, быстрее произвести возведение в степень как ряд последовательных умножений, выполняя каждый раз приведение по модулю. Это особенно заметно, если работать с длинными числами (200 бит и более). { Пример. Нужно вычислить а 8 mod n. Не следует применять примитивный подход с выполнением семи перемножений и одного приведения по модулю громадного числа: (а • а • а • а • а • а • а • а) mod n. Вместо этого выполняют три малых умножения и три малых приведения по модулю: ((а 2 mod n.)2 mod n.)2 mod n. Тем же способом вычисляют а 16 mod n. = (((а 2 mod n.)2 mod n.)2 mod n.)2 mod n. } Вычисление а х mod n,
где х не является срепенью 2, лишь немного сложнее. Двоичная запись числа х позволяет представить число х как сумму степеней 2: х = 12 (10) = 11001 (2). Поэтому 25 = 2 4 + 2 3 + 2 0. Тогда а 25 mod n. = (а • а 24) mod n. = (а • а 8 • а 16) mod n = = (а • ((а 2) 2) 2 • (((а 2) 2) 2 ) 2) mod n = ((((а 2 • а) 2) 2 ) 2 • а) mod n. При накоплении промежуточных результатов потребуется только шесть умножений: (((((((а 2 mod n) • а) mod n)2 mod n)2 mod n)2 mod n) • а) mod n. Этот метод уменьшает трудоемкость вычислений до 1,5хk операций в стреднем, где k – длина числа в битах. Поскольку многие алгоритмы шифрования основаны на возведении в степень по модулю n, целесообразно использовать алгоритмы быстрого возведения в степень.
Дата добавления: 2014-01-06; Просмотров: 555; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |