-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
86 lines (77 loc) · 3.79 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<html>
<head>
<title>Keystroke dynamics</title>
<meta name="author" content="stella sajcic"/>
<meta name="project" content="keystroke dynamic source code example"/>
<!--jquery library -->
<script
src="https://code.jquery.com/jquery-3.1.1.js"></script>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- scroll library -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/ScrollMagic.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/debug.addIndicators.min.js"></script>
<!-- js library-->
<script src="scrollAnimation.js"></script>
<script src="validation.js"></script>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<section class="panel first">
<div class="center">
<div id="title">
<h1 class="big-heading">Static keystroke dynamics</h1>
</div>
<div id="form_holder">
<input type="text" id="form_username" placeholder="username">
<br>
<input type="password" id="form_password" placeholder="password">
<br>
<button id="form_login_button">Login as existing user</button>
<button id="form_register_button">Register as new user</button>
</div>
<div id="form_can_not_login" class="hide">
<img src="./images/invalid_user.gif">
<button id="form_try_again">Try again</button>
</div>
<div id="form_login_valid" class="hide">
<img src="./images/valid.gif">
<button id="form_try_again">Return</button>
</div>
<b><p id="error_msg"></p></b>
</div>
</section>
<section class="panel second">
<h2 class="heading">What is keystroke dynamics</h2>
<p class="content">Keystroke dynamic also called rytham typing that gets timing that is needed
for typing of personal login data. When password and username is correct, all
data of typing is compared with timing of genuied user. If typing for every
key is approximate to genuied user time then login is valid, otherwise user
can not pass the login.
</p>
<h2 class="heading">Why keystroke dynamics is usefull</h2>
<p class="content">We are very aware that many users have various unsecure passwords for theirs
web accounts but even somebody try to break it or allready found out users login data, the
keystroke dynamic will be another authentition that user have to passs. That makes login better secured.</p>
<h2 class="heading">What algorithm is used and how to mesure key times</h2>
<p class="content">First we have to have tested data of genuied user called samples, for example genuied
user have to login for 7 times to ensure that we have average time for every key that he pressed. Time collected are: </p>
<ul class="">
<li>UU (keyup - keyup) - time is mesured between two keys when they are in release state</li>
<li>DD (keydown - keydown) - time is mesured between two keys when they are in pressed state</li>
<li>DU (keydown - keyup) - time of key's hold time</li>
<li>UD (keyup - keydown) - time of key's hold time</li>
</ul>
<h2 class="heading">Algorithm Manhattan distance</h2>
<p class="content">If user have 7 keystroke samples saved in database, we can use Manhattan distance algorithm
to calculate distance between avarage timings of typing with current. Formula is:
<img src="./images/manhattan_formula" alt="Manhattan distance formula">
where y is a main vector (avarage timings for dd, ud, du, uu), and x is tested vectore (current of login).
If distance of two vectores are below or above 35 ms, then user is impuster, otherwise genuide.
</p>
</section>
<section class="panel third">
<p>Source code available on Github: <b>ssajcic</b> </p>
</section>
</body>
</html>