**Kryptografinen tiiviste** (engl. *cryptographic hash*) on hajautusarvoa käyttävä kryptografinen arvo, jota käytetään esimerkiksi digitaalisessa allekirjoituksessa.
Kryptografista tiivistefunktiota ei käytetä varsinaisen tiedon salaukseen koska siitä ei voida palauttaa alkuperäistä tietoa, mutta se liittyy läheisesti menetelmänä tarkistaa tiedon eheys, muuttumattomuus tai *identtisyys*.

Hajautustaulu ja hajautusalgoritmi ovat yleiskäyttöisempiä termejä ilman kryptografian erityisvaatimuksia.
Hajautus tarkoittaa tiedon tiivistämistä pienempään tilaan sitä varten, että alkuperäistä tietoa voidaan vertailla vertailemalla niiden tiivisteitä. Tiivisteestä ei voi palauttaa alkuperäistä tietoa kuten pakkaamisessa. Tiivistämiselle on useita erilaisia käyttötarkoituksia: tiiviste- eli hajautustaulusta tiedot voidaan löytää nopeasti. Tiivistettä voidaan käyttää tarkistussummana, jonka avulla voidaan myös todeta onko tiedonsiirtovirhe tai virus muuttanut tiedostoa.

Perusteet
---------

Kryptografinen tiiviste suunnitellaan siten, että tiivisteen tuntemalla ei voi saada selville alkuperäistä tietoa.
Lisäksi on turvallisuusvaatimus, että on oltava laskennallisesti vaikeaa löytää kahta syötettä, joilla on sama tiiviste (*collision*).
Kryptografista tiivistettä kutsutaan epämuodollisesti yksisuuntaiseksi tiivisteeksi. Yksisuuntaisen tiivisteen keskeinen periaate on, että viestille *M* saadaan yksilöllinen tunniste *h* algoritmilla *H* kun h = H(M).

Tyypillisiä käyttökohteita ovat digitaaliset allekirjoitukset ja tiedon eheyden varmistaminen. Allekirjoituksien kanssa tiiviste lasketaan viestistä ja tiiviste allekirjoitetaan. Tiedostojen kanssa laskettu tiiviste säilötään ja myöhemmin lasketaan tiiviste uudelleen ja verrataan säilöttyyn tiivisteeseen, jolla tarkistetaan että tietoa ei ole muutettu.

Käytännön esimerkkejä
---------------------

Ei-tietoteknisessä mielessä tiedon tiivistäminen voisi olla seuraava: lasketaan henkilön etu- ja sukunimien kirjaimet yhteen niin, että kirjaimille on annettu lukuarvo (a = 1, b = 2 jne.), ja lisäksi kerrotaan näin saatu summa viimeisen kirjaimen lukuarvolla. Näin saatu luku (esim. 1110) on algoritmin tuottama tiiviste. Tiivisteestä "1110" ei ole mahdollista saada selville henkilön nimeä. Todellisuudessa tiivistealgoritmit ovat paljon monimutkaisempia.

Normaalisti käyttäjän salasana tallennetaan vain tiivisteenä, josta ei voida palauttaa alkuperäistä tietoa. Käyttäjän syöttämä salasana ajetaan tiivistefunktion läpi ja saatua tiivistettä vertaillaan tallennettuun tiivisteeseen.

### Tarkistustiiviste virheenkorjauskeinona tiedonsiirrossa

Ennen tiedoston lähettämistä verkon yli siitä luodaan tiiviste tehtävään soveltuvalla algoritmilla. Tämän jälkeen kohteeseen lähetetään tiiviste ja tiedosto. Kohde varmentaa tiedon siirron jälkeen tiedoston eheyden luomalla uuden tiivisteen ja vertaamalla sitä vanhaan. Jos tiivisteet ovat erilaiset, informaatio joudutaan siirtämään uudestaan ainakin osittain.

### Tarkistustiivisteet avoimessa lähdekoodissa

Koska kuka tahansa voi jakaa ja muokata avointa lähdekoodia, valtaosasta tunnettuja avoimen lähdekoodin ohjelmistoja on muodostettu tiiviste, jolla paketinhallintajärjestelmä voi varmistaa tiedon muuttumattomuuden yleisessä jakelussa Internetissä.

### Vertaisverkot

