Простая реализация алгоритма RSA для шифрования c использованием генерации публичных/приватных ключей http://en.wikipedia.org/wiki/RSA_cipher
Функция
isPrimeW : seq<BigInteger> -> BigInteger -> bool
реализует Алгоритм Миллера-Рабина,
основанный на http://www.haskell.org/haskellwiki/Testing_primality и взятый отсюда http://fssnip.net/2w
Проверяет простоту чисел. Для очень больших чисел, например 1024 битных, определение строгой простоты занимает излишне много времени, алгоритм Миллера-Робина дает неплохую псевдопростоту.
Содержит вспомогательные функции, например, такие как
val GenPrime : int -> BigInteger
- создание сильно псевдопростого числа заданной длины с использованием побитовой случайной генерации и теста Миллера-Робина
-
Для первого этапа необходимо получить два простых числа
p
иq
заданной длиныrsa_key_length
. -
Вычисляем модуль
n = p * q
-
Вычисляем Euler totien function
totient
-
В качестве публичного экспоненты берем 257
-
Вычисляем приватную экспоненту с помощью функции
PrivateExponent
из модуляrsa_helpers
-
Публичные и приватные ключи готовы
Очень простая реализация http://www.fsharp.it/2008/12/01/implementation-of-rsa-in-f/ Миллер-Робин на Haskell http://www.haskell.org/haskellwiki/Testing_primality