Хеширање — шта је то, криптографски алгоритми и примена

Аутор: IT Sectr Објављено: 2026-04-02 Време читања: 8 мин

Хеширање је процес претварања података произвољне величине у низ фиксне дужине, који се користи за проверу интегритета и безбедно чување лозинки. Према подацима Open Web Application Security Project (OWASP, 2025), правилно коришћење хеш функција спречава до 70% рањивости повезаних са цурењем акредитива. Криптографски хешеви су у основи дигиталних потписа, блокчејн технологија и контроле верзија.

Главно

  • Хеш функција претвара улазне податке у низ фиксне дужине — дигест.
  • Криптографски хешеви имају својство неповратности: по хешу се не могу обновити оригинални подаци.
  • SHA-256 — стандард криптографског хеширања који препоручује NIST за савремене системе.
  • Со — насумични подаци који се додају лозинци пре хеширања ради заштите од дугиних таблица.
  • Хеширање се широко примењује у мобилним апликацијама за чување лозинки и проверу интегритета података.

Шта је хеширање?

Хеширање — процес израчунавања хеш функције која претвара произвољан скуп улазних података у битни низ фиксне дужине, који се назива дигест или хеш вредност. За разлику од шифровања, хеширање је једносмеран процес: обнављање оригиналних података из хеша је немогуће.

Основна својства хеш функција

Криптографске хеш функције имају четири обавезна својства: детерминистичност (исти улаз увек даје исти хеш), неповратност (рачунски је немогуће обновити улаз из хеша), лавински ефекат (промена једног бита на улазу мења у просеку половину битова хеша) и отпорност на колизије (рачунски је немогуће пронаћи два различита улаза са истим хешом).

Разлика између хеширања и шифровања

Важно је разумети разлику између хеширања и шифровања. Шифровање је двосмеран процес: шифровани подаци се могу дешифровати помоћу кључа. Хеширање је једносмеран процес: након претварања подаци се не могу обновити. Ово својство чини хеширање идеалним за чување лозинки: систем чува само хеш, а чак и у случају цурења базе података лозинке остају заштићене.

Криптографске и некриптографске хеш функције

Нису све хеш функције подједнако погодне за безбедносне задатке. Подела на криптографске и некриптографске категорије је критично важна при одабиру алгоритма за одређени задатак у мобилном развоју.

Криптографске хеш функције

Ове функције су намерно споре и сложене како би отежале нападе бруталном силом. Оне морају бити отпорне на колизије и нападе на протослику. Породица SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) је сертификована од стране NIST-а и препоручује се за употребу у државним системима. За хеширање лозинки додатно се примењују алгоритми bcrypt, scrypt и Argon2 са подесивом сложеношћу.

Некриптографске хеш функције

Ове функције су оптимизоване за брзину, а не за безбедност. Примери: CityHash, MurmurHash, xxHash. Користе се у хеш табелама, дедупликацији података и контролним збировима за брзу проверу интегритета некритичних података. Важно је да их никада не користите за чување лозинки или проверу дигиталних потписа — велика брзина их чини рањивим на нападе бруталном силом.

ТипПримериОбласт примене
КриптографскеSHA-256, SHA-3, bcryptЛозинке, потписи, TLS
НекриптографскеMurmurHash, xxHashХеш табеле, кеш
KDF за лозинкеbcrypt, scrypt, Argon2Чување лозинки

Размотримо најчешће коришћене алгоритме хеширања у савременом мобилном развоју. Сваки од њих има своје предности и мане.

SHA-256

SHA-256 — симбол савремене криптографије, препоручен од стране NIST-а у оквиру стандарда FIPS 180-4. Алгоритам производи 256-битни дигест и главна је компонента TLS протокола, блокчејн мрежа и система за контролу верзија. Према извештају NCC Group (2025), SHA-256 се користи у 96% TLS сертификата за потписивање certificate transparency.

SHA-3 — наследник SHA-2

SHA-3 — најновија породица хеш функција, стандардизована од стране NIST-а 2015. године као FIPS 202. За разлику од SHA-2, изграђеног на Меркл-Дамгордовој структури, SHA-3 се заснива на другачијој Keccak конструкцији са сунђер функцијом. То чини SHA-3 отпорним на нападе који би се могли појавити у будућности на SHA-2. За мобилне програмере, SHA-3 је доступан кроз стандардне криптографске библиотеке почевши од Android 7.0 и iOS 13.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt за лозинке

За чување лозинки општи криптографски хешеви нису довољни — пребрзи су. bcrypt је посебно дизајниран за хеширање лозинки: укључује со и параметар цене који регулише време израчунавања. Повећање цене 2 пута удвостручује време хеширања, чинећи нападе бруталном силом неефикасним чак и на моћној опреми.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — савремени стандард

Argon2 — победник Password Hashing Competition (2015), препоручен од стране OWASP-а као најбољи избор за хеширање лозинки. Argon2id — варијанта отпорна на нападе путем споредних канала и time-memory trade-off нападе. За разлику од bcrypt-а, Argon2 омогућава одвојено подешавање времена извршавања, коришћења меморије и степена паралелизма, што пружа флексибилну заштиту против различитих врста напада.

Примена хеширања у мобилним апликацијама

Хеширање решава многе практичне задатке у мобилном развоју — од аутентификације корисника до провере интегритета преузетих датотека. Размотримо кључне сценарије употребе.

Чување лозинки

Основни сценарио — безбедно чување лозинки на серверској страни. При регистрацији, апликација шаље лозинку на сервер, где се хешира са соли алгоритмом bcrypt или Argon2 и чува у бази података. При пријави, сервер хешира унету лозинку и упоређује је са сачуваним хешом. OWASP препоручује коришћење Argon2id са параметрима: време 2 секунде, меморија 64 MB, степен паралелизма 4.

Провера интегритета датотека

При преузимању великих датотека, као што су OBB пакети или ажурирања садржаја, мобилне апликације могу проверавати њихов интегритет путем хеширања. Сервер објављује SHA-256 хеш датотеке, а апликација израчунава хеш преузетих података и упоређује их. Ово гарантује да датотека није оштећена или замењена током преноса. Према Google Play Console (2025), провера хешева сертификованих апликација спречава до 99.9% напада оштећених преузимања.

Кеширање и дедупликација

Хешеви се активно користе за изградњу ефикасних кешева и дедупликацију података. Адреса слике или JSON одговор се хешира и користи као кључ кеша: при поновном захтеву систем упоређује хешеве и враћа сачувани резултат ако се подаци нису променили. За овај задатак су погодне некриптографске хеш функције, као што су MurmurHash или xxHash, које пружају максималне перформансе.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Типичне грешке при коришћењу хешева

Чак и искусни програмери праве грешке када раде са хеширањем. Размотримо најчешће проблеме који могу поништити све предности криптографске заштите.

Коришћење MD5 или SHA-1

MD5 и SHA-1 — застарели алгоритми за које постоје практични напади на колизије. MD5 је пробијен 2004. године од стране групе кинеских истраживача (колизија за сат времена). SHA-1 је пробијен 2017. године од стране тима Google и Centrum Wiskunde & Informatica (SHAttered напад). Коришћење ових алгоритама у новим пројектима сматра се грубом безбедносном грешком према OWASP класификацији.

Хеширање без соли

Хеширање лозинки без соли — критична рањивост. Со је насумични низ, јединствен за сваког корисника, који се додаје лозинци пре хеширања. Без соли, две идентичне лозинке ће дати исти хеш, што омогућава коришћење дугиних таблица за напад бруталном силом. OWASP препоручује коришћење криптографски јаке соли дужине најмање 32 бајта, генерисане посебно за сваког корисника.

Недовољан број итерација

Чак и при коришћењу bcrypt-а или Argon2-а, може се ослабити заштита избором прениског параметра цене. Према OWASP (2025), минимални број итерација bcrypt-а треба да буде 10 (2^10 = 1024 итерације), а за Argon2id — време израчунавања најмање 1 секунда на циљној платформи. Прениски параметри чине нападе бруталном силом практично изводљивим на GPU фармама.

Често постављана питања

Која је разлика између хеширања и шифровања?

Хеширање — једносмеран процес чији резултат није могуће претворити назад у оригиналне податке. Шифровање је двосмеран процес: шифровани подаци могу бити дешифровани помоћу кључа. Хеширање се користи за чување лозинки и проверу интегритета, шифровање — за поверљиви пренос података између клијента и сервера.

Који алгоритам хеширања је најбољи за лозинке?

OWASP препоручује Argon2id као најбољи избор за хеширање лозинки захваљујући подесивој заштити од GPU напада и напада путем споредних канала. Алтернативе: bcrypt (проверен и лак за подешавање), scrypt (отпоран на ASIC нападе) и PBKDF2. SHA-256 и SHA-512 нису погодни за лозинке — превише су брзи и не штите од масовног напада бруталном силом.

Шта је колизија хеш функције и зашто је опасна?

Колизија — ситуација када два различита скупа улазних података дају исти хеш. За криптографске хеш функције, проналажење колизија мора бити рачунски немогуће. На пример, вероватноћа колизије SHA-256 за две насумичне поруке је приближно 1 према 2^128 — то је занемарљиво мала вредност.

Да ли треба ручно додавати со у bcrypt?

Не, bcrypt аутоматски укључује со у свој алгоритам. При позиву BCrypt.hashToString(), библиотека генерише криптографски јаку со дужине 16 бајтова и уграђује је у излазни низ заједно са хешом и параметром цене. Scrypt и Argon2 раде слично. Ово је један од разлога зашто стручњаци препоручују коришћење специјализованих KDF уместо општих хеш функција за заштиту лозинки.

Може ли се хеширање користити за заштиту од малвера?

Да, хешеви се користе за креирање белих и црних листи датотека. Антивирусне базе садрже хешеве познатих злонамерних програма. Међутим, нападачи могу променити један бајт у програму, што ће потпуно променити хеш. Због тога савремени системи користе фаззи хеширање (SSDeep, TLSH), које проналази семантички сличне датотеке, а не само тачна подударања.

Закључци

  • Хеширање — једносмерно претварање података у низ фиксне дужине са гаранцијом неповратности.
  • Криптографске хеш функције обезбеђују отпорност на колизије и лавински ефекат.
  • SHA-256 — NIST стандард за криптографско хеширање у савременим системима.
  • KDF за лозинке (bcrypt, Argon2, scrypt) су обавезни за безбедно чување лозинки.
  • Со штити од дугиних таблица и мора бити јединствена за сваког корисника.
  • MD5 и SHA-1 се сматрају пробијеним и не би требало да се користе у новим пројектима.
  • Хеширање се примењује за чување лозинки, проверу интегритета података, кеширање и антивирусну заштиту.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође