Нужно ли сначала посеять, прежде чем использовать EVP для подачи сигнала в Openssl? - PullRequest
0 голосов
/ 01 мая 2018

Когда я вижу документ Openssl , я заметил:

При подписании секретными ключами DSA генератор случайных чисел должен быть сеялка или операция не удастся. Генератор случайных чисел не нужно сеять для подписей RSA.

Итак, означает ли это, что когда я использую EVP_SignInit для подписи данных ECDSA, мне нужно сначала посеять?

Если ответ правильный, что мне делать?

Мой Sign() код:

bool Sign::EC_sign(const std::string &msg, std::string &str_sign_dgst,
                   SignatureScheme sign_scheme) {

  EVP_MD_CTX *md_ctx;
  md_ctx = EVP_MD_CTX_new();
  if (md_ctx == NULL) {
    return false;
  }

  if (md_ctx_sign_init(sign_scheme, md_ctx) != 1) {
    return false;
  }

  if (EVP_SignUpdate(md_ctx, (unsigned char *)msg.c_str(), msg.length()) != 1) {
    return false;
  }

  unsigned int slen;

  char *uc_sign_dgst = (char *)malloc(EVP_MAX_MD_SIZE);
  if (EVP_SignFinal(md_ctx, (unsigned char *)uc_sign_dgst, &slen, key) != 1) {
    return false;
  }

  EVP_MD_CTX_destroy(md_ctx);

  str_sign_dgst = std::string(reinterpret_cast<char *>(uc_sign_dgst));
  cout << str_sign_dgst << endl;
  cout << "str_sign_dgst:" << str_sign_dgst.length() << endl;
  return true;
}

Мой Veri() код:

bool Sign::EC_veri(const std::string &msg, std::string &str_sign_dgst,
                   SignatureScheme sign_scheme) {
  EVP_MD_CTX *md_ctx;
  md_ctx = EVP_MD_CTX_new();
  if (md_ctx == NULL) {
    return false;
  }

  if ((md_ctx_veri_init(sign_scheme, md_ctx)) != 1) {
    return false;
  }

  if (EVP_VerifyUpdate(md_ctx, (unsigned char *)msg.c_str(), msg.length()) !=
      1) {
    return false;
  }

  int ret;
  ret = EVP_VerifyFinal(md_ctx, (unsigned char *)str_sign_dgst.c_str(),
                        str_sign_dgst.length(), key);
  EVP_MD_CTX_destroy(md_ctx);
  cout << "EC_veri EVP_VerifyFinal(): " << ret << endl;
  if (ret != 1) {
    return false;
  }
  return true;
}

1 Ответ

0 голосов
/ 02 мая 2018

Много лет назад засорение генератора случайных чисел OpenSSL могло быть проблемой. В наши дни, если вы работаете в какой-то относительно современной основной операционной системе и в настоящее время поддерживает версию OpenSSL, это не так. Могут быть проблемы на некоторых платформах с ограниченным доступом к энтропии (например, встроенное устройство), но для большинства пользователей это не относится.

OpenSSL RNG будет заполняться автоматически. Если в маловероятном случае, что это невозможно сделать, то любая операция, требующая случайных данных, просто потерпит неудачу. Другими словами, вы можете просто выполнить свою знаковую операцию - если она будет успешной, тогда энтропии будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...