Суть проблемы ввода паролей
Большинство пользователей вводят короткие легко взлаемые роботами пароли. Данная реализация позволяет избежать этих недостатков, прибегнув к помощи скриптов
Ранее давным двано и не раз обсуждалась идея идентификации личности через ввод паролей по времени.
Представляю Вам еще одну разновидность ввода паролей и практическую реализацию
Суть идеи следующая: В пароле хранятся не сами символы, а последовательность нажатия и отпускания клавиш на клавиатуре.
Поясню на примере: Известно, что пароль состоит из символов "f" и "g". Звучит он примерно "fgg"
Но, чтобы набрать его верно - символ "f" отжимается после зажатия 2-го символа "g". Со стороны при быстром наборе - не каждый сможет обратить на это внимание. А система при нескольких попытках сможет насторожиться и принять адекватные меры. В 3-х символах заложено более 5 комбинаций, не поддаваемых перебору, тем более что простые пара символов скрыто длинным хешем. Если брать разные символы - то число комбинаций много больше. Таким образом все короткие пароли превращаются в длинную цепочку, затрудняемую для перебора
На рисунке - по вертикали расположена ось времени, а линии означают нажатый статус клавиши.
Ниже будет представлена реализация метода и пример
Компьютеры способны отслеживать одновременное нажатие 4-5 клавиш на клавиатуре, больше не позволяет особенность клавиатуры. Комбинаций нажатия и отпускания клавиш много больше и это позволяет хорошо зашифровать пароль. Таким образом, даже пароль из 3-х нажатий подобрать становится много сложнее, чем 3 символа. А также это усложняет возможности подобрать пароль перебором.
Соответственно - при ошибке в наборе - пароль набирается заново
Еще парочка поясняющих примеров
Важен лишь порядок нажатия и отпускания каждой из клавишь на клавиатуре
Пример одинакового ввода
Пример не одинакового ввода
Подытожим
Преимущества метода
- Меньше набираемых символов, сложнее защита
- Пароль сложнее передать письменно, т.к. стандартных представлений еще не существует
- Высокая защита от подбора паролей роботами
- В наборе участвуют все кнопки клавиатуры (стрелки, numpad)
Недостатки метода
- В случае браузеров: При отключенном javascript работать не будут
- В случае мобильных телефонов и КПК - набор будет недоступен
- При быстром наборе могут возникнуть ошибки
- В случае реализации на браузерах через keyCode - языки и регистр символов не фиксируются
Ниже привожу код для javascript, с участием jQuery, который показывает реализацию данной идеи. Работает во всех современных браузерах
// массивы для памяти уже зажатых клавиш
var pas={};
$('#password').keydown(function(event){
if (event.keyCode<32)return true; // служебные символы нас не интересуют
if (typeof(pas[event.keyCode])=='number')return false;
// если клавиша не была зажата - устанавливаем признак и дописываем строку вывода
$('#password').attr('maxlength',$('#password').attr('maxlength')+1); // багфикс для оперы
pas[event.keyCode]=1;
$('#hidepassword').val($('#hidepassword').val()+'d'+event.keyCode);
}).keyup(function(event){
// если поле пусто - сбрасываем пароль
if ($('#password').val()==''){
$('#hidepassword').val('');
pas={};
$('#password').attr('maxlength',0); // багфикс для оперы
}
if (event.keyCode<32)return true; // служебные символы нас не интересуют
// отжимаем клавишу и дописываем строку вывода
pas[event.keyCode]=null;
$('#hidepassword').val($('#hidepassword').val()+'u'+event.keyCode);
}).mousedown(function(){
// при клике - сбрасываем пароль
$('#password,#hidepassword').val('');
pas={};
$('#password').attr('maxlength',0); // багфикс для оперы
})
То есть, на странице существует поле для ввода с id=password и скрытое поле id=hidepass, которое и отправляется на сервер. Чтобы сбросить пароль и ввести его еще раз - нужно полностью очистить поле. Сделать это можно при помощи клика или backspace
Демонстрацию можно посмотреть здесь
Введите сочетание в поле пароль и повторение пароля. Результат сходства будет отображен справа