Алгоритм слепой 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д