Když přijdeš do školy, všichni vědí, kdo jsi. Když chceš ukázat, kolik ti je let, ukážeš občanku. Ale jak dokážeš, kdo jsi, na internetu? Od toho je tu digitální identita. Je to jako tvoje digitální občanka, která ti umožňuje bezpečně komunikovat s úřady, školou nebo bankou, aniž bys musel/a vstát ze židle.
Digitální identita je soubor informací o tobě v digitálním světě, které prokazují, že jsi to opravdu ty. Není to jen tvůj profil na sociální síti. Je to oficiální způsob, jak se "podepsat" a prokázat svou totožnost online.
Digitální identita je ověřený způsob, jak prokázat svou totožnost v online prostředí. Umožňuje ti bezpečně přistupovat k online službám státu i některých firem.
Díky ní můžeš spoustu věcí zařídit z pohodlí domova.
Když podepisuješ smlouvu na papíře, použiješ své pero. Ale jak podepsat digitální dokument? K tomu slouží elektronický podpis.
Elektronický podpis je digitální obdoba tvého vlastnoručního podpisu. Potvrzuje, že s dokumentem souhlasíš a že ho od chvíle podepsání nikdo nezměnil.
eGovernment (čti "í-government") je zkratka pro "elektronickou vládu". Znamená to, že státní úřady nabízejí své služby online.
eGovernment je využívání digitálních technologií pro komunikaci mezi občany a státními úřady.
Aby eGovernment fungoval, existují různé státní informační systémy. Jsou to webové portály, kde můžeš vyřizovat různé věci.
Tvoje digitální identita je velmi cenná. Kdyby se k ní dostal někdo cizí, mohl by se za tebe vydávat a napáchat velké škody. Proto je důležité ji chránit!
Pokud ti přijde podezřelá zpráva, která se tváří jako od úřadu, nebo se ti nějaká stránka nezdá, je to přesně ten moment, kdy je potřeba požádat o pomoc.
Digitální identita a eGovernment nám přináší obrovské zjednodušení života. Zároveň ale kladou vysoké nároky na naši zodpovědnost. Musíme si být vědomi, že naše digitální "já" je stejně důležité jako to skutečné a musíme ho chránit. Učíme se tak být obezřetní, rozpoznávat podezřelé situace a vědět, kdy a koho požádat o pomoc, což jsou klíčové dovednosti pro bezpečný život v moderním světě.
eIDAS je nařízení Evropské unie, které zajišťuje, že elektronické podpisy a digitální identity jsou uznávány ve všech členských státech. Díky tomu můžeš českou elektronickou identitou podepsat dokument v Německu nebo Francii.
Kvalifikovaný elektronický podpis je právně ekvivalentní vlastnoručnímu podpisu. Potřebuješ k němu certifikát od akreditované autority (např. PostSignum, I.CA). Používá se pro smlouvy, úřední podání, faktury.
BankID je skvělá věc – tvá banka již ověřila tvou totožnost (když jsi si zakládal účet), takže může toto ověření poskytnout i státu a dalším službám.
Jak to funguje: Když se chceš přihlásit na Portál občana, vybereš svou banku. Ta tě přesměruje do svého internetového bankovnictví, kde se přihlásíš jako obvykle. Banka potvrdí tvou identitu a ty jsi přihlášen – bez dalších hesel nebo čteček.
Datová schránka je elektronická poštovní schránka pro komunikaci se státem. Zprávy doručené do datové schránky mají stejnou právní váhu jako doporučené dopisy.
Důležité: Zpráva se považuje za doručenou okamžikem přihlášení do schránky, nebo automaticky po 10 dnech (fikce doručení) – i když jsi se nepřihlásil! Proto je důležité schránku pravidelně kontrolovat.
eIDAS (electronic IDentification, Authentication and trust Services) je nařízení EU z roku 2014, které vytváří jednotný rámec pro elektronickou identifikaci a důvěryhodné služby v celé Evropě.
Klíčová myšlenka: digitální identita vydaná v jednom členském státě musí být uznávána ve všech ostatních. Čech se může přihlásit k německé veřejné službě českou eObčankou nebo BankID.
eIDAS definuje tři úrovně záruky:
Existují tři typy elektronického podpisu, každý s jinou právní silou:
GDPR (General Data Protection Regulation) je nařízení EU o ochraně osobních údajů. Dává ti silná práva:
Jako IT specialista budeš implementovat autentizační systémy a pracovat s kryptografickými protokoly. Naučíš se základy digitálních podpisů a OAuth.
# pip install cryptography
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization
# Generování klíčového páru (soukromý + veřejný klíč)
soukromy_klic = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
verejny_klic = soukromy_klic.public_key()
# Podepsání dokumentu
dokument = b"Dulezita smlouva - obsah dokumentu"
podpis = soukromy_klic.sign(
dokument,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print(f"Podpis: {podpis.hex()[:64]}...")
# Ověření podpisu (kýmkoli s veřejným klíčem)
try:
verejny_klic.verify(
podpis,
dokument,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Podpis je PLATNÝ!")
except:
print("Podpis je NEPLATNÝ!")
# pip install requests-oauthlib
# Zjednodušený příklad OAuth flow
# 1. Uživatel klikne na "Přihlásit přes Google"
# 2. Přesměrování na Google s parametry:
authorization_url = (
"https://accounts.google.com/o/oauth2/auth?"
"client_id=TVOJE_CLIENT_ID&"
"redirect_uri=http://localhost:5000/callback&"
"scope=openid email profile&"
"response_type=code"
)
# 3. Uživatel se přihlásí na Google, potvrdí oprávnění
# 4. Google přesměruje zpět na redirect_uri s kódem
# 5. Výměna kódu za access token (na serveru)
import requests
def vymena_kodu(code):
response = requests.post(
"https://oauth2.googleapis.com/token",
data={
"code": code,
"client_id": "TVOJE_CLIENT_ID",
"client_secret": "TVOJE_CLIENT_SECRET",
"redirect_uri": "http://localhost:5000/callback",
"grant_type": "authorization_code"
}
)
return response.json() # Obsahuje access_token
# 6. Použití access tokenu pro získání dat uživatele
def ziskej_profil(access_token):
response = requests.get(
"https://www.googleapis.com/oauth2/v2/userinfo",
headers={"Authorization": f"Bearer {access_token}"}
)
return response.json() # {email, name, picture, ...}
# pip install PyJWT
import jwt
from datetime import datetime, timedelta
TAJNY_KLIC = "super_tajny_klic_pro_podpis"
def vytvor_token(user_id, role):
"""Vytvoří JWT token pro uživatele."""
payload = {
"user_id": user_id,
"role": role,
"exp": datetime.utcnow() + timedelta(hours=24), # Expirace
"iat": datetime.utcnow() # Čas vytvoření
}
token = jwt.encode(payload, TAJNY_KLIC, algorithm="HS256")
return token
def over_token(token):
"""Ověří a dekóduje JWT token."""
try:
payload = jwt.decode(token, TAJNY_KLIC, algorithms=["HS256"])
return payload
except jwt.ExpiredSignatureError:
return {"error": "Token expiroval"}
except jwt.InvalidTokenError:
return {"error": "Neplatný token"}
# Použití
token = vytvor_token(123, "admin")
print(f"Token: {token}")
data = over_token(token)
print(f"Dekódováno: {data}")
Jako IT specialista budeš navrhovat bezpečné API. Tato sekce pokrývá klíčové koncepty.
| Typ | Popis | Použití |
|---|---|---|
| API Key | Jednoduchý token v hlavičce | Jednoduché API, server-to-server |
| Basic Auth | Username:password (Base64) | Pouze s HTTPS! |
| JWT | Podepsaný JSON token | Stateless, SPA aplikace |
| OAuth 2.0 | Delegovaná autorizace | Přihlášení třetí stranou |
# Flask - bezpečnostní hlavičky
from flask import Flask, make_response
app = Flask(__name__)
@app.after_request
def add_security_headers(response):
# Zabránit clickjacking
response.headers['X-Frame-Options'] = 'DENY'
# Zabránit MIME sniffing
response.headers['X-Content-Type-Options'] = 'nosniff'
# XSS ochrana
response.headers['X-XSS-Protection'] = '1; mode=block'
# Pouze HTTPS
response.headers['Strict-Transport-Security'] = 'max-age=31536000'
# Content Security Policy
response.headers['Content-Security-Policy'] = "default-src 'self'"
return response
# pip install flask-limiter
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(
get_remote_address,
app=app,
default_limits=["100 per day", "10 per minute"]
)
@app.route("/api/data")
@limiter.limit("5 per minute") # Vlastní limit pro endpoint
def get_data():
return {"data": "sensitive"}
@app.route("/api/login", methods=["POST"])
@limiter.limit("3 per minute") # Přísný limit pro login
def login():
return {"status": "ok"}
# pip install pydantic
from pydantic import BaseModel, EmailStr, validator
from typing import Optional
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
age: Optional[int] = None
@validator('username')
def username_valid(cls, v):
if len(v) < 3:
raise ValueError('Username musí mít alespoň 3 znaky')
if not v.isalnum():
raise ValueError('Username může obsahovat jen písmena a čísla')
return v
@validator('password')
def password_strong(cls, v):
if len(v) < 8:
raise ValueError('Heslo musí mít alespoň 8 znaků')
if not any(c.isupper() for c in v):
raise ValueError('Heslo musí obsahovat velké písmeno')
return v
# Použití
try:
user = UserCreate(username="jan", email="jan@test.cz", password="Heslo123")
print(user.dict())
except Exception as e:
print(f"Chyba: {e}")