Система цифровой подписи RSA не работает для больших простых чисел - PullRequest
0 голосов
/ 15 июня 2019

Я внедрил криптосистему RSA для создания простой системы цифровой подписи.Он предназначен для будущей учебной программы по криптографии freeCodeCamp.

В приведенной ниже программе записывается «Сбой», когда я использую несколько больших простых чисел, таких как p = 11, q = 17. Я хэширую свое сообщение, и результат меньше N.Я не знаю, почему это происходит.Пожалуйста, ведите меня в правильном направлении.

Это для обучения миллионов людей там.Если у вас есть предложения по улучшению текущей реализации, пожалуйста, не стесняйтесь комментировать :)

Git Repo: https://github.com/vkweb/digital-signature-system

Спасибо!Счастливое кодирование <3 </p>

const firstPrime =11;
const secondPrime = 19;
const N = firstPrime * secondPrime;
const phiOfN = (firstPrime - 1) * (secondPrime - 1);
let publicKey = 0;

function hashTheMessage(message) {
  let hashValue = 0;
  for (let i = 0, msgLength = message.length; i < msgLength; ++i) {
    hashValue += message.charCodeAt(i);
  }
  return hashValue % N === 0 ? 1 : hashValue % N;
}

function isCoPrime(smallerNum, largerNum) {
  for (let i = 2; i <= smallerNum; ++i) {
    if (smallerNum % i === 0 && largerNum % i === 0) {
      return false;
    }
  }
  return true;
}

function generatePrivateKey() {
  for (let i = 2; i < phiOfN; ++i) {
    if (isCoPrime(i, N) && isCoPrime(i, phiOfN)) {
      return i;
    }
  }

  console.log("\nPrivate key can't be generated.");
  return 0;
}

function generatePublicKey(privateKey) {
  if (!privateKey) {
    console.log("\nPublic key can't be generated.");
  } else {
    publicKey = 1;
    while (privateKey) {
      if ((publicKey * privateKey) % phiOfN === 1 && privateKey !== publicKey) {
        return;
      }
      publicKey += 1;
    }
  }
}

function generateSignature(hashValue, privateKey) {
  return Math.pow(hashValue, privateKey) % N;
}

function decryptSignature(digitalSignature) {
  return Math.pow(digitalSignature, publicKey) % N;
}

let hashValue = hashTheMessage("Hello world!");
let privateKey = generatePrivateKey();
generatePublicKey(privateKey);
let signature = generateSignature(hashValue, privateKey);
let decryptedSignature = decryptSignature(signature);

if(decryptedSignature === hashValue)
{
  console.log("Success!");
}
else
{
  console.log("Failure!");
}
<span class="math-container">```</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...