Skip to content
Snippets Groups Projects
Commit d013c007 authored by Jens Henrik Goebbert's avatar Jens Henrik Goebbert
Browse files

add "space"

parent da3ddab5
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![jsc-logo.jpg](attachment:67258d94-84e6-4a0c-ae8f-c74332ec082e.jpg) ![jsc-logo.jpg](attachment:67258d94-84e6-4a0c-ae8f-c74332ec082e.jpg)
------------------------------------ ------------------------------------
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# 2-Factor Authentication (2FA) # 2-Factor Authentication (2FA)
<div> <div>
<img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img01.png title="2-factor-authentication" width="320" style="float:left"/> <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img01.png title="2-factor-authentication" width="320" style="float:left"/>
<!-- <img src=images/jupyter-jsc_2fa_img01.png title="2-factor-authentication" width="320" style="float:left"/> --> <!-- <img src=images/jupyter-jsc_2fa_img01.png title="2-factor-authentication" width="320" style="float:left"/> -->
</div> </div>
## Introduction ## Introduction
2-Factor Authentication (2FA), sometimes referred to as two-factor verification, is a security method in which you provide **two different authentication factors** to identify yourself at login. 2-Factor Authentication (2FA), sometimes referred to as two-factor verification, is a security method in which you provide **two different authentication factors** to identify yourself at login.
This process is **performed to better protect** both your credentials and the resources that you can access. This process is **performed to better protect** both your credentials and the resources that you can access.
In the **first login step**, you start with the usual entry of a good password. The service then confirms the correctness of the password entered. In the **first login step**, you start with the usual entry of a good password. The service then confirms the correctness of the password entered.
This does not, however, lead directly to the desired entrance - but to a further barrier. This does not, however, lead directly to the desired entrance - but to a further barrier.
The **second login step** prevents unauthorized third parties from gaining access to your account just because they might have stolen your password. The **second login step** prevents unauthorized third parties from gaining access to your account just because they might have stolen your password.
A quite common 2nd-factor is a **One-Time Password (OTP)** generated by a so-called **OPT-App** you installs and initializes once on one of your personal devices. A quite common 2nd-factor is a **One-Time Password (OTP)** generated by a so-called **OPT-App** you installs and initializes once on one of your personal devices.
This *OPT-app* then provides (in our case every 30 seconds) a new *one-time password* that needs to be entered on the login page. This *OPT-app* then provides (in our case every 30 seconds) a new *one-time password* that needs to be entered on the login page.
<div style="clear:both"></div> <div style="clear:both"></div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div> <div>
<video controls src="https://multimedia.gsb.bund.de/BSI/Video/2-Faktor-Authentisierung_SD.conv.mp4" width=480 style="float:right"/> <video controls src="https://multimedia.gsb.bund.de/BSI/Video/2-Faktor-Authentisierung_SD.conv.mp4" width=480 style="float:right"/>
</div> </div>
## Basic Principle ## Basic Principle
These two factors for authentication combine the building blocks **knowledge** and **possession** in the login procedure. These two factors for authentication combine the building blocks **knowledge** and **possession** in the login procedure.
- **knowledge** - the secret knowledge is the password you enter. - **knowledge** - the secret knowledge is the password you enter.
- **possession** - With the *one-time password* you show that you are in possession of a certain device (e.g. your smartphone), because only the *OTP-App*, installed on that device, can generate it. - **possession** - With the *one-time password* you show that you are in possession of a certain device (e.g. your smartphone), because only the *OTP-App*, installed on that device, can generate it.
<div style="clear:both"></div> <div style="clear:both"></div>
<div> <div>
<p style="float:right">Source: Bundesamt für Sicherheit in der Informationstechnik</p> <p style="float:right">Source: Bundesamt für Sicherheit in der Informationstechnik</p>
</div> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div> <div>
<img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img02.png title="2-factor-authentication" width="320" style="float:left"/> <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img02.png title="2-factor-authentication" width="320" style="float:left"/>
<!-- <img src=images/jupyter-jsc_2fa_img02.png title="2-factor-authentication" width="320" style="float:left"/> --> <!-- <img src=images/jupyter-jsc_2fa_img02.png title="2-factor-authentication" width="320" style="float:left"/> -->
</div> </div>
## Algorithm ## Algorithm
The **OTP-App** can calculate personal one-time passwords completely autonomously from the outside world using a standardized and open algorithm for the generation of **Time-based One-Time Passwords (TOTP)**. The **OTP-App** can calculate personal one-time passwords completely autonomously from the outside world using a standardized and open algorithm for the generation of **Time-based One-Time Passwords (TOTP)**.
The *TOTP algorithm* was published in 2011 by the [Internet Engineering Task Force (IETF)](https://www.ietf.com) as [RFC 6238](https://tools.ietf.org/html/rfc6238). The *TOTP algorithm* is a hash function in which a secret code is hashed together with the current time. The *TOTP algorithm* was published in 2011 by the [Internet Engineering Task Force (IETF)](https://www.ietf.com) as [RFC 6238](https://tools.ietf.org/html/rfc6238). The *TOTP algorithm* is a hash function in which a secret code is hashed together with the current time.
Behind the hash function is the HMAC-based One-time Password Algorithm according to [RFC 4226](https://tools.ietf.org/html/rfc4226) - in simple terms nothing more than a standard that forms a hash in a certain way. Behind the hash function is the HMAC-based One-time Password Algorithm according to [RFC 4226](https://tools.ietf.org/html/rfc4226) - in simple terms nothing more than a standard that forms a hash in a certain way.
The calculation includes both a **"secret initialization code"**, that is known to both the server and the client, and the **current time**. The calculation includes both a **"secret initialization code"**, that is known to both the server and the client, and the **current time**.
The final *one-time password* is generated from these two inputs and is valid for a certain period of time. (in our case for **30 seconds**). The final *one-time password* is generated from these two inputs and is valid for a certain period of time. (in our case for **30 seconds**).
The procedure can be implemented in such a way that slight differences in time between client and server are accepted. The procedure can be implemented in such a way that slight differences in time between client and server are accepted.
Hence, any *one-time password* is time-based, calculated locally, and always unique. Hence, any *one-time password* is time-based, calculated locally, and always unique.
<div style="clear:both"></div> <div style="clear:both"></div>
------------------ ------------------
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# How to get started with 2FA # How to get started with 2FA
<div> <div>
<img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img03.png title="2-factor-authentication" width="320" style="float:right"/> <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img03.png title="2-factor-authentication" width="320" style="float:right"/>
<!-- <img src=images/jupyter-jsc_2fa_img03.png title="2-factor-authentication" width="320" style="float:right"/> --> <!-- <img src=images/jupyter-jsc_2fa_img03.png title="2-factor-authentication" width="320" style="float:right"/> -->
</div> </div>
## Preparation ## Preparation
To get ready to use 2-Factor Authentication (2FA) for Jupyter-JSC you have to **prepare** it ONCE: To get ready to use 2-Factor Authentication (2FA) for Jupyter-JSC you have to **prepare** it ONCE:
- (1) **request 2FA** for Jupyter-JSC, - (1) **request 2FA** for Jupyter-JSC,
- (a) login to [Jupyter-JSC](https://jupyter-jsc.fz-juelich.de) - (a) login to [Jupyter-JSC](https://jupyter-jsc.fz-juelich.de)
- (b) visit https://jupyter-jsc.fz-juelich.de/2fa and request 2FA - (b) visit https://jupyter-jsc.fz-juelich.de/2fa and request 2FA
- (c) wait for a *confirmation emails* and click the provided *activation link* - (c) wait for a *confirmation emails* and click the provided *activation link*
- (2) **activate 2FA** for Juypter-JSC, - (2) **activate 2FA** for Juypter-JSC,
- (a) install an **OTP-App**, which supports the TOTP algorithm - (a) install an **OTP-App**, which supports the TOTP algorithm
- (b) communicate the **secret initialization code** to this *OTP-App* - (b) communicate the **secret initialization code** to this *OTP-App*
- (c) test a first **one-time password** generated. - (c) test a first **one-time password** generated.
... and then 2FA is ready to be used next time you log in. ... and then 2FA is ready to be used next time you log in.
### 1. Request 2FA ### 1. Request 2FA
Please login to Jupyter-JSC as usual through https://jupyter-jsc.fz-juelich.de Please login to Jupyter-JSC as usual through https://jupyter-jsc.fz-juelich.de
and visit the webpage **https://jupyter-jsc.fz-juelich.de/2fa** for requesting 2FA. and visit the webpage **https://jupyter-jsc.fz-juelich.de/2fa** for requesting 2FA.
Please read the notes on this webpage carefully and click the button **Request 2FA** to start. Please read the notes on this webpage carefully and click the button **Request 2FA** to start.
A **confirmation email** including an **activation link** will be send to you directly. A **confirmation email** including an **activation link** will be send to you directly.
### 2. Activate 2FA ### 2. Activate 2FA
Please follow this *activation link* to instruct Jupyter-JSC for preparation of your 2FA. Please follow this *activation link* to instruct Jupyter-JSC for preparation of your 2FA.
You will be asked to re-login to your account to recieve a **secret initialization code** as QR-Code (and string) You will be asked to re-login to your account to recieve a **secret initialization code** as QR-Code (and string)
for a required *OTP-App*. for a required *OTP-App*.
So first, you need to install an **OTP-App** on one of your personal devices (if you haven´t done so already), So first, you need to install an **OTP-App** on one of your personal devices (if you haven´t done so already),
which you plan to use in the future to generate the required **one-time passwords** for each time you log in: which you plan to use in the future to generate the required **one-time passwords** for each time you log in:
<div style="clear:both"></div> <div style="clear:both"></div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div> <div>
<img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img04.png title="2-factor-authentication" width="320" style="float:left"/> <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img04.png title="2-factor-authentication" width="320" style="float:left"/>
<!-- <img src=images/jupyter-jsc_2fa_img04.png title="2-factor-authentication" width="320" style="float:left"/> --> <!-- <img src=images/jupyter-jsc_2fa_img04.png title="2-factor-authentication" width="320" style="float:left"/> -->
</div> </div>
<div> <div>
<!-- <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img04-1.png title="2-factor-authentication" width="320" style="float:right"/>--> <!-- <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img04-1.png title="2-factor-authentication" width="320" style="float:right"/>-->
<img src=https://raw.githubusercontent.com/FZJ-JSC/jupyter-jsc-notebooks/master/001-Jupyter/images/jupyter-jsc_2fa_img04-1.png title="2-factor-authentication" width="120" style="float:right"/> <img src=https://raw.githubusercontent.com/FZJ-JSC/jupyter-jsc-notebooks/master/001-Jupyter/images/jupyter-jsc_2fa_img04-1.png title="2-factor-authentication" width="120" style="float:right"/>
</div> </div>
### a. OTP-App Installation ### a. OTP-App Installation
There are a large number of different *OTP-Apps* available that implemented the *TOTP algorithm*. There are a large number of different *OTP-Apps* available that implemented the *TOTP algorithm*.
You have to install **one of them** - for example, take one of the following: You have to install **one of them** - for example, take one of the following:
Recommended, free & open-source: Recommended, free & open-source:
- [**FreeOTP**](https://freeotp.github.io) ([iOS](https://apps.apple.com/de/app/freeotp-authenticator/id872559395), [Android](https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp&hl=de)) - [**FreeOTP**](https://freeotp.github.io) ([iOS](https://apps.apple.com/de/app/freeotp-authenticator/id872559395), [Android](https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp&hl=de))
- [**KeeWeb**](https://keeweb.info)([Windows](https://keeweb.info), [macOS](https://keeweb.info), [Linux](https://keeweb.info), [online](https://keeweb.info)) - [**KeeWeb**](https://keeweb.info) ([Windows](https://keeweb.info), [macOS](https://keeweb.info), [Linux](https://keeweb.info), [online](https://keeweb.info))
Free, but closed source: Free, but closed source:
- [**Authy**](https://authy.com/download/) ([iOS](https://apps.apple.com/de/app/authy/id494168017), [Android](https://play.google.com/store/apps/details?id=com.authy.authy), [Windows](https://authy.com/download/), [macOS](https://authy.com/download/), [Linux](https://snapcraft.io/authy)) - [**Authy**](https://authy.com/download/) ([iOS](https://apps.apple.com/de/app/authy/id494168017), [Android](https://play.google.com/store/apps/details?id=com.authy.authy), [Windows](https://authy.com/download/), [macOS](https://authy.com/download/), [Linux](https://snapcraft.io/authy))
- [**Protectimus Smart OTP**](https://www.protectimus.com/protectimus-smart) ([iOS](https://apps.apple.com/ie/app/protectimus-smart/id854508919), [Android](https://play.google.com/store/apps/details?id=com.protectimus.android)) - [**Protectimus Smart OTP**](https://www.protectimus.com/protectimus-smart) ([iOS](https://apps.apple.com/ie/app/protectimus-smart/id854508919), [Android](https://play.google.com/store/apps/details?id=com.protectimus.android))
- [**Google Authenticator**](https://de.wikipedia.org/wiki/Google_Authenticator) ([iOS](https://apps.apple.com/de/app/google-authenticator/id388497605), [Android](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) ) - [**Google Authenticator**](https://de.wikipedia.org/wiki/Google_Authenticator) ([iOS](https://apps.apple.com/de/app/google-authenticator/id388497605), [Android](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) )
- [**Microsoft Authenticator**](https://www.microsoft.com/en-us/account/authenticator) ([iOS](https://apps.apple.com/de/app/microsoft-authenticator/id983156458), [Android](https://play.google.com/store/apps/details?id=com.azure.authenticator), [Windows 10 Mobile](https://www.microsoft.com/en-us/p/microsoft-authenticator/9nblgggzmcj6)) - [**Microsoft Authenticator**](https://www.microsoft.com/en-us/account/authenticator) ([iOS](https://apps.apple.com/de/app/microsoft-authenticator/id983156458), [Android](https://play.google.com/store/apps/details?id=com.azure.authenticator), [Windows 10 Mobile](https://www.microsoft.com/en-us/p/microsoft-authenticator/9nblgggzmcj6))
The *TOTP algorithm* can also be implemented in hardware as a so-called "hardware token" (e.g. [Protectimus Tokens](https://www.protectimus.com/tokens/)) The *TOTP algorithm* can also be implemented in hardware as a so-called "hardware token" (e.g. [Protectimus Tokens](https://www.protectimus.com/tokens/))
<div style="clear:both"></div> <div style="clear:both"></div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div> <div>
<img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img05.png title="2-factor-authentication" width="320" style="float:left"/> <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img05.png title="2-factor-authentication" width="320" style="float:left"/>
<!-- <img src=images/jupyter-jsc_2fa_img05.png title="2-factor-authentication" width="320" style="float:left"/> --> <!-- <img src=images/jupyter-jsc_2fa_img05.png title="2-factor-authentication" width="320" style="float:left"/> -->
</div> </div>
### b. OTP-App Initialization & Validation ### b. OTP-App Initialization & Validation
Before you can use 2FA for Jupyter-JSC a random, user-specific, unique and **secret initialization code** must be known by both Jupyter-JSC and the your *OTP-App*. Before you can use 2FA for Jupyter-JSC a random, user-specific, unique and **secret initialization code** must be known by both Jupyter-JSC and the your *OTP-App*.
This *secret initialization code* gets generated by Jupyter-JSC and is shown as a **QR-Code** (or string) on the activation page. This *secret initialization code* gets generated by Jupyter-JSC and is shown as a **QR-Code** (or string) on the activation page.
The QR-Code provides the *secret initialization code* with the descriptive data (1) algorithm = TOTP, (2) period of validity = 30s. The QR-Code provides the *secret initialization code* with the descriptive data (1) algorithm = TOTP, (2) period of validity = 30s.
**If you prefer to use the string** instead of the QR-Code, please ensure you set these descriptive dates manually in your *OTP-App*. **If you prefer to use the string** instead of the QR-Code, please ensure you set these descriptive dates manually in your *OTP-App*.
Next, the *OTP-App* provides now a **verification code** you have to enter on the activation webpage. Next, the *OTP-App* provides now a **verification code** you have to enter on the activation webpage.
Jupyter-JSC compares the *verification code* you provide with the one generated by Jupyter-JSC. Jupyter-JSC compares the *verification code* you provide with the one generated by Jupyter-JSC.
If they match, **2FA is now activated**. If they match, **2FA is now activated**.
<div style="clear:both"></div> <div style="clear:both"></div>
---------------------- ----------------------
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div> <div>
<img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img06.png title="2-factor-authentication" width="320" style="float:right"/> <img src=https://jupyter-jsc.fz-juelich.de/hub/static/images/2fa/jupyter-jsc_2fa_img06.png title="2-factor-authentication" width="320" style="float:right"/>
<!-- <img src=images/jupyter-jsc_2fa_img06.png title="2-factor-authentication" width="320" style="float:right"/> --> <!-- <img src=images/jupyter-jsc_2fa_img06.png title="2-factor-authentication" width="320" style="float:right"/> -->
</div> </div>
### 2FA-Login at Jupyter-JSC ### 2FA-Login at Jupyter-JSC
Congratulation! You are now ready to use 2-Factor Authentication with Jupyter-JSC. Congratulation! You are now ready to use 2-Factor Authentication with Jupyter-JSC.
Login is now as simple as this Login is now as simple as this
1. **Enter your JSC-account password** 1. **Enter your JSC-account password**
Each time you log in, you enter your JSC-account password as usual. Each time you log in, you enter your JSC-account password as usual.
2. **Enter the current one-time password** 2. **Enter the current one-time password**
You will then be asked for a *one-time password* that you can read from your installed & initialized *OTP-App* (e.g. on your smartphone). You will then be asked for a *one-time password* that you can read from your installed & initialized *OTP-App* (e.g. on your smartphone).
**Remember me** **Remember me**
Jupyter-JSC can set a cookie to remember, that you have logged in from this device already. Jupyter-JSC can set a cookie to remember, that you have logged in from this device already.
Just check the "Remember me" **checkbox** where you enter *one-time password* . Just check the "Remember me" **checkbox** where you enter *one-time password* .
Jupyter-JSC **skips the request** of a *one-time password* in this browser on that device then for **one week**. Jupyter-JSC **skips the request** of a *one-time password* in this browser on that device then for **one week**.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment