fogalmak
hash
AKA: digest, message digest
egyirányú matematikai algoritmus
kérdőjeles matematikai terület
ideális esetben
tetszőleges üzenethez könnyen kiszámítható
nehéz adott hash értékhez megfelelő üzenetet találni
nehéz az üzenetet a hash megváltozása nélkül módosítani
nehéz két üzenetet találni azonos hash értékkel
nehéz = a rendelkezésre álló elméleti tudás és számítási teljesítmény segítségével gyakorlatilag időhiány miatt kivitelezhetetlen
jelenleg
ütközik (könnyen lehet két azonos hash kódú üzenetet találni)
MD4
MD5
RIPEMD
SHA-0
SHA-1 időigényesen (2^63 variációval)
képezhető (könnyen lehet egy hash kódhoz megfelelő üzenetet találni)
MD4 is csak időigényesen (2^102 variációval)
"biztonságos"
RIPEMD-128/256
RIPEMD-160/320
SHA-256/224
SHA-512/384
Tiger(2)-192/160/128
WHIRLPOOL
http://en.wikipedia.org/wiki/Cryptographic_hash_function
cypher
Szimmetrikus kódolási algoritmus
kódolás: f(KEY,message)=encoded - f'(KEY,encoded)=message
biztonságosabb terület matematikai szempontból, mint a hash
adó és vevő közös titkos kulcson osztoznak
a kulcs titkos megbízható csatornán jut el mindkét félhez
ideális esetben
gyors (akár hardveresen is implementálható)
nehéz egy üzenet kódolt és kódolatlan formája között kapcsolatot találni
nehéz egy tetszőlegesen nagy kódolt üzenet alapján a kulcsot kideríteni
nehéz egy üzenet kódolt és kódolatlan verziójának birtokában a kulcsot kideríteni
ismert ideális algoritmus
One Time Pad (OTP)
a kulcs teljesen véletlenszerű
a kódolás menete: szöveg XOR kulcs
a kulcs mérete azonos a kódolandó szöveggel
gyakori algoritmusok
RC4
nagyon gyors
gyenge pontja ismertek biztonsági szempontból
kevés, közepes méretű üzenetre megfelelő lehet
Blowfish/Twofish
közepesen gyors
biztonságosnak tűnik, de kevés kihívással volt dolga
AES
közepesen gyors
egyelőre bizonyítottan biztonságos
a kulcsmérettől függ a sebesség
DES
lassú
hetek (napok?) alatt törhető
TripleDES
nagyon lassú
becslések szerint 2030-ig nem törhető
csak rövid üzenetekre javasolt
http://www.javamex.com/tutorials/cryptography/ciphers.shtml
nyílt kulcsú titkosítás
asszimetrikus algoritmus
nincs szükség biztonságos csatornára
kódolás: f(K_A_PUB,message)=encoded - f'(K_A_PRIV,encoded)=message
aláírás: f(K_A_PRIV,digest)=sign - f'(K_A_PUB,sign)=digest
a gyakorlatban szimmetrikus kulcsok védelmére használják leginkább
technikai problémák
valódi véletlenszámokat igényel
a faktorizáció nem bizonyítottan nehéz
de az elliptikus görbék (ECC) bizonyítottan azok
http://en.wikipedia.org/wiki/Elliptic_curve_cryptography
az implementáció nehéz
az RSA és ElGamal implementációkban ismert gyengeségek vannak
side channel támadásokra érzékeny
a kódolás időanalízise vagy feszültséganalízise felfedi a titkos kulcsot
MitM támadásra érzékeny
de web of trust vagy CA ezen segíthet
sshv2 challange protokoll megoldja
adminisztratív problémák
a személy és a titkos kulcs kapcsolata jogilag kérdéses
kulcs visszavonása nehézségekbe ütközhet (pl.: célzott DOS miatt)
kulcsok váltása nehézkes (főleg ha gyorsan kell váltani)
a kulcs kompromittálódása a múltbeli üzeneteket is érvényteleníti
ez ellen: PFS - perfect forward secrecy
a rövid távú kulcsok nem függenek a hosszú távú kulcsoktól
http://en.wikipedia.org/wiki/Perfect_forward_secrecy
digest kompromittálódása a múltbeli aláírásokat is lerontja
megoldás: archív dokumentumok folyamatos újraaláírása
http://en.wikipedia.org/wiki/Public-key_cryptography