недостающие функции в библиотеке BCMath

valyala

Новичок
недостающие функции в библиотеке BCMath

Билиотеку BCMath удобно использовать в криптографических приложениях для несимметричного шифрования. Например, с помощью функции bcpowmod() элементарно реализовать алгоритм Диффи-Хеллмана или RSA.
Очевидно, для полного счастья не хватает двух функций:
1) string bc_rnd_prime(int n) - возвращает случайное простое число длиной n десятичных цифр
2) bool bc_is_prime(string num) - проверяет, является ли число num простым.
Они нужны для генерации пары ключей в алгоритме RSA, а также в других несимметричных криптоалгоритмах, основанных на теории чисел.
Как вы думаете, реально ли добавить эти функции в BCMath?
 

Alien

Новичок
Генерить случайные числа на лету? Ну ну.
Лучше предгенерить и использовать.
Или из готового списка взять - http://www.prime-numbers.org/ - например.
 

valyala

Новичок
не надо изобретать велосипед
openssl
А разве в стандартной поставке PHP есть openssl?
Есть много других приложений, кроме передачи данных по незащищенному каналу (основное предназначение ssl), где необходима несимметричная криптография. Например, формирование цифровой подписи.

Генерить случайные числа на лету? Ну ну.
Лучше предгенерить и использовать
Можно и так. Но хранение еще неиспользованных ключей - это еще одна возможность компрометации всей системы. Поэтому ключи лучше генерить налету.

Но суть моего вопроса была не в этом. Я хотел узнать, реально ли включить указанные мной функции в библиотеку BCMath. И если да, то куда мне следует обратиться (алгоритмы для этих функций могу составить сам)
 

sapenov

Guest
2 valyala:

исходный код php открытый. напиши функции ( http://www.zend.com/apidoc/ ), скомпилируй и тысячу раз проверь на своем сервере.
 

si

Administrator
хотел узнать, реально ли включить указанные мной функции в библиотеку BCMath
реально, если вы сильны в матиматике простых чисел и в програмировании на си.

libbcmath сторонняя библиотека, РНР использует ее функции для своих целей. если необходимые вам функции есть в оригинальной библиотеке, то надо просто написать wrapper для них в РНР. Если их нет, то сначала надо добавить эти функции в саму libbcmath, и только потом правит ext в РНР.

А разве в стандартной поставке PHP есть openssl?
Может все-таки линк то вам я дал изучите внимательно ?

В openssl есть все что вам надо, и подписи, и шифровка, и генерация ключей.
 

Yurik

/dev/null
А разве в стандартной поставке PHP есть openssl?
А BCMath вы где-нибудь встречали в стандартной поставке? И то и то ставится по желанию, причем как раз OpenSSL стоит на всех хостингах
 

valyala

Новичок
Автор оригинала: Yurik
А BCMath вы где-нибудь встречали в стандартной поставке? И то и то ставится по желанию, причем как раз OpenSSL стоит на всех хостингах
Читаем в документации к РНР:
- для BCMath:
Since PHP 4.0.4, libbcmath is bundled with PHP. You don't need any external libraries for this extension.
- для OpenSSL:
In order to use the OpenSSL functions you need to install the OpenSSL package
В openssl есть все что вам надо, и подписи, и шифровка, и генерация ключей
Спасибо за наводку. Не перестаю удивляться РНР. В нем есть все, что пожелаешь. Нужно только хорошенько поискать :)
 

Yurik

/dev/null
Since PHP 4.0.4, libbcmath is bundled with PHP. You don't need any external libraries for this extension.
В PHP 4 эти функции доступны только в том случае, если PHP был сконфигурирован с
--enable-bcmath.

Имелось ввиду сколько хостеров включают это. А то какая она bundled или external в принципе пофигу.
 

tony2001

TeaM PHPClub
>Как вы думаете, реально ли добавить эти функции в BCMath?
сделай патч и пошли в лист php-internals.
либо пиши feature request и жди.
 

valyala

Новичок
Посмотрел недавно исходники bcmath. Что тут можно сказать? Philip A. Nelson, автор этой бибилиотеки, особо не беспокоится по поводу быстродействия своей библиотеки и объему потребляемой ей памяти. Для хранения чисел он использует массив char * n_ptr. Это, конечно, универсально и подходит для большинства аппартаных платформ (сейчас сложно найти АЛУ, не поддерживающего арифметические операции с 8-битными числами). НО! В этом случае логично использовать основание B = 2^8 = 256. Нельсон использует более привычное основание B = 10, вследствие чего требование к размерам оперативной памяти возрастает в три раза. Выбор такого основания можно оправдать только для операций сложения и вычитания. В этом случае намного упрощается функции перевода числа в строку по основанию 10 и обратно. Но, если вспомнить про существование операций умножения, деления и вычисления квадратного корня, то становится грустно...
Сейчас большинство процессоров поддерживает 32-битные арифметические операции. Так почему бы не воспользоваться этим? Тогда быстродействие сложения и вычитание автоматически повышается в 4 раза по сравнению с 8-битными операциями, а умножения и деления - в 16 раз при использовании классических алгоритмов.
Но, если вспомнить про существования более изощренных и быстродействующих алгоритмов умножения и деления, описанных во втором томе Дональда Кнута, то можно еще выше поднять производительность библиотеки.
Справедливости ради стоит сказать, что Нельсон использует рекурсивный алгоритм умножения, основанный на формулах:

A = 2^n * a1 + a0
B = 2^n * b1 + b0
A * B = 2^(2*n) * (a1 * b1) + 2^n * (a1 * b0 + b1 * a0) + (a0 * b0)

Время его выполнения оценивается величиной O(n^log(3)), что существенно меньше времени выполнения классического алгоритма O(n^2) при больших n. Но есть и более скоростные алгоритмы, основанные на быстром преобразовании Фурье. Например, в этой http://www.perfsci.com/free/giantint/giantint.zip библиотеке реализован самый быстродействующий на сегодня алгоритм умножения, используемый в проекте поиска простых чисел Мерсенна http://www.mersenne.org/prime.htm .

Вывод: нужно будет найти свободное время и заново все переписать :)

-~{}~ 28.02.04 17:02:

Оказывается, существует замечательная библиотека под названием GMP, в которой реализованы большинство необходимых функций для работы с большими числами, в том числе и упомянутая мной проверка числа на простоту.
Я просто восхищен этой библиотекой! Ее автор, Станислав Малышев, в отличие от Филиппа нельсона, хорошо знаком с понятием "быстродействие".
Скачать исходники GMP можно на официальном сайте http://www.swox.com/gmp/
Посмотреть список доступных через РНР функций можно тут http://www.php.net/gmp

-~{}~ 28.02.04 18:27:

Ой, я немного ошибся в авторстве :) Станислав Малышев всего лишь реализовл интерфейс этой библиотеки для РНР, а авторов у нее много.
 
Сверху