Я пишу приложение для управления подпиской по электронной почте на основе Perl, содержащее два параметра кода ключа. Во время подписки скрипт создаст два кода клавиши для каждого подписчика, которые являются уникальными в базе данных (пример скрипта см. Ниже).
Коды будут созданы с использованием Digest :: SHA qw (sha256_hex). Насколько я понимаю, один из способов избежать дублирования кодов в базе данных - создать уникальный префикс в необработанных данных, которые нужно кодировать. (см. также ниже).
Как только человек подписан, у меня есть запись в базе данных человека с двумя полями «кода», каждое из которых содержит значения, которые являются уникальными в базе данных. Каждое значение представляет собой строку буквенно-цифровых символов длиной 64 символа с использованием строчных букв (только?) A-z и 0-9, например:
code1: ae7518b42b0514d69ae4e87d7d9f888ad268f4a398e7b88cbaf1dc2542858ba3
code2: 71723cf0aecd27c6bbf73ec5edfdc6ac912f648683470bd31debb1a4fbe429e8
Эти коды отправляются в электронных письмах бюллетеня как параметры в URL управления подпиской. Таким образом, человек не должен входить в систему, чтобы управлять своей подпиской; но просто нажмите на ссылку.
Мой вопрос:
Если абонент попытался угадать значения пары кодов для другого человека, сколько будет возможных комбинаций, чтобы не только правильно угадать code1, но и угадать code2? Я полагаю, что, как и в лотерее, человек может повезти и просто угадать оба; но я хочу понять шансы против этого и его влияние на безопасность.
Если угадать комбо, человек получит доступ к базе данных; таким образом, я пытаюсь определить уровень безопасности, который обеспечивает этот метод, по сравнению с более обычным методом имени пользователя и 8-символьного пароля (который, вообще говоря, можно считать двумя кодами клавиш, но намного короче, чем 64 символа выше). )
Я также приветствую любые отзывы об общей безопасности этого метода. Я заметил, что многие, многие почтовые бюллетени, похоже, используют похожие коды клавиш и не требуют входа в систему, чтобы отказаться от подписки и т. Д. Для этого основная проблема (помимо простоты использования) заключается в том, что человек не должен иметь возможность отписаться от кого-либо еще.
Спасибо!
Питер (см. Ниже фрагмент кода)
Обратите внимание, что каждый идентификатор и адрес электронной почты будут уникальными.
Пароль является системным паролем и будет одинаковым для каждого человека.
#
#!/usr/bin/perl
use Digest::SHA qw(sha256_hex);
$clear = `clear`;
print $clear;
srand;
$id = 1;
$email = 'someone@domain.com';
$tag = ':!:';
$password = 'z9.4!l3tv+qe.p9@';
$rand_str = '9' x 15;
$rand_num = int(rand( $rand_str ));
$time = time() * $id;
$key_data = $id . $tag . $password . $rand_num . $time;
$key_code = sha256_hex($key_data);
$email_data = $email . $tag . $password . $time . $rand_num;
$email_code = sha256_hex($email_data);
print qq~
ID: $id
EMAIL: $email
KEY_DATA: $key_data
KEY_CODE: $key_code
EMAIL_DATA: $email_data
EMAIL_CODE: $email_code
~;
exit;
#