GithubHelp home page GithubHelp logo

skey's Introduction

http://en.wikipedia.org/wiki/S/KEY

СГУ. им Чернышевского



Криптографические протоколы
Практическое задание:
“Релизация протокола  S/KEY”












студенки 431 группы
Деминой Ксении

Саратов, 2013
Описание протокол аутентификации S/Key

Протокол S/Key – процедура аутентификации на основе одноразового пароля. Смысл протокола заключается в том, что пользователь при входе в систему каждый раз передает новый пароль. Эти пароли не бесконечны. Изначально пользователь имеет определенный набор паролей, который может использовать.
Программа аутентификации SKEY и протокол с её применением.
Программа SKEY :
Алиса задает случайное число, R.
Компьютер вычисляет значения f(R), f(f(R)), f(f(f(R))), и т.д., около сотни раз. Обозначим эти значения как x1, x2,, ..., x100.
Алиса выводит список этих чисел и держит его в секрете.
Компьютер сохраняет в регистрационной базе данных напротив имени Алисы только значение  x101.
Протокол аутентификации:
При первом входе в систему Алиса вводит свое имя и значение x100 . A > H: A, x100'.
Компьютер вычисляет f(x100) и сравнивает его со значением x101 и, если значения совпадают, подлинность Алисы подтверждается. Затем компьютер заменяет в базе данных x101 на x100. H: если f(x100') =f(x100), то пропуск и f(x100) = x100'), иначе нет.
Алиса вычеркивает значение x100 из своего списка.
В дальнейшем при каждом входе в систему Алиса вводит последнее не вычеркнутое число из своего списка, например, i. Компьютер рассчитывает f(xi) и сравнивает его со значением xi+1, хранящемся в базе данных.

Достоинства протокола
Если трафик между пользователем и сервером будут прослушивать, то злоумышленник получит устаревший пароль, для него встанет задача нахождения праобраза хеша, что принято считать неосуществимым, т.е. данный протокол неуязвим к снифингу паролей.
Недостатки
При перехвате начального секретного ключа w можно самому сгенерировать такую последовательность; пользователя придётся инициировать заново после того, как он «израсходует» все свои ключи.
Реализация протокола аутентификации S/Key

Для работы программы skey.exe требуются 2 параметра - имя и рандомное число. Это число для пользователя будет создавать программа random_number.exe, которая находится random_number/dist/
Програма random_number запрашивает имя файла и len(w) - количество цифр в десятичной записи числа w , имя файла вводится пользователем без расширения.
Программа, используя генератор псевдо-рандомных чисел randrand, выбирает число w от 1 до 10len(w). Если это число станет известным злоумышленнику, то протокол будет скомпрометирован. 
Программа  random_number должна находится на стороне пользователя.
Для запуска основной программы переходим в загруженную папку skey/dist/ и запускаем программу: skey.exe
Программа предлагает набор действий: работа с существующим пользователем, создание нового, выход.
При создании нового пользователя запрашивается его имя user_name и число w, созданное ранее. Если такого еще нет, создается файл с его именем - user_name.txt. 
Далее должна использоваться односторонняя функция. В данной реализации используется 128-битный алгоритм хеширования md5 с последующим преобразованием получившегося числа в шестнадцатиричную систему счисления:  md5(r).hexdigest()
 Пусть H — хеш-функция. Применим её n раз. Сначала к w, потом к H(w), H(H(w)), …, H(…H(w)…). 
В файл под названием user_nameKeys.txt записывается сгенерированные n-1 числа и отправляются пользователю. В нашей реализации этот файл остается в папке с программой, для того, что бы иметь возможность проверить корректность.
Начальное секретное число w уничтожается.
Ключ под номером n связанный с данным пользователем сохраняется на сервере в файле user_name.txt, все остальные уничтожаются.
При попытки войти пользователь передаёт своё имя и в качестве пароля последний ключ из своего списка (ключ, который был сгенерирован на шаге n-1). 
Сервер получает этот ключ, находит запись о ключе для данного имени пользователя в файле user_name.txt, и сравнивает результат хеширования полученного пароля с найденным у себя в базе ключом
Если результат операции совпадает с введённым паролем, то пользователь проходит аутентификацию. 
При удачной попытке входа хранящееся значение ключа в файле user_name.txt заменяется на полученное в начале от пользователя (т.е. прообраз хеша), а пользователь вычёркивает из своего списка последний ключ.

skey's People

Contributors

kdemina avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.