Vertaisverkot käyttävät hyvin usein tiivisteiden kehittyneimpiä muotoja kuten hajautettua tiivistettä. Vertaisverkkojen usein hakiessa tiedon palasia usealta käyttäjältä ovat vertaisverkkojen tiedonsiirrot olleet hyvin ongelmallisia. Useat tahot ovat kehittäneet tekniikoita, joilla he voivat lähettää korruptoituneita tiedoston osasia, joiden hajautustaulut ovat yhteneviä alkuperäisen tiedoston hajautustaulun kanssa (ks. syntymäpäiväongelma) vertaisverkkoihin. Nykyään vertaisverkoissa tarkastetaan tiedoston osaset erikseen sekä koko tiedosto tiedonsiirron jälkeen vieläpä usealla eri algoritmilla.

Tiivistefunktiot
----------------

Usein käytettyjä tiivistefunktioita ovat MD5, SHA-1, SHA-2 ja SHA-3.

### Tiiviste

Tiiviste on usein kiinteämittainen käytetystä algoritmista riippuen. Esimerkiksi SHA-1:n tuottama tiiviste on aina 160-bittinen.

SHA-3-standardissa on mukana SHAKE-algoritmit, joiden luomien tiivisteiden pituus voi vaihdella.

### Hyökkäykset

TIivistealgoritmeja vastaan voi suorittaa erilaisia hyökkäyksiä. Törmäyshyökkäyksellä pyritään löytämään *törmäys* eli *konflikti*, eli tapaus, jossa kaksi eri syötettä antavat saman tiivisteen. Alkukuvahyökkäyksellä pyritään löytämään tiivistefunktiolle alkukuva, eli syöte, jolla on tietty ennalta valittu tiiviste. Alkukuvahyökkäystä helpottaa, jos yksi alkukuva jo tiedetään, eli pyritään löytämään toinen syöte (*toinen alkukuva*), jolla on sama tiiviste kuin tunnetulla syötteellä.

Turvallisuus ja suorituskyky
----------------------------

Kryptografisia tiivisteitä on myös kritisoitu tavasta käyttää useita kierroksia: väitteiden mukaan käytössä on tarpeettoman monia kierroksia, joita voisi vähentää suorituskyvyn parantamiseksi ilman, että siitä olisi haittaa tietoturvalle. Esimerkkeinä mainitaan AES, BLAKE2, ChaCha ja SHA-3 -algoritmien muokatut versiot. Toisaalta Bruce Schneier on kirjoittanut miten tietoturvassa on kyse turvamarginaaleista: jos *n* kierrosta pystytään murtamaan se suunnitellaan *2n* tai *3n* kierroksille. Vähäisellä kierrosten määrällä syötteen ja tulosteen välillä säilyy toistuvia kaavoja, joita kryptoanalyysi voi käyttää tiivisteen murtamiseen.

Katso myös
----------

* Hajautusalgoritmi
* Hajautettu tiiviste
* Universaali tiiviste
* Viestin todennuskoodi
* Kryptografia
* Väliintulohyökkäys
* Syntymäpäiväongelma

Lähteet
-------

1. 1 2 3 4 5  A. Menezes, P. van Oorschot and S. Vanstone: *Handbook Of Applied Cryptography*, s. 33. CRC Press, 1997. Teoksen verkkoversio. (englanniksi)
2. 1 2  Schneier; Bruce: *Applied Cryptography*. 2nd edition. Wiley. ISBN 0-471-11709-9. (englanniksi)
3. 1 2 3 4  Jean-Philippe Aumasson: Too Much Crypto (PDF) *eprint.iacr.org*. Viitattu 11.4.2022. (englanniksi)


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * n
* k
* m
Kryptografiset algoritmit |
| --- |
|  |
| Symmetrinen salaus | 
* 3-DES
* AES
* Blowfish
* CAST-128
* CAST-256
* DES
* IDEA
* RC2
* RC4
* RC5
* Twofish
* Salsa20

 |
|  |
| Julkisen avaimen salaus | 
* Diffie-Hellman
* ElGamal
* Elliptiset käyrät
* RSA

 |
|  |
| Kryptografiset tiivisteet | 
* MD2
* MD4
* MD5
* SHA-0
* SHA-1
* SHA-2
* SHA-3
* BLAKE
* BLAKE2

 |
|  |
| Salausprotokollat | 
* CCMP
* TKIP
* TLS
* WEP
* WPA

 |
|  |
| Viestin todennuskoodit | 
* HMAC
* CMAC
* GMAC
* Poly1305
* SipHash

 |
|  |
| Digitaaliset allekirjoituskoodit | 
* DSA
* X.509

 |
|  |
| Luettelo salausalgoritmeista |

 |