Kontrollsumma

Kontrollsumma on informaatikas andmete tervikluse kontrollimiseks kasutatava algoritmi väljund. Kontrollsumma saadakse kontrollsumma algoritmi rakendamisel kindlale andmehulgale. Kui pärast andmete edastamist (näiteks internetist faili allalaadimisel) kontrollsumma klapib esialgsete andmete kontrollsummaga, siis suure tõenäosusega pole edastamisel vigu esinenud.

Kahel võrdsel andmehulgal on alati sama kontrollsumma, kuid sama tulemuse võivad anda ka erinevad andmehulgad. Seepärast kasutatakse kontrollsumma algoritmina tihti selliseid räsifunktsioone, mis juba sisendandmete vähesel muutmisel annavad drastiliselt erineva väljundi. Selliseid algoritme (näiteks SHA-2) kasutatakse andmeturbes lisaks andmete terviklikkuse tagamisele ka andmete tahtliku muutmise vältimiseks. Turvaekspert Bruce Schneier tõestas 2005. aastal algoritmi MD5 murtavuse.

Kasutusviise 
Erinevad andmeedastusprotokollid kasutavad paketi sisu verifitseerimiseks kontrollsummasid.

Näiteks kasutatakse kontrollsummat UDP protokolli andmepaketi päises. UDP kontrollsumma algoritmi kirjeldab RFC 768.

Tarkvara levitamisel kasutatakse kontrollsummasid veendumaks, et tarkvara paigaldusfaili pole muudetud. Näiteks Linuxi distributsioonide allalaadimislehelt võib hea tava kohaselt leida CD/DVD tõmmisfaili kontrollsumma, kuigi protsess on ka automatiseeritud. Näiteks: estobuntu.

Paljud tarkvararakendused salvestavad turvakaalutlustel paroolide andmebaasi mitte paroole vaid nende kontrollsummasid ja parooli vastavuse kontrollimisel arvutavad selle kontrollsumma, mida võrdlevad andmebaasis olemasoleva kirjega.

Näited 
Järgnevalt on toodud näiteid tihemini kasutatavate kontrollsumma algoritmide väljunditest. Väljundid on esitatud kuueteistkümnendsüsteemis.

Kontrollsummad sõnele "Tere, maailm!":
MD5	: ff5ddfa461bcc79dc5a75b066dcf4274
SHA-1	: 60087b35764744f3dac5f32b70715f6f4b2934f8
SHA-256	: 4341bd0611d3cac56d7ebf52b41ef2fb87a69a01a645794602633627aeb37bf1
SHA-384	: 94c82fc446d9ca2fa9113b1523d2ba343fdf6e959e8ba7c6b0ff76076c2d7697d5f14718136ae1e8e72a95326a8f5b95
SHA-512	: c4ea36e0cd5846be7690c94d5760c24a83343597102c8ef67f067e6f0b226cfebd0cf5ba921f0e4abe19b92000758d55ff6c86652e729ecf946f618483866f59
Kontrollsummad sõnele "Tere, maailm! " (lisatud tühik lõppu):
MD5	: 867430efdfcd5180a6e7a8662f6dfb2b
SHA-1	: a0e84d2b45ddcd6cc202d317efc97f1e1c96071b
SHA-256	: 39a96937708c8f28671b71a48aad4d516f15388bc67dd01ad8b9ce5441702057
SHA-384	: 2e9a0b772e046c9c62e8bb0f17f116a6c46ca4f29e0d6643a91476411d291b90a974b270cacf1fc895b2a22351256a36
SHA-512	: e8f5b9ca94e8a4f9d506e96d9f361bc75097f71a45d13ce70094d2290bb5b03b1ee116facc1e1beb1e446ee5f85856542e2acfaabf115144cdea1e8f70a600ab

Koodinäited

Java 
Kontrollsummade leidmine Javas, kontrollimaks eeltoodud näidet:
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Checksum {
	public static String computeDigest(String algorithm, String message) {
		MessageDigest digest;
		try {
			digest = MessageDigest.getInstance(algorithm);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			return "";
		}

		return new BigInteger(1, digest.digest(message.getBytes())).toString(16);
	}

	public static void main(String[] args) {
		String message = "Tere, maailm!";
		String algorithms[] = {"MD5", "SHA-1", "SHA-256", "SHA-384", "SHA-512"};
		
		for (String algorithm : algorithms) {
			System.out.format("%s\t: %s\n", algorithm, computeDigest(algorithm, message));
		}
	}
}

PHP 
PHP-s on võimalik lihtsasti kasutada md5-funktsiooni.
<?php
echo md5("Tere, maailm! ");
?>

Vaata ka 
 Räsifunktsioon
 MD5 – Ronald Rivesti loodud ühesuunaline räsifunktsiooni algoritm
 Paarsuskontroll – andmeedastuse edukuse kontrollimine paarsusbittidega

Viited

Välislingid 
 Kontrollsumma definitsioon Heikki Vallaste e-teatmikus

Informaatika