Алгоритм слепой RSA подписи - C#
Формулировка задачи:
Взял с википедии http://ru.wikipedia.org/wiki/%D1%EB%E5%EF%E0%FF_%EF%EE%E4%EF%E8%F1%FC
Алиса выбирает случайным образом число из диапазона от 1 до n.
Затем она маскирует m, вычисляя: t=m*k^e mod n
Боб подписывает t: t^d=(m*k^e)^d mod n = m^d * k mod n
Алиса снимает маскировку с td, вычисляя s = t^d / k mod n
Результатом является s = t^d / k mod n
Считаем:
e = 3;
d = 6111579;
n = 9173503;
k = 186;
m = 901;
1) t= (901*186^3) mod 9173503 = 151360
2) t^d = (151360^6111579) mod 9173503 = 8476072
3) s= (8476072/186) mod 9173503 = 45570
Собственно s это и есть подписанная m
Вопрос следующий:
когда считаешь s^e mod n результат = 3783175, а теоритически должна получиться m т.е 1000
где ошибка?
можно ключи и меньше брать. эти я с вики взял.
Помогите пожалуйста
Решение задачи: «Алгоритм слепой RSA подписи»
textual
Листинг программы
class Program { static void Main(string[] args) { BigInteger e = 13; BigInteger d = 37; BigInteger n = 143; BigInteger k = 31; BigInteger m = 100; BigInteger f = 9167368; //шаг 1 BigInteger t = ((m % n) * (k.modPow(e, n))) % n; //2 BigInteger td = t.modPow(d, n); //3 BigInteger s = (td / k) % n; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д