summaryrefslogtreecommitdiffstats
path: root/site/content/register_docs.md
diff options
context:
space:
mode:
Diffstat (limited to 'site/content/register_docs.md')
-rw-r--r--site/content/register_docs.md51
1 files changed, 24 insertions, 27 deletions
diff --git a/site/content/register_docs.md b/site/content/register_docs.md
index 45571fb..83aef7f 100644
--- a/site/content/register_docs.md
+++ b/site/content/register_docs.md
@@ -5,38 +5,35 @@ weight = 3
5+++ 5+++
6 6
7POST request to /register endpoint 7POST request to /register endpoint
8Lets a [`User`] (=student) to authenticate themselves to the system
9This `request` can be rejected if the payload is malformed (=not authenticated properly) or if
10the [`AuthRequest.user_id`] of the `request` is not in the list of users that can hold a Gradecoin account
11 8
12# Authentication Process 9Lets a user to authenticate themselves to the system.
13- Gradecoin's Public Key (`gradecoin_public_key`) is listed on moodle. 10Only people who are enrolled to the class can open Gradecoin accounts.
14- Gradecoin's Private Key (`gradecoin_private_key`) is loaded here 11This is enforced with your Student ID and a one time password you will receive.
15 12
16- Student picks a short temporary key (`k_temp`) 13# Authentication Process
17- Creates a JSON object (`auth_plaintext`) with their `metu_id` and `public key` in base64 (PEM) format (`S_PK`): 14- Gradecoin's Public Key (`gradecoin_public_key`) is listed on our Moodle page.
15- You pick a short temporary key (`k_temp`)
16- Create a JSON object (`auth_plaintext`) with your `metu_id` and `public key` in base64 (PEM) format (`S_PK`) [reference](https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem)
17```json
18{ 18{
19 student_id: "e12345", 19 "student_id": "e12345",
20 passwd: "15 char secret" 20 "passwd": "15 char secret",
21 public_key: "---BEGIN PUBLIC KEY..." 21 "public_key": "---BEGIN PUBLIC KEY..."
22} 22}
23```
24
25- Pick a random IV.
26- Encrypt the serialized string of `auth_plaintext` with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (`k_temp`), the result is `auth_ciphertext`. Encode this with base64.
27- The temporary key you have picked `k_temp` is encrypted using RSA with OAEP padding scheme
28using SHA-256 with `gradecoin_public_key`, giving us `key_ciphertext`. Encode this with base 64.
29- The payload JSON object (`auth_request`) can be serialized now:
23 30
24- Encrypts the serialized string of `auth_plaintext` with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (`k_temp`), the result is `auth_ciphertext` TODO should this be base64'd? 31```json
25- The temporary key student has picked `k_temp` is encrypted using RSA with OAEP padding scheme
26using sha256 with `gradecoin_public_key` (TODO base64? same as above), giving us `key_ciphertext`
27- The payload JSON object (`auth_request`) can be JSON serialized now:
28{ 32{
29 c: "auth_ciphertext" 33 "c": "auth_ciphertext",
30 key: "key_ciphertext" 34 "iv": "hexadecimal",
35 "key": "key_ciphertext"
31} 36}
37```
32 38
33## Gradecoin Side 39If your authentication process was valid, you will be given access and your public key fingerprint that is your address.
34
35- Upon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with `gradecoin_private_key` as the key and auth_request.key `key` as the ciphertext, receiving `temp_key` (this is the temporary key chosen by stu
36- With `temp_key`, we can AES 128 Cbc Pkcs7 decrypt the `auth_request.c`, giving us
37auth_plaintext
38- The `auth_plaintext` String can be deserialized to [`AuthRequest`]
39- We then verify the payload and calculate the User fingerprint
40- Finally, create the new [`User`] object, insert to users HashMap `<fingerprint, User>`
41
42