По арифметике произвольной точности
32-разрядная операционная система не ограничивает использование пользовательских типов, превышающих этот размер. Ваше приложение может взять два 32-битных слова и рассматривать их как одно 64-битное число. У большинства языков программирования даже есть целочисленный тип "двойное слово", чтобы упростить дела.
Вы можете дополнительно расширить концепцию для создания интегрального типа данных произвольной точности, который ограничен только объемом ограниченной памяти. По сути, у вас есть массив слов, и вы храните свои N -битные числа в битах слов этого массива.
Тот факт, что это 32-разрядная операционная система, сама по себе не ограничивает числовые вычисления, которые вы можете выполнять. Например, Java long
является 64-битным целочисленным типом, независимо от того, где он работает. Для произвольной точности java.math.BigInteger
повышает анте и обеспечивает абстракцию «бесконечного размера слова». И да, эта «функция» доступна даже в 32-битных операционных системах (потому что это никогда не было ограничивающим фактором с самого начала).
Смотри также
По математике на кольце целых чисел
Нахождение модульного мультипликативного обратного или модульного возведения в степень является распространенной математической / алгоритмической задачей в области криптографии.
Здесь вы можете использовать одну личность:
A * B (mod M) == (A (mod M)) * (B (mod M)) (mod M)
Чтобы найти x = 2 56 (мод 7), вы НЕ должны сначала вычислить и сохранить 2 56 . Если у вас y = 2 55 (мод 7) - число от 0,6 - вы можете найти x = y * 2 (мод 7).
Но как вы находите у = 2 55 (мод 7)? Ну, один наивный способ - применить процесс линейно и сначала попытаться найти z = 2 54 (мод 7) и так далее. Это линейное возведение в степень, но вы можете добиться большего успеха, выполнив, например, возведение в степень в квадрате .
То есть, если вы скажете 2 8 , вы можете поставить его в квадрат, чтобы сразу получить 2 16 . Вы можете затем возвести это в квадрат, чтобы сразу получить 2 32 .
Резюме
Существует много сложных математических алгоритмов, применимых к криптографии, и не имеет прямого отношения к тому, реализован ли он в программе, работающей в 32-битной или 64-битной операционной системе. Пока доступно достаточно памяти, компьютер более чем способен выполнять арифметику произвольной точности.
Именно потому, что арифметика с произвольной точностью является полезной абстракцией, доступно много высокопроизводительных библиотек, так что вы можете построить свое приложение поверх уже существующей инфраструктуры вместо того, чтобы создавать ее с нуля.
Некоторые языки высокого уровня даже имеют встроенную арифметику произвольной точности. Например, Python обеспечивает произвольную точность int
и long
на уровне языка.