собственно в ГОСТ'е 34.10-94 есть в конце такая формула проверки электронной подписи: ((a^z1)(y^z2)mod(p))mod(q) Но числа 256 и 512 битные, поэтому обычное возведение a^z1 или y^z2 вроде как не реально. Алгоритм вычисления (a^x) mod (p) есть. Есть ли алгоритм для (a^z1)(y^z2)mod(p) ?
yureckor Там все вычисления (включая возведение в степень) выполняются в GF(p). Поэтому всё "реально". Если у тебя есть алгоритм для возведения в степень в GF(p), то там должна быть и реализация обычного умножения. Так что у тебя всё есть. Алгоритмы можно было взять из реализаций ElGamal, Р 34.10-94 из той же оперы. Я бы на твоем месте не парился, а скачал бы какую-нибудь программу, использующую 34.10-94 и получил бы хорошие исходники на ассемблере. ;->
flankerx спасибо, я правда сам к вечеру додумался. _BC_ >всё "реально" нигде в расчетах нет a^x, есть только a^x mod n. А для представления (0..2^256)^(0..2^256) памяти даже не хватит (если для 2^256 надо 32байта=степень/8, то (2^256)/8=1.447e+76 байт). Насчет остального: за 1.5 недели я перерыл иного инета, ГОСТ'ов нормальных нет (из-за этого так долго и делал). >получил бы хорошие исходники на ассемблере Самое лучшее, что я нашел, было на Яве Да я собственно все сделал, часть процедур взял из "rsa для программиста" by z0mbie, часть (хеш) из x86hotk100 by Anatoly Kaluzhinsky. Пока разбирался как прикрутить, понял как работает Но похоже где то в арифметике ошибка, у меня в конце проверка не сходится.