Как расшифровать пароль, сгенерированный в crypt ()? - PullRequest
0 голосов
/ 02 февраля 2019

Я ищу функцию дешифрования функции crypt(3).Читая руководство, они только отсылают меня, чтобы увидеть login(1), passwd(1), encrypt(3), getpass(3), passwd(5), но, насколько я знаю, ни один из них не может быть использован для расшифровки строки.

Я написал небольшую программу, чтобы показать мою точку зрения,Я ищу функцию somefunctogetbackplaintext(...)

#define _XOPEN_SOURCE
#include <unistd.h>
#include <string.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
  char *cryptated = crypt(argv[1], "aa"); // Password and salt
  if(strcmp("somepassword", somefunctogetbackplaintext(argv[1], cryptated, "aa"))) //Plain text, cryptated string, salt
    {
      printf("Success!\n");
    }
  else
    {
      printf("Not a success!\n");
    }

  return 0;
}

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

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

Однако для проверки правильности заданного пароля ничего из этого не требуется.:

const char *password_and_salt = ...;  // e.g. from getpwent or a database
const char *input = argv[1];
if (strcmp(crypt(input, password_and_salt), password_and_salt) == 0) {
    printf("your password is correct\n");
}

Другими словами, вы передаете пользовательский ввод в crypt и проверяете, соответствует ли он известному результату более раннего crypt.Если это так, пароли совпадают.

0 голосов
/ 02 февраля 2019

В статье в Википедии о crypt говорится:

Выдержка 1:

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

Выдержка 2:

Это технически не шифрование , поскольку данные (все нулевые биты) не хранятся в секрете;это всем всем заранее известно .Тем не менее, одним из свойств DES является то, что он очень устойчив к восстановлению ключей даже при известных ситуациях открытого текста.Теоретически возможно, что два разных пароля могут привести к абсолютно одинаковому хешу. Таким образом, пароль никогда не «расшифровывается» : он просто используется для вычисления результата, и результаты сопоставления, как предполагается, являются доказательством того, что пароли были «одинаковыми».

Так что это ответ на вопрос: «пароль никогда не« расшифровывается »»

0 голосов
/ 02 февраля 2019

Вот краткая выдержка из этой статьи , различающая понятия шифрования и хеширования:

Пароли остаются основным средством сетевой аутентификации идолжен быть защищен при хранении на сервере.Шифрование является опцией, но оно имеет врожденный недостаток в этом приложении, потому что сервер, аутентифицирующий пароль, должен иметь ключ для его расшифровки.Злоумышленник, который украл файл с зашифрованными паролями, может также украсть ключ.

Хеширование - лучший вариант, особенно при разумном использовании соли, по мнению математикаЭндрю Регеншайд и ученый-компьютерщик Джон Келси из Отдела компьютерной безопасности Национального института стандартов и технологий.

Шифрование является двусторонней функцией;то, что зашифровано, может быть расшифровано с помощью соответствующего ключа.Хеширование, однако, является односторонней функцией, которая скремблирует простой текст для создания уникального дайджеста сообщения.При правильно спроектированном алгоритме нет способа отменить процесс хеширования, чтобы выявить оригинальный пароль.Злоумышленник, который крадет файл с хешированными паролями, должен угадать пароль.
(выделено мной)

Также (из комментариев) эта ссылка просто заявляет: crypt - это библиотечная функция, которая используется для вычисления хэша пароля ...

...