Table

Захотелось мне как-то для своих нужд сделать собственную имплементацию генератора безопасных паролей. Скрипт писался для своего маленького проекта на PHP с использованием библиотеки mcrypt. Сам принцип действия мне показался интересным, поэтому решил поделится данным кодом.



Tактико-технические характеристики имплементации:

— диапазон символов: Aa—Zz и 0—9
— максимальная длинна пароля: 300 символов
— rand() не используется
— пароли генерятся через симметричный блочный алгоритм Serpent-256 в режим сцепления блоков (CBC-mode)
при секретном меняющемся начальном векторе, секретном ключе и длинном секретном блоке случайных символов
— для изменения вектора используется SHA256
— 3 файла: generator.php, counter.txt, iv.txt
— имеется счетчик для красоты

Две функции:

make_password(int length); // возвращает пароль заданной длинны, по умолчанию 22 = 128 bit
print_password(int length); // красиво печатает пароль


Псевдокод: base64(serpent(key, iv, plaintext, cbc))

Примерно так делается пароль, самая важная часть процесса.
(Как меняется начальный вектор и все остальное
смотрите, пожалуйста, в php-коде.
В коде в интересных местах есть комментарии.)

Полный код генератора, содержит html-тэги:

http://www.copypastecode.com/8660/

generator.php выдает вот такую таблицу для быстрого копирования паролей.

Table


У меня все это работает на сервере через шифрованный SSL-канал, так что пароли видны только мне.
Ссылку не дам — я жадный параноик, еще хакните меня и трафик унесете.

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

Топик писался в алчных и корыстных целях получения инвайта. Пригласите меня, я вам еще чё-нить напишу, чесна-чесна.

Спасибо крутому хабрамэну lyxsus за инвайт.