LINUX.ORG.RU

RSA big prime numbers


0

0

Здравствуйте. Помогите разобраться с алгоритмом генерации
публичной и приватнйо экспоненты. С алгоритмами у меня не очень,
поэтому вопрошаю здесь. Нашел в инете пример алгоритма,
адоптировал его:

static int result, result2;
/* расширенный алгоритм эвклида */
int gcd(int u, int v)
{
	int q, tn, u1, u3, v1, v3;
	
	u1 = 1;
	u3 = u;
	v1 = 0;
	v3 = v;

	while (v3 > 0)
	{
		q = u3 / v3;
		
		tn = u1 - v1 * q;
		u1 = v1;
		v1 = tn;

		tn = u3 - v3 * q;
		u3 = v3;
		v3 = tn;
	}

	result = u1;
	result2 = (u3 - u1 * u) / v;
	return u3;
}

void main(void) 
{
	int n, phi, e, d, are, are2;

	/* calculate modulues and phi */
	n = p * q;
	phi = (p - 1) * (q - 1);

	/* initialize e */
	e = n / 3;
	e += rand() + n;

	/* calculate e and d */
	while (e > 0)
	{
		/* e must be less than phi */
		while (e > phi)
			e /= 2;
		e /= 2;

		/* check if the e is prime */
		are = gcd(e, phi);
		d = result;

		if (are == 1)
		{
			are2 = gcd(result, phi);
			if (result == e)
			{
				if (e != d)
					break;
                                        /* нашли e и d */
			}
		}
		e = e - 2;
		if (e <= 0)
		{
			e = n / 3;
			e += rand() + n;
		}
	}
}

Здесь имеется ввиду, что е - публичная экспонента, а d - 
приватная.
Проблема в том, что не всегда генерируются корректные e и d.
К примеру, при P=61 и Q=53 все ок (e = 37, d = 253).
А при p=17, q = 13 => e = 19, d = 91, и алгоритм не работает (
шифрования/дешифрования). Подскажите, где у меня ошибка ?
Алгоритм взят с http://www.linuxjournal.com/article/6695
★★★★★

Решил проблемку. "придумал" свой алгоритм. тормознее, но вроде работает

roy ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.