workshops/slides/rsa/rsa.md

242 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title:
- RSA - Asimetricna kriptografija i primena
author:
- Aleksej Jocic
theme:
- Warsaw
colortheme:
- orchid
---
# Uvod
- Simetricna kriptografija
- Isti kljuc za sifrovanje i desifrovanje
$10101 \oplus 11001 = 01100$
$(m \oplus k) \oplus k =m \oplus (k \oplus k)= m \oplus 0= m$
- Problem bezbedne razmene kljuceva
- Problem autenticnosti
# Uvod
- Asiemtricna kriptografija
- Razliciti kljucevi za sifrovanje i desifrovanje
$f(m,k1)=c$
$f(c,k2)=m$
- Kljuc za sifrovanje je javno dostupan, (svi znaju $k1$)
- Sifrovanje privatnim kljucem korisceno kao digitalni potpis
$f(m,k2)=c$
$f(c,k1)=m$
# RSA
- RSA
- 1977\. Ron Rivest, Adi Shamir, Leonard Adleman
- 1976\. DiffieHellman razmena kljuceva
$g^a \equiv A \mod p$
$g^b \equiv B \mod p$
$A^b \equiv (g^a)^b$$\equiv (g^b)^a$$\equiv B^a$$\mod p$
# RSA
<div>
![DiffieHellman](slides/rsa/dhke.png)
</div>
# RSA
## Mala Fermaova teorema
Ako je $p$ prost broj, za svako $a$ vazi:
$a^{p-1} \equiv 1 \mod p$
## Posledica
Ako su $p$ i $q$ prosti brojevi, za svako $a$ vazi:
$a^{(p-1)(q-1)}$$\equiv ({a^{p-1}})^{q-1}$$\equiv 1 \mod q$
$a^{(p-1)(q-1)}$$\equiv ({a^{q-1}})^{p-1}$$\equiv 1 \mod p$
$(a^{(p-1)(q-1)}-1)$ je deljivo i sa $p$ i $q$.
$p$ i $q$ su prosti, pa mora da je deljivo i sa $p \cdot q$.
# RSA
## Primecujemo
$a^{(p-1)(q-1)} \equiv 1 \mod pq$
Takodje:
$a^{x(p-1)(q-1)}$$\equiv ({a^x})^{(p-1)(q-1)}$$\equiv 1 \mod pq$
$a^{x(p-1)(q-1)+1} \equiv a \mod pq$
## Trazimo
$e$ i $d$ tako da:
$({a^e})^d \equiv a^{ed} \equiv a^{x(p-1)(q-1)+1} \mod pq$
Odnosno:
$ed \equiv 1 \mod (p-1)(q-1)$
$d$ je modularni inverz od $e$ pod modulom $(p-1)(q-1)$
Mozemo koristiti `Produzeni Euklidov algoritam`.
U buduce cemo oznacavati $n=pq$, a $\varphi(n)=(p-1)(q-1)$
$a^{\varphi(n)} \equiv 1 \mod n$
$a^{ed} \equiv a^{x\varphi(n)+1}$$\equiv a \mod n$
# RSA
- Problem faktorisanja $n=pq$
- $\varphi(n)=(p-1)(q-1)$ nije poznato bez $p$ i $q$
- $d$ kao modularni inverz od $e$ nije poznat bez $\varphi(n)$
- $d$ mozemo da cuvamo tajnim cak i ako objavimo $e$ i $n$ javno
# RSA
- Generisanje kljuceva
- Nadjimo velike proste brojeve $p$ i $q$
Testovi prostosti brojeva (Fermaov test)
- Generisemo $n=pq$
- Nadjimo $e$ koji je uzajamno prost sa $(p-1)(q-1)$
- Nadjimo $d$ koriscenjem Produzenog Euklidovog algoritma
- Zaboravimo $p$ i $q$, jer nam vise ne trebaju
- Javni kljuc se sastoji od brojeva $e$ i $n$
$m^e \equiv C \mod n$
- Privatni kljuc se sastoji od brojeva $d$ i $n$
$C^d \equiv m \mod n$
- Digitalni potpis se postize sifrovanjem sa privatim kljucem
$m^d \equiv S \mod n$
- Provera digitalnog potpisa:
$S^e \equiv m \mod n$
# Prodruzeni Euklidov algoritam
```
def egcd(a, b):
if a == 0:
return (b, 0, 1)
g, y, x = egcd(b%a,a)
return (g, x - (b//a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('No modular inverse')
return x%m
```
# Napadi na RSA
- Napadi na RSA
- Pogadjanje poruke, potrebno dopunjavanje poruke random podacima (padding)
- Premali eksponent $e$, korenovanje sifrovanog teksta za male poruke (veliko $e$)
- Koriscenje istog eksponenta za vise kljuceva, napad koriscenjem Kineske teoreme o ostatku (random izabrano $e$)
- Desifrovanje sumnjivog teksta, $(x^e \cdot C)^d \equiv (x^e)^d \cdot C^d \equiv x \cdot m \mod n$
# Primena
## GNU Privacy Guard
- 1999\. Werner Koch
- Generisanje kljuca: `gpg --gen-key`
- Lista javnih kljuceva: `gpg --list-keys`
- Export privatnih kljuceva: `gpg --export-secret-keys --output backup.gpg`
- Upload kljuceva: `gpg --send-key [KEYID]`
- Sifrovanje poruke: `gpg -e file.txt`
- Desifrovanje: `gpg -d file.txt`
- Potpisivanje poruke ili fajla: `gpg -s file.exe`
- Potpisivanje kljuca: `gpg --sign-key [KEYID]`
- ASCII output: `gpg --armor -se file.txt`
- GPG password manager: `gpg --armor -c passwords.txt`
# Primena
## Git
- Podesavanje kljuca: `git config --global user.signingkey [KEYID]`
- Potpisivanje komita: `git commit -S`
<div>
![Github signed commits](slides/rsa/github-verified.png)
</div>
# Primena
## SSH
- Generisanje kljuca: `ssh-keygen [-f filename]`
- Dodavanje kljuca na remote masinu: `ssh-copy-id [-i filename] user@hostname`
- `~/.ssh/authorized_keys`
# The Onion Router
## Tor
- 1990\.-te United States Naval Research Laboratory (Paul Syverson,Michael G. Reed,David Goldschlag)
- 20.9.2002. prva verzija Tor-a (javni projekat, anonimnosti u masi)
# The Onion Router
<div>
![How Tor works](slides/rsa/tor.png)
</div>
# Onion hidden services
<div>
![How hidden services works](slides/rsa/tor-onion-services.png)
</div>
# The Onion Router
- Napadi na Tor
- Tor ne stiti od vremenske korelacije (pristup sa obe strane veze)
- Slabosti u aplikacijama koje koriste Tor
- Pogresno konfigurisane aplikacije
- DNS Leak
# Hvala
Hvala na paznji